Справочник от Автор24
Поделись лекцией за скидку на Автор24

Теория автоматов

  • ⌛ 2014 год
  • 👀 969 просмотров
  • 📌 936 загрузок
  • 🏢️ ВКА имени А.Ф.Можайского
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Теория автоматов» pdf
ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ имени А.Ф. Можайского В.А. Гончаренко, В.В. Грызунов ТЕОРИЯ АВТОМАТОВ Курс лекций z(t) z(t)  a(t+1) память 1 w(t) 2 u(t) a(t) Санкт-Петербург 2014 ВОЕННО-КОСМИЧЕСКАЯ АКАДЕМИЯ имени А.Ф. Можайского В.А. Гончаренко, В.В. Грызунов ТЕОРИЯ АВТОМАТОВ Под общей редакцией доктора технических наук, проКурсВ.П.Иванова лекций фессора Часть 2 ОБЩИЕ ПРИНЦИПЫ ОРГАНИЗАЦИИ Допущено Советом по электронике УМО по Классическому университетскому образованию в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению и специальности «инженер» Санкт-Петербург 2014 Гончаренко В.А. Теория автоматов: курс лекций/ В.А.Гончаренко, В.В. Грызунов. – СПб.: ВКА имени А.Ф.Можайского, 2014. – 182 с. Курс лекций содержит материал к лекционным занятиям по дисциплине «Теория автоматов», включающий основные понятия, теоретические положения и инженерные методы теории автоматов, используемые при проектировании и эксплуатации аппаратных и программных средств вычислительной техники. Курс лекций предназначен для обучения курсантов и слушателей по специальности «Применение и эксплуатация автоматизированных систем специального назначения». Также может быть использован при изучении дисциплин, связанных с основами вычислительной техники по другим специальностям и при самостоятельном освоении.  ВКА имени А.Ф.Можайского, 2014 Подписано к печ. 28.11.2013 Гарнитура Times New Roman Уч.-печ. л. 23,0 Формат печатного листа Авт. печ. л. 11,25 Заказ 2676 Типография ВКА имени А. Ф. Можайского 445×300/8 Бесплатно Оглавление Список сокращений................................................................................................. 6 Предисловие............................................................................................................. 7 Введение ................................................................................................................. 10 0.1. Основные понятия теории автоматов .................................................... 10 0.2. Краткая история развития теории автоматов ........................................ 17 0.3. Области применения теории автоматов ................................................ 23 РАЗДЕЛ 1. ТЕОРИЯ КОНЕЧНЫХ АВТОМАТОВ ........................................... 30 1. Абстрактная теория автоматов ...................................................................... 30 1.1. Основные понятия теории конечных автоматов ..................................... 30 1.1.1. Понятие абстрактного автомата .................................................... 30 1.1.2. Классификация абстрактных автоматов ........................................ 32 1.1.3. Способы задания конечных автоматов ............................................. 34 1.4. Автоматы Мили и Мура. Совмещённый автомат.............................. 35 1.1.5. Связь между автоматными моделями Мили и Мура ....................... 38 1.2. Определение совместимости состояний частичных автоматов ............. 39 1.2.1. Покрытие, совместимость состояний и задача минимизации частичного автомата........................................................................................ 39 1.2.2. Алгоритм получения совместимых пар состояний Полла-Ангера.. 42 1.2.3. Алгоритм нахождения максимальных классов совместимости .... 43 1.2.4. Минимальное замкнутое покрытие.................................................... 44 1.3. Минимизации числа состояний абстрактного автомата ......................... 46 1.3.1. Минимизация частичных автоматов методом простых классов Грассели-Луччио .................................................................................................. 46 1.3.2. Алгоритм построения дерева поиска минимального замкнутого покрытия на основе таблицы покрытия и замкнутости .............................. 47 1.3.3. Минимизация полностью определённых автоматов........................ 51 1.3.4. Нахождение разбиения множества состояний методом Ауфенкампа-Хона ................................................................................................ 53 1.4. Композиция и декомпозиция абстрактных автоматов ............................ 55 1.4.1. Параллельное соединение автоматов ................................................ 55 1.4.2. Последовательное соединение автоматов ....................................... 56 1.4.3. Соединение автоматов с обратной связью ...................................... 58 1.4.4. Сеть автоматов. Композиция и декомпозиция автоматов ........... 60 2. Структурная теория автоматов ...................................................................... 63 2.1. Структурные автоматы и их анализ .......................................................... 63 2.1.1. Основные задачи структурной теории автоматов ........................ 63 2.1.2. Элементарные автоматы без памяти .............................................. 65 2.1.3. Элементарные автоматы с памятью ............................................... 68 3 2.1.4. Структурный анализ конечных автоматов ...................................... 71 2.2. Канонический метод структурного синтеза конечных автоматов ......... 73 2.2.1. Основные этапы канонического метода структурного синтеза конечных автоматов .......................................................................................... 73 2.2.2. Кодирование состояний, входов и выходов автоматов ................... 74 2.2.3. Выбор элементов памяти .................................................................... 76 2.2.4. Построение функций возбуждения памяти и функции выходов .... 79 2.2.5. Минимизация логических функций и построение схемы автомата 81 2.3. Проблема гонок в автоматах и методы их устранения ........................... 83 2.3.1. Гонки в автомате и способы их устранения..................................... 83 2.3.2. Аппаратурные способы устранения гонок в автоматах ................ 84 2.3.3. Алгоритмы противогоночного кодирования ..................................... 85 3. Микропрограммные автоматы....................................................................... 87 3.1. Операторные схемы алгоритмов микропрограмм ................................... 87 3.1.1. Микропрограммная работа дискретных устройств ....................... 87 3.1.2. Граф-схемы алгоритмов микропрограммного автомата ............... 88 3.1.3. Содержательные граф-схемы алгоритмов....................................... 91 3.2. Синтез микропрограммных автоматов по граф-схеме алгоритмов ....... 92 3.2.1. Синтез микропрограммного автомата Мили ................................... 92 3.2.2. Синтез микропрограммного автомата Мура ................................... 96 3.2.3. Минимизация микропрограммных автоматов .................................. 98 3.2.4. Структурная таблица микропрограммного автомата ................ 100 3.3. Блочный синтез алгоритмических автоматов ........................................ 103 3.3.1. Принципы блочного синтеза автоматов ......................................... 103 3.3.2. Сложность и -связность процедур автомата.............................. 105 3.3.3. Построение таблиц покрытий автомата ...................................... 107 РАЗДЕЛ 2. ТЕОРИЯ БЕСКОНЕЧНЫХ АВТОМАТОВ............................... 110 4. Распознающие автоматы и формальные языки ......................................... 110 4.1. Основы теории формальных языков и грамматик................................. 110 4.1.1. Языки и трансляция программ .......................................................... 110 4.1.2. Представление языков с помощью грамматик ............................... 113 4.1.3. Порождающие и распознающие грамматики ................................. 115 4.1.4. Классификация языков по Хомскому и их связь с распознающими автоматами ...................................................................................................... 116 4.2. Конечные автоматы и регулярные языки ............................................... 118 4.2.1. Регулярные грамматики и языки ...................................................... 118 4.2.2. Конечноавтоматные распознаватели ............................................. 119 4.2.3. Детерминированные и недетерминированные распознаватели ... 122 4.2.4. Лексические анализаторы (лексеры) ................................................ 124 4 4.3. Автоматы с магазинной памятью ............................................................ 126 4.3.1. Контекстно-свободные грамматики и языки ................................. 126 4.3.2. Понятие, структура и принцип работы магазинного автомата 131 4.3.3. Синтаксические анализаторы (парсеры) ........................................ 137 4.4. Машины Тьюринга и линейно-ограниченные автоматы ...................... 139 4.4.1. Неограниченные и контекстно-зависимые грамматики ............... 139 4.4.2. Машины Тьюринга и способы их построения.................................. 140 4.4.3. Модификации машин Тьюринга ........................................................ 143 4.4.4. Линейно-ограниченные автоматы ................................................... 145 5. Сети Петри ..................................................................................................... 147 5.1. Основы теории сетей Петри ..................................................................... 147 5.1.1. Структура сети Петри, её графическое представление и маркировка ......................................................................................................... 147 5.1.2. Пространство состояний сети Петри ........................................... 151 5.1.3. Моделирование сетями Петри, представление блок-схем ............ 152 5.1.4. Основные свойства сетей Петри и их анализ ................................. 154 5.2. Языки, подклассы и обобщения сетей Петри ........................................ 158 5.2.1. Классы и свойства языков сетей Петри ......................................... 158 5.2.2. Взаимосвязь языков сетей Петри с другими классами языков ..... 162 5.2.3. Автоматные сети Петри и маркированные графы....................... 163 5.2.4. Обобщения сетей Петри и модели параллельных вычислений ...... 164 Заключение........................................................................................................... 168 Список литературы ............................................................................................. 181 5 Список сокращений АБП АСП БНФ ГСА ГТИ ИО КА КСЛА МАС МКС МЗП МП ОДО ОУ ОФПС СДНФ СКНФ СОС УА УУ ФПС ЭАБП ЭАСП ЭВМ – – – – – – – – – – – – – – – – – – – – – – – – – автомат без памяти автомат с памятью Бэкуса нормальная форма, или Бэкуса-Наура форма граф-схема алгоритма генератор тактовых импульсов истинностный оператор конечный автомат контекстно-свободный лексический анализатор многоагентная система максимальный класс совместимости минимальное замкнутое покрытие магазинная память ограниченно-детерминированный оператор объект управления основная функционально полная система совершенная дизъюнктивная нормальная форма совершенная конъюнктивная нормальная форма самоорганизующаяся система управляющий автомат устройство управления функционально полная система элементарный автомат без памяти элементарный автомат с памятью электронная вычислительная машина 6 Предисловие Теория автоматов представляет собой раздел дискретной математики, в частности теории управляющих систем, изучающий математические модели преобразователей дискретной информации, называемые автоматами. С определенной точки зрения такими преобразователями являются как реальные устройства (вычислительные машины, автоматы, живые организмы и т.п.), так и абстрактные системы (математические машины, формальные системы, аксиоматические теории и т.д.). Теория автоматов возникла главным образом под влиянием запросов техники цифровых вычислительных и управляющих систем, а также внутренней потребюности теории алгоритмов и математической логики. Современная теория автоматов условно делится на три больших раздела:  абстрактно-алгебраическую теорию автоматов;  структурную теорию автоматов;  теорию вероятностных автоматов и самоорганизующихся систем. В свою очередь в абстрактно-алгебраической теории автоматов можно выделить:  теорию конечных автоматов;  теорию бесконечных автоматов. Структурная теория автоматов тесно связана с      теорией кодирования, общей теорией переключательных функций, теорией комбинационных схем, теорией информации, теорией надёжности дискретных устройств и т. п. Дисциплина «Теория автоматов» имеет своей целью формирование знаний по основам теории конечных автоматов и связанных с этим аспектов анализа и синтеза комбинационных и последовательностных устройств, микропрограммных автоматов, применяемых в системах обработки информации, а также теории бесконечных автоматов на примере распознающих автоматов и автоматных моделей сетей Петри. Материал курса лекций соответствует учебной программе дисциплины «Теория автоматов», посвященной изучению основ теории конечных автоматов и теории бесконечных автоматов. Основное содержание книги состоит из введения, пяти глав в двух разделах, соответствующих темам курса, и заключения. 1 раздел «Теория конечных автоматов» включает темы: 1 тема: «Абстрактная теория автоматов». 7 2 тема: «Структурная теория автоматов». 3 тема: «Микропрограммные автоматы». 2 раздел «Теория бесконечных автоматов» состоит из тем: 4 тема: «Распознающие автоматы и формальные грамматики». 5 тема: «Сети Петри». Во введении – рассмотрены основные понятия теории автоматов, включая классификацию автоматов, историю развития теории автоматов и смежных наук, а также области применения теории автоматов. Первый раздел посвящён рассмотрению основ теории конечных автоматов. В главе 1 – рассматривается так называемая абстрактная теория автоматов, или теория абстрактных конечных автоматов. В ней  описаны классификация абстрактных автоматов;  определены понятия совместимости состояний автоматов;  рассмотрены методы минимизации числа состояний абстрактных автоматов;  поставлены задачи композиции и декомпозиции автоматов. В главе 2 – даются основы структурного анализа и структурного синтеза конечных автоматов, а также рассматриваются вопросы устранения гонок в дискретных автоматах с помощью специальных методов. В главе 3 – рассматриваются так называемые микропрограммные автоматы, методы их минимизации и абстрактного синтеза, а также метод блочного синтеза алгоритмических автоматов. Второй раздел посвящён рассмотрению основ теории бесконечных автоматов, связанной с общей теорией формальных языков и грамматик, а также с теорией алгоритмов. В главе 4 – раскрыты основы построения распознающих автоматов со счётным количеством состояний и установлена их взаимосвязь с формальными языками и грамматиками. В главе 5 – изучаются основы сетей Петри, как особого вида автоматных моделей, позволяющих моделировать автоматы обобщённого типа. Установлена взаимосвязь языков сетей Петри с другими классами языков. Рассмотрены возможности сетей Петри для моделирования параллельных вычислений. В заключении подведён итог прохождению курса, рассмотрены перспективные направления развития теории автоматов, в том числе теории вероятностных автоматов и самоорганизующихся систем. Курс лекций написан к.т.н. доцентом В.А. Гончаренко на основе многолетнего опыта преподавания данной дисциплины среди курсантов специальностей «Вычислительные машины, комплексы, системы и сети», «Применение и эксплуатация автоматизированных систем специального назначения». В написании главы 4 также принимал участие к.т.н. В.В. Грызунов. 8 Дисциплина преподаётся на младших курсах и предполагает наличие знаний у обучающихся в области алгебры, информатики, дискретной математики, основ программирования. В свою очередь, дисциплина обеспечивает изучение таких дисциплин, как:  схемотехника;  ЭВМ и периферийные устройства;  сети и телекоммуникации;  архитектура вычислительных систем;  микропроцессорные системы;  системное программирование;  интеллектуальные системы;  моделирование и проектирование систем;  защита информации;  эксплуатация АС специального назначения. 9 Введение 0.1.Основные понятия теории автоматов На протяжении последних десятилетий велись и ведутся интенсивные работы по созданию и использованию различных систем и устройств для переработки дискретной информации. Преобразователи дискретной информации широко используются в качестве различного рода технических автоматов, вычислительных устройств и их функциональных блоков, устройств управления роботами, управляющих объектами по заданному алгоритму. Широкий класс таких преобразователей объединяется под общим названием автоматы. Эти устройства имеют непустое множество входов, воспринимающих информацию, и непустое множество выходов для выдачи переработанной информации. Зависимость между входами и выходами задаётся предписанным алгоритмом переработки информации. Информация на входе и выходе представляется символами, физическими носителями которых являются квантованные по времени сигналы. Если K символов, одновременно следующих по параллельным входным либо выходным каналам, рассматривать как один символ из соответствующего алфавита, следующего по единому «склеенному» каналу, то такой автомат можно представить как устройство с одним входом и одним выходом (рис. 0.1). Рис. 0.1. Общая функциональная модель преобразователя Известны два подхода к определению термина автомат. При первом подходе его рассматривают как устройство, выполняющее без непосредственного участия человека функции приёма, преобразования и передачи информации (энергии) в соответствии с заложенной в него программой. При втором подходе автомат рассматривается как математическая модель реальных преобразователей дискретной информации. Функционирование его состоит в том, что последовательность z1, z2,... символов конечного или в общем случае бесконечного алфавита Z, поступающая на вход, вызывает на его выходе определенную последовательность w1, w2,... символов того же или другого алфавита. Таким образом,  самой общей математической моделью преобразователя дискретной информации является последовательностная функция, отображающая множество Z* всех последовательностей символов алфавита Z в другое множество W* последовательностей символов алфавита W. 10 Такая интерпретация позволяет схематично представить преобразователь как устройство, реализующее отображение одного множества на другое (рис. 0.2). Рис. 0.2. Формальная модель преобразователя Теория автоматов занимается изучением процессов, протекающих в автоматах различного рода, и общих закономерностей, которым они подчинены, широко применяя для этого  алгебраический аппарат,  математическую логику,  комбинаторный анализ,  теорию вероятностей. Конструируя надёжные, хорошо работающие автоматы, приходится решать необычайно сложные задачи. Например, надо определять устойчивость систем, чтобы уменьшить различные отклонения в работе автоматических машин. Надо изучать и чувствительность автоматов, так как в процессе работы свойства систем регулирования не остаются постоянными. Наиболее тесно теория автоматов связана с теорией алгоритмов. Это объясняется тем, что автомат преобразует дискретную информацию по шагам в дискретные моменты времени и формирует результирующую информацию по шагам заданного алгоритма. Эти преобразования возможны с помощью технических и/или программных средств. Автомат можно представить, как некоторое устройство (чёрный ящик), на которое подаются входные сигналы и снимаются выходные и которое может иметь некоторые внутренние состояния. При анализе автоматов изучают их поведение при различных возмущающих воздействиях и минимизируют число состояний автомата для работы по заданному алгоритму. Такой автомат называют абстрактным, т.к. абстрагируются от реальных физических входных и выходных сигналов, рассматривая их просто как буквы некоторого алфавита и в связи с идеализированным дискретным временем. Абстрактные автоматы образуют фундаментальный класс дискретных моделей как самостоятельная модель, и как основная компонента машин Тьюринга, автоматов с магазинной памятью, конечных автоматов и других преобразователей информации. При синтезе автоматов (процесс соединения или объединения) формируют систему из элементарных автоматов, эквивалентную заданному абстрактному автомату. Такой автомат называется структурным. Особое место в теории автоматов занимает понятие конечного автомата. Результат преобразования вход => выход (рис.0.2) зачастую зависит не только от входа в данный момент времени, но и от того, что было раньше на входе, 11 от входной истории, т.е. от предыстории преобразования. Число возможных входных историй бесконечно (счётно), даже если различных элементов входной информации у автомата конечное число (как в конечном функциональном преобразователе). Чтобы эти предыстории как-то запоминать и отличать друг от друга преобразователь должен иметь память. Для этого в устройство (рис. 0.3) вводится алфавит состояний Q = {q1 ,q2,...qm}. Понятие состояния q при этом играет очень важную роль. В своих состояниях автомат запоминает свое концентрированное прошлое. На один и тот же входной сигнал преобразователь может реагировать по-разному в зависимости от того, в каком состоянии он находится в данный момент. Конечный автомат (рис. 0.3) – это  математическая модель устройства с конечной памятью, преобразующего дискретную информацию.  математическая абстракция, позволяющая описывать пути изменения состояния объекта в зависимости от его текущего состояния и входных данных, при условии, что общее возможное количество состояний Q и множество входных сигналов Z конечны.  один из важнейших видов управляющих систем и частный случай абстрактного автомата. Главным достоинством конечных автоматов является то, что в них естественным образом описываются системы, управляемые внешними событиями. Рис. 0.3. Конечный автомат Таким образом,  теория конечных автоматов – наука, изучающая принципы построения, функционирования и применения автоматических устройств, имеющих конечное число внутренних состояний и конечный внешний алфавит. В теории бесконечных автоматов рассматриваются различные концепции бесконечных автоматов, точнее выделяются классы бесконечных автоматов специального вида. Этот раздел важен тесной связью с общей теорией формальных языков и грамматик, а также с теорией алгоритмов. Теория автоматов, наряду с теорией информации и теорией алгоритмов, является одним из краеуголных камней кибернетики (рис. 0.4) – междисциплинарной науки о процессах управления в сложных динамических системах, 12 основывающейся на теоретическом фундаменте математики и логики (вообще на формальных языках), а также на применении вычислительной техники. Теория информации Теория алгоритмов Теория автоматов Рис. 0.4. Основные составляющие кибернетики Математический (логический) аппарат кибернетики весьма широк: здесь и теория вероятностей, и теория функций, и математическая логика и многие другие современные разделы математики. Кибернетика возникла на стыке математики, логики, семиотики, физиологии, биологии, социологии. Основной метод кибернетики – метод моделирования систем и процессов управления. Ей присущ анализ и выявление общих принципов и подходов в процессе научного познания. Основные теории, объединяемые кибернетикой: 1) 2) 3) теория информации; теория автоматов; теория алгоритмов; 4) 5) 6) 7) 8) 9) 10) 11) теория передачи сигналов; теория систем; теория управления; теория принятия решений; исследование операций; теория оптимального управления; теория распознавания образов; синергетика. Кроме средств анализа, в кибернетике используются мощные инструменты для синтеза решений, предоставляемые аппаратами математического анализа, линейной алгебры, геометрии выпуклых множеств, теории вероятностей и математической статистики, а также более прикладными областями математики, такими как математическое программирование, эконометрика, информатика и прочие производные дисциплины. Кибернетика разрабатывает принципы построения автоматов и исследует возможности автоматизации с их помощью процессов умственного труда. Тем 13 самым кибернетика обогащает конструкторов, создающих сложные автоматы, надёжной теоретической базой. В современной теории автоматов приняты следующие терминология и классификация (рис.0.5). Автоматы Детерминированный автомат Недетерминированный автомат Стохастический автомат Конечный автомат Автомат без памяти Автомат Мура Автомат с памятью Автомат Мили Клеточный автомат Совмещённый автомат Бесконечный автомат Стековый автомат Магазинный автомат Вероятностный автомат Машина Тьюринга Сеть Петри Линейноограниченный автомат Рис. 0.5. Классификация автоматов Абстрактная машина – теоретическая конструкция, в которой отражаются все формальные аспекты функционирования некоторого реального или гипотетического устройства. Примерами абстрактных машин могут служить конечный автомат, машина Поста, машина Тьюринга и многие другие модели, изучаемые в математике, кибернетике, искусственном интеллекте и других науках. Автомат – абстрактная машина, преобразующая последовательности входных символов в последовательности выходных символов. Автоматы делятся на большие классы: по детерминированности – на детерминированные и недетерминированные, по конечности числа состояний – на конечные и бесконечные. Детерминированный автомат – автомат, у которого в любой такт работы набор входных символов и внутреннее состояние однозначно определяет набор выходных символов и внутреннее состояние детерминированного автомата в последующем такте работы. Недетерминированный автомат – автомат, у которого в некоторые такты работы набор входных символов и внутреннее состояние задают альтернатив14 ный выбор набора выходных символов и/или внутреннего состояния недетерминированного автомата в последующем такте работы. Стохастический автомат (автомат с переменной структурой) – автомат, у которого вместо функций переходов и выходов в общем случае задаются распределения вероятностей дискретного типа. Для переходов задаются вероятности Hij, характеризующие вероятность смены состояния с номером i на состояние с номером j, а для выхода вероятности Qij, характеризующие появление выхода с номером j, если текущее состояние автомата имеет номер i. Стохастический автомат часто используется для описания процесса адаптации к среде, в которой он функционирует. В зависимости от успеха или неуспеха действий стохастического автомата пересчитываются Hij и Qij, что приводит к адаптации стохастического автомата, если среда носит стационарный характер. Вероятностный автомат – частный случай стохастического автомата, когда случайными являются параметры автомата, а структура автомата остается неизменной при любых результатах его функционирования. Теперь рассмотрим автомат с точки зрения конечности числа состояний. Конечный автомат – автомат, работа которого определяется двумя функциями: y(t+1) = F1(x(t), y(t)), z(t) = F2(x(t),y(t)). Первая функция задаёт смену состояний автомата в дискретные такты времени t и называется функцией переходов; вторая – выходные сигналы автомата и называется функцией выхода; x, y, и z – множества двоичных векторов фиксированной длины, т.е. конечные множества. Математической моделью A.K. может служить автоматная грамматика, с помощью которой порождается автоматный язык. Бесконечный автомат – автомат, у которого множество внутренних состояний является счётным (например, машина Поста и машина Тьюринга). Машина Тьюринга – абстрактная машина, состоящая из бесконечной в одну сторону ленты, разделенной на клетки, и управляющей головки, которая может передвигаться вдоль ленты. Символы входного алфавита, включающие пустой символ, могут размещаться на ленте по одному в клетке. Управляющая головка может находиться в одном из конечного числа внутренних состояний, одно из которых является особым. Оно соответствует выключению машины Тьюринга. Каждый шаг работы состоит в том, что управляющая головка по паре (наблюдаемый символ в клетке ленты, против которой находится управляющая головка; – внутреннее состояние головки) вырабатывает тройку (новое содержимое клетки – новое внутреннее состояние головки – сдвиг головки на одну клетку влево или вправо или сохранение положения головки). Работа машины Тьюринга заканчивается, когда управляющая головка переходит в состояние конца работы. Начальное заполнение ленты и начальное положение управляющей головки вместе с её начальным состоянием задаются извне. Действия машины Тьюринга на каждом шаге определяются конечной таблицей, размер которой соответствует числу символов внешнего алфавита и числу внутренних состояний головки. Машина Тьюринга является моделью универсального вычислительного процесса, так как можно построить универсальную машину Тьюринга, которая бу15 дет имитировать работу любой конкретной машины Тьюринга. В этом смысле универсальная машина Тьюринга может рассматриваться как математическая модель ЭВМ, построенной по традиционной архитектуре. Машина Тьюринга является одним из возможных уточнений понятия алгоритма, известного в дискретной математике. Языки, порождаемые в результате работы машины Тьюринга, называются рекурсивно-перечислимыми. Машина Поста – абстрактная машина, состоящая из бесконечной в обе стороны ленты, разделенной на клетки, и управляющей головки. Клетки ленты могут быть пустыми или отмеченными специальным символом. Вдоль клетки перемещается управляющая головка. За один такт работы машина Поста выполняет одну из шести базовых команд: сдвиг управляющей головки на одну клетку влево, аналогичный сдвиг на одну клетку вправо, вписывание отмечающего символа в пустую клетку, условный переход и остановку. Из последовательности перенумерованных натуральными числами таких команд образуются программы функционирования машины Поста. Перед началом работы машины Поста необходимо заполнить нужные клетки ленты отмечающими символами и расположить управляющую головку против некоторой клетки. После этого машина Поста будет выполнять команду программы с номером один. Если это не команды сдвига или прекращения работы, то следующая выполняемая команда программы после данной определяется специальными указателями, входящими в каждую команду записи и стирания отмечающих символов. В команде условного перехода выбор новой команды зависит от того, содержит обозреваемая в этом такте работы клетка пустоту или она отмечена символом. В зависимости от ситуации происходит переход к программе указанной в команде условного перехода. Машина Поста по результатам работы эквивалентна машине Тьюринга, но функционирование её более медленное. Как и машина Тьюринга, машина Поста служит для уточнения интуитивного понятия алгоритма. Линейно-ограниченный автомат – частный вид машины Тьюринга, у которого в каждый момент времени лента имеет конечную длину. При необходимости сдвига управляющей головки за край ленты лента наращивается на конечный отрезок, нужный головке Стековый автомат – автомат, память которого организована в виде стека, в котором запоминается последовательность входных символов с сохранением порядка их поступления. Считывание информации из стека производится по номеру позиции в стек. Частным случаем стекового автомата является магазинный автомат. Стековый автомат применяется при порождении контекстнозависимых языков с заданной глубиной контекстов, что приводит к его использованию в лингвистических процессорах. Магазинный автомат – частный случай стекового автомата, у которого можно считывать только ту информацию, которая была записана в стек последней. 16 Клеточный автомат – однородная структура, состоящая из клеток, в каждой из которых находится конечный автомат. Позволяет моделировать параллельные асинхронные процессы. В общем случае клеточный автомат имеет четыре входа от соседних клеток и четыре выхода, идущих к ним. Все автоматы в клетках являются одинаковыми. С помощью клеточного автомата можно моделировать самоорганизацию различных пространственно-временных конфигураций. Сеть Петри – это автомат для моделирования параллельных процессов, имеющий вершины двух типов – позиции и переходы. 0.2. Краткая история развития теории автоматов Рассмотрим историю развития основных идей теории автоматов и близких к ней математических теорий. Математика – одна из самых древних наук. Её история насчитывает около трёх тысячелетий, и каждый век вносил свой особый вклад в развитие математики. Некоторые времена характеризуются появлением принципиально новых направлений, которые потом длительное время привлекали внимание исследователей и практиков, тогда как другие – сопровождались разрешением ранее сформулированных сложных проблем. Особое место в математике занимает формальная логика, как наука об общезначимых формах и средствах мысли, необходимых для рационального познания в любой области знания. Она имеет долгую и содержательную историю. Основы логики были разработаны в IV веке до нашей эры Аристотелем и другими представителями мегарской школы (Теофрастом, Евдемом). Аристотель создал первую законченную теорию дедукции – силлогистику, реализующую идею выведения логических следствий при помощи формализованных мыслительных приёмов. Аристотель (384 до н.э. – 322 до н.э.) В конце XIX века благодаря работам немецкого математика Георга Кантора зародилась теория множеств, но только в XX веке она прочно встала на ноги и заняла центральное место в математике. Рука об руку с теорией множеств развивалась и крепла математическая логика. Первые работы в этой области, принадлежащие британским математикам Джорджу Булю и Огастесу де Мо́ргану, появились в середине прошлого века, но именно начало XX века и первая его половина характеризуется интенсивным становлением математической логики как одного из фундаментальных разделов математики. 17 Георг Кантор (1845–1918) Джордж Буль (1815–1864) Огастес де Мо́рган (1806–1871) Дальнейшее усовершенствование алгебры логики было осуществлено английским логиком Уильямом Стенли Джевонсом, немецким логиком Эрнстом Шрёдером, русским логиком Платоном Сергеевичем Порецким и другими. Уильям Стенли Джевонс (1835–1882) Эрнст Шрёдер (1841–1902) П.С.Порецкий (1846–1907) В последующих трудах по алгебре логики немецкого логика Готлоба Фреге, разработавшего теорию исчисления высказываний, немецкого логика и математика Давида Гильберта, разработавшего логическую теорию доказательств, английского философа и логика Бертрана Рассела, придавшего (вместе с Уайтхедом) математической логике современный вид, русского логика и математика Ивана Ивановича Жегалкина (1869–1947), заслугой которого явилась дальнейшая разработка исчисления классов и значительное упрощение теории операций логического сложения, предмет алгебры логики вышел далеко за рамки изучения обычных операций с понятиями. 18 Готлоб Фреге (1848–1925) Давид Гильберт (1862–1943) Бертран Рассел (1872–1970) Применение булевой алгебры в технике и первые шаги в развитии теории автоматов были впервые осуществлены в России в начале прошлого века. В 1910 году известный австрийский и нидердандский физик Пауль Эренфест указал на возможность построения технических устройств на основе алгебры логики. Известный специалист по гидротехническим сооружениям Михаил Николаевич Герсеванов использовал булеву алгебру для исследования связей между различными упрощающими гипотезами при расчёте гидротехнических сооружений. Как наука, теория автоматов возникла в конце 40-х гг. XX веке в связи с требованиями практики проектирования вычислительных машин и с разработкой математических моделей процессов переработки информации в биологических, экономических и других системах. Однако проблематика теории автоматов в значительной мере начала складываться ещё в 30-е годы в рамках теории алПауль Эренфест М.Н.Герсеванов горитмов и теории релейных (1880–1933) (1830–1907) устройств (рис. 0.6). Приблизительно до 1930-х годов логическая теория представляла, в основном, академический интерес и не была связана с потребностями прикладных наук. С 30-х годов начинают развиваться теории релейно-контактных схем, а затем общие теории анализа и синтеза абстрактных автоматов. 19 Аппарат алгебры логики Теория релейноконтактных схем Теория логических комбинационных схем Теория последовательностных дискретных автоматов Рис. 0.6. Развитие теории автоматов Впервые дал строгие доказательства применимости аппарата булевой алгебры в теории релейно-контактных схем в 1935 году в своей рукописи [24] русский физик Виктор Иванович Шестаков. Позднее этот результат был повторен в 1936–1937 гг. в Японии [28] – Акирой Накашимой (1908–1970) в соавторстве с Масао Ханзавой и в 1938 г. в США [30] – американским математиком Клодом Элвудом Шенноном. В том же 1938 году Шестаков защитил кандидатскую диссертацию [25], однако приоритет в мире в области создания теории автоматов долгое время отдавался Шеннону, в последнее время – Накашиме. В период 1942–1954 гг. интенсивно велись работы по теории автоматов в Институте автоматики и телемеханики АН СССР под руководством Михаила Александровича Гаврилова. Основываясь на результатах Шестакова и Шеннона, М.А.Гаврилов в 1943–48 гг. создал инженерные методы синтеза и анализа релейно-контактных схем. Кроме того, он разработал символику для описания многотактных схем и положил начало развитию методов их синтеза. В монографии М.А. Гаврилова [2] были впервые систематически изложены основные вопросы зарождавшейся тогда теории автоматов. В.И.Шестаков (1907–1987) Клод Элвуд Шеннон (1916–2001) М.А.Гаврилов (1903–1979) Эти ученые были основателями теории автоматов со стороны техники. Теория автоматов явилась основой создания вычислительной техники и кибернетики. Все работы по созданию ЭВМ были строго засекречены как в СССР, 20 так и США, т.к. проводились в интересах Военно-промышленной Комиссии (ВПК) и создания Ядерно-ракетного щита страны. Со стороны математики формализацией задач теории автоматов и их решением с 40-50-х годов прошлого века начали заниматься Алан Тьюринг, Эмиль Пост, Андрей Андреевич Марков, Алонзо Чёрч, Роза Петер, Курт Гёдель, Стивен Кли́ни, Борис Авраамович Трахтенброт, Ноам Хомский и др. Наряду с формализацией понятия автомата как частного случая машины Тьюринга и системы подстановок были разработаны модели автомата на основе нормальных алгоритмов (А. А. Марков) и рекурсивных функций (Р. Петер). Алан Тьюринг (1912–1954) Эмиль Пост (1897–1954) А.А.Марков (1903–1979) Алонзо Чёрч (1903–1995) Роза Петер (1905–1977) Курт Гёдель (1906–1978) 21 Стивен Клини (1909–1994) Б.А.Трахтенброт (р.1921) Ноам Хомский (р.1928) Примерно до середины 50-х годов теория конечных автоматов развивалась в основном как структурная теория автоматов, когда основное внимание уделялось способу соединения отдельных элементов автомата. С широким внедрением электроники в теории автоматов появилась тенденция к абстрактному рассмотрению последних. К первым работам в области абстрактной теории автоматов относятся работы Артура Бёркса (1915–2008) и Джесси Райта, а также Стивена Клини, Эдварда Мура (1925–2003), Джорджа Мили (1927–2010), Уоррена Мак-Калока (1899–1969) и Уолтера Питтса (1923–1969). К первым работам по абстрактному анализу относятся работы Э.Мура и Б.А.Трахтенброта. В последующие годы абстрактная теория автоматов получила значительное развитие как у нас в стране, так и за рубежом. В теории конечных автоматов решаются две основные задачи:  анализ автоматов;  синтез автоматов. Анализ и синтез могут производиться как с точки зрения абстрактной, так и структурной теории автоматов. При абстрактном анализе изучают характер функционирования автомата, когда структура соединения элементов автомата не известна. Автомат рассматривается как чёрный ящик и о законе его функционирования судят по выходным сигналам, вырабатываемым при поступлении той или иной последовательности воздействия на его вход. При абстрактном анализе может быть выявлено число внутренних состояний автомата и его функции переходов и выходов. Область структурных методов анализа и синтеза схем бурно развивалась в 50-е и начале 60-х годов и к середине 60-х годов стала сложившейся научной дисциплиной с развитым аппаратом и определенной областью исследований. В 60–70-е годы прошлого столетия ведущие учёные школы по теории релейных устройств и конечных автоматов чл.-корр. АН СССР М. А. Гаврилова создают самостоятельные научные школы: 22  «Техническая диагностика автоматов» (член-корреспондент АН СССР П. П. Пархоменко),  «Ситуационное управление» (академик РАЕН Д. А. Поспелов),  «Логическое управление и характеризационный анализ» (академик РАЕН В. А. Горбатов),  «Управляющие автоматы» (академик ПА В. Г. Лазарев),  «Алгоритмизация проектирования автоматов» (академик РАЕН В. П. Чистов) и др. Большой вклад в развитие теории автоматов внесли академик Bиктор Михайлович Глушков, академик Э.А. Якубайтис и коллективы возглавляемых ими институтов АН Украинской ССР и АН Латвийской ССР. В 70-е годы отечественная промышленность освоила массовое производство микросхем средней степени интеграции, реализующих все широко используемые функциональные узлы логического управления. Переход к интегральным схемам существенно изменил способы проектирования блоков цифрового электронного управления. Развитие производственных процессов сопровождается значительным усложнением задач управления В.М.Глушков технологическим оборудованием и ростом числа необ(1923–1982) ходимых логических операций. Бурное развитие таких математических разделов, как теория алгоритмов, теория автоматов и теория информации предопределили появление того устройства, которое впоследствии стали именовать компьютером. С другой стороны, по мере того, как это замечательное устройство обретало все большую мощь и развивало свои способности, возникали новые сложные математические проблемы. Они, в свою очередь, стимулировали появление и развитие таких новых разделов математики, как теория программирования, а также целой науки информатики, тесно связанной с математикой через понятие математической модели, математическую логику и теорию алгоритмов. Теория автоматов является основой производства современных цифровых систем: электронных вычислительных машин, информационно-управляющих комплексов промышленного, оборонного и космического назначения. 0.3. Области применения теории автоматов Существует множество объектов управления, связанных с большой ответственностью: ядерные и химические реакторы, комплексы промышленного, оборонного, космического назначения, горное дело. Успех в работе с ними прямо зависит от четкости и слаженности действий, от умения принимать выверенные решения и грамотно анализировать ситуацию, от возможности одно23 значной интерпретации информации. Различная природа физических процессов, протекающих в объектах, сложный характер взаимодействия между ними и управляющими системами обуславливает трудности разработки, алгоритмизации и программирования задач управления. Возникают трудности, связанные с необходимостью достижения наглядности и структурированности. Для решения этих задач используется развитый математический аппарат теории автоматов. Описание логики поведения (при каких условиях необходимо выполнить те или иные действия) при автоматном подходе структурировано. Это свойство делает автоматное описание сложного поведения наглядным и ясным. Корректность работы при использовании автоматов закладывается ещё на этапе проектирования, благодаря графическому представлению, т.е.  наглядно представляется поведение управляющих автоматов (графически, таблично) и композицией из них;  отображаются желаемые состояния;  отражается динамика и условия переходов автомата из состояния в состояние;  можно легко увидеть возможные ошибки в проектировании, такие как отсутствие некоторого перехода, недоступность состояния и т.д. Все это приводит к чёткому пониманию работы устройства. Процессы управления, проектирования могут быть представлены в виде элементов с предсказуемым поведением. Пример 0.1. Один из крупнейших мировых производителей авиационной, космической и военной техники – американская корпорация «Боинг» занимается системами стабилизации самолетов с использованием чистой теории автоматов. Большая часть теории автоматов была успешно использована в системных программах и текстовых фильтрах в ОС UNIX. Это позволяет множеству людей работать на высоком уровне и разрабатывать очень эффективные программы. Области применения ТА поражают своим размахом и не ограничиваются узкой направленностью и специализацией. Теория автоматов находит применение как в математике, так и в решении практических задач. Основные области применения – это:  анализ и синтез логических схем цифровых устройств;  разработка лексических и синтаксических анализаторов при построении трансляторов и разработке самих языков программирования;  алгоритмы поиска информации в глобальных сетях. Например, средствами теории автоматов доказывается разрешимость некоторых формальных исчислений. Применение методов и понятий теории автоматов к изучению формальных и естественных языков привело к возникновению математической лингвистики (математическая лингвистика – математическая дисциплина, предметом кото24 рой является разработка формального аппарата для описания строения естественных и некоторых искусственных языков.) Понятие автомата может служить модельным объектом в самых разнообразных задачах, благодаря чему возможно применение теории автоматов в различных научных и прикладных исследованиях. Рассмотрим некоторые из областей применения. ПРОГРАММИРОВАНИЕ Возникает вопрос, почему же конечно-автоматная модель теории автоматов особенно актуальна сейчас, когда существует огромное количество, как языков программирования, так и сред для разработки ПО? Существует две проблемы:  непредсказуемое поведение кода программы, разработанной исключительно средствами RAD (Rapid Application Development – средства быстрой разработки приложений);  «угасание» культуры программирования. Пример 0.2. Borland Delphi и C++ обеспечивают ускоренную разработку приложений за счёт использования объектно-ориентированного и визуального программирования (так называемой технологии RAD). Они позволяют не только программировать в привычном смысле слова, но и фактически рисовать программы (как интерфейс, так и реализацию), используя визуальные компоненты VCL. Любой визуальный объект VCL характеризуется рядом свойств, методов и событий. Казалось бы, простой манипуляцией перечисленными атрибутами возможно заставлять разрабатываемую программу делать то, что от неё требует программист-разработчик. Но это далеко не так. Давно стало ясно, что VCL имеет тенденцию скрывать точную реализацию определенных объектов, тем самым не давая посторонним менять умалчиваемое поведение кода. Как показывает практика, поведение кода программы, созданной с помощью средств RAD, не всегда предсказуемо даже для очень опытного программиста, не говоря уже о начинающем. Программа, несмотря на «очевидность» авторского кода, всегда стремится пойти своим путём, попадая в такие замысловатые обработчики событий, о существовании которых можно даже и не догадываться. В современном мире объёмы и сложность разрабатываемых приложений возрастают с каждым днём, поэтому такой подход резко увеличивает время тестирования и отладки ПО. Управлять поведением кода даёт возможность механизм теории автоматов. Стили программирования различаются по базовым понятиям, в качестве которых используются такие как «событие», «подпрограмма», «функция», «класс» («объект») и пр. Стиль программирования, основанный на явном выделении состояний и применении автоматов для описания поведения программ, 25 назван «автоматное программирование», а соответствующий стиль проектирования программ – «автоматное проектирование». Автоматное программирование можно рассматривать не только как самостоятельный стиль программирования, но и как дополнение к другим стилям, например, к объектно-ориентированному, т.к. речь идет не только и не столько об использовании конечных автоматов в программировании, сколько о методе создания программ в целом, поведение которых описывается автоматами. Т.е. как отдельный компонент, так и программа в целом может быть реализована как автомат. В автоматном программировании существует два направления: SWITHтехнология и КА (конечно-автоматная) технология. Switch-технология – технология разработки систем логического управления на базе конечных автоматов, охватывающая процесс проектирования, реализации, отладки, верификации (проверки), документирования и сопровождения. Кодирование/программирование автоматов в рамках КА-технологии основано на следующих принципах:  введено понятие динамичного объекта, который может быть наделен алгоритмом поведения во времени;  алгоритм поведения объекта задаётся моделью конечного автомата;  язык описания автомата основан на базе табличной формы представления автоматов;  логика поведения объекта (таблица переходов автомата) отделена от методов автоматного объекта (предикатов и действий), связанных с реализацией его поведения во времени;  любые динамичные объекты могут выполняться параллельно. Вывод. Автоматное программирование используется в настоящее время при проектировании программного обеспечения систем автоматизации ответственных объектов управления. Конечный автомат работает по принципу «шаг в сторону – недопустимо». Реализовать непредусмотренные действия конечный автомат не даст ни пользователю (исходный вариант кода), ни самой программе (модифицированный вариант кода). В настоящее время наблюдается бум в области создания компьютерных игр. Все чаще логика управления играми, в которых персонажи, перемещающиеся в области игры, могут действовать в различных режимах (например, персонаж бежит вперед или назад, взбирается по лестнице, падает и т.д.), реализуется в виде конечного автомата. ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ Искусственные нейронные сети (ИНС) – математические модели, а также их программные или аппаратные реализации, построенные по принципу организации и функционирования биологических нейронных сетей – сетей нервных клеток живого организма. Это понятие возникло при изучении процессов, протекающих в мозге, и при попытке смоделировать эти процессы. 26 Нейронные сети – исключительно мощный метод моделирования, позволяющий воспроизводить чрезвычайно сложные зависимости. ИНС поддаются настройке и обучению. Использование автоматов при создании искусственных нейронных сетей позволяет исключить появление непредусмотренных состояний в работе. Нейронные технологии особенно интенсивно применяются в экспертных системах прогнозирования месторождений и финансовом деле при оценке инвестиций. Пример 0.3. В жидкостных ракетных двигателях (ЖРД), представляющих собой сложную техническую систему, состоящую из множества агрегатов, взаимодействующих между собой, необходима быстрая реакция контролирующей системы на процессы, происходящие в одном из самых ответственных и напряженных агрегатов – турбонасосном агрегате (ТНА). При использовании нейронных сетей и автоматов появляется возможность раннего диагностирования аварийных ситуаций, что позволяет снизить последствия аварии и предотвратить разрушение двигателя при проведении огневых испытаний СОЗДАНИЕ ПРИКЛАДНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ И МИКРОКОНТРОЛЛЕРОВ При построении серверных приложений, отвечающих на запросы, большую роль играет «отсутствие состояния» – нет нужды сохранять состояния между двумя последовательными запросами. При построении удачного интерактивного приложения, управляемого событиями, многое зависит от того, продумана ли модель управления состояниями. Конечный автомат – весьма удобная концепция, которую целесообразно использовать для структурирования приложений. Поскольку мобильные приложения должны использовать пространство экрана и системные ресурсы эффективно, конечные автоматы оказываются особенно полезными при разработке ПО для таких приложений. Программа представляет собой совокупность конечных автоматов, взаимодействующих друг с другом и с «внешним миром». Диаграмма переходов КА описывает переходы между экранными формами, дуги переходов из состояния в состояние описывают действия пользователя. С каждой из конструируемых форм должен связываться конечный автомат, управляющий визуальным поведением формы. Если в самой форме содержится несколько страниц, например, диалоговые окна с вкладками, то предусматривается для каждой из подстраниц собственный конечный автомат. Конечные автоматы значительно расширяют возможности управления выполнением фоновых задач. Их использование делает возможным предоставление фоновыми потоками информации о состоянии выполнения, а также обращение других потоков с запросами к фоновому потоку на выполнение определенных действий, например, с запросом на прекращение выполнения фоновой работы. При этом в наглядной графической форме могут быть выражены как связи между автоматами, так и их внутренняя структура. 27 Главное преимущество: возможность повторного использования кода, быстрая модификация, наглядность, что важно в случае приложений для мобильных устройств, требующих экономного расходования экранного пространства, памяти, вычислительной мощности и других ресурсов. ПОСТРОЕНИЕ МОДЕЛЕЙ ДОКУМЕНТООБОРОТА НА ОСНОВЕ КОНЕЧНО-АВТОМАТНОЙ МОДЕЛИ ТЕОРИИ АВТОМАТОВ В современном обществе идет процесс интенсификации вычислительных и информационных технологий во всех отраслях деятельности. Документооборот – движение документов в организации с момента их создания или получения до завершения исполнения: отправки и/или направления в дело. Внедрение электронного документооборота является актуальной задачей современного общества, т.к. он позволяет сделать процесс движения документов управляемым и контролируемым, что обеспечивает более качественные услуги управления. Предприятия и организации для решения этой задачи тратят значительные средства и время. В тоже время, каждая разработка системы документооборота является уникальной и возможность повторного использования полученного опыта в полном объёме практически отсутствует. Правильная организация данного процесса определяет качество и стабильность работы любого предприятия. Использование автоматной модели в разработке спецификаций документооборота и программного продукта позволяет создавать системы более адекватные требованиям пользователей и обеспечивает возможность достижения совместимости приложений. Теория автоматов позволяет реализовать логику ветвления движения документов между участниками процессов документооборота. Автомат позволяет установить реакцию элементов системы документооборота на изменения в системе. В документообороте документ принимает следующее состояние в зависимости от результата действия, которое над ним произвели. Функцию перехода автоматной модели документооборота можно определить, как i-й элемент множества действий {Д} документооборота, после выполнения которого, происходит смена состояния на состояние. {F}={Д} Вывод. После разработки теоретической базы реализуется программное обеспечение, применяющее на практике автоматную и графовую модели документооборота. Каждый из участников имеет возможность получать доступ к конкретным видам документов и выполнять над ними строго определенные действия. Рассмотренная отрасль в настоящее время быстро развивается. Проводятся дальнейшие исследования в данном направлении, особенно это касается применения КС-грамматик и создания программного обеспечения, реализующих описанную автоматную модель документооборота. 28 ПОИСК ЦЕПОЧЕК В ТЕКСТЕ Согласно данным официальной статистики, около 85% пользователей Интернет постоянно обращаются к поисковым системам (Google, Yandex, Rambler, Yahoo!, Апорт, Поиск@Mail.ru и др.) с целью найти необходимую им информацию о товарах или услугах. Положения теории автоматов прекрасно подходят для описания таких реальных задач, возникающих в приложениях, как поиск в сети Internet и извлечение информации из текста. Многие современные поисковые системы Интернета используют специальную программу – поисковый робот, который является автоматом. В век Internet и электронных библиотек с непрерывным доступом обычной является следующая проблема. Задано некоторое множество слов, и требуется найти все документы, в которых содержится одно (или все) из них. Популярным примером такого процесса служит работа поисковой машины, которая использует специальную технологию поиска, называемую обращёнными индексами (inverted indexes). Для каждого слова, встречающегося в Internet (а их около 100,000,000), хранится список адресов всех мест, где оно встречается. Машины с очень большим объёмом оперативной памяти обеспечивают постоянный доступ к наиболее востребованным из этих списков, позволяя многим людям одновременно осуществлять поиск документов. В методе обращенных индексов конечные автоматы не используются, но этот метод требует значительных затрат времени для копирования содержимого сети и переписывания индексов. Существует множество смежных приложений, в которых применить технику обращенных индексов нельзя, зато можно с успехом использовать методы на основе автоматов. Те приложения, для которых подходит технология поиска на основе автоматов, имеют следующие отличительные особенности:  Содержимое хранилища текста, в котором производится поиск, быстро меняется.  Документы, поиск которых осуществляется, не могут быть каталогизированы. Например, очень непросто отыскать в сети все страницы, содержащие информацию обо всех книгах, которые продаёт компания Amazon.com, поскольку эти страницы генерируются как бы «на ходу» в ответ на запрос. Однако мы можем отправить запрос на книги по определенной теме, скажем, «конечные автоматы», а затем искать в той части текста, которая содержится на появившихся страницах, определенное слово, например, слово «прекрасно». 29 РАЗДЕЛ 1. ТЕОРИЯ КОНЕЧНЫХ АВТОМАТОВ 1. Абстрактная теория автоматов 1.1. Основные понятия теории конечных автоматов 1.1.1. Понятие абстрактного автомата Автоматом в широком смысле слова называют любое устройство, осуществляющее преобразование информации. В зависимости от типа используемых сигналов их можно разделить на непрерывные (с непрерывным уровнем сигнала) и дискретные (с дискретным уровнем сигнала). Наибольшее развитие и применение в практике получили именно дискретные автоматы в силу достаточно стройного математического аппарата на основе булевой алгебры. Поэтому в рамках теории автоматов изучаются в основном теоретические основы дискретных автоматов. В дальнейшем под термином «автомат» будем подразумевать дискретный (или цифровой) автомат. Понятие дискретного, или цифрового автомата было введено академиком В.М. Глушковым [4]: «Электронные цифровые машины с программным управлением представляют собой пример одного из наиболее распространенных в настоящее время типов преобразователей дискретной информации, называемых дискретными или цифровыми автоматами. Поэтому задача синтеза схем электронных цифровых машин с программным управлением входит в качестве частного случая в более общую задачу синтеза схем цифровых автоматов». В свете данного определения термин «автомат» будем использовать в двух аспектах: 1. Автомат – это устройство, предназначенное для выполнения целенаправленных действий без непосредственного участия человека. Например, ЭВМ – автомат, так как после загрузки программы и исходных данных решает заданную задачу без участия человека. 2. Автомат как математическое понятие – это математическая модель реальных технических автоматов. В этом аспекте автомат представляется как «чёрный ящик», имеющий конечное число входов и выходов и некоторое множество внутренних состояний, в которые он переходит под воздействием входных сигналов скачкообразно, минуя промежуточное состояние. Под «цифровым автоматом» понимают устройство, предназначенное для преобразования цифровой информации. Общая теория автоматов разделяется на две части – абстрактную теорию автоматов и структурную теорию автоматов. В абстрактной теории автоматов мы отвлекаемся от структуры, как самого автомата, так и его входных и выходных сигналов. Не интересуясь способом построения автомата, абстрактная теория изучает лишь те переходы, которые претерпевает автомат под воздействием входных сигналов, и те выходные 30 сигналы, которые он при этом выдаёт. Абстрактная теория автоматов является дальнейшей детализацией теории алгоритмов. Автомат изображается чёрным ящиком с одним входом и одним выходом: Z S W Рис. 1.1. Модель абстрактного автомата В структурной теории автоматов, в противоположность абстрактной теории, рассматриваются, прежде всего, структуры, как самого автомата, так и его входных и выходных сигналов. В структурной теории изучаются способы построения автоматов из элементарных автоматов, способы кодирования входных и выходных сигналов элементарными сигналами. Дадим математическое определение абстрактного автомата. Определение 1.1. Математической моделью цифрового автомата является абстрактный автомат, определяемый как пятикомпонентный вектор (кортеж) S = (Z, W, A, , ), у которого: 1) конечное множество Z = {z1(t), … zn(t), … zN(t)} входных сигналов (входной алфавит автомата); 2) конечное множество W = {w1(t), … wm(t), … wM(t)} выходных сигналов (выходной алфавит автомата); 3) произвольное множество A = {a1(t), … ak(t), … aK(t)} состояний автомата (алфавит состояний автомата); 4) функция переходов (a, z) автомата из одного состояния в другое (функция  некоторым парам состояние-входной сигнал (ak, zn) ставит в соответствие состояния автомата as = (ak, zn); 5) функция выходов (a, z) автомата (функция  некоторым парам состояние-входной сигнал (ak, zn) ставит в соответствие выходные сигналы автомата wm = (ak, zn). Если у абстрактного автомата также задано начальное состояние a0(t)A, то такой автомат называют инициальным – S = (Z, W, A, , , a0). Как известно, входные и выходные сигналы кодируются опредёленными символами или буквами. Совокупность взаимно различимых символов (букв) называется алфавитом. Элементы алфавита называются буквами, а конечная упорядоченная последовательность букв – словом в данном алфавите. Пустая последовательность букв (последовательность нулевой длины) будем называть пустым словом e. В начальный момент времени t0 автомат находится в состоянии a0. В каждый момент времени t автомат находится в некотором состоянии a(t) и способен принять входной сигнал z(t) и выдать соответствующий выходной сигнал w(t). Через понятие «абстрактный автомат» реализуется некоторое отображение 31 множества слов входного алфавита Z в множество слов выходного алфавита W. Т.е. если на вход автомата, установленного в начальное состояние a0, подавать буква за буквой некоторую входную последовательность букв z(0), z(1), z(2) – входное слово, то на выходе автомата будут последовательно появляться буквы выходного алфавита w(0), w(1), w(2) – выходное слово. Относя к каждому входному слову соответствующее ему выходное слово, мы получим отображение , индуцированное абстрактным автоматом. На уровне абстрактной теории автоматов понятие «работа автомата» это преобразование входных слов в выходные. Автомат – не более чем преобразователь слов. Абстрагирование от структуры позволяет решить ряд сложных проблем, которые на структурном уровне скрываются за множеством деталей, несущественных с точки зрения поведения всей системы в целом. Понятие «состояния» автомата используется для описания систем, выходы которых зависят не только от входных сигналов в данный момент времени, но и от некоторой предыстории, т.е. сигналов, которые поступали на входы системы ранее. Состояния соответствуют некоторой памяти о прошлом, позволяя устранить время, как явную переменную и выразить выходной сигнал как функцию состояния и входного сигнала в данный момент времени. Известен класс автоматов, у которых выход не зависит от предыстории и в каждый момент времени определяется лишь входным сигналом в тот же момент времени – так называемые комбинационные схемы, или автоматы без памяти. Этот класс автоматов можно рассматривать на абстрактном уровне как автомат с одним состоянием. 1.1.2. Классификация абстрактных автоматов В теории автоматов различают два типа автоматов:  Автомат без памяти (АБП), или в терминах схемотехники – комбинационная схема, в котором значения выходных сигналов в данный момент времени зависят только от значений входных сигналов в тот же момент времени: wj(t) = Fj[zi(t)], i = 1, …, n; j = 1, …, m. Этот класс автоматов можно рассматривать на абстрактном уровне как автомат с одним состоянием и описывать тройкой S = (Z, W, ), где Z и W – входной и выходной алфавиты соответственно, а :ZW – функция выходов.  Автомат с памятью (АСП), или в терминах схемотехники – последовательностная схема, в котором значения выходных сигналов в данный момент времени зависят от значений входных сигналов в этот же момент времени и предшествующие моменты времени: wj(t) = Fj[zi(t), zi(t), zi(t-1), …, zi(0)], i = 1, …, n; j = 1, …, m. Для решения задач анализа и синтеза цифровых автоматов вводится понятие автоматного времени, когда функционирование автомата рассматривается через дискретные интервалы времени конечной продолжительности. По характеру отсчёта дискретного времени автоматы делятся на синхронные и асинхронные. 32 В синхронных конечных автоматах изменения значений сигналов возможны лишь в отдельные фиксированные моменты времени, при этом считается, что изменения происходят за бесконечно малый промежуток времени. На интервалах между моментами времени, в которые возможны изменения, значения всех сигналов сохраняются неизменными. Моменты времени, в которые автомат считывает входные сигналы, определяются принудительно синхронизирующими сигналами. После очередного синхронизирующего сигнала с учётом «считанного» и в соответствии с соотношениями для функционирования автомата происходит переход в новое состояние и выдача сигнала на выходе, после чего автомат может воспринимать следующее значение входного сигнала. Также возможен другой способ задания синхронного автомата, когда сигналы принимают ненулевые значения лишь в фиксированные моменты времени. В обоих случаях, моменты автоматного времени, в которые происходят изменения сигналов или в которые существуют сигналы, разделены равными промежутками времени, называемыми тактами. В реальном автомате такты задаются с помощью специального устройства – генератора тактовых импульсов (синхросигналов). В асинхронных автоматах моменты автоматного времени заранее не определены, не задаются принудительно с помощью ГТИ и зависят от каких-то событий. Асинхронный конечный автомат считывает входной сигнал непрерывно, и поэтому, реагируя на достаточно длинный входной сигнал постоянной величины x, он может, как следует из соотношений для функционирования автомата, несколько раз изменять состояние, выдавая соответствующее число выходных сигналов, пока не перейдёт в устойчивое состояние, которое уже не может быть изменено данным входным сигналом. По объёму памяти автомата различают бесконечные и конечные автоматы. Рассмотренные в теории алгоритмов машины Тьюринга или машины Поста (в машине Тьюринга в отличие от машины Поста ячейки заполняются не просто меткой, а символами из заданного множества) являются бесконечными автоматами, так как имеют неограниченную память на ленте. Конечными автоматами являются отдельные части ЭВМ или вся ЭВМ. Конечный автомат (state machine, дословно переводимое как машина состояний) – математическая модель устройства с конечной памятью, преобразующего дискретную информацию. Множества возможных внутренних состояний, входных и выходных сигналов A, Z и W в конечном автомате конечны. В дальнейшем будем рассматривать только конечные автоматы. По механизму выбора различают детерминированные автоматы, поведение и структура которых в каждый момент времени однозначно определены текущей входной информацией и состоянием автомата, и вероятностные автоматы, где поведение и структура автомата зависят от случайного выбора. По способу формирования функций выходов выделяют автоматы Мили, автоматы Мура, а также совмещённые автоматы. В автомате Мили функция выходов λ определяет значение выходного символа по классической схеме аб33 страктного автомата. Математическая модель автомата Мили и схема рекуррентных соотношений не отличаются от математической модели и схемы рекуррентных соотношений абстрактного автомата. Зависимость выходного сигнала только от состояния представлена в автоматах типа Мура. В автомате Мура функция выходов определяет значение выходного символа только по одному аргументу — состоянию автомата. Эту функцию называют также функцией меток, так как она каждому состоянию автомата ставит метку на выходе. 1.1.3. Способы задания конечных автоматов Основными способами задания конечных автоматов являются:  вербальный,  перечисление последовательностей,  графовый,  формульный,  табличный,  матричный. 1 способ – вербальный. При словесном способе автомат описывается на неформализованном языке. Но и при таком описании необходимо добиться однозначного понимания логики работы автомата: какие входные сигналы и когда поступают, как изменяются внутренние состояния, какие и когда выдаются выходные сигналы. 2 способ – перечисление последовательностей. Предполагает для любого конечного числа моментов автоматного времени перечисление всех возможных последовательностей значений входной переменной и соответствующих им последовательностей значений выходной переменной. Количество последовательностей – 2t, поэтому даже для небольших t такой способ задания автомата громоздок. 3 способ – граф (диаграмма) переходов. Основан на использовании направленного графа – диаграммы переходов. Вершины графа (кружочки) обозначают внутренние состояния автомата, а ребра (стрелки) – возможные переходы автомата из одного состояния в другое. Цифры в кружочках обозначают номер внутреннего состояния, надписи над ребрами отмечают, при каком входном слове совершается этот переход (в числителе) и какое выходное слово при этом формируется (в знаменателе). Описание автомата в виде графа обладает большей наглядностью, чем другие описания, но при большом числе состояний автомата такой способ становится довольно громоздким. 4 способ – формульный. Предполагает введение внутренней переменной автомата A, значения которой называются состояниями автомата. Исходя из этого, автомат Мили задаётся 2 формулами, приведёнными выше. В каждый момент автоматного времени значение выходной переменной w 34 определяется значением входной переменной Z и значением внутренней переменной A в этот же момент времени. Значение же входной переменной и состояние автомата в данный момент времени определяют состояние автомата в следующие моменты автоматного времени. 5 способ – табличный. Предполагает наличие таблиц выходов и переходов. Таблица выхода – каждой паре значений переменных Z и A (автомат Мили) ставится в соответствие значение переменной W. Таблица переходов – каждой паре значений переменных Z и A для одного и того же момента времени ставится в соответствие значение переменной A для следующего t+1 момента времени. 6 способ – матричный. Предполагает использование матрицы переходов размером M×M, в которой каждый элемент матрицы на пересечении m-й строки и s-го столбца соответствует входному сигналу zf, вызывающему переход автомата из состояния am в состояние as с выработкой выходного сигнала wg. 1.1.4. Автоматы Мили и Мура. Совмещённый автомат В теории автоматов наиболее полно описаны синхронные автоматы. В зависимости от способа определения выходного сигнала в синхронных автоматах существует две возможности: 1) выходной сигнал w(t) однозначно определяется входным сигналом z(t) и состоянием a(t-1) автомата в предшествующий момент времени; 2) выходной сигнал w(t) однозначно определяется входным сигналом z(t) и состоянием a(t) в данный момент времени. Следовательно, закон функционирования абстрактного автомата может быть задан двумя способами: 1) для автомата 1-го рода a(t) = (a(t-1), z(t)), w(t) = (a(t-1), z(t)), t = 1, 2 …; 2) для автомата 2-го рода a(t) = (a(t-1), z(t)), w(t) = (a(t), z(t)), t = 1, 2 … (1.1) (1.2) Цифровой автомат называется правильным, если выходной сигнал w(t) определяется только его состоянием a(t-1) или a(t) и не зависит от входных сигналов. Тогда закон функционирования для такого автомата запишем в виде: a(t) = (a(t-1), z(t)), w(t) = (a(t)), t = 1, 2 … (1.3) Рассмотрим, как соотносятся между собой автоматы 1-го и 2-го рода. Пусть произвольный автомат S 2-го рода задан уравнениями (1.2). Для этого автомата построим новую функцию: 35 1(a1,z) = ((a(t-1), z(t)), z(t)). На основании закона функционирования (1.2) w(t) = ((a(t-1), z(t)), z(t)) = 1(a(t-1), z(t)). (1.4) Получаем новый автомат R первого рода, заданный той же функцией перехода (a, z) и функцией выходов 1(a,z). Таким образом, для каждого автомата S 2-го рода существует эквивалентный ему абстрактный автомат R 1-го рода, функция выходов которого получается в результате подстановки функции переходов автомата S в его сдвинутую функцию выходов: 1(a,z) = ((a, z), z). Произвольный автомат 1-го рода обычно называют автоматом Мили (по имени американского ученого G.H.Mealy), а правильный автомат 2-го рода – автоматом Мура (по имени E.F.Moore). Закон функционирования автомата Мили задаётся уравнениями: a(t+1) = (a(t),z(t)); w(t) = (a(t),z(t)), t = 0,1,2... Автоматами Мура называют автоматы, у которых выход зависит только от состояния, и не зависит от значения входа: a(t+1) = (a(t),z(t)); w(t) = (a(t)), t = 0,1,2... Таким образом, в автоматах Мили значение выходной переменной в момент времени t зависит и от значения входной переменной в момент времени t, и от состояния автомата в момент времени t; в автоматах Мура значение выходной переменной в момент времени t зависит только от состояния автомата в момент времени t и не зависит от значения входной переменной в момент времени t. Пример 1.1. Описание работы автомата Мили таблицами переходов и выходов иллюстрируется на примере автомата S1 (табл.1.1–1.2). Строки соответствуют входным сигналам, столбцы – состояниям. На пересечении столбца am и строки zf в таблице переходов ставится состояние, в которое автомат переходит из состояния am под действием сигнала zf, а в таблице выходов – соответствующий этому переходу выходной сигнал wg =(am, zf) Таблица 1.1. :AZA a1 a2 a3 z1 a2 a3 a2 z2 a3 a2 a1 Таблица 1.2. : AZW a1 a2 a3 z1 w1 w3 w3 z2 w2 w1 w1 Так как в автомате Мура выходной сигнал зависит только от состояния, автомат Мура задаётся одной отмеченной таблицей переходов, в которой каждо36 му её столбцу приписан кроме состояния am ещё и выходной сигнал wg =(am), соответствующий этому состоянию. Пример 1.2. Пример автомата Мура S2 иллюстрируется табл.1.3. Таблица 1.3. :AZA, : AZW w1 w1 w3 w2 a1 a2 a3 a4 z1 a2 a5 a5 a3 z2 a4 a2 a2 a1 w3 a5 a3 a1 Автомат называется частичным, или не полностью определённым, если функции  и  определены не для всех пар (am, zf) AZ. В таблице на месте неопределённых состояний и выходных сигналов ставится прочерк. Иногда при задании автоматов Мили используют совмещённую таблицу переходов и выходов. Частичный автомат Мили S3 задан табл.1.4. Таблица 1.4. :AZA, : AZW a1 a2 a3 z1 a2/ w1 a3/ w3 a2 / w3 z2 a3/ w2 a2/ w1 a1/ w1 С помощью таблиц можно задать только детерминированный автомат. Детерминированным автоматом называется автомат, у которого выполнено условие однозначности переходов: автомат, находящийся в некотором состоянии, под действием любого входного сигнала не может перейти более чем в одно состояние. Для диаграмм переходов условие однозначности означает, что из любой вершины не могут выходить две и более дуг, отмеченных одним и тем же входным сигналом. На основании этих двух моделей строится совмещённая модель автомата (С-автомат). Определение 1.2. Абстрактный С-автомат – это математическая модель дискретного устройства, для которого заданы следующие параметры: 1) Z = {z1(t), … zn(t), … zN(t)} – входной алфавит; 2) W = {w1(t), … wm(t), … wM(t)} – выходной алфавит типа 1; 3) U = {u1(t), … ul(t), … uL(t)} – выходной алфавит типа 2; 4) A = {a1(t), … ak(t), … aK(t)} – множество состояний; 5) a0(t)A – начальное состояние автомата; 6) : AxZ A – функция переходов, реализующая отображение D  AxZ на A; 7) 1: AxZ W – функция выходов, реализующая отображение D1  AxZ на W; 8) 2: A U – функция выходов, реализующая отображение D2  A на U. 37 Абстрактный С-автомат можно представить в виде устройства с одним входом, на который поступают сигналы из входного алфавита Z, и двумя выходами, на которых появляются сигналы из алфавитов W и U (рис. 1.2). Отличие С-автомата от моделей Мили и Мура состоит в том, что он одновременно реализует две функции выходов 1 и 2, каждая из которых характерна для этих моделей в отдельности. z(t) z(t)  a(t+1) память 1 w(t) 2 u(t) a(t) Рис. 1.2. Совмещённый автомат С-автомат можно описать следующей системой уравнений: a(t+1) = (a(t), z(t)); w(t) = 1(a(t), z(t)); u(t) = 2(a(t)). (1.5) Выходной сигнал u = 2(as) выдаётся все время, пока автомат находится в состоянии as. Выходной сигнал w = 1(as , zn) выдаётся во время действия входного сигнала zn при нахождении автомата в состоянии as. От С-автомата легко перейти к автоматам Мили или Мура (с учётом возможных сдвигов во времени на 1 такт), так же как возможна трансформация автомата Мили в автомат Мура и наоборот. 1.1.5. Связь между автоматными моделями Мили и Мура Между моделями Мили и Мура существует соответствие, позволяющее преобразовать закон функционирования одного из них в другой и обратно. Такое преобразование порождает пару описаний законов функционирования, эквивалентных в том смысле, что им соответствует одинаковая зависимость между входной Z и выходной W последовательностями. Два автомата с одинаковыми входными и выходными алфавитами называются эквивалентными, если после установления их в начальные состояния их реакции на любое входное слово совпадают. Существует возможность для автомата Мура построить эквивалентный ему автомат Мили и наоборот. Преобразование автомата Мура в автомат Мили Преобразование (рис.1.3) достаточно просто. Выходной сигнал, записанный рядом с вершиной, переносится на все дуги, входящие в эту вершину. 38 wf am zf as am wf zf as Рис. 1.3. Преобразование автомата Мура в автомат Мили Преобразование автомата Мили в автомат Мура Для преобразования автомата Мили SA = (AA, ZA, WA, A, A, a1A) в автомат Мура SB = (AB, ZB, WB, B, B, a1B) каждому состоянию asAA автомата Мили поставим в соответствие множество As всевозможных пар вида (as, wg), где wg – выходной сигнал, приписанный входящей в as дуге (рис.1.4): As = {( as, wg)  A(am, zf) = as и A(am, zf)= wg} Число элементов в множестве As равно числу различных выходных сигналов на дугах автомата SA , входящих в состояние as. Множество состояний автомата Мура SA получим как объединение множеств As. Каждому состоянию автомата Мура SB, представляющему собой пару вида (as, wg), поставим в соответствие выходной сигнал wg. Если в автомате Мили был переход am  as и выдавался сигнал wk , то в автомате Мура будет переход из множества состояний Am , порождаемых am, в состояние (as, wk) под действием того же входного сигнала. am,wj wi wj am zf wk as Am zf zf wk as,wk am,wj Рис. 1.4. Преобразование автомата Мили в автомат Мура 1.2. Определение совместимости состояний частичных автоматов 1.2.1. Покрытие, совместимость состояний и задача минимизации частичного автомата Задача минимизации состояний частично определённого автомата представляет большой интерес, поскольку к её математической постановке – нахождению минимального замкнутого покрытия сводится большое количество задач, в том числе и не относящихся к теории автоматов. Прежде чем сформулировать задачу и основные этапы минимизации частичного автомата, дадим ряд определений. Определение 1.3. Входное слово  = zi1 …. zik называется допустимым для автомата S в состоянии am, если: 1) функция переходов (aij,zij) определена для всех j = 1, …,k-1; ai1 = am, aij+1 = = (aij,zij); 2) определён заключительный выход ~ (am,) = (aik,zik). 39 Соответствующая допустимому входному слову последовательность состояний, определяемая функцией переходов, не содержит неопределённого состояния. Пример 1.3. Для автомата S4, заданного табл. 1.5 и 1.6, входное слово z3z2z3z1z4 допустимо в состоянии а1: Входное слово Последовательность состояний Выходное слово Таблица 1.5. : АхZA a1 a 2 a3 a4 a5 z1 a2 a 3 a3   z2  a 5 a4 a1  z3 a3 a 2  a2 a1 z4 a2  a5   z3 a1 – z2 a3 w2 z3 a4 – z1 z 4 a2 a 3 w1 w1 a5 Таблица 1.6. : АхZW a1 a2 a3 a4 a5 z1 w1 w1 w1   z2 w2 w2 w2 w2  z3  w1   w2 z4 w1  w1   Входные слова z3z4z3z2z1 и z4z1z2z2z3 в состоянии a1 не являются допустимыми, так как при поступлении первого из них не определена последовательность состояний, а при поступлении второго не определён заключительный выход: Входное слово z4 z1 z2 z2 z3 Последовательность a1 a2 a3 a4 a1 a3 состояний Выходное слово w1 w1 w2 w2 – Входное слово Последовательность состояний Выходное слово z3 z4 z3 z2 z1 a1 a3 a5 a1 – – w1 w2 w2 – Определение 1.4. Состояние am’ автомата S’ покрывает состояние am автомата S, если: 1) любое входное слово, допустимое для S в состоянии am, допустимо и для S’ в состоянии am’; 2) при приложении к S в am и к S’ в am’ вызывает одинаковые реакции там, где выходные сигналы определены. Определение 1.5. Автомат S’ покрывает автомат S, если для каждого состояния am автомата S имеется не менее 1 состояния am’ автомата S’, покрывающего состояние am. Дадим определение совместимости двух состояний. Определение 1.6. Два состояния am и as автомата называются совместимыми (am~as), если при подаче любого допустимого в этих состояниях входного слова получаемые выходные слова непротиворечивы, т.е. совпадают там, где оба определены. Исходя из этого, для практического нахождения совместимых состояний с 40 помощью итеративной процедуры можно предложить следующее утверждение. Утверждение. Два состояния am и as автомата совместимы, если: 1) (am, zf) = (as, zf) для любого zfZ, для которого оба выхода определены (условие совместимости по выходу) 2) (am, zf) ~ (as, zf) для любого zfZ, для которого оба следующих за am и as состояния определены (условие совместимости по переходу) Свойства совместимых состояний Рефлексивность: am ~ am, Симметричность: am ~ as => as ~ am, Нетранзитивность: am ~ ak & ak ~ as > am ~ as . Среди совместимых состояний можно выделить не только пары, но и целые классы. Определение 1.7. Классом совместимости (КС) называется множество состояний CA, в котором все состояния попарно совместимы. Определение 1.8: Максимальным классом совместимости (МКС) называется класс совместимости, не содержащийся ни в каком другом классе совместимости. Определение 1.9: Множество состояний C следует за множеством B по входу zf, если С = (B, zf) = {as  as = ( am, zf), amB} Множество состояний, следующих за классом совместимости, также является классом совместимости. Задачу минимизации частичного автомата S можно сформулировать как задачу поиска автомата S', который среди всех автоматов, покрывающих S, имеет наименьшее число состояний. Серьезным вкладом в решение этой задачи является метод Полла-Ангера, использующий идею так называемого минимального замкнутого покрытия. Первым шагом минимизации автомата должно быть удаление недостижимых состояний, т.е. состояний, в которые автомат не может перейти из начального состояния ни при каких входных словах. Далее процесс минимизации частичных автоматов включает в себя четыре основных этапа: 1. Получение всех совместимых пар состояний автомата. 2. Нахождение всех максимальных классов совместимости. 3. Нахождение минимального замкнутого покрытия. 4. Получение по минимальному замкнутому покрытию нового автомата. 41 Рассмотрим последовательно эти этапы. Сначала рассмотрим алгоритм получения совместимых пар состояний. 1.2.2. Алгоритм получения совместимых пар состояний Полла-Ангера В качестве исходных данных выступают таблицы переходов и выходов. Алгоритм основан на построении треугольной таблицы, столбцы и строки которой сопоставляются с состояниями автомата. Вид таблицы обусловлен рефлексивностью и симметричностью отношения совместимости – не нужно проверять совместимость состояния самого с собой и совместимость двух состояний дважды: am ~ as и as ~ am. 1 этап. Определение несовместимых по выходу пар состояний. Если состояния am и as несовместимы по выходу, то на пересечении строки m и столбца s ставится (крест). 2 этап. Заполнение таблицы условиями совместимости. Если состояния am и as совместимы без дополнительных условий, т.е. за (am, as) не следуют пары, отличные (am, as), то на пересечении строки m и столбца s ставится (птичка). Если для совместимости пары (am, as) необходима совместимость других пар, то на пересечении строки m и столбца s ставится множество всех пар состояний, следующих за парой (am, as). 3 этап. Нахождение несовместимых и совместимых пар состояний. Таблица просматривается по столбцам. 1. Находится клетка (i.j), отмеченная крестом. 2. Во всех клетках, где в качестве условия есть пара (i.j), тоже ставится крест. 3. Рассмотренная клетка (i.j) помечается вторым крестом. 4. Процедура проводится для всех клеток, включая новые, отмеченных одним крестом, пока не останется таких клеток. 5. Клетки с крестами соответствуют несовместимым парам состояний, оставшиеся клетки без крестов – совместимым парам. Пример 1.4. На основании табл.1.5, 1.6 строим треугольную таблицу для автомата S4 (рис.1.5). 2 3 4 5 2.3 2.3 4.5 2.5 2.3 1.5 1.4   1.3 1.2 1 2 3 4 Рис. 1.5. Треугольная таблица По выходу несовместима одна пара – 2.5. Ищем среди условий совместимости пару 2.5 – оно находится в клетке 1.3. Вычеркиваем её, а клетку 2.5 помечаем вторым крестом (рис.1.6). 42 Ищем среди условий 1.3 – это клетка 1.5. Вычеркиваем её, а клетку 1.3 помечаем вторым крестом. Ищем среди условий 1.5 – это клетка 2.4. Вычеркиваем её, а клетку 1.3 помечаем вторым крестом. Ищем среди условий 2.4 – нет таких клеток. Клетку 2.4 помечаем вторым крестом. Заканчиваем просмотр. 2 3 2.3 2.3 4.5 2.5 4 2.3 1.5 1.4  5 1.3  1.2 1 2 3 4 Рис. 1.6. Поиск несовместимых состояний Таким образом, несовместимыми парами оказались: 1~3, 1~5, 2~4, 2~5 Оставшиеся пары совместимы: 1~2, 1~4, 2~3, 3~4, 3~5, 4~5 После нахождения совместимых пар состояний обычно вычисляются все максимальные классы совместимости. 1.2.3. Алгоритм нахождения максимальных классов совместимости Аналогично совместимости состояний можно ввести понятие совместимости множества и состояния. Определение 1.10. Множество состояний BA совместимо с некоторым состоянием amA (обозначается am ~ B), если am ~ as для любого as B. Пример 1.5. Рассмотрим алгоритм Ангера для нахождения максимальных классов совместимости на примере автомата S4. 1 этап. Составление списка Ф классов совместимости, начиная с совместимых пар в крайнем правом столбце. В примере это класс {4,5}. Значит, Ф={{4,5}}, или упрощенно Ф={ 4.5 }. 2 этап. Выписывание справа налево для каждого i-го столбца множества состояний Аi ai, соответствующих клеткам без крестов в i-ом столбце таблицы. В примере 3{4,5} (в третьем столбце таблицы нет крестов в строках 4 и 5). 3 этап. Пересечение Аi с каждым членом текущего списка Ф. В примере А3 = {4,5} и список Ф содержит единственный элемент {4, 5}: {4,5}{4,5}={4,5}. 4 этап. Если такое пересечение содержит более одного состояния, то добавляем в список объединение {ai} с результатом пересечения: {3}{4,5}={3,4,5}; Ф={{4,5},{3,4,5}}. 5 этап. Максимизация полученного множества Ф, т.е. устранение всех по- 43 вторений множеств в текущем списке и удаление всех подмножеств: Ф={{3,4,5}}. 6 этап. Добавление в список всех пар, состоящих из ai и различных состояний из Аi, и не являющихся подмножествами других членов списка Ф В примере при i = 3 таких добавлений нет. Приведём полностью результат применения 2-6 этапа ко всем столбцам: Ф={{4,5}}; {3{4,5}, Ф={{3,4,5}}; {2{3}, Ф={{3,4,5},{2,3}}; {1{2,4}, Ф={{3,4,5},{2,3},{1,2},{1,4}} 7 этап. Добавление в список Ф всех одноэлементных множества, состоящих из состояний, не включённых ни в какие другие максимальные классы совместимости (в нашем примере таких нет). Результирующий список Ф является списком всех максимальных классов совместимости. Для рассмотренного автомата множество всех максимальных классов совместимости Ф={{3,4,5},{2,3},{1,2},{1,4}}. 1 2 5 4 Граф совместимости для автомата S4 приведён на рис. 1.7. 3 Рис. 1.7. Граф совместимости автомата S4 1.2.4. Минимальное замкнутое покрытие Состояния из одного класса совместимости могут быть объединены в одно состояние. При этом в таблице выходов объединяемые столбцы просто заменяются одним столбцом, в котором в строке zf записывается выходной сигнал, стоящий в этой строке хотя бы в одном из этих столбцов. Если во всех столбцах стоит прочерк, то в этой строке тоже ставится прочерк. Например, если в автомате S4 объединить МКС {3,4,5}, то получим следующий новый столбец: b1 w1 w2 w2 w1 z1 z2 z3 z4 Таблица переходов получается сложнее. Дело в том, что за классом {3,4,5} следуют по входу z2 класс {1,4}, по входу z3 класс {1,2}. Это значит, что для детерминированности автомата в результате совмещения состояний {3,4,5} необходимо также совместить состояния {1,4} и {1,2}. Совмещение же {1,4} потребует совмещения {2,3}, а совмещение {1,2} – тоже {2,3}, и т.д. Возникает цеп44 ная зависимость. Введём понятие цепи. Определение 1.11. Цепью B, порождённой множеством состояний C, называется система множеств, в которой: 1. С – элемент цепи. 2. Если Q – элемент цепи, то следующие за Q множества, содержащие более 1 элемента, тоже элементы цепи. 3. Множества, входящие в другое множество, вошедшее в цепь, исключаются из цепи (производится максимизация цепи). Может оказаться, что количество объединяемых классов будет больше, чем исходное число состояний. Введём понятие замкнутости системы множеств состояний. Определение 1.12. Множество D классов совместимости замкнуто, если для любого класса CB каждый следующий за ним класс содержится, по крайней мере, в одном классе множества D. Цепь, порождённая одним классом совместимости – замкнутое множество. Замкнутое покрытие – это множество классов совместимости, за каждым из которых следует класс, содержащийся хотя бы в одном из классов множества, и включающее в свои классы все состояния множества А. Определение 1.13. Множество D классов совместимости называется покрытием, если оно включает в свои классы все состояния множества А (т.е. D покрывает множество состояний автомата). Определение 1.14. Множество D классов совместимости называется замкнутым покрытием, если D – покрытие, и оно замкнуто. Таким образом,  проблема минимизации числа состояний автомата, сводится к проблеме нахождения замкнутого множества совместимых классов, покрывающего множество состояний исходного автомата и имеющего минимальное число классов совместимости, т.е. к проблеме нахождения минимального замкнутого покрытия. Множество всех МКС всегда есть замкнутое покрытие для данного автомата. Процесс минимизации частичных автоматов по методу Полла-Ангера предполагает три этапа:  нахождение всех максимальных классов совместимости;  нахождение минимального замкнутого покрытия;  получение по МЗП нового автомата. Однако число МЗП может значительно превышать число состояний. По45 этому чаще используют метод простых классов Грассели-Луччио. 1.3. Минимизации числа состояний абстрактного автомата 1.3.1. Минимизация частичных автоматов методом простых классов Грассели-Луччио Метод Грассели-Луччио предполагает поиск минимального замкнутого покрытия рассмотрением подмножества множества классов совместимости – подмножества простых классов, и включает два этапа:  получение множества всех простых классов;  выбор МЗП из простых классов с помощью специальной таблицы. Определение 1.15. Порождённым множеством P класса совместимости C называется множество всех классов Ci, следующих за C, таких, что выполняется: 1) Ci  C 2) Ci  Cj, Cj  P 3) Ci должно содержать больше одного элемента. Определение 1.16. Совместимый класс Cj исключается совместимым классом Ci , если Cj является подмножеством Ci (Cj  Ci) и в то же время Pi  Pj Определение 1.17. Простым классом называется такой класс совместимости, который не исключается никаким другим классом. Простые классы получаются разложением каждого МКС на подклассы и последующей проверкой на принадлежность их к простым классам. Алгоритм получения простых классов 1. Включение в список простых классов МКС с наибольшим числом элементов. Генерация всех подклассов порядка n-1. Вычисление порождённых множеств. 2. Добавление к списку всех максимальных классов совместимости порядка n-1. 3. Генерация всех подклассов порядка n-2 из МКС порядка n и n-1 (и т.д. до генерации подклассов всех порядков). 4. Поиск совокупности простых классов, которая замкнута и является покрытием, и содержит минимальное число классов. Пример 1.6. Для автомата S4 получим таблицу простых классов (табл.1.7). 46 Таблица 1.7. Таблица простых классов Тип класса Простые классы МКС пор. n C1= {3,4,5} Подмножество C1 C2= {3,4} Подмножество C1 C3= {3,5} Подмножество C1 C4= {4,5} МКС пор. n-1 C5= {2,3} МКС пор. n-1 C6= {1,2} МКС пор. n-1 C7= {1,4} Подмножество C1 и C7 C8= {4} Подмножество C5 и C6 C9= {2} Подмножество C6 и C7 C10= {1} Порождённые множества {1,4}, {1,2} {1,4}  {1,2} {4,5} {2,3} {2,3}    Для поиска МЗП строится таблица покрытия и замкнутости. Строкам соответствуют простые классы. Столбцам левой части – состояния, столбцам правой части – порождённые множества. Покрытием будет совокупность простых классов, имеющая крест в каждом столбце левой части. Для замкнутости покрытия необходимо, чтобы эта совокупность удовлетворяла требованиям в правой части. 1.3.2. Алгоритм построения дерева поиска минимального замкнутого покрытия на основе таблицы покрытия и замкнутости 1. Выбирается состояние автомата, содержащееся в минимальном числе простых классов. Все простые классы, содержащие эти состояния, являются начальными, и помещаются в начале дерева (в корне). 2. Генерируется дерево из каждого начального элемента одним из способов: а) в качестве вершины в дерево вносится простой класс, такой, что его порождённое множество непустое и не покрывается множеством простых классов, лежащих на пути, проходящих через этот класс; все возможные комбинации размещаются как ветви на различных путях. б) в качестве вершины вносится простой класс, порождённое множество которого пустое или покрывается множеством простых классов, лежащих на пути из начального элемента в этот класс. Если каждое состояние автомата содержится в одном из классов множества, то это множество простых классов – минимальное замкнутое покрытие. Если есть состояния, которые не содержатся в классах множества, то выбираем состояние, которое содержится в минимальном числе простых классов. Примечание: построение дерева может быть существенно укорочено (т.е. некоторые пути исключены заранее), если учесть, что никакие два различных класса в МЗП несравнимы на включение. 47 Пример 1.7. В нашем примере для автомата S4 построим таблицу покрытия и замкнутости (табл.1.8). Таблица 1.8. Таблица покрытия и замкнутости автомата S4 Простые Порожд 1 2 3 4 5 {1,4} {1,2} {4,5} {2,3} классы мн-ва   C1= {3,4,5} {1,4}, {1,2}   C2= {3,4} {1,4}   C3= {3,5}   C4= {4,5} {1,2}  C5= {2,3} {4,5} C6= {1,2} {2,3}     C7= {1,4} {2,3}   C8= {4}   C9= {2}  C10= {1}            Дерево поиска МЗП иллюстрируется рис. 1.8. 1.2 2.3 3.4.5 4.5 * 1.4 2.3 3.4.5 4.5 2.3 3.4.5 1 4.5 3.4.5 2 3.5 4.5 Рис. 1.8. Дерево поиска МЗП автомата S4 МЗП: A’ = {{1.2},{2.3},{4.5}} Новый автомат будет иметь 3 состояния (табл.1.9–1.10). z1 z2 z3 z4 Таблица 1.9. : АхZA {1.2} {2.3} {4.5} {2.3} {2.3}  {4.5} {4.5} {1.2} {2.3} {1.2} {1.2} {1.2} {4.5}  z1 z2 z3 z4 Таблица 1.10. : АхZW {1.2} {2.3} {4.5} w1 w1  w2 w2 w2 w1 w1 w2 w1 w1  Рассмотрим теперь сквозной пример минимизации числа состояний частичного автомата. 48 Пример 1.8. Минимизировать абстрактный автомат S5, заданный таблицами переходов и выходов (табл.1.11, 1.12). Таблица 1.11. : АхZA Таблица 1.12. : АхZW a1 a2 a3 a4 a5 a1 a2 a3 a4 a5 z 1 a1 a5 a2 z1 w1 w1 w1     z 2 a5 a4 a4 z2 w2 w1      z 3 a2 a2 a4 a1 z3 w2 w2     z4  a4 a1 a3 z4 w2 w2 w2    Решение. Строим треугольную таблицу (рис. 1.9). 2 4.5 3 2.4 2.4 1.4 4 1.5, 4.5, 1.2  1.4 5 1.2 3.4 1.3 2.5 1 2 3 4 Рис. 1.9. Треугольная таблица автомата S5 Крест 2.4. Вычеркиваем в 1.3 и 2.3. Крест 1.3. Вычеркиваем в 3.5. Крест 2.3. Нет вычеркивания. Крест 3.5. Нет вычеркивания. Совместимые состояния: 1~2, 1~4, 1~5, 2~5, 3~4, 4~5 Изображаем граф совместимости (рис.1.10). 1 5 2 4 3 Рис. 1.10. Граф совместимости Нахождение множества МКС: {3}~{4} {2}~{5} {1}~{2,4,5} Ф={{4,5}} Ф={{4,5},{3,4}} Ф={{2,5},{4,5},{3,4}} {2,4,5}{2,5}={2,5} {2,4,5}{4,5}={4,5} {2,4,5}{3,4}={4} {1}{2,5}={1,2,5} {1}{4,5}={1,4,5} Ф={{1,4,5},{1,2,5},{2,5},{4,5},{3,4}}={{1,4,5},{1,2,5},{3,4}} Граф совместимости подтверждает найденные МКС. Цепи: B1.4.5 = {{1,4,5},{1,2,5},{3,4}} 49 B1.2.5 = {{1,2,5},{4,5},{3,4},{1,4}} B3.4 = {{3,4},{1,4},{1,5},{4,5},{1,2},{2,5}} Цепь B1.4.5 включает все состояния, имеет минимальное число классов, множество классов является замкнутым. Следовательно, оно представляет МЗП. Используя метод простых классов, построим таблицу покрытия и замкнутости (табл.1.13). Таблица 1.13. Таблица покрытия и замкнутости автомата S5 Простые Порожд. 1 2 3 4 5 {1,2, {4,5} {3,4} {1,5} 5} классы мн-ва   С1={1,4,5} {1,2,5} С2={1,2,5} {4,5} {3,4} C3={1,4} {1,5} {4,5} {1,2} C4={1,5} {1,2} C5={4,5} {2,5} C6={1,2} {4,5} C7={2,5} {3,4} C8={3,4} {1,4} C9={1}  C10={2}  C11={3}  C12={4}  C13={5}                           Выбираем столбец с наименьшим числом крестов- 3-й (рис. 1.11). 1.4 1.5 4.5 1.4.5 1.2.5 * 1.2.5 1.2 4.5 4.5 3.4 2.5 1.2.5 1.2.5  1.2 3.4 3 1.4.5 2.5 3.4 2 1.4 Рис. 1.11. Дерево поиска МЗП Получили МЗП A’={{3,4},{1,4,5},{1,2,5}} 50                   {1,2} {2,5} {1,4}      Новый автомат: b1={1,2,5}, b2={1,4,5}, b3={3,4} (табл.1.14, 1.15). Таблица 1.14. : BхZB b1 b2 b3 z1 1.2 1.2.5 5 z2 4.5 4.5 4 z3 2 1.2 1.4 z4 3.4 3 1 Таблица 1.15. : BхZW b1 b2 b3 z1 w1 w1 w1 z2 w2 w1 w1 z3 w2 w2 z4 w2 w2 w2 Перекодируем классы состояний в новые состояния (табл.1.16, 1.17). Таблица 1.16. : BхZB b1 b2 b3 z1 b1 b1 b1/ b2 z2 b2 b2 b2/ b3 z3 b1 b1 b2 z4 b3 b3 b1/ b2 Таблица 1.17. : хZW b1 b2 b3 z1 w1 w1 w1 z2 w2 w1 w1 z3 w2 w2 z4 w2 w2 w2 Таким образом, получаем несколько вариантов реализации абстрактного частичного автомата. Особенности минимизации совмещённого автомата (С-автомата) До сих пор рассматривался абстрактный автомат Мили. В совмещённом автомате таблица переходов строится аналогично, как в автомате Мили. Отличие от простого автомата Мили в том, что имеется ещё один выход для автомата Мура. На графе переходов это отмечается дополнительной разметкой состояний значением выходного сигнала автомата Мура, а в таблице выходов – дополнительная строка, ставящая в соответствие состояниям автомата значения выходов автомата Мура. Привязки к входному сигналу здесь уже нет. Сначала проверяется совместимость по выходу автомата Мура. Сравниваем первые две строчки таблицы выходов (строка выходов и строка состояний). Отмечаются крестами в таблице несовместимые состояния. Затем проверяется несовместимость по выходу автомата Мили. Несовместимые состояния также отмечаются крестами. В дальнейшем алгоритм минимизации автомата аналогичен вышерассмотренному. При построении минимизированной таблицы выходов соответственно минимизируется и часть таблицы, соответствующая автомату Мура. 1.3.3. Минимизация полностью определённых автоматов Поскольку в полностью определённом абстрактном автомате все переходы между состояниями и выходы определены, используют отношение эквивалентности вместо рассматриваемого ранее для частичных автоматов отношения 51 совместимости. Определение 1.18. Два состояния называют эквивалентными (am  as), если реакции автомата на всевозможные входные слова  в этих состояниях совпадают: (am, ) = (as, ) Определение 1.19. Два автомата S и S’ одного типа (Мили или Мура) эквивалентны, если для каждого состояния автомата S существует эквивалентное ему состояние автомата S’, и наоборот. Автомат S является минимальным, если из эквивалентности двух его состояний следует их равенство. Таким образом,  задачу минимизации полностью определённого автомата S можно сформулировать как задачу поиска автомата S', который среди всех автоматов, эквивалентных S, имеет наименьшее число состояний. Для минимизации полностью определённого автомата необходимо найти разбиение  множества всех его состояний на непересекающиеся классы эквивалентности, что позволит определить избыточные элементы в множестве состояний A. В минимальном автомате каждый класс эквивалентности можно заменить одним состоянием из этого класса, а остальные состояния удалить. Если каждый класс эквивалентности содержит только одно состояние, то множество A несократимо. Для поиска разбиения  множества состояний полностью определённого автомата на классы эквивалентных между собой состояний можно воспользоваться одним из методов:  уже известный метод Полла-Ангера с построением треугольной таблицы и поиском разбиения  (по аналогии с совместимыми состояниями и множеством максимальных классов совместимости для частичного автомата).  Метод Ауфенкампа-Хона. Пример 1.9. Использование метода Полла-Ангера. Дано: полностью определённый автомат, заданный табл. 1.18, 1.19. Таблица 1.18. : AхZA Таблица 1.19. : AхZW a1 a2 a3 a 4 a5 a6 a1 a2 a3 a4 a5 a 6 z1 a3 a4 a3 a 4 a5 a6 z1 w1 w1 w1 w1 w1 w1 z2 a5 a6 a5 a 6 a1 a2 z2 w1 w1 w2 w2 w1 w1 Построить минимальный автомат. 52 Решение. По методу Полла-Ангера строим треугольную таблицу (рис.1.12), находим эквивалентные состояния, находим разбиение  множества состояний. 2 3.4, 5.6 {3}{4}   3 {1}{2}   4 5.6 5 3.5 4.5, 1.6    Ф={{5.6}} 6 3.6, 2.5  4.6   1.2 Ф={{5.6},{3.4}} 1 2 3 4 5 Ф={{5.6},{3.4},{1.2}}= Рис. 1.12. Минимизация полностью определённого автомата Построение минимального автомата по разбиению  сводится к следующему. 1. В каждом классе эквивалентности разбиения  выбирается по одному элементу, которые образуют множество A’ состояний минимального автомата S’ = (A’, Z, W, ’, ’, a1’), эквивалентного исходному автомату S = (A, Z, W, , , a1). Выберем в нашем примере A’ ={a1, a4, a5}. 2. Функции переходов и выходов автомата S’ определяются на множестве A’xZ. Для этого в таблицах переходов и выходов вычеркиваются столбцы, соответствующие не вошедшим в множество A’ состояниям, а в оставшихся столбцах таблицы переходов все состояния заменяются на эквивалентные из множества A’. Минимальный автомат представлен в табл. 1.20 и 1.21. Таблица 1.20. :A’xZA’ a1 a4 a5 z1 a4 a4 a5 z2 a5 a5 a1 Таблица 1.21. :A’xZW a1 a4 a5 z1 w1 w1 w1 z2 w1 w2 w1 1.3.4. Нахождение разбиения множества состояний методом Ауфенкампа-Хона Рассмотрим подробнее второй метод. Введём ещё одно, более слабое отношение эквивалентности. k Определение 1.20. Два состояния называют k-эквивалентными ( am  as ), если реакции автомата на всевозможные входные слова k длины k в этих состояниях совпадают: (am, k) = (as, k) Если состояния не k-эквивалентны, то они k-различимы. Алгоритм Ауфенкампа-Хона состоит в следующем: 53 Находятся последовательные разбиения 1, 2, …, k, k+1 множества A на классы 1-,2-…, k-, k+1-эквивалентных между собой состояний, до тех пор, пока на некотором k+1-м шаге не окажется, что k+1 = k. В этом случае kэквивалентные состояния окажутся эквивалентными (k = ), а число шагов k при этом не превышает M-1, где M – число состояний исходного автомата. Пример 1.10. Условие из примера 1.9. По методу Ауфенкампа-Хона определяем непосредственно по таблице выходов разбиение 1 на классы 1-эквивалентных состояний, объединяя в 1-эквивалентные классы одинаковые столбцы: 1 = {B1, B2} = {{1,2,5,6},{3,4}}. Два состояния 1-эквивалентны, если их реакции на всевозможные входные слова длины 1 совпадают, т.е. соответствующие этим состояниям столбцы в таблице выходов должны быть одинаковы. Строим таблицу 1 (табл.1.22), заменяя состояния из табл. 1.18 соответствующими классами 1-эквивалентности. Очевидно, что 1-эквивалентные состояния будут 2-эквивалентными, если они переводятся любым входным сигналом также в 1-эквивалентные состояния. По табл. 1.22 получаем разбиение 2 на классы 2-эквивалентных состояний (табл. 1.23). 2 = {C1, C2, C3} = {{1,2},{5,6},{3,4}}. z1 z2 Таблица 1.22. Разбиение 1 состояний автомата S5 B1 B2 a1 a2 a5 a6 a3 a4 B2 B2 B1 B1 B2 B2 B1 B1 B1 B1 B1 B1 z1 z2 Таблица 1.23. Разбиение 2 состояний автомата S5 C1 C2 C3 a1 a2 a5 a6 a3 a4 C3 C3 C2 C2 C3 C3 C2 C2 C1 C1 C2 C2 Аналогично находим 3: 3 = {D1, D2, D3} = {{1,2},{5,6},{3,4}}, т.е. совпадает с 2. 3 =2 =  есть разбиение множества состояний автомата на классы эквивалентных между собой состояний. Результаты обоих методов разбиения совпали. Обозначая, например, b1={1,2}, b2={3,4}, b3= {5,6}, строим новый автомат. При минимизации полностью определённых автоматов Мура вводится понятие 0-эквивалентности состояний и разбиение множества состояний на 0-эквивалентные классы: к такому классу относятся одинаково отмеченные состояния автомата Мура. Если два 0-эквивалентных состояния любым входным сигналом переводятся в два 0-эквивалентных состояния, то они называются 1-эквивалентными. Все дальнейшие классы эквивалентности состояний для автомата Мура определяются аналогично приведённому выше для автоматов Мили. 54 1.4. Композиция и декомпозиция абстрактных автоматов 1.4.1. Параллельное соединение автоматов Существует три основных способа соединения автоматов – параллельное, последовательное и с обратной связью. Параллельное соединение схематично изображено на рис .1.13. Z W1 S1  S2 W=(W1xW2) W2 Рис. 1.13. Параллельное соединение автоматов S1= (A1,Z,W1,1,1) S2= (A2,Z,W2,2,2). Входной алфавит у обоих автоматов один и тот же. Выходы автоматов S1 и S2 соединены с функциональным преобразователем  (АБП), реализующим отображение  : W1xW2W. Результирующим автоматом параллельного соединения двух автоматов S1 и S2 назовем автомат S = (A,Z,W,,), у которого: 1. Множество состояний A = A1xA2 – множество всевозможных пар, первые и вторые компоненты которых есть, соответственно, состояния автоматов S1 и S2: A = {am = (am1,am2) | am1  A1,am2  A2}. 2. Входной алфавит есть входной алфавит Z автоматов S1 и S2. 3. Выходной алфавит W = (W1xW2), где  – заданное отображение. 4. Функция переходов : AZA (AZ) = (1(A1Z), 2(A2Z)). 5. Функция выходов : AZW (AZ) = (1(A1Z), 2(A2Z)). Алгоритм получения результирующего автомата S состоит в следующем. 1. Перебирать по очереди состояния am автомата S (табл.  и ) 2. По состоянию am определить пару состояний am1 и am2 автоматов S1 и S2 (таблица кодировки состояний) 3. По сигналу zf определить новые состояния an1 и an2 (табл. 1 и  2), выходные сигналы wg1 и wg2 (табл. 1 и 2). 4. По новым состояниям an1 и an2 автоматов S1 и S2 определить новое состояние автомата S an (таблица кодировки состояний) 5. По выходным сигналам wg1 и wg2 определить выходной сигнал wg (таблица функции ). 55 6. Выполнять 1-5, пока не будут перебраны все состояния am при всех возможных входных сигналах zf. Пример 1.11. Дано: S1= (B,Z,U,1,1), S2= (C,Z,V,2,2),  : UxVW Таблица 1.24. 1: BхZB Таблица 1.25. 1: BхZU b1 b2 b3 b1 b2 b3 z1 b1 b1 b2 z1 u1 u2 u2 z2 b3 b3 b2 z2 u1 u1 u1 Таблица 1.26. 2: CхZC Таблица 1.27. 2: CхZV Таблица 1.28. : UxVW c1 c1 c2 c1 v1 v2 u1 w1 w2 z1 z2 1. 2. 3. 4. c2 c2 c1 z1 z2 c2 v2 v1 v1 v2 u2 w2 w3 A= BC={(b1, c1), (b1, c2), (b2, c1), (b2, c2), (b3, c1), (b3, c2) = {a1, a2, …, a6} Z= {z1, z2} W= {w1, w2, w3} Функция переходов : AхZA (табл.1.29). Таблица 1.29. : AхZA z1 z2 a1 a2 a3 a4 a5 a6 b1c1 b1c2 b2c1 b2c2 b3c1 b3c2 b1c1 b1c2 b1c1 b1c2 b2c1 b2c2 b3c2 b3c1 b3c2 b3c1 b2c2 b2c1 Например, (a3, z1) = ((b2, c1), z1) = (1(b2, z1), 2(c1, z1)) = (b1, c1) = a1 5. Функция выходов : AхZW (табл.1.30). Таблица 1.30. : AхZW z1 z2 a1 a2 a3 a4 a5 a6 b1c1 b1c2 b2c1 b2c2 b3c1 b3c2 w1 w2 w2 w3 w2 w3 w2 w1 w2 w1 w2 w1 Например, (a3, z1) = ((b2, c1), z1) = (1(b2, z1), 2(c1, z1)) = (u2, v1) = w2 1.4.2. Последовательное соединение автоматов Последовательное соединение можно проиллюстрировать рис. 1.14. Z S1 W1 S2 W Рис. 1.14. Последовательное соединение автоматов S1= (A1,Z,W1,1,1) S2= (A2, W1,W,2,2). 56 В этом случае выходной алфавит автомата S1 является входным алфавитом автомата S2, а выход автомата S2 – выходом результирующего автомата S. Результирующим автоматом последовательного соединения двух автоматов S1 и S2 назовем автомат S = (A,Z,W,,), у которого: 1. Множество состояний A = A1xA2, то есть: A = {am = (am1,am2) | am1  A1,am2  A2}. 2. Входной алфавит есть входной алфавит Z автомата S1: Z=Z. 3. Выходной алфавит есть выходной алфавит автомата S2: W = W. 4. Функция переходов : AZA (AZ) = (1(A1Z), 2(A21(A1Z))). 5. Функция выходов : AZW (AZ) = 2(A21(A1Z)). Алгоритм получения результирующего автомата S состоит в следующем. 1. Перебирать по очереди состояния am автомата S (табл.  и ) 2. По состоянию am определить пару состояний am1 и am2 автоматов S1 и S2 (таблица кодировки состояний) 3. По сигналу zf на входе автомата S1 определить его новое состояние an1 (табл. 1) и выходной сигнал wg1 (табл. 1). 4. По сигналу wg1 на входе автомата S2 определить новое его состояние an2 (табл. 2) и выходной сигнал wg2 (табл. 2). 5. По новым состояниям an1 и an2 автоматов S1 и S2 определить новое состояние автомата S an (таблица кодировки состояний) 6. Выходной сигнал wg2 автомата S2 считать выходным сигналом wg. 7. Выполнять 1-6, пока не будут перебраны все состояния am при всех возможных входных сигналах zf. Пример 1.12. Дано: S1= (B,Z,U,1,1), S2= (C,U,W,2,2) Таблица 1.31 1: BхZB b1 b2 b3 z1 b1 b1 b2 z1 z2 b3 b3 b2 z2 Таблица 1.33. 2: CхUC u1 u2 1. 2. 3. 4. c1 c1 c2 Таблица 1.32. 1: BхZU b1 u1 u1 b2 u2 u1 b3 u2 u1 Таблица 1.34. 2: CхUW c2 c2 c1 u1 u2 c1 w1 w2 c2 w2 w1 A= BC={(b1, c1), (b1, c2), (b2, c1), (b2, c2), (b3, c1), (b3, c2) = {a1, a2, …, a6} Z= {z1, z2} W= {w1, w2} Функция переходов : AхZA 57 Таблица 1.35. : AхZA z1 z2 a1 a2 a3 a4 a5 a6 b1c1 b1c2 b2c1 b2c2 b3c1 b3c2 b1c1 b1c2 b1c2 b1c1 b2c2 b2c1 b3c1 b3c2 b3c1 b3c2 b2c1 b2c2 Например, (a3, z1) = ((b2, c1), z1) = (1(b2, z1), 2(c1, 1(b2, z1))) = (b1, 2(c1, u2)) = (b1, c2) = a2.. 5. Функция выходов : AхZW Таблица 1.36. : AхZW z1 z2 a1 a2 a3 a4 a5 a6 b1c1 b1c2 b2c1 b2c2 b3c1 b3c2 w1 w2 w2 w1 w2 w1 w1 w2 w1 w2 w1 w2 Например, (a3, z1) = ((b2, c1), z1) = 2(c1, 1(b2, z1)) = 2 (c1, u2) = w2. 1.4.3. Соединение автоматов с обратной связью Соединение с обратной связью изображено на рис. 1.15. Z  P V S1 W S2 Рис. 1.15. Соединение автоматов с обратной связью S1= (A1,P,W,1,1) S2= (A2,W,V,2,2). Входной сигнал поступает на функциональный преобразователь , реализующий отображение : ZVZ1 . Нужно отметить, что при соединении автоматов с обратной связью один из автоматов S1 или S2 должен быть автоматом Мура. Допустим, что оба автомата – автоматы Мили. Тогда W2=2(A2W), W=1(A1P) Входной сигнал Z1 первого автомата будет Z1 = (ZV) = (Z2(A2W)) = (Z2(A21(A1P))) Иными словами, Z1 в данный момент времени зависит от Z1 в тот же момент времени, что приводит к нестабильности системы при таком соединении. Если же один из автоматов, например S1, – типа Мура, то W=1(A1) и Z1 = (ZV) = (Z2(A2W)) = (Z2(A21(A1))). Стабильность системы не нарушается. 58 Результирующим автоматом соединения двух автоматов S1 и S2 с обратной связью назовем автомат S = (A,Z,W,,), у которого: 1. Множество состояний A = A1xA2 , то есть A = {am = (am1,am2) | am1  A1,am2  A2}. 2. Входной алфавит есть входной алфавит Z автоматов S1 и S2. 3. Выходной алфавит есть выходной алфавит автомата S1. W= W. 4. Функция переходов : AZA (AZ) = (1(A12(A2))), 2(A21(A1(Z2(A2))))). 5. Функция выходов : AZW (AZ) = 1(A1(Z2(A2))). Алгоритм получения результирующего автомата S состоит в следующем. 1. Перебирать по очереди состояния am автомата S (табл.  и ). 2. По состоянию am определить пару состояний am1 и am2 автоматов S1 и S2 (таблица кодировки состояний). 3. По состоянию am2 определить выходной сигнал vg2 (табл. 2). 4. По сигналу vg2 и сигналу zf определить сигнал pg1 на входе автомата S1 (таблица функции ). 5. По pg1 определить новое состояние an1 (табл. 1) и выходной сигнал wg1 (табл. 1). 6. По сигналу wg1 на входе автомата S2 определить его новое состояние an2 (таблица 2). 7. По новым состояниям an1 и an2 автоматов S1 и S2 определить новое состояние автомата S an (таблица кодировки состояний) 8. Выходной сигнал wg1 автомата S1 считать выходным сигналом wg. 9. Выполнять 1-8, пока не будут перебраны все состояния am при всех возможных входных сигналах zf. Пример 1.13. Дано: S1= (B,P,W,1,1), S2= (C,W,V,2,2),  : ZxVP Таблица 1.37. 1: BхPB p1 p2 b1 b3 b2 b2 b2 b1 Таблица 1.38. 1: BхPW b3 b3 b1 p1 p2 Таблица 1.39. 2: CхWC, 2: CV b1 w1 w3 b2 w2 w1 b3 w1 w2 Таблица 1.40. : ZxVP v1 v2 z1 z2 z3 c1 c2 w1 c1 c2 v1 p1 p1 p1 w2 c2 c2 v2 p2 p2 p1 w3 c1 c1 1. A= BC={(b1, c1), (b1, c2), (b2, c1), (b2, c2), (b3, c1), (b3, c2) = {a1, a2, …, a6} 59 2. Z= {z1, z2, z3} 3. W= {w1, w2, w3} 4. Функция переходов : AхZA. Таблица 1.41. : AхZA z1 z2 z3 a1 b1c1 b3c1 b3c1 b3c1 a2 b1c2 b2c1 b2c1 b3c2 a3 b2c1 b2c2 b2c2 b2c2 a4 b2c2 b1c2 b1c2 b2c2 a5 b3c1 b3c1 b3c1 b3c1 a6 b3c2 b1c2 b1c2 b3c2 Например, (a3, z1) = ((b2, c1), z1) = (1(b2, (z1,2(c1))), 2(c1, 1(b2,(z1,v1)))) = (1(b2, p1), 2(c1, 1(b2,p1))) = (b2, 2(c1, w2) = (b2, c2) = a1. 5. Функция выходов : AхZW. Таблица 1.42 : AхZW z1 z2 z2 a1 a2 a3 a4 a5 a6 b1c1 b1c2 b2c1 b2c2 b3c1 b3c2 w1 w3 w2 w1 w1 w2 w1 w3 w2 w1 w1 w2 w1 w1 w2 w2 w1 w1 Например, (a3, z1) = ((b2, c1), z1) = 1(b2, (z1, 2(c1))) = 1(b2, (z1, v1)) = 1(b2, p1) = w2. 1.4.4. Сеть автоматов. Композиция и декомпозиция автоматов В качестве модели, описывающей совместную работу совокупности автоматов, в алгебраической теории автоматов используется сеть автоматов. Сеть автоматов – это шестерка N = (Z, {Si}, W, {fi}, {i}, g), где: 1. X – входной алфавит. 2. {Si=(Ai, Zi, i)}, 1in – множество компонентных автоматов (КА) сети. КА Si – полуавтомат, Zi – его входной алфавит:  Z '  Z '' при Z i'   Z i   i '' i '   Z i при Z i   Zi’ – внутренний входной алфавит Si, Zi’’ – внешний входной алфавит Si Функция переходов Si i: Ai x Zi Ai 3. W – выходной алфавит сети. 4. {fi:(xAj)Zi’}, 1i,jn – множество функций соединения компонентных автоматов сети. 5. {i:ZZi’’}, 1i,n – множество входных функций. 6. g: (xAi) x ZW – выходная функция сети. Множество {Si} – базис сети, {fi} - структура сети. 60 Определённую таким образом сеть можно рассматривать как общую модель совместной работы совокупности автоматов. Сеть из n компонентов представлена на рис. 1.16. Z Z1’’ . . . f1 Z1’ S1 n 2 1 Z2’’ A1 . . . f2 Z2’ S2 Zn’’ A2 ... . . . fn Zn’ An-1 Sn An . . . g W Рис. 1.16. Сеть автоматов Для сети N можно строить функционально эквивалентный ей автомат SN, который будем называть результирующим автоматом сети N. Определение 1.21. Результирующим автоматом сети N = (Z, {Si}, W, {fi}, {i}, g) называется автомат SN = (AN, ZN, WN, N,  N), у которого: 1. Множество состояний AN = xAi , i = 1,…,n. 2. Входной алфавит ZN = Z . 3. Выходной алфавит WN = W . 4. Функция переходов N: AN ZN AN (AZ) = (1(A12(A2))), 2(A21(A1(Z2(A2))))). 5. Функция выходов: в модели Мили: N: AN ZN WN, N(am, zf) = g((am1, …., amn), zf); в модели Мура: N: AN WN, N(am) = g(am1, …., amn). Под задачей композиции автоматов понимается задача нахождения для сети N её результирующего автомата SN. Под задачей декомпозиции автомата S понимается задача построения сети N, такой, что её результирующий автомат SN реализует заданный автомат S, т.е. SN = R(S). Определение 1.22. Автомат S называют реализацией автомата S’ (S=R(S’)), если у автомата S существует подавтомат, изоморфный S’. Таким образом,  если автомат S реализует автомат S’, то поведение S с точностью до обозначений совпадает с поведением S’ на области определения S’ , так как у автомата S должен быть некоторый подавтомат S’’, изоморфный S’. 61 Определение 1.23. Автоматы S и S’ называют изоморфными, если существуют три взаимно-однозначных отображения 1: AA’, 2: ZZ’, 3: WW’ таких, что 1((am, zf)) = ’(1(am), 2(zf)), 3((am, zf)) = ’(1(am), 2(zf)) для любых amA и zfZ. Тройку отображений 1, 2, 3 называют гомоморфизмом автоматов S и ’ S. Кратко изоморфизм формулируется следующим образом: образ функции равен функции образов. 62 2. Структурная теория автоматов 2.1. Структурные автоматы и их анализ 2.1.1. Основные задачи структурной теории автоматов В рамках структурной теории автоматов решаются следующие задачи: 1) структурный синтез автоматов; 2) структурный анализ автоматов. При проектировании автоматов вслед за этапом абстрактного синтеза автоматов следует этап структурного синтеза. Его целью является построение схемы, реализующей автомат из логических схем заданного типа. Если абстрактный автомат был лишь математической моделью проектируемого устройства, то в структурном автомате учитывается структура входных и выходных сигналов автомата, а также его внутренне устройство на уровне логических схем. Основной задачей структурной теории автоматов является разработка общих методов построения структурных схем автоматов на основе композиции элементарных автоматов, принадлежащих заранее заданному типу. Если в абстрактном автомате мы использовали математическое описание модели без привязки к структуре сигнала, то в структурном автомате рассматривается структура входных и выходных сигналов, а также внутреннее устройство на уровне элементов и их связей. Автоматы Мили и Мура можно задать в виде рис.2.1 и 2.2. Рис. 2.1. Автомат Мили Рис. 2.2. Автомат Мура Смешанный автомат (С-автомат) задаётся в виде рис.2.3. 63 Рис. 2.3. С-автомат При этом каждый из выходов соответствует своему типу автомата – автомата Мили или автомата Мура. Структурный автомат смешанного типа (С-автомат) можно представить в виде совокупности следующих элементов:  комбинационной схемы 1 (КС1), на вход которой поступают внешние входные сигналы xi и сигналы с выходов элементов памяти;  комбинационной схемы 2 (КС2), на вход которой поступают сигналы с выходов элементов памяти;  самих элементов памяти (П1), на вход которых поступают сигналы возбуждения i с выходов КС1;  связей между элементами. Выходные сигналы автомата ri и yi снимаются соответственно с КС1 и КС2. Его можно представить в следующем виде (рис.2.4): y1 y2 : y N x1 x2 : xL КС1 1 2 П1 П2 : R q1 q2 : ПR r1 КС2 r2 : rD qR Рис. 2.4. Общая структура автомата Таким образом, основные компоненты структурного автомата делятся на элементарные автоматы без памяти и элементарные автоматы с памятью. 64 2.1.2. Элементарные автоматы без памяти Определение 2.1. Автомат без памяти (АБП), или в терминах схемотехники – комбинационная схема, – это автомат, в котором значения выходных сигналов в данный момент времени зависят только от значений входных сигналов в тот же момент времени: yj(t) = Fj[xi(t)], i = 1, …, n; j = 1, …, m. Определение 2.2. Оператор, реализуемый автоматом без памяти, называется истинностным оператором (ИО). В АБП значение выходной переменной в каждый момент автоматного времени определяется значением входной переменной в тот же момент времени, значит, время можно исключить из функциональной зависимости: y = F(x). Функциональная зависимость между значениями входной и выходной переменных может быть задана с помощью таблицы, в которой указаны все значения входной переменной и каждому значению входной переменной поставлено в соответствие значение выходной переменной. Пусть автомат имеет n входов, на которые поступают двоичные переменные xi (1in) и m выходов, с которых снимаются выходные двоичные переменные yj(1jm). Каждая выходная переменная является функцией входных переменных. yj = fj(x1, x2, …xn). АБП с двоичными входными и выходными переменными, при n входах может иметь k = 2n комбинаций входных наборов переменных и m = 2k выходных переменных. Однако, на выходах АБП, как правило, реализуются лишь некоторые двоичные функции требуемого вида. Функциональная зависимость каждой выходной переменной от входных переменных может быть задана одним из способов. Первый способ. Задание преобразования, реализуемого АБП, в виде таблицы истинности: x1 x2 … xn y1 y2 … ym Поскольку выходные переменные являются двоичными функциями 2-х аргументов, задание ИО может быть выполнено с использованием математического аппарата двоичных функций. Второй способ. Функциональная зависимость для каждой выходной переменной задаётся в виде формулы (СДНФ или СКНФ), а в целом ИО задаётся в виде системы m уравнений: y1 = f1(x1;x2; … ; xn) y2 = f2(x1;x2; … ; xn) ……… ym = fm(x1;x2; … ; xn) 65 Третий способ. Цифровая модификация второго способа – номера наборов переводятся в десятичную систему счисления и записываются в формулу. СДНФ представляется в виде десятичных номеров наборов – конституент единицы. Номера наборов можно списать с таблицы или из формулы заменой хi на 1 и хi на 0. y = x1x2x3 V x1x2x3 V x1x2x3 = 7  (3,5,6) Индексы 0 и 7 показывают, что в таблице всего восемь наборов (от 0 до 7). По индексам видно, сколько аргументов у функции. СКНФ представляется в виде произведения десятичных номеров наборов – конституент нуля. Но при получении номеров необходимо заменить значения аргументов функции на обратные: 0 на 1, а 1 на 0 (в силу свойства двойственности). 7 y = (x1vx2vx3) V(x1vx2vx3) V(x1vx2vx3) =  (1,5,6) . Для недоопределённых функций дополнительно пишется значок , и номера факультативных наборов пишутся отдельно. Таким образом, мы рассмотрим три формализованных способа задания истинностного оператора. Кроме того, иногда используется неформализованный способ задания – с помощью вербального описания (например, при составлении формулы изобретения). Из теории двоичных функций известно, что любая сколь угодно сложная двоичная функция двоичных аргументов может быть получена путём выполнения операции суперпозиции с использованием более простых функций, образующих функционально полную систему. Следовательно, любая сложная функция на выходе автомата может быть получена путём последовательного подключения выходов одних автоматов к выходам других. Определение 2.3. Элементарным автоматом без памяти (ЭАБП) называется автомат, реализующий одну из функций функционально полной системы двоичных функций и используемый для построения автоматов, реализующих сколь угодно сложные двоичные функции. Автоматы без памяти служат математическими моделями для логических схем – электронных устройств, реализующих одну из логических функций. Таблица истинности для функции двух переменных содержит 22 набора входных переменных и 24 различных логических функций, реализуемых на выходе АБП (табл.2.1). Таблица № x1 x2 0 0 0 1 0 1 2 1 0 3 1 1 2.1. Таблица истинности АБП на два входа y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 y10 y11 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 66 y12 1 1 y13 1 1 1 y14 1 1 1 y15 1 1 1 1 Автомат без памяти, реализующий определённую логическую функцию, имеет собственное обозначение. Условные графические обозначения АБП на два входа приведены на рис.2.5. const 0 0 y=0 дизъюнкция 1 const 1 1 y=0 тавтология x 1 y=x инверсия x 1 y=x конъюнкция & запрет по x1 запрет по х2 неравнозначност эквиваленция ь x1 x1 y & y & M2 = x2 x2 импликация из х1 импликация из х2 Стрелка Пирса Штрих Шеффера 1 1 1 & Рис. 2.5. Элементарные автоматы без памяти Приведем перечень названий элементарных АБП на два входа и соответствующих им логических функций. 0. Генератор 0 – y0 – функция константа 0. 1. Конъюнктор (схема И, совпадения) – y1 – функция конъюнкция (операция И – логического умножения). 2. Схема запрета по x2 – y2 – функция запрета по x2 (операция НЕТ по x2) 3. Усилитель формирователь – y3 – тавтология x1. 4. Схема запрета по x1 – y4 – функция запрета по x1 (операция НЕТ по x1). 5. Усилитель формирователь – y5 – тавтология x2. 6. Схема сложения по модулю 2 (отрицания равнозначности) – y6 – функция неравнозначности или сложения по модулю 2 (операция отрицания равнозначности). 7. Дизъюнктор (схема ИЛИ, собирательная схема) – y7 – дизъюнкция (операция ИЛИ – логического сложения). 8. Схема ИЛИ-НЕ – y8 – функция Даггера или стрелка Пирса (операция ИЛИНЕ – Пирса). 9. Схема равнозначности – y9 – эквиваленция (операция равнозначности). 10. Инвертор (схема НЕ) – y10 – инверсия x2. 11. Схема следования из x2 (ДА по x2 ) – y11 – импликация из x2 (операция следования из x2). 12. Инвертор (схема НЕ) – y12 – инверсия x1. 67 13. Схема следования из x1 (ДА по x1 ) – y13 – импликация из x1 (операция следования из x1). 14. Схема И-НЕ – y14 – функция Шеффера (операция И-НЕ – штрих Шеффера). 15. Генератор 1 – y15 – константа 1. 2.1.3. Элементарные автоматы с памятью Определение 2.4. Автомат с памятью (АСП), или в терминах схемотехники – последовательностная схема, – это конечный автомат, в котором значения выходных сигналов в данный момент времени зависят от значений входных сигналов в этот же момент времени и предшествующие моменты времени: yj(t) = Fj[xi(t), xi(t), xi(t-1), …, xi(0)], i = 1, …, n; j = 1, …, m. Таким образом,  в автоматах Мили значение выходной переменной в момент времени t зависит и от значения входной переменной в момент времени t, и от состояния автомата в момент времени t.  В автоматах Мура значение выходной переменной в момент времени t зависит только от состояния автомата в момент времени t и не зависит от значения входной переменной в момент времени t. Понятие конечного автомата определяется как совокупность двух понятий – схемы и оператора, реализуемого схемой. Определение 2.5. Оператор называется детерминированным оператором, или оператором без предвосхищения, если при любом t g(t) является однозначной функцией от слова f(1)f(2)…f(t-1)f(t). Определение 2.6. Детерминированный оператор называется ограниченным (ограниченно-детерминированным) оператором, или оператором с конечной памятью, если среди его остаточных операторов имеется лишь конечное число попарно различимых операторов, в противном случае он называется неограниченным. С помощью ограниченно-детерминированного оператора (ОДО) выражаются зависимости выходной переменной АСП от внутреннего состояния и входной переменной в тот же момент времени. Количество состояний автомата (а значит, внутренней переменной), называется весом ОДО (К). Существует несколько способов описания ОДО: 1) словесно, например: выходная переменная принимает 1 значение в момент времени t, если в этот момент входная переменная имеет 1 значение и в предшествующий момент входная переменная также имела 1 значение. 68 2) последовательностью значений (при t = 0, 1, 2… существует 2t возможных входных последовательностей), например: t: 0 1 2 3 4 5 6 7 8 9 x: 0 1 1 1 0 0 1 0 1 1 y: 0 0 1 1 0 0 0 0 0 1 Однако такой способ весьма громоздок даже в простейшем случае, а при t описание автомата становится невозможным. 3) в виде таблиц выходов и переходов для функций выходов и переходов соответственно; 4) в виде диаграммы переходов (по аналогии с диаграммой переходов абстрактного автомата, но закодированной двоичными символами); 5) в виде уравнений выходов и переходов (СДНФ, СКНФ или других формул, полученных в результате их преобразования). Определение 2.7. Элементарным автоматом с памятью (ЭАСП) называется автомат, обладающий следующими свойствами: 1) является АСП с двумя состояниями (0 и 1). 2) имеет не более 3 входов, входные переменные 0 или 1. 3) имеет оди выход, выходная переменная принимает 2 значения 0 или 1 (иногда имеется второй парафазный выход – с инверсной функцией). 4) является автоматом Мура (т.е. значение выходной переменной в момент времени t зависит только от состояния автомата в момент времени t и не зависит от значений входных переменных в этот момент времени), при этом y(t) совпадает с его состоянием y(t)=q(t). 5) таблица переходов является полной (т.е. для каждого состояния существует значение входной переменной, при которой автомат переходит в любое другое состояние из числа возможных для данного автомата состояний). 6) все состояния автомата взаимно достижимы. Элементарные автоматы с памятью часто называют триггерами. Полная таблица существует, если есть значения входной переменной, при которых происходят изменения состояний по табл. 2.2: Таблица 2.2. Изменение состояний АСП q(t) q(t+1) 1 1 1 1 Рассмотрим ОДО элементарного АСП с одним входом: y(t) = q(t) ; q(t+1) = [x(t);q(t)] Возможны 4 разные полные таблицы переходов (табл.2.3). 69 Таблица 2.3. Полные таблицы переходов для ЭАСП с одним входом q(t+1) x(t) q(t) 1 2 3 4 1 1 1 1 1 1 1 1 1 1 1 1 1 ЭАСП – триггер со счётным входом (T-триггер, T от англ. Toggle – переключатель); 2 ЭАСП – линия задержки (D-триггер, D от англ. Delay – задержка); 3 ЭАСП – инверсия 1-го; 4 ЭАСП – инверсия 2-го. Среди ЭАСП с двумя входами наибольшее распространение получили два типа триггеров – RS-триггеры (от англ. Reset-Set – сброс-установка) и JKтриггеры (от англ. Jump-Kill – прыгать-убивать). Характеристические уравнения для триггеров с одним и двумя входами можно записать в следующем виде: 1) D-триггер: q(t  1)  D ; 2) T-триггер: q(t  1)  qT  q T ; 3) RS-триггер: S  R q , соотношение запрета: RS = 0; 4) JK-триггер: Jq  Kq . Условные графические обозначения триггеров приведены на рис.2.6. Т-триггер D-триггер D D T q q Т Т T RS-триггер q S q R S T R JK-триггер q J q K J T q q K Рис. 2.6. Элементарные автоматы с памятью Основными свойствами ОДО автомата с памятью являются:  достижимость;  различимость;  периодичность. 1. Состояние Qr достижимо из состояния Ql, если существует входная последовательность, переводящая автомат из состояния Ql в состояние Qr. Состояния Ql и Qr могут быть взаимно достижимыми. Из одного состояния в другое достижимое состояние автомат может быть переведен разными входными последовательностями. 70 Для каждого перехода между двумя достижимыми состояниями может быть выявлена входная последовательность минимальной длины. Максимальная длина входной последовательности из числа выявленных последовательностей минимальной длины, называется степенью достижимости ОДО А: A3);  алфавит состояний– 2 цифры (22>3);  выходной алфавит 1 – 2 цифры (22=4);  выходной алфавит 2 – 1 цифра (21=2). Сведём результаты кодирования входов, состояний и выходов автомата в таблицы 2.6 – 2.9. 75 Таблица 2.6. Кодирование входа Z x1 x2 z1 z2 1 z3 1 Таблица 2.7. Кодирование состояний A q1 q2 a1 a2 1 a3 1 Таблица 2.8. Кодирование выхода 1 W y1 y2 w1 w2 1 w3 1 w4 1 1 Таблица 2.9. Кодирование выхода 2 U r u1 u2 1 Но можно закодировать буквы и по-другому. Например, a1 = 00, a2= 01, a3 = 11, w1 = 10, w2= 00, w3= 11, w3= 01. Оптимальное экономичное кодирование осуществляется в соответствии с вышеприведённым алгоритмом. На основе рассмотренных таблиц строим таблицы переходов и выходов структурного автомата (табл. 2.10, 2.11). Таблица 2.10. :AxZA 00 01 10 00 – 10 – 01 00 – 01 Таблица 2.11. 1:AxZW, 2:AU 1 00 01 10 00 – 11 01 01 01 – 00 10 – 10 11 10 01 00 10 Из таблицы выходов получаем выражения для выходных сигналов y1, y2, как дизъюнкции конъюнкций, соответствующие наборам переменных q1, q2, x1, x2, на которых эти функции принимают единичные значения: y1 = 1  9 10 = x1 x2 q1q2  x1 x2 q1q2  x1 x2 q1q2 y2 = 1  2 4 10 = x1 x2 q1q2  x1 x2 q1q2  x1 x2 q1q2  x1 x2 q1q2 Также непосредственно получим выражение для r = r(q1,q2): r = q1q2 2.2.3. Выбор элементов памяти Структурный автомат строится на конкретной элементной базе. Поэтому при структурном синтезе предварительно выбираются элементарные автоматы с памятью (ЭАСП) и без памяти (ЭАБП), из которых затем путём их композиции строится структурная схема полученного на этапе абстрактного синтеза автомата. Для правильной работы схем нельзя, чтобы сигналы на входе запоминающих элементов непосредственно участвовали в образовании выходных сигналов, которые по цепям обратной связи подавались бы на эти входы в тот же самый момент времени. Поэтому запоминающими элементами должны быть не автоматы Мили, а автоматы Мура. 76 Таким образом,  структурно полная система элементарных автоматов должна содержать хотя бы один автомат Мура.  для синтеза автоматов с минимальным числом элементов памяти необходимо в качестве таких элементов выбирать автоматы Мура, имеющие полную систему переходов и полную систему выходов – так называемые полные автоматы. Элементарные АСП должны быть:  автоматами Мура;  полными автоматами (с полной системой переходов и выходов). Полнота системы переходов: для любой пары состояний (bm, bs) найдется входной сигнал, переводящий автомат из bm в bs (в таком автомате в каждом столбце таблицы переходов должны встречаться все состояния автоматов) Полнота системы выходов: каждому состоянию соответствует свой особый выходной сигнал, отличный от выходных сигналов других состояний (число выходных сигналов равно числу состояний автомата). Следствие: в автомате Мура с полной системой выходов можно отождествить состояния автомата с его выходными сигналами. Пример 2.3. Автомат Мура с входным алфавитом G = {g1, g2, g3}, выходным алфавитом W={w1, w2, g3}, алфавитом состояний B={b1, b2, b3}. В качестве выходного алфавита можно принять B={b1, b2, b3}. Таблица 2.12. :BxGB, :BW w2 w1 w3 b1 b2 b3 g1 b1 b2 b3 g2 b2 b3 b1 g3 b3 b1 b2 Элементарный автомат с памятью тоже можно рассматривать на абстрактном и структурном уровнях. Абстрактный автомат, заданный таблицей, имеет один входной и один выходной каналы. G={g1, g2, g3} Пr B={b1, b2, b3} Рис. 2.8. Абстрактный ЭАСП При переходе от абстрактного к структурному автомату Пr его входные и вы77 ходные сигналы должны быть закодированы наборами сигналов на входных и выходных каналах. В общем случае, если абстрактный автомат памяти имеет h состояний и p входных сигналов, то число его входных K и выходных T каналов должно быть Klogp и Tlogh, где  и  - число букв в структурных входных и выходных алфавитах автомата памяти Пr. Триггеры (D, T, RS, JK) также обладают полнотой (у них состояния совпадают с выходом). Зададим их табл. 2.13–2.16. Таблица 2.13. T-триггер b1 b2 g1 b1 b2 g2 b2 b1 Таблица 2.14. D-триггер b1 b2 g1 b1 b1 g2 b2 b2 Таблица 2.15. RS-триггер b1 b2 g1 b1 b2 g2 b1 b1 g3 b2 b2 Таблица 2.16. JK-триггер b1 b2 g1 b1 b2 g2 b1 b1 g3 b2 b2 g4 b2 b1 Пусть в условии предыдущего примера задан T-триггер. Закодируем его входные сигналы и состояния и построим таблицу переходов: G G  g1 g2 1 Bq B b1 b2 q 1 1 qq 1 1 1 1 qq 1 1 1  Для D-триггера имеем: G G  g1 g2 1 Bq B b1 b2 q 1  Обобщённая структурная схема автомата может быть представлена в виде трёх частей: памяти и двух комбинационных схем КС1 и КС2. r x1 1 x2 КС1 2 П1 П2 q1 q2 Рис. 2.9. Обобщённая структурная схема автомата 78 y1 КС2 y2 2.2.4. Построение функций возбуждения памяти и функции выходов После выбора ЭАСП и кодирования его таблиц синтез структурного автомата сводится к синтезу комбинационной схемы, реализующей соответствующие функции входов ЭАСП и выходов синтезируемого автомата: 1) выход 1 типа (автомата Мили): y1 = y1(q1,…,qR, x1,…xL); … yN = yN(q1,…,qR, x1,…xL); 2) выход 2 типа (автомата Мура): r1 = r1(q1,…,qR); … rD = rD(q1,…,qR); 3) вход элементарных АСП: 1 = 1(q1,…,qR, x1,…xL); … R = R(q1,…,qR, x1,…xL); где q = (q1, q2, …, qR) – функция обратной связи от памяти автомата к комбинационной схеме,  = (1, 2, …, R) – функция возбуждения памяти (на входе ЭАСП). При построении функций возбуждения памяти автомата будем использовать функцию входов элемента памяти (bm, bs), ставящую в соответствие каждой паре состояний (bm, bs) сигнал на входе этого автомата для перевода из bm в bs. Таблица входов легко получается из таблицы переходов ЭАСП и представляет собой обращённую таблицу переходов. Пример 2.4. Построение функции возбуждения для T-триггера. Осуществляем переход от таблицы переходов ЭАСП к таблице входов: Таблица переходов :BxGB b1 b2 g1 b1 b2 g2 b2 b1  Таблица входов bm g bs b1 g1 b1 b1 g2 b2 b2 g2 b1 b2 g1 b2 Перекодируя таблицу входов в двоичную систему счисления, получим: Таблица входов qисх qпер  1 1 1 1 1 1 79 Функция возбуждения зависит от тех же переменных xi и qi, но в таблицу нужно подставить значения из таблицы входов ЭАСП (в примере 2 значения). 1 строка: 00   (не определено) , ставится также ; 01  00 (переход 1 ЭАСП 0 0, 2 ЭАСП 10, ставим 01 (из таблицы входов); 10  01 (переход 1 ЭАСП 1 0, 2 ЭАСП 0 1, ставим 11. 2 строка: 00  10 (01, 00), ставим 10; 01   , ставим ; 10  00 (10, 00), ставим 10. 3 строка: 00   , ставим ; 01  01 (00, 11), ставим 00; 10  10 (11, 00), ставим 00. Получаем функцию возбуждения  (значения 12) : Таблица функции возбуждения q1q2 00 01 10 x1x2 00 – 01 11 01 10 – 10 10 – 00 00 Сведём в одну таблицу (табл.2.17) все функции входов для триггеров. Таблица 2.17. Функции входов основных триггеров Q qисх qпер D T SR JK – 1 1 1 1 1 1 1 1 – 1 1 1 – – – – 1 Функцию возбуждения можно представить совместно с таблицами переходов и выходов автомата в развёрнутом виде, удобном для выполнения операций по структурному синтезу. В нашем примере для T-триггера построим развёрнутую таблицу (табл. 2.18). 80 Таблица 2.18. Развёрнутая таблица выходов, переходов и возбуждения x1 x2 q1(t) q2(t) y1(t) y2(t) r(t) q1(t+1) q2(t+1) 1 2 0 0 – – – – – – 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 – – – – – – – 0 1 1 1 1 0 1 1 – – – – – – 0 1 1 1 1 01 0 1 1 1 – – – – – – – 1 0 – – – – – – 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 – – – – – – – 1 1 – – – – – – 1 1 1 – – – – – – 1 1 1 – – 1 – – – – 1 1 1 1 – – – – – – – входные из таблицы из таблицы из таблицы переменные выходов переходов функции возбуждения Так как состояние 11 и вход 11 не заданы, то в соответствующих позициях y1, y2, r, q1, q2 – прочерки. Исходя из этого, можно записать логические выражения для y1(t), y2(t), r(t) и 1, 2. 15 y1 (t )   (0* , 1, 3* , 5* , 7 * , 8* , 9, 10, 11* , 12* , 13* , 14* , 15* ) 15 y 2 (t )   (0* , 1, 2, 3* , 4, 5* , 7 * , 8* , 10, 11* , 12* , 13* , 14* , 15* ) 3 r (t )   (2, 3* ) (зависит только от 2 переменных) 15 1 (t )   (0* , 2, 3* , 4, 5* , 6, 7 * , 8* , 11* , 12* , 13* , 14* , 15* ) 15  2 (t )   (0* , 1, 2, 3* , 5* , 7 * , 8* , 11* , 12* , 13* , 14* , 15* ) 2.2.5. Минимизация логических функций и построение схемы автомата На основе полученных логических формул строим для их минимизации диаграммы Вейча (рис. 2.10). После получения минимизированных логических выражений конечный автомат строится следующим образом (рис.2.11): 1. Изображаются элементарные АСП. 81 2. Если есть общие части в формулах, то они используются для минимизации оборудования (в примере только инверторы) 3. Ко входам ЭАСП подсоединяется комбинационная часть 1 и  2 . 4. Строятся комбинационные части y1, y2 и r. y1  x1    x1   y2 q1 q1   – – – – – – – 1 – – 1    x2 – 1  x1    x1     x2   x2 1  x1    x1   q1  q2 – – – – 1 – –  x2 1 – 1  q1 q1   x2   x2 – – – – – –  1 1 –  x2  x1    x1     x2   x2 q1 q1  – – – q2 q2 q2 1  x1q2 q2 1 – r  q1  – – – – 1 – –    q2  2 q1  – 1 – – r q2 q2 q2 y2  x1q1  x2q2  – 1 – – q1    q2 q2 y1  x1  q2 q2 q1   x2 1 –   x2   x2  q2 q2 2  x1x2 Рис.2.10. Диаграммы Вейча x1 q2 x1 1 & Т Т q1 q1 & & y2 1 y1 1 x2 1 x1 x2 & Рис. 2.11. Синтезированная схема автомата 82 Т Т q2 q2 Аналогично можно построить автомат на D-, RS- или JK-триггерах. В более простой формулировке ставится задача синтеза автомата Мили или Мура по совмещённой таблице переходов и выходов, заданной в двоичном виде. Другой метод структурного синтеза предложен в [4] и предполагает преобразование уравнений переходов конечного автомата (функций qi(t+1)) к элементарным функциям переходов используемых триггеров. Данный способ бывает не всегда удобен, особенно при использовании T-триггеров. Но в этом случае не нужно строить функцию возбуждения. 2.3. Проблема гонок в автоматах и методы их устранения 2.3.1. Гонки в автомате и способы их устранения При функционировании автоматов могут появиться так называемые состязания. Явление состязаний возникает вследствие того, что элементы памяти имеют различные, хотя и достаточно близкие, времена срабатывания. Кроме того, различны также задержки сигналов возбуждения, поступающих на входы сигналы элементарных автоматов по логическим цепям неодинаковой длины. Если при переходе автомата из одного состояния в другое должны изменить свои состояния сразу несколько запоминающих элементов, то между ними начинаются состязания. Тот элемент, который выиграет, т.е. изменит свое состояние ранее, чем другие элементы, может через цепь обратной связи изменить сигналы на выходах некоторых запоминающих элементов до того, как другие учавствующие в состязаниях элементы изменят свои состояния. Это может привести к переходу автомата в состояние, не предусмотренное его графом. Поэтому в процессе перехода из состояния аm в состояние аs под действием входного сигнала zf автомат может оказаться в некотором промежуточном состоянии ак или аl в зависимости от того, какой элемент памяти выиграет состязания. Если затем (при том же входном сигнале) автомат из ak и al перейдёт в состояние as, то такие состязания являются допустимыми, или некритическими (рис.2.12,а). а) б) 0001 ak zf zf am 1001 as am 0101 0101 aj ak zf 0001 zf zf zf 1101 al Рис. 2.12. Состязания между элементами памяти: а) некритические; б) критические 83 0011 Если же в этом автомате есть переход, например, из аk в aj ≠ as под действием того же сигнала zf, то автомат может перейти в al, а не в as и правильность его работы тем самым будет нарушена. Такие состязания называются критическими состязаниями или гонками (рис.2.12,б). При кодировании состояний гонки должны быть устранены. Кодирование с устранением гонок называется противогоночным. Основными способами устранения гонок в автомате являются аппаратурные и алгоритмический способы. 2.3.2. Аппаратурные способы устранения гонок в автоматах Основными аппаратурными способами устранения гонок являются:  тактирование входных сисгналов;  введение двойной памяти. Первый способ предполагает тактирование входных сигналов автомата импульсами определённой длительности. Предполагается, что кроме входных каналов x1,....,xL имеется ещё один канал p от генератора синхроимпульсов (ГСИ), по которому поступает сигнал p = 1 в момент прихода импульса и p = 0 при его отсутствии. В связи с этим входным сигналом на переходе (am, as) будет не zf, а pzf. Тогда, если длительность импульса tp меньше самого короткого пути прохождения тактированного сигнала обратной связи по комбинационной схеме, то к моменту перехода в промежуточное состояние ak (рис. 2.12,б) сигнал p равен нулю и, следовательно, pzf = 0, что исключает гонки. Второй способ ликвидации гонок заключается во введении двойной памяти (рис. 2.13). В этом случае каждый элемент памяти дублируется, причём перепись из нижнего элемента памяти в верхний происходит в момент отсутствия тактирующего импульса (p = 0). Т & & p Рис. 2.13. Двойная память 84 Т Сигналы обратной связи для получения функций возбуждения и функций выходов автомата снимаются с верхнего ряда триггеров. Таким образом,  состязания могут возникнуть только между нижними триггерами, сигналы обратной связи не смогут измениться до тех пор, пока P не станет равным нулю. Но тогда входной сигнал pzf также равен нулю, что исключает наличие гонок. 2.3.3. Алгоритмы противогоночного кодирования Наряду с чисто аппаратурными способами для устранения гонок могут использоваться специальные методы кодирования, которым посвящено большое число работ. В [17] предложен метод противогоночного кодирования, основная идея которого сводится к следующему. Пусть (α; β) и (γ; δ) – две пары двоичных кодов длины R. Пары (α; β) и (γ; δ) называются развязанными, если при некотором 1  r  R r-й разряд кода принимает одно значение на паре (α; β) и противоположное на (γ; δ). В противном случае пары (α; β) и (γ; δ) называются связанными. В данной работе доказана следующая теорема. Теорема 2.2. В автомате, состояния которого закодированы двоичными кодами конечной длины, гонки отсутствуют тогда и только тогда, когда для любых двух переходов (am, as) и (ak, al), as ≠ al, происходящих под действием одного и того же входного сигнала, соответствующие пары кодов состояний развязаны. Алгоритм противогоночного кодирования состояний конечных автоматов основывается на последовательном просмотре всех пар переходов, для которых имеется хотя бы один общий входной сигнал, осуществляющий эти переходы, и присвоении разрядам кодов таких значений, чтобы соответствующие пары кодов состояний были развязаны. Существует один частный способ кодирования – соседнее кодирование состояний автомата, при котором условие отсутствия гонок всегда выполнено. При соседнем кодировании любые два состояния, связанные дугой на графе автомата, кодируются наборами, отличающимися состояниями лишь одного элемента памяти. 85 Однако, соседнее кодирование не всегда возможно. Сформулируем требования к графу автомата, допускающего соседнее кодирование: 1. В графе автомата не должно быть циклов с нечётным числом вершин. 2. Два соседних состояния второго порядка не должны иметь более двух состояний, лежащих между ними. При этом под состояниями второго порядка понимаются два состояния, путь между которыми по графу автомата состоит из двух рёбер (независимо от ориентации). 86 3. Микропрограммные автоматы 3.1. Операторные схемы алгоритмов микропрограмм 3.1.1. Микропрограммная работа дискретных устройств При описании работы элементов вычислительной техники дискретные системы классически представляются в виде композиции 2-х автоматов:  управляющий автомат (УА) A;  операционный автомат (ОА) B. x1 . . . . . . xL y1 А . . . В . . . yN Рис. 3.1. Структура микропрограммного автомата К операционным автоматам относят блоки памяти, регистры, сумматоры, каналы передачи информации, шифраторы и дешифраторы. К управляющим автоматам относят ту часть ЭВМ, которая, координируя действия операционных устройств, определяет последовательность переработки информации. Основная задача УА – выработка распределенной во времени последовательности управляющих сигналов, под воздействием которых в ОА осуществляется некоторая операция. Определение 3.1. Элементарный неделимый акт обработки информации в операционном устройстве, происходящий в течение одного момента автоматного времени, называется микрооперацией. Микрооперации возбуждаются сигналами y1,…,yN из управляющего устройства. Если несколько микроопераций реализуются одновременно в устройстве B, назовём это множество микроопераций микрокомандой. Если Yt = {yt1,…,ytUt} – микрокоманда, микрооперации yt1,…,ytUt выполняются в один и тот же момент автоматного времени. При Ut = 1 микрокоманда Yt состоит из одной микрооперации, при Ut = 0 множество микроопераций, образующих микрокоманду, 87 пусто. Микрокоманду обозначим Y0 и интерпретируем как пропуск такта (никакие сигналы от УУ не поступают к операционному устройству). Пусть Y1,…, YT – микрокоманды, которые могут выполняться в операционном устройстве. Последовательность выполнения микрокоманд определяется функциями перехода – булевыми функциями ij(i,j=1,…,T) от множества двоичных переменных (входных переменных X={x1,…,,xL} – входных переменных управляющего устройства А. С каждой микрокомандой Yi будем связывать множество таких функций перехода {i1,…, iT}, что после выполнения микрокоманды Yi it = 1, следующей будет выполняться микрокоманда Yi. Совокупность микрокоманд и функций перехода образует микропрограмму. Для описания микропрограммы необходимо задать последовательность микрокоманд и функций перехода, определяющих порядок выполнения микрокоманд. Для описания микропрограмм используется язык граф-схем алгоритмов. 3.1.2. Граф-схемы алгоритмов микропрограммного автомата Граф-схемы алгоритмов (ГСА) – это ориентированный связный граф, содержащий одну начальную вершину А0, одну конечную Ак и произвольное конечное множество условных (P ={p1,…,pF}) и операторных (A={A1,…,AG}) вершин. Виды вершин ГСА представлены в табл.3.1. Таблица 3.1. Виды вершин ГСА Вершины Входов Начальная вершина нет один Конечная вершина нет один Выходов Обозначение Начало Конец Операторная вершина один один Условная вершина один два, помечены 1 и 0 1 Условия, которым должна удовлетворять ГСА: 1. Входы и выходы вершин соединяются друг с другом с помощью дуг (от выхода к входу). 2. Каждый выход соединен точно с 1 входом. 3. Любой вход соединяется, по крайней мере, с 1 выходом. 4. Любая вершина графа лежит, по крайней мере, на одном пути из начала в конец. 5. Один из выходов условной вершины может соединяться с её входом (возвратная вершина). 88 6. В каждой условной вершине записывается один из элементов множества X = {x1,…,xl,…,xL}, называемого множеством логических условий. 7. В каждой операторной вершине записывается оператор (микрокоманда) Yt – подмножество множества Y ={y1,…,yn,…,yN}, называемого множеством микроопераций: Yt = {yt1,…,ytu,…,ytUt}; ytuY, u=1,…Ut. При Ut = 0 Yt=, что допустимо. Разрешается запись в различных операторных вершинах одинаковых подмножеств множества микроопераций. При большом числе дуг, приходящих на один вход вершины, допускается изображать следующим образом (рис.3.2). Конец 1 Рис. 3.2. Изображение вершин граф-схемы алгоритмов Пример 3.1. Граф-схема алгоритма с 6 условными и 7 операторными вершинами. Начало Y0 Y1 1 y1y2 x1 Y2 y4 1 x3 x2 1 x4 y1y3 Y7 y6y7 Y5 1 Y3 y5y6y7 x1 x5 y3y4 1 y8 Y4 1 Конец Yk Рис. 3.3. Пример ГСА 89 Y6 Всевозможные наборы значений переменных x1,…,xL обозначим через 1 ,…, 2 . Определим процесс выполнения ГСА, начиная с оператора Y0 (начального), на произвольной бесконечной последовательности наборов m1, …, mq, … следующим образом: Шаг 1. Придаем переменным x1,…,xL значения из набора m1. Из множества функций перехода 01,…, 0T выбираем функцию 0i1 (i1{1,…,T}), принимающую значение единицы на этом наборе (0i1(m1) = 1). В строчку рядом с Y0 записываем Yi1: Y0Yi1. Шаг 2. Придаем переменным x1,…,xL значения из набора m2. Из множества функций перехода  i11,…,  i1T выбираем функцию i1i2 (i2{1,…,T}), такую, что i1i2(m2) = 1. В строчку рядом с Yi1 записываем Yi2: Y0 Yi1 Yi2 и т.д. Перед q-м шагом имеем строчку операторов Y0 Yi1 Yi2… Yiq-1. Если на наборе mq некоторая функция  i i равна единице (iq{1,…,T}), то L q 1 q в выписанную строчку операторов добавляем Yi . Если оказывается, что  q iq1T 1 ( mq )  1 , то в строчку вслед за Yiq 1 записываем конечный оператор YT+1, и процесс выполнения ГСА прекращается. Пример 3.2. Подаётся последовательность наборов значений переменных x1, x2, x3, x4, x5: x1 x2 x3 x4 x5 1 1 1 1 2 1 1 1 1 3 1 1 1 4 1 1 1 5 1 1 6 1 1 1 Процесс выполнения ГСА начинается с оператора Y0. 1. Выписываем: Y0. Придаем переменным значения из 1-го ряда. Из Y0 следует условная вершина x1, переходим по 1. Попадаем в Y1. 2. Выписываем: Y0Y1. Придаем переменным значения из 2-го ряда. Из Y1 следует условная вершина x3, переходим по 0, попадаем в условную вершину x1, переходим по 1. Попадаем в Y4. 3. Выписываем: Y0Y1Y4. Придаем переменным значения из 3-го ряда. Из Y4 следует условная вершина x3, переходим по 1. Попадаем в Y2. 4. Выписываем: Y0Y1Y4Y2. Придаем переменным значения из 4-го ряда. Из Y2 следует условная вершина x4, переходим по 0, попадаем в условную вершину x1, переходим по 0. Попадаем в Y6. 5. Выписываем: Y0Y1Y4Y2Y6. 90 Поскольку сразу после Y6 следует конечный оператор: 6. Выписываем: Y0Y1Y4Y2Y6Yk. 3.1.3. Содержательные граф-схемы алгоритмов Обычно при проектировании различных устройств предварительно составляется так называемая содержательная граф-схема алгоритма, в которой внутри условных и операторных вершин записаны не элементы множеств X и Y, а логические условия и микрооперации в содержательных терминах. Пример 3.3. В качестве примера рассматривается алгоритм выполнения операции деления в арифметическом устройстве параллельного действия с фиксированной запятой. АУ содержит накапливающий сумматор, на котором до начала операции находится делимое, регистр Z (делитель) и регистр Y – на нем после завершения операции получается частное. Выполнение операции прослеживается по содержательной граф-схеме (рис.3.4). Начало а) SignZ=Sign 1 Начало б) x1 SignY:=1 1 Y:=0 CT:=0 SignZ:=0 Sign:=0 Sign=1 1 Y1 y1 Y2 y2y3y4y5 :=+Z x2 Sign=1 Y4 1 y7 1 x2 TП:=1 1 Y8 y12 CT=0 1 x3 Y[n]:=1 Y5 y8 CT:=CT+1 Y6 y9 CT=n y6 :=+Zобр 1 1 :=L1() Y:=L1(Y) 1 Конец x4 Конец Рис. 3.4. Пример содержательной ГСА 91 y10y11 Y7 Y3 В начале операции определяется знак частного. Если знаки делимого и делителя не совпадают (signZsign), в знаковый разряд результата (signY) записывается единица – частное отрицательно. Если знаки совпадают, это действие пропускается. Далее обнуляются регистр Y, счётчик тактов CT и знаковые разряды регистра Z и сумматора. Затем, если знак сумматора равен нулю (вначале он всегда равен нулю, так как в предыдущей микрокоманде его сбросили), из делимого вычитается делитель, для чего на сумматор подаётся обратный код регистра Z (: =  + Zобр). Если на первом такте (СТ = 0) после вычитания на сумматоре оказывается положительное число (sign = 0), то делимое больше делителя, т.е. имеет место переполнение, и после записи единицы в триггер переполнения (ТП:=1) операция прекращается. Если же sign = 1, то наращивается счётчик тактов (СТ: =СТ+1), сумматор и регистр Y сдвигаются на 1 разряд влево (: = L1(), Y: = L1(Y)) и начинается второй такт. Если после вычитания на некотором такте на сумматоре оказывается отрицательное число, то на следующем такте вместо вычитания содержимого регистра Z из содержимого сумматора производится их сложение (:= +Z), т.е. реализуется операция деления без восстановления остатка. Если на некотором такте, кроме первого, после вычитания на сумматоре получается положительное число (sign= 0), то младший n-й разряд результата записывается единица (Y[n]:=1). По прошествии n тактов (СТ = n) операция заканчивается. Результат деления записан в регистре Y. После построения содержательной ГСА логические условия и микрооперации кодируются символами x1, …, xL и y1, …, yN соответственно (табл.3.1). Таблица 3.1. Кодирование вершин ГСА Условные вершины Операторные вершины y1: signY:=1 x1: sign = signZ y7: :=+Zобр y2: Y:=0 y8: Y[n]:=1 x2: sign = 1 x3: CТ = 0 y3: CT:=0 y9: CT:=CN+1 x4: СТ = n y4: signZ:=0 y10: :=L1() y11: Y:=L1(Y) y5: sign:=0 y12: ТП:=1 y6: :=+Z При таком кодировании вершин содержательной ГСА с рис. 3.4, а получим ГСА, изображенную на рис. 3.4, б. 3.2. Синтез микропрограммных автоматов по граф-схеме алгоритмов 3.2.1. Синтез микропрограммного автомата Мили Конечный автомат, реализующий микропрограмму работы дискретного устройства, называют микропрограммным автоматом. Синтез микропрограммного автомата по ГСА включает два этапа: 92 1) этап получения отмеченной ГСА; 2) этап построения графа автомата. На этапе получения отмеченной ГСА входы вершин, следующие за операторными, отмечаем символами a1, a2, … по следующим правилам: а) символом a1 отмечаем вход вершины, следующей за начальной, а также вход конечной вершины; б) входы всех вершин, следующих за операторными, должны быть отмечены; в) если вход вершины отмечается, то только одним символом; г) входы различных вершин, за исключением конечной, отмечаются различными символами. Для проведения отметок понадобится конечное число символов (будем использовать a1,…,aM. Применение 1-го этапа синтеза к ГСА (из примера 3.1) даёт отмеченную ГСА, изображённую на рис.3.5. Начало a1 Y1 1 y1y2 x1 a2 Y2 1 y4 a3 x3 x2 1 x4 Y0 y1y3 Y7 y6y7 Y5 1 Y3 y5y6y7 x1 a4 x5 a5 y3y4 Y6 1 y8 Y4 1 a1 Конец Yk Рис. 3.5. Отмеченная ГСА автомата Мили Если идти от одной отметки am к другой отметке as в направлении ориентации дуг ГСА, выписывая содержимое лежащих на этом пути вершин, то каждому такому пути можно поставить в соответствие слово в алфавите: x 1 e1 ,..., xL L ,Y1 ,...,YT , e где 1 при выходе из условной вершины по единице в соответствующем el   пути, 0 при выходе из условной вершины по нулю xl0  xl , xl1  xl , l  1,..., L 93 В дальнейшем будем интересоваться словами вида: am , as  a1 ,..., aM  am  a2 , a3 ,..., aM  emR am xmem11 ...xmR Yt as (3.1) e (3.2) am xme 1 ...xmR as Соответствующие этим словам пути в граф-схеме будем называть путями перехода. В пути вида (3.1) не исключен случай R=0: amYtas. Путь вида (3.1) – путь в ГСА из одной отметки am в другую as (допустимо am = as), содержащий точно одну операторную вершину. Путь вида (3.2) – это путь из некоторой отметки am в отметку a1 (недопустимо am = a1), проходящей только через условные вершины. Каждому пути вида (3.1) или (3.2) можно поставить в соответствие конъюнкцию m1 mR R emr . X (am , as )   xmr r 1 Для краткости эти пути будем обозначать amX(am,as)Y(am,as)as и amX(am,a1)a1, где Y(am,as) = Yt. Схематично путь перехода из am в as можно изобразить как на рис. 3.6,а, где волнистая линия соответствует пути через условные вершины. am am X1(am, as) Xh(am, as) XH(am, as) X(am, as) Y(am, as) Y(am, as) as as а) б) Рис. 3.6. Пути перехода Когда между am и as имеется несколько различных путей вида amXh(am,as)Y(am,as)as (h=1,…H), проходящих через одну и ту же операторную вершину (рис.3.6,б), будем считать, что указанному множеству путей соответH ствует дизъюнкция X (am , as )   X h (am , as ) , а само множество путей будем обоh 1 значать amX(am,as)Y(am,as)as, называя его обобщённым путём перехода. После получения отмеченной ГСА построим граф автомата Мили S, состояниями которого являются a1,…,aM, причем a1 – начальное состояние. Пример 3.4. Построим граф переходов автомата Мили из примера 3.1. 94 Отметки am соответствуют состояниям, условные вершины соответствуют входным сигналам, операторные вершины формируемым выходным сигналам. Поскольку из одной вершины am в другую вершину as может вести несколько путей через условные вершины, то значения xi при прохождении от am в as перемножаются (рис.3.7). Отличительная особенность микропрограммных автоматов, синтезированных рассмотренным способом, состоит в том, что приписанные дугам графа входные сигналы являются элементарными произведениями, причем длина этих произведений существенно меньше числа всех входных переменных. y3 y4 y8 y3 y4 x3 x1 a1 x1 y1y2 y1y3 a2 y8 y6y7 y3y4 1 (-) x3 x1 x1 x2 x1 x2 x3 a5 y8 y4 x5 x5 x4 x1 x4 x1 a3 x4 y5y6y7 a4 Рис. 3.7. Граф переходов микропрограммного автомата Мили Условие детерминированности работы автомата требует, чтобы любое попарное произведение входных сигналов, вызывающих переход из некоторого состояния автомата, было равно нулю. Это условие всегда выполняется для автомата, построенного по ГСА. При использовании графов для задания автоматов с большим числом состояний и переходов наглядность теряется, поэтому оказывается предпочтительным задавать эти графы в виде списков. В связи с этим введём понятие таблицы переходов микропрограммного автомата. Прямой таблицей переходов МПА назовем таблицу, в которой последовательно перечисляются все переходы из первого состояния, затем из второго и т.д. В обратной таблице переходов столбцы обозначены точно так же, но сначала записываются все переходы в первое состояние, затем во второе и т.д. Пример 3.5. В табл. 3.2–3.3 приведены таблицы переходов автомата Мили, построенного по ГСА из примера 3.1. Четыре столбца – am – исходное состоя- 95 ние, as – состояние перехода, X(am, as) – входной сигнал на переходе (am, as), Y(am, as) – выходной сигнал на переходе (am, as) Каждому пути перехода соответствует одна строка таблицы переходов. Таблица 3.2. Прямая таблица переходов автомата Мили am as X(am, as) Y(am, as) a1 a2 x1 y1y2 x1 x2 a2 y1y3 x1 x2 a5 y6y7 x3 x1 a2 a1 y3y4 x3 x1 a2 y8 a3 x3 y4 x4 x1 a3 a1 y3y4 x4 x1 a2 y8 a4 x4 y5y6y7 a4 a1 x5 x5 a2 y8 a5 a1 1 y3y4 Таблица 3.3. Обратная таблица переходов автомата Мили am as X(am, as) Y(am, as) x3 x1 a2 a1 y3y4 x4 x1 a3 y3y4 a4 x5 a5 1 y3y4 a1 a2 x1 y1y2 x1 x2 a1 y1y3 x3 x1 a2 y8 x4 x1 a3 y8 x5 a4 y8 a2 a3 x3 y4 a3 a4 x4 y5y6y7 x1 x2 a1 a5 y6y7 3.2.2. Синтез микропрограммного автомата Мура Синтез автомата Мура также включает два этапа: 1) этап получения отмеченной ГСА; 2) этап построения графа автомата. На первом этапе начальная, конечная и операторные вершины отмечаются символами a1, a2, …, aM по следующим правилам: а) символом a1 отмечаются начальная и конечная вершины; б) различные операторные вершины отмечаются различными символами; в) все операторные вершины должны быть отмечены. При синтезе автомата Мура, в отличие от автомата Мили, отмечаются не входы вершин, следующих за операторными, а сами операторные вершины. Число отметок оказывается на единицу больше числа операторных вершин в ГСА. В результате применения процедуры разметки к примеру 3.1 получим ГСА (рис.3.8). Построим граф переходов автомата Мура S, состояниями которого являются полученные на предыдущем этапе отметки a1,…, aM (рис.3.9). Каждому пути перехода amX(am ,as)as поставим в соответствие переход автомата S из состояния am в состояние as под действием входного сигнала X(am ,as), а пути перехода amas – переход из am в as под действием сигнала единицы. 96 a1 a2 Начало 1 y1 y2 x1 a3 1 y4 x3 x2 1 x4 y1 y3 1 a4 y6 y7 a8 a6 y5 y6 y7 x1 x5 y3 y4 1 y8 a5 1 a1 Конец Рис. 3.8. Отмеченная ГСА автомата Мура x1 x2 a1 a8 1 x1 1 y6y7 x1 x2 y1y2 x3 x1 x3 x4 x1 a4 x5 a6 x3 x1 y1y3 x3 x1 x3 x1 a5 y5y6y7 y3 y4 x3 x1 x3 a3 x4 y4 a7 x4 x1 x3 x5 a2 y8 x3 x1 Рис. 3.9. Граф переходов микропрограммного автомата Мура 97 a7 Построим таблицы переходов микропрограммного автомата – прямую и обратную. В случае автомата Мура, в отличие от автомата Мили, достаточно трёх столбцов. В прямой таблице (табл. 3.4) выходной сигнал записывается рядом с соответствующим ему исходным состоянием, в обратной (табл. 3.5) – с состоянием перехода. Таблица 3.4. Прямая таблица переходов автомата Мура am Y(as) as X(am, as) a1(-) a2 x1 x1 x2 a6 x1 x2 a8 a2 (y1y2) a3 x3 x3 x1 a5 x3 x1 a7 a3(y4) a4 x4 x4 x1 a5 x4 x1 a7 a4(y5y6y7) a1 x5 x5 a5 a5(y8) a3 x3 x3 x1 a5 x3 x1 a7 a6(y1y3) a3 x3 x3 x1 a5 x3 x1 a7 a7(y3y4) a1 1 a8(y6y7) a7 1 Таблица 3.5. Обратная таблица переходов автомата Мура am as Y(as) X(am, as) a4 a1 (-) x5 a7 1 a1 a2 (y1y2) x1 a2 a3 (y4) x3 a5 x3 a6 x3 a3 a4 (y5y6y7) x4 x3 x1 a2 a5 (y8) x4 x1 a3 x5 a4 x3 x1 a5 x3 x1 a6 x1 x2 a1 a6 (y1y3) x3 x1 a2 a7 (y3y4) x4 x1 a3 x3 x1 a5 x3 x1 a6 a8 1 x1 x2 a1 a8 (y6y7) 3.2.3. Минимизация микропрограммных автоматов Изложенные выше алгоритмы синтеза микропрограммных автоматов по граф-схеме алгоритмов практически позволяют получать автоматы, достаточно близкие к минимальным. Это обеспечивается однократной отметкой входов вершин, следующих за операторными, независимо от путей перехода, ведущих в эту вершину. При этом степень приближения автомата к минимальному зависит от качества описания работы устройства граф-схемой. В то же время изложенный ранее метод минимизации полностью определённых абстрактных автоматов можно модифицировать для минимизации микропрограммных автоматов. 98 Два состояния автомата Мили будут одноэквивалентными, если под действием одинаковых входных сигналов они выдают одинаковые выходные сигналы. Для выяснения одноэквивалентности состояний ai и aj микропрограммного автомата необходимо сравнить множества микрокоманд, выдаваемых на переходах из этих состояний. Пусть, например, эти множества совпадают и равны {Y1, …, Yr, …, YR}, причем микрокоманда Yr выдаётся под действием сигналов Xi(Yr) и Xj(Yr) для состояний ai и aj соответственно. Состояния ai и aj будут одноэквивалентны, если эквивалентны функции Xi(Yr) и Xj(Yr) для всех r = 1, …, R. Рассмотрим микропрограммный автомат Мили, заданный табл. 3.6. Таблица 3.6. Таблица переходов микропрограммного автомата Мили am as X(am,as) Y(am,as) am as X(am,as) Y(am,as) x1 x2 x1 x2 a1 a2 Y1 a5 a2 Y1 x1 x4 x1 x4 a3 Y3 a3 Y3 x1 x2 x1 x2 a4 Y2 a4 Y2 x1 x4 x1 x4 a5 Y6 a5 Y6 x4 x3 x4 a2 a6 Y5 a6 a2 Y3 x4 x4 x3 a8 Y4 a9 Y5 x4 x4 x3 a6 Y5 a7 a4 Y3 x4 x3 x4 a9 Y4 a8 Y5 x3 a3 a6 Y5 a8 a5 1 Y1 x3 a7 Y4 a9 a1 1 Y1 x3 a4 a6 Y5 x3 a8 Y4 После нахождения указанным способом одноэквивалентных состояний получаем разбиение 1 множества состояний микропрограммного автомата на классы одноэквивалентности. Для автомата рассмотренного Мили имеем: 1 = 1.5, 2.3.4, 6.7, 8.9 = {B1, B2, B3, B4}. Результаты разбиения 1 сведены в таблицу, в которой вместо состояний перехода указаны их классы эквивалентности. Методы минимизации абстрактных и микропрограммных автоматов почти полностью совпадают, с той лишь разницей, что вместо сравнения абстрактных входных сигналов необходима проверка эквивалентности соответствующих покрытий. Проводя последовательность разбиений на 1-, 2-, …, k-, (k+1)-эквивалентные классы до совпадения разбиений k+1 и k , получим разбиение множества состояний на эквивалентные. Выбирая из каждого класса эквивалентности по одному состоянию, получаем множество A’ состояний минимального микропрограммного автомата Мили. При выборе представителя из некоторого класса в A’ целесообразно выбирать состояния с наименьшим числом строчек в таблице 99 переходов. Таблица переходов минимального автомата получается из исходной таблицы вычеркиванием массивов переходов из состояний, не вошедших в A’, и заменой в столбце «состояние перехода» не вошедших в A’ состояний на эквивалентные из множества A’. По таблице разбиения 2 на классы 2-эквивалентных состояний получаем: 2 = 1.5, 2.4, 3, 6.7, 8.9 = {С1,СB2, С3, С4, С5}. Если выполнить следующее разбиение 3, то оно совпадёт с 2, а потому 2 есть разбиение на классы эквивалентных состояний. Выбирая из каждого класса эквивалентности по одному состоянию, получаем множество A’ = {a1, a3, a4, a6, a8} состояний минимального микропрограммного автомата Мили. Таблица переходов минимального автомата (табл. 3.7) получается из исходной таблицы вычеркиванием массивов переходов из состояний, не вошедших в A’, и заменой в столбце «состояние перехода» не вошедших в A’ состояний на эквивалентные из множества A’. Таблица 3.7. Таблица переходов минимального автомата am as X(am,as) Y(am,as) x1 x2 a1 Y1 a4 x1 x4 a3 Y3 x1 x2 a4 Y2 x1 x4 Y6 a1 x3 a3 a6 Y5 x3 Y4 a6 x3 a4 a6 Y5 x3 a8 Y4 x4 a6 Y3 a4 x4 Y5 a8 a8 1 Y1 a1 3.2.4. Структурная таблица микропрограммного автомата Структурная таблица микропрограммного автомата является расширением его таблицы переходов. Пример 3.6. Пример обратной структурной таблицы для автомата из примера 3.1 приведён в таблице 3.8. В ней три новых столбца: К(am) – коды исходного состояния автомата; К(as) – коды состояния перехода автомата; ~ F (am,as) – множество компонентов обязательных функций возбуждения, вырабатываемых на переходе (am, as). 100 Для кодирования состояний микропрограммных автоматов можно использовать рассмотренный ранее метод, минимизирующий суммарное число переключений памяти на всех переходах автомата. Таблица 3.8. Обратная структурная таблица микропрограммного автомата Мили am К(am) as К(as) X(am, Y(am, FRS(am, FT(am, as) as) as) as) x3 x1 a2 010 a1 001 y3y4 R2S3 T2T3 x4 x1 a3 011 y3y4 R2 T2 a4 100 x5 R1S3 T1S3 a5 101 1 y3y4 R1 T1 a1 001 a2 010 x1 y1y2 S2R3 T2T3 x1 x2 a1 001 y1y3 S2R3 T2T3 x3 x1 a2 010 y8 x4 x1 a3 011 y8 R3 T3 x5 a4 100 y8 R1S2 T1T2 a2 010 a3 011 x3 y4 S3 T3 a3 011 a4 100 x4 y5y6y7 S1R2R3 T1T2T3 x1 x2 a1 001 a5 101 y6y7 S1 T1 Например, первая строка: a2 010 a1 001 x3 x1 y3y4 R2S3 Состояние a2 кодируем как 010, значит, первый триггер принимает значение 0, второй – 1, третий – 0. Состояние a1 кодируем как 001, значит, первый триггер принимает значение 0, второй – 0, третий – 1. Входные сигналы x3 x1 – это то, что нужно подать на входы – на x1 подать 0, на x2 все равно, на x3 подать 0. Функцию F(am,as) заполняем следующим образом. Для перехода из состояния 010 в 001 нужно первый триггер оставить без изменений, второй триггер сбросить в 0, т.е. подать сигнал на R2, третий триггер установить в 1, т.е. подать сигнал на S3. Структурная таблица представляет собой граф структурного микропрограммного автомата, заданный в виде списка. Из таблицы можно получить выражения функций возбуждения и функций выходов. Функция yi получается как дизъюнкция конъюнкции значений, принимаемых состояниями и входными сигналами (собираем со всей таблицы К(am) + X(am, as), там где есть yi): 101 y1 = T1T 2T3 x1  T1T 2T3 x1 x2 y2 = T1T 2T3 x1 y3 = T1T 2T3 x3 x1  T1T 2T3 x4 x1  T1T 2T3  T1T 2T3 x1 x2 y4 = T1T 2T3 x3 x1  T1T 2T3 x4 x1  T1T 2T3  T1T 2T3 x3 y5 = T1T 2T3 x4 y6 = T1T 2T3 x4  T1T 2T3 x1 x2 y7 = T1T 2T3 x4  T1T 2T3 x1 x2 y8 = T1T 2T3 x3 x1  T1T 2T3 x4 x1  T1T 2T3 x5 . Функция возбуждения для RS-триггера вычисляется следующим образом. Выбираем по очереди значения состояний и входов, где есть Ri или Si , и соединяем их через дизъюнкцию: R1 = T1T 2T3 x5  T1T 2T3  T1T 2T3 x5 S1 = T1T 2T3 x4  T1T 2T3 x1 x2 R2 = T1T 2T3 x3 x1  T1T 2T3 x4 x1  T1T 2T3 x4 S2 = T1T 2T3 x1  T1T 2T3 x1 x2  T1T 2T3 x5 R3 = T1T 2T3 x1  T1T 2T3 x1 x2  T1T 2T3 x4 x1  T1T 2T3 x4 S3 = T1T 2T3 x3 x1  T1T 2T3 x5  T1T 2T3 x3 . Если рассматривать автоматы, работа которых тактируется сигналами от генератора синхронизирующих импульсов, т.е. в автомате кроме входных каналов имеется ещё один канал p от этого генератора, то каждое выражение нужно ещё домножать на p. Однако для встречающихся на практике микропрограммных автоматов подобные выражения очень сложны – они представляют собой систему из десятков и сотен функций от десятков и сотен переменных. Оказываются неприемлемыми классические методы минимизации булевых функций в классе нормальных форм. Кроме того, практика показала, что основное сокращение объёма схемы происходит не за счёт минимизации в нормальных формах, а в результате выделения ряда функций и подфункций, допускающих совместную минимизацию, и представления систем функций в виде декомпозиции. Тривиальный метод синтеза логической схемы по обратной структурной таблице состоит в раздельном построении схемы для переходов в каждое состояние; в обратной структурной таблице эти массивы переходов отделены друг от друга горизонтальной чертой. В пределах перехода в одно состояние последовательно строится схема для каждой микрокоманды: {y1, y2}, {y1, y3} и {y8}. Конъюнкции, соответствующие каждой строчке для одной микрокоманды, заводятся на схему ИЛИ, с которой и снимаются соответствующие этой микрокоманде выходные сигналы – микрооперации. 102 3.3. Блочный синтез алгоритмических автоматов 3.3.1. Принципы блочного синтеза автоматов Создание современных систем управления различными технологическими процессами связано с решением ряда сложных задач, в связи с чем, их проектирование обычно разбивают на отдельные этапы, на каждом из которых решается достаточно самостоятельная задача по синтезу системы управления. На первом этапе синтеза:  формулируются условия работы автомата, т.е. определяются условия его взаимодействия с другими устройствами или какими-либо объектами;  выявляются необходимые входы и выходы автомата и намечается общий закон появления выходных сигналов в зависимости от воздействия на входы автомата. При синтезе достаточно сложного автомата часто его разбивают на отдельные блоки. В этом случае первый этап синтеза называют этапом блочного синтеза автомата, на котором условия работы управляющего автомата задаются в виде процессов управления на естественном или одном из формализованных языков, в частности на широко распространенном языке сетей Петри. На втором этапе синтеза выявляются закон функционирования автомата (его функции переходов и выходов) и формальное описание автомата. Этот этап называют этапом абстрактного синтеза. Результатом второго этапа синтеза является задание автомата одним из стандартных способов (таблицы и матрицы переходов, таблицы включений, диаграммы переходов). Также выявляется и ёмкость автомата. На третьем этапе синтеза производится минимизация числа внутренних состояний автомата. На четвёртом этапе синтеза производится кодирование или размещение внутренних состояний. Этот этап находится на грани абстрактного и структурного рассмотрения автомата. После кодирования внутренних состояний автомата, состояний входа и выхода выписываются канонические уравнения. На пятом этапе синтеза завершается выбор структуры автомата построением так называемой функциональной схемы комбинационной части автомата. На шестом этапе синтеза проводится электрический или другой расчёт элементов схемы и моделирование автомата с целью проверки его работоспособности. На седьмом этапе синтеза осуществляется размещение деталей на платах, составление монтажных схем и технической документации. Разделение процесса синтеза на семь этапов является достаточно условным, хотя это и позволяет облегчить решение всей задачи синтеза автомата. Часто некоторые этапы не разделяются между собой или опускаются. Рассмотрим один из наиболее сложных этапов проектирования систем — этап блочного (системного) синтеза, когда на основе общего алгоритмиче103 ского описания системы управления и взаимодействия последней с объектом управления (ОУ) определяется блочная структура системы управления, т. е. состав основных блоков и принцип их реализации. Этап блочного синтеза структуры системы управления имеет большое значение в процессе проектирования, так как от правильного выбора структуры зависят надёжностные, массо-габаритные, стоимостные и другие показатели проектируемой системы управления. При этом процесс выбора структуры системы управления ещё более усложняется тем, что, как привило, в современных сложных системах выполнение части операций по управлению ОУ по тем или иным причинам возлагается па человека. В связи с этим выбор оптимальной структуры такой автоматизированной системы управления связан с решением многовариантной задачи, в которой оценочный функционал определяет зависимость выбираемого решения от многих параметров. В настоящее время для решения многовариантных задач управления используются методы теории решений, которые позволяют обеспечить принятие наилучшего решения с учётом всей априорной информации об условиях поставленной задачи. При этом под понятием наилучшего решения имеется в виду выбор определённого решения из некоторого множества альтернативных решений. Ниже излагается декомпозиционный метод блочного синтеза управляющего автомата на основе алгоритмического автомата. Управляющий автомат (УА) – это устройство, реализующее алгоритм функционирования, определяющий порядок выполнения отдельных операций или процедур по управлению некоторым объектом управления. Основой для выбора блочной структуры автоматизированной системы управления является алгоритм управления. В сложных УА каждая функция выходов зависит от небольшого числа входных переменных при достаточно большом общем числе последних. Поэтому алгоритм функционирования УА целесообразно разбить на отдельные, так называемые частные алгоритмы функционирования U1,…,UL и весь алгоритм функционирования УА представить в виде композиции таких частных алгоритмов функционирования: U1,…,UL, т.е. U = U(U1,…,UL). Каждый частный алгоритм функционирования (частный управляющий алгоритм) определяет последовательность воздействий на те исполнительные механизмы ОУ, которые образуют подмножество исполнительных механизмов, функции возбуждения которых зависят от одних и тех же (или почти одних и тех же) входных переменных. Таким образом,  каждый частный управляющий алгоритм определяет совокупность операций, которые функционально связаны между собой значительно сильнее, чем операции, принадлежащие различным частным алгоритмам. В связи с этим при выборе структуры сложного иерархического УА целесообразно все операции, принадлежащие к одному и тому же частному управля104 ющему алгоритму, реализовать одинаковым образом, включив их в один и тот же блок УА. В этом случае выбор оптимальной структуры УА будет состоять в выборе оптимальной реализации каждого такого блока и в определении целесообразности объединения различных блоков в один общий блок. При этом для упрощения процесса выбора структуры УА целесообразно иметь по возможности наименьшее число блоков, реализующих частные алгоритмы функционирования, что требует минимизации числа частных алгоритмов. 3.3.2. Сложность и -связность процедур автомата Процесс построения декомпозиционной структуры алгоритмического автомата в виде совокупности блоков (Б), каждый из которых удовлетворяет требованиям по сложности своей реализации или по какому-либо другому параметру, рассмотрим па следующем ниже примере. При этом будем считать, что разбиение УА на блоки необходимо осуществить так, чтобы в один блок вошли процедуры, имеющие наибольшее тяготение (например, использующие в процессе выполнения одни и те же параметры, взаимосвязанные по обработке данных и т.п.). Пример 3.7. Пусть в УА реализуются восемь процедур 1,…, 8. Их взаимосвязь зададим в виде треугольной таблицы (рис.3.10). 2 3 4 5 6 7 8 5 5 5 – 1 – – – 2 5 2 – 5 1 5 1 – – 2 – 1 – 2 1 – 2 5 5 1 2 3 4 5 6 7 Рис. 3.10. Треугольная таблица для блочного синтеза Цифрой в таблице обозначается степень связности (тяготения) между двумя процедурами (прочерк – процедуры не связаны). Сложность реализации каждой из процедур представим в виде условных единиц: С1 = 13, С2 = 13, С3 = 18, С4 = 9, С5 = 14, С6 =19, С7 =9, С8 = 15. При этом примем допустимую сложность СБiд реализации каждым i-м блоком Бi равную 70, т. е. СБiд <70. Две процедуры i и j назовем -связными, если тяготение между ними У ij   . Группу процедур назовем -связной, если каждая пара процедур, во- 105 шедших в данную группу, является -связной. Допустимой назовем -связную группу G(m), включающую т процедур, если m  C i 1 i  CБд ,  i  G (m) . Допустимую -связную группу назовем максимальной, если включение в эту группу любой процедуры из заданного множества процедур, выполняемых блоком, приводит к тому, что она становится недопустимой -связной группой. Для получения максимальных допустимых -связных групп воспользуемся методом построения минимального покрытия максимальных -связных подмножеств частных алгоритмов, аналогичным методу минимизации числа внутренних состояний автомата. В результате при  = 1 получим следующие допустимые максимальные -связные группы процедур. Для простоты вместо i в группах указывается только номер i: a  1,2,3 при Ca  C1  C 2  C 3  13  13  18  44  70 b  1,6,7 при Cb  C1  C 6  C 7  13  19  19  51  70 c  2,4 при Cc  C 2  C 4  13  9  22  70 d  2,3,8 при Cd  C 2  C 3  C 8  13  18  15  46  70 e  3,5,6,8 при Ce  C 3  C 5  C 6  C 8  18  14  19  15  66  70 f  4,5,6 при C f  C 4  C 5  C 6  9  14  19  42  70 g  4,6,7 при Cg  C 4  C 6  C 7  9  19  9  37  70 h  6,7,8 при Ch  C 6  C 7  C 8  19  9  15  43  70   1,3,6 при C  C1  C 3  C 6  13  18  19  50  70 8 1 7 2 6 3 5 4 Рис. 3.11. Граф связности процедур 106 3.3.3. Построение таблиц покрытий автомата Составим таблицу покрытий (табл. 3.9). Из этой таблицы видно, что минимальное множество допустимых максимальных -связных групп включает группы a, b, c, d, e, f, g, h; группа  – избыточная. Легко понять, что они являются пересекающимися, т. е. одна и та же процедура входит в несколько групп, но при этом связи между группами отсутствуют. Для того чтобы устранить такое пересечение, оставим каждую процедуру только в одной из групп, исключив её из остальных так, чтобы возникающая при этом связь между группами была бы минимальной. Таблица 3.9. Таблица покрытий групп алгоритмического автомата 1.2 1.3 1.6 1.7 2.3 2.4 2.8 3.5 3.6 3.8 4.5 4.6 4.7 5.6 5.8 6.7 6.8 7.8 a ()   b  ()  c () d  ()  e ()    ()  f ()   g  ()  h   ()     Рассмотрим процедуру 1;, которая входит в две группы (a и b). Если процедуру 1 удалить из группы а, то возникнет тяготение между группами а и b: У aa,b  У1, 2  У1,3  5  5  10 (рис. 3.12). Если же процедуру 1 удалить из группы b, то тяготение между группами aи b будет меньше: У ab,b  У1,6  У1,7  2  1  3 (рис. 3.13). 2 5 5 3 1 2 6 2 5 1 1 7 Рис. 3.12. Удаление процедуры 1 из группы a (1–2–3) 5 5 3 6 2 5 1 1 1 7 Рис. 3.13. Удаление процедуры 1 из группы b (1–6–7) Следовательно, процедуру 1 целесообразнее удалить из группы b, так как при этом взаимосвязь между группами а и b будет меньше, чем при удалении 107 процедуры 1 из группы а. Возможность удаления процедуры 1 из группы b ~ запишем в виде b  1, 6,7 . Аналогичным образом осуществим исключение пе~~~ ~~ ресечений из других групп. При этом получим a  1,2,3 , b  1, 6, 7 , c  2, 4 , ~~~ ~ ~~ ~ ~ ~~~ d  2, 3, 8 , e  3, 5, 6, 8 , f  4,5, 6 , g  4, 6, 7 , h  6, 7,8 (рис. 3.14). h 8 1 a 7 2 6 3 e 5 4 f Рис. 3.14. Объедиенние процедцр по блокам Для выбора минимального числа непересекающихся допустимых -связных групп процедур построим таблицу покрытий вида, приведённого в табл. 3.10. Таблица 3.10. Таблица покрытий процедур алгоритмического автомата a b c d e f g h 1  ~ 2  ~ ~ 3  4 5 6 7 ~ ~ 8 ~ ~ ~ ~ ~   ~  ~ ~ ~ ~   В табл. 3.10 знаком ~ показано, что процедура, сопоставленная со столбцом, может быть исключена из соответствующей группы. В связи с тем, что в группе e осталась лишь одна процедура 6, она может быть включена или в группу f, или в группу h. Тогда, очевидно, в минимальное множество допустимых -связных групп войдут группы а, f, h. Сопоставив с каждой из этих групп один блок, получим три блока УА: Ба, Бf и Бh. При этом в 108 зависимости от включения процедуры 6 в группу f или в группу h, получим два варианта блоков Бf и Бh. В том случае, когда CБi  CБдi , можно осуществить объединение полученных l блоков так, чтобы CБ1,...,l   CБi  CБдi . i 1 В нашем случае с учётом исключенных процедур имеем Ca  44 , C1f  42 , Ch1  28 при 6f; Ca  44 , C 2f  23 , Ch2  43 при 6h. При 6f можно объединить в один блок Бf,h группы f и h, так как С f , h  C f  Ch  42  28  70  CБд . Тогда будем иметь два блока: Бa, включающего процедуры 1, 2, 3, и Бf,h, включающего остальные процедуры 4, 5, 6, 7, 8. При 6h блок Бf можно объединить или с Ба, или с Бh, т. е. получим следующие два решения: 1) Ба,f и Бh ; 2) Ба и Бf,h. 109 РАЗДЕЛ 2. ТЕОРИЯ БЕСКОНЕЧНЫХ АВТОМАТОВ 4. Распознающие автоматы и формальные языки 4.1. Основы теории формальных языков и грамматик 4.1.1. Языки и трансляция программ Одним из важнейших приложений теории автоматов является теория формальных языков и грамматик, служащая математическим аппаратом для разработки языков программирования. В предыдущем разделе конечный автомат рассматривался как преобразователь информации, реагирующий на отдельные входные сигналы. Кроме этого, конечный автомат может выступать в роли распознавателя последовательностей входных сигналов. Входные сигналы на абстрактном уровне представляются в виде символов, последовательности которых называют предложениями, а их множества – языками. В этом случае конечный автомат рассматривается, как устройство, выполняющее алгоритмические операции над языками. Такими алгоритмическими операциями являются:  распознавание (выделение автоматом всех входных предложений, принадлежащих языку);  трансляция (преобразование предложений входного языка в некоторый выходной язык). Однако, не все языки могут быть распознаны и оттранслированы конечными автоматами, а только так называемые автоматные языки. Они относятся к простейшему классу языков. Языки программирования, в свою очередь, относятся к более сложному классу языков. Языки программирования, являющиеся языками высокого уровня, позволяют значительно уменьшить трудозатраты на описание любого алгоритма. Язык высокого уровня называют входным языком. Но в ЭВМ имеется свой собственный машинный язык команд. Для того, чтобы ЭВМ понимала и выполняла программу на входном языке, существует специальная программа на машинном языке – языковый процессор. Многие языковые процессоры построены на основе модели конечного автомата. Существует 2 типа языковых процессоров – интерпретаторы и трансляторы. Определение 4.1. Интерпретатор – программа, допускающая исходную программу и реализующая конструкции входного языка по мере распознавания, выдавая на выходе результаты вычислений. Определение 4.2. Транслятор – программа, допускающая на входе исходную программу и порождающая на выходе программу, функционально эквивалентную исходной (называемую объектной и написанную на объектном языке). 110 Объектный язык – либо машинный, либо промежуточный. В последнем случае транслятор строится одним из способов:  имеется второй транслятор с промежуточного языка на машинный;  имеется интерпретатор команд промежуточного языка. Различают трансляторы с языков высокого уровня – компиляторы, и с языков низкого уровня – ассемблеры. Современные компиляторы строятся, исходя из рассмотрения исходной программы как композиции основных уровней описания входного языка: лексики, синтаксиса, семантики и прагматики и выявления этих уровней в ходе компиляции. Первым блоком компилятора, реализованного как раз на модели конечного автомата, является лексический анализатор, или препроцессор, выделяющий и обрабатывающий лексемы – синтаксические единицы, задаваемые автоматными языками. Как уже говорилось ранее, основой языка является алфавит – набор допустимых элементарных знаков. Знаки могут объединяться в слова, рассматриваемые как неделимые конструкции языка, имеющие смысл. Таковыми могут быть идентификаторы, ключевые слова, константы, разделители и т.д. Уровни описания языка: 1. Лексика – словарный состав языка с описанием способов их представления. Предложения – конструкции из нескольких слов (простейшие – оператор). Более сложные предложения – это слова и простые предложения, построенные по правилам синтаксиса. 2. Синтаксис – описание правильных предложений. 3. Семантика – описание смысла предложений. 4. Прагматика – некоторое воздействие на транслятор, которое несет конкретная программа. Синтаксис, семантика и прагматика образуют семиотику. Исходя из этого, можно построить упрощенную функциональную модель транслятора (рис. 4.1). Справочник образов объектов ВхПр и ОПр Вход. прог. Лексический анализ Синтаксический анализ Семантический анализ и синтез ОПр Ошибки Рис. 4.1. Функциональная модель транслятора 111 Объек. прог. 1. Лексический анализ – перевод исходной программы на внутренний язык компилятора, где ключевые слова, идентификаторы, метки, константы приведены к одному формату и заменены дескрипторами (условными кодами – числами, символами). Дескриптор включает: класс (тип) лексемы (минимальная единица языка) + указатель на адрес памяти, где хранится информация о лексеме. Вместе с переводом проводится лексический контроль (выявление в программе недопустимых слов). 2. Синтаксический анализ – перевод последовательности образов лексем с выхода ЛА в форму промежуточной программы. Промежуточная программа – представление синтаксического дерева программы, отражающего структуру программы. Также выполняется синтаксический контроль. 3. Семантический анализ – различные виды семантической обработки (например, проверка семантических соглашений в программе – единственность описания идентификаторов, определение переменной до использования – может отсутствовать или выполняться позже на фазе оптимизации. Синтез объектной программы включает:  распределение и выделение памяти для основных программных объектов;  исследование каждого предложения ИПр и генерация семантически эквивалентных предложений объектного языка. Входная информация – синтаксическое дерево программы и выходные таблицы лексического анализатора (идентификаторов констант). Для разработки языка программирования необходимо определить его синтаксис, но для описания синтаксиса нужен свой метасинтаксический язык – язык для описания синтаксиса другого языка. Первый метасинтаксический язык – нормальная форма Бэкуса (или форма Бэкуса-Наура, сокращенно БНФ). Его основное назначение – представление в сжатом и компактном виде строго формальных и однозначных правил написания основных конструкций описываемого языка программирования. Грамматикой называется формальное определение синтаксиса языка программирования. В БНФ описываются два класса объектов: 1) основные символы языка программирования; 2) имена конструкций описываемого языка (так называемые металингвистические переменные). Металингвистическая формула описывает правила построения конструкций языка и состоит из двух частей. В левой части находится металингвистическая переменная, обозначающая соответствующкю конструкцию. Затем следует металингвистическая связка ::=, означающая «определяется как». В правой части указывается один или несколько вариантов построения конструкции, определяемой в левой части. Варианты разделяются связкой |, имеющей смысл «или». Металингвистические переменные обозначаются словами, поясняющими смысл описываемой конструкции, и заключаются в угловые скобки < >: <Металингвистическая переменная> ::= варианты построения конструкции 112 4.1.2. Представление языков с помощью грамматик Современное понимание языка сводится к тому, что язык это всякое средство общения, состоящее из [15]:  знаковой системы (множества допустимых последовательностей символов);  множества смыслов этой системы;  соответствия между последовательностями знаков и смыслами. Знаки – это буквы алфавита, математические обозначения, звуки и др. Мы рассматриваем в рамках математической лингвистики знаковые системы, где знаки – символы алфавита, а последовательности знаков – тексты. Тогда языки – это произвольные последовательности осмысленных текстов. Синтаксис языка – правила, определяющие множество текстов; семантика языка – описание множества смыслов и соответствия между смыслами и текстами. Семантика языка зависит от характера объектов, описываемых языком. Синтаксис меньше зависит от назначения языка, чем семантика, и может изучаться методами, не зависящими от содержания и назначения языка. Математический аппарат для изучения синтаксиса языков получил название теории формальных грамматик. С точки зрения синтаксиса, язык – это множество последовательных символов алфавита (формальных объектов). Рассмотрим основные положения этой теории. Символ (или буква) – это простой неделимый знак. Множество символов образует алфавит. Если A и B – алфавиты, причём АВ, то А является подалфавитом В. Цепочка – это упорядоченная последовательность символов алфавита. Пусть А – алфавит, тогда цепочки одинаковой длины являются элементами множества: Аn=AA...A и записывается в виде а1а2...аn (но не а1, а2, ..., аn), как это принято для обозначения элементов декартова произведения множеств. Одна буква – это тоже цепочка при n = 1. Цепочка без букв называется пустой цепочкой и обозначается , А. Также цепочки называют словами. Определение 4.3. Множество всех возможных цепочек (слов) над алфавитом A называют замыканием A и обозначают A*, так что А*=А0А1А2...=  n A , где А0={}, A1=А. n 0 Множество А* называется итерацией алфавита А. Множество А+ непустых цепочек называется усеченной итерацией алфавита А:  А+=А*\{}=  An . n 1 Каждая цепочка * имеет конечную длину  и равна числу букв в , при этом  = 0. Из цепочек образуются последовательности цепочек с помощью бинарных операций конкатенации (соединения) . Если   то    (за цепочкой  сразу записывается цепочка ). 113 Для повторяющихся обозначения:      для всех   . букв в цепочке используются сокращенные   x0, xх = х2, xxn-1 = xn. Для повторяющихся цепочек используются те же правила, например, xyxy = (xy)2x = x(yx)2, однако, символы скобок (, )А*. При преобразовании одних цепочек в другие используется понятие подцепочки. Цепочка  называется подцепочкой , если = , ,А* Иногда используется альтернативная терминология:  буква – слово;  алфавит – словарь;  цепочка – предложение. Тогда совокупность цепочек называется языком. Язык L над алфавитом А – это множество цепочек А*, т.е. LА*. Следовательно, операции над цепочками индуцируют операции на языках. Тогда L0 =, Ln= Ln-1L, nN, L+=  L n 1 n  , L*= L n . n 0 На основе вышеприведённой терминологии язык программирования для заданного алфавита А является подмножеством множества А*, включающим в себя только те предложения, которые считаются осмысленными (удовлетворяют синтаксису языка программирования). Это слишком общее определение формального языка как любого подмножества А*. Чтобы выделить отдельные классы языков, используемых на практике, применяются соотношения Туэ (по имени норвежского математика А. Туэ, который впервые сформулировал проблему распознавания равенства слов в ассоциативных системах). Соотношения Туэ – правила, согласно которым любой цепочке  = i  из А* ставится в сответсвие цепочка  = i из того же множества А* (i = 1,2,... n), и наоборот. Соотношения Туэ приводят к так называемым ассоциативным исчислениям (совокупности алфавита и схемы, для которых разрешается производить, исходя из любого слова в алфавите, любые действия, допустимые относительно схемы). Схема – конечный список пар слов. Но и соотношения Туэ слишком общи для исследования синтаксиса языков программирования: Следовательно, необходимо наложение ограничений на правила систем Туэ, т.е. введение односторонних правил, называемых продукциями или полусоотношениями (обозначают их ii). Это приводит к соозданию формального математического аппарата – формальных грамматик, которые 114 являются, по существу, полусистемами Туэ, и оказались наиболее приемлемым механизмом описания языков программирования. Любой формальный язык представляет собой множество цепочек в некотором конечном алфавите. Для задания описания формального языка нужно:  указать алфавит – совокупность символов (букв);  задать формальную грамматику, т.е. систему правил, по которым из символов строятся правильные цепочки. Определение 4.4. Формальный язык – язык, построенный по правилам некоторого логического исчисления, определённой формальной грамматикой. Определение 4.5. Формальная грамматика – система правил построения в заданном алфавите конечных знаковых последовательностей, множество которых образует некоторый формальный язык. Формальная грамматика является способом описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавита. 4.1.3. Порождающие и распознающие грамматики Различают порождающие и распознающие (или аналитические) грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит оно в язык или нет. Порождающие грамматики Словами языка, заданного формальной грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода. Чтобы задать формальную порождающую грамматику, требуется задать алфавиты терминалов и нетерминалов, набор правил вывода, а также выделить в множестве нетерминалов начальный. Определение 4.6. Формальной порождающей грамматикой называется четвёрка G=, где: T – набор (алфавит) терминальных символов; N – набор (алфавит) нетерминальных символов; P – набор правил вида: «левая часть»  «правая часть», где: «левая часть» – непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминал; «правая часть» – любая последовательность терминалов и нетерминалов; S – стартовый (начальный) символ из набора нетерминалов. 115 Распознающие (аналитические) грамматики Порождающие грамматики – не единственный вид грамматик, однако наиболее распространенный в приложениях к программированию. В отличие от порождающих грамматик, аналитическая (распознающая) грамматика задаёт алгоритм, позволяющий определить, принадлежит ли данное слово языку. Например,  любой регулярный язык может быть распознан при помощи грамматики, задаваемой конечным автоматом, а любая контекстно-свободная грамматика — с помощью автомата со стековой (магазинной) памятью. Если слово принадлежит языку, то такой автомат строит его вывод в явном виде, что позволяет анализировать семантику этого слова. 4.1.4. Классификация языков по Хомскому и их связь с распознающими автоматами По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более ограниченным подмножеством предыдущего (но и легче поддающимся анализу):  тип 0, неограниченные грамматики – возможны любые правила;  тип 1, контекстно-зависимые грамматики — левая часть может содержать один нетерминал, окруженный «контекстом» (последовательности символов, в том же виде присутствующие в правой части); сам нетерминал заменяется непустой последовательностью символов в правой части;  тип 2, контекстно-свободные грамматики – левая часть состоит из одного нетерминала;  тип 3, регулярные грамматики – более простые, эквивалентны конечным автоматам. Неограниченные грамматики – формальные грамматики типа 0 по иерархии Хомского (в отличие от более определённых и ограниченных типов). Этот класс грамматик представляет теоретический интерес, но практически не применяется как таковой. Контекстно-зависимые грамматики, или грамматики непосредственно составляющих – формальные грамматики типа 1, в которых каждое правило вывода указывает подстановку некоторой непустой цепочки вместо нетерминала при условии, что заменяемый нетерминал находится в окружении контекста Контекстно-свободные грамматики (КС-грамматики, бесконтекстные грамматики) – частный случай формальных грамматик (тип 2 по иерархии Хомского), у которых левые части всех продукций являются нетерминалами. Смысл термина «контекстно-свободная» заключается в том, что возможность применить продукцию к нетерминалу, в отличие от общего случая грамматики Хомского, не зависит от контекста этого нетерминала. 116 Язык, который может быть задан КС-грамматикой, называется контекстносвободным языком или КС-языком. Следует заметить, что по сути КСграмматика – другая форма БНФ. Регулярные грамматики – формальные грамматики типа 3 по иерархии Хомского. Регулярные грамматики определяют в точности все регулярные языки, и поэтому эквивалентны конечным автоматам и регулярным выражениям. Регулярные грамматики являются подмножеством контекстно-свободных. Задание грамматик набором правил Регулярная грамматика может быть задана набором правил как левая или правая регулярная грамматика. Правая регулярная грамматика – все правила могут быть в одной из следующих форм: 1. A → a 2. A → aB 3. A → ε Левая регулярная грамматика – все правила могут быть в одной из следующих форм: 1. A → a 2. A → Ba 3. A → ε, где – заглавные буквы (A, B) обозначают нетерминалы из множества N  строчные буквы (a, b) обозначают терминалы из множества Σ  ε - пустая строка, т.е. строка длины 0. Классы правых и левых регулярных грамматик эквивалентны – каждый в отдельности достаточен для задания всех регулярных языков. Любая регулярная грамматика может быть преобразована из левой в правую, и наоборот. Применение формальных грамматик Контекстно-свободные грамматики широко применяются для определения грамматической структуры в грамматическом анализе. Регулярные грамматики (в виде регулярных выражений) широко применяются как шаблоны для текстового поиска, разбивки и подстановки, в т.ч. в лексическом анализе. Основные классы языков могут быть определены классами абстрактных распознающих устройств (автоматов), которые также образуют соответствующую иерархию. На рис. 4.2 приведена иерархия языков и соответствующие ей иерархии грамматик и автоматов как распознающих устройств, основные из которых будут подробно описаны ниже. 117 Тип 0 Тип 1 Тип 2 Тип 3 Рекурсивноперечисляемые множества Машины Тьюринга НС-языки Линейноограниченные операторы КС-языки Автоматы с магазинной памятью Регулярные языки Конечные автоматы Рис. 4.2. Иерархия языков, грамматик и автоматов 4.2. Конечные автоматы и регулярные языки 4.2.1. Регулярные грамматики и языки Лексический анализ – процесс предварительной обработки исходной программы, на котором основываются лексические единицы программы – лексемы: ключевые (служебные) слова, идентификаторы, метки, константы, приводятся к единому формату и заменяются условными кодами или ссылками на соответствующие таблицы, а исключаются из текста программ. Лексический анализ – процесс аналитического разбора входной последовательности символов (например, такой как исходный код на одном из языков программирования) с целью получения на выходе последовательности символов, называемых «токенами» (подобно группировке букв в слова). Группа символов входной последовательности, идентифицируемая на выходе процесса как токен, называется лексемой. В процессе лексического анализа производится распознавание и выделение лексем из входной последовательности символов. Выход ЛА – поток образов и лексем – дескрипторов и таблиц. Классы лексем:  идентификаторы;  служебные (ключевые) слова;  разделители;  константы. Классы либо конечные (ключевые слова, разделители), либо бесконечные идентификаторы, константы, метки). Для идентификации лексем из бесконечных (бесконечно больших) классов используются специальные алгоритмы. 118 Разработка лексического анализатора выполняется с использованием теории регулярных языки и конечных автоматов. Классы одиночных лексем рассматриваются как формальные языки, множество предложений которых описывается с помощью соответствующей порождающей грамматики. Языки порождаются простейшей – регулярной грамматикой (класса 3). Построенная регулярная грамматика является источником, по которому конструируется вычислительное устройство, реализующее функцию распознавания предложений языка, порождаемого данной грамматикой. Для регулярных языков таким устройством является конечный автомат. Определение 4.7. Порождающая грамматика G=, правила которой имеют вид А→аВ или С→в, где A, B, C N, a,b  T называется регулярной (автоматной). Определение 4.8. Язык L(G), порождаемый автоматной грамматикой, называется автоматным языком или языком с конечным числом состояний. Пример 4.1. Класс идентификаторов (если идентификатором является последовательность, состоящая из букв и цифр, и первым символом, которой может быть только буква) описывается следующей порождающий регулярной грамматикой G=: N={I,K}, T={б,ц}, S={I}, P={1. I→б 2. I→бK 3. К→бK 4. К→цK 5. К→б 6. К→ц}. Процесс порождения идентификатора «ббцбц» описывается следующей последовательностью подстановок 2 3 4 3 6 I  бK  ббK  ббцK  ббцбK  ббцбц Данная грамматика не единственная. 4.2.2. Конечноавтоматные распознаватели Основной задачей лексического анализа является не порождение лексических единиц, а их распознавание. Математической моделью процесса распознавания регулярного языка является вычислительное устройство, которое называется конечным автоматом (КА). 119 Конечный автомат – вычислительное устройство, которое имеет фиксированный и конечный объём памяти и обрабатывает последовательность входных символов, принадлежащих некоторому конечному множеству. Существуют различные типы КА. Если функцией выхода КА является лишь указание на допустимость или недопустимость входной последовательности символов, такой КА называют конечным распознавателем. Определение 4.9. Конечным автоматом-распознавателем называется следующая пятёрка A  V , Q,  , q 0 , F  , где V  {a1 , a 2 ...a n } – входной алфавит (конечное множество символов); Q  {q 0 , q1 ...q n 1 } – алфавит состояний; δ: Q V  Q – функция переходов; q0Q – начальное состояние; FQ – множество заключительных состояний. На содержательном уровне функционирование КА можно представить следующим образом. Имеется бесконечная лента, разбитая на ячейки, в каждой из которых может находиться один символ из V. На ленте записана цепочка  V  ячейки слева и справа от цепочки не заполнены. Имеется конечное устройство управления (УУ) с читающей головкой, которая может последовательно считывать с ленты символы, передвигаясь вдоль ленты слева направо. При этом УУ может находиться в каком-либо одном состоянии из Q. Начинает свою работу УУ всегда в начальном состоянии q0  Q , а завершает в одном из заключительных состояний F  0 . Каждый раз при переходе к новой ячейке на ленте УУ переходит в новое состояние в соответствии с функцией  . Схематически конструкция КА показана на рис. 4.3. Отображение  можно передавать тремя способами:  совокупностью команд;  диаграммой состояний;  матрицей переходов. 1 2 … n-1 ai1 ai2 … aik Устройство управления Рис. 4.3. Схема конечного автомата-распознавателя 120 Команда КА записывается следующим образом: (qi , q j )  qk , где qi ,q k  Q, a j  V Читается: «КА находится в состоянии qi, читает с ленты символ aj и переходит в состояние qk». Графически команда представляется в виде дуги графа, идущей из вершины qi в вершину q k и помеченный символом a j выходного алфавита (рис. 4.4). qi aj qk Рис. 4.4. Графическое изображение команды Графическое представление всего отображения  называют диаграммой состояний КА. Диаграмма состояний в этом случае – это ориентированный граф, вершинам которого поставлены в соответствие символы из множества состояний Q, а дугам – команды отображения  . Если КА оказывается в ситуации (qi , a j ) , которая не является левой частью какой-либо команды, то он останавливается. Если же УУ считает все символы цепочки  , записанной на ленте, и при этом перейдёт в заключительное состояние qr  F , то говорят, что цепочка  допускается конечным автоматом. Матрица переходов КА строится следующим образом: столбцы матрицы соответствуют символам из входного алфавита, строки – символам из алфавита состояний, а элементы матрицы соответствуют состояниям, в которые переходит КА для данной комбинации входного символа и символа состояний. Построение КА из регулярной грамматики. КА – хорошая математическая модель для представления алгоритмов распознавания лексем в ЛА (особенно лексем из бесконечных классов). Источник, по которому строятся КА, – регулярная грамматика. Пусть задана регулярная грамматика G={T,N,P,S}, правила которой имеют вид: Ai  a j Ak или Ai  a j ,где Ai , Ak  N , a j  T Тогда КА A=, допускающий тот же самый язык, что порождает регулярная грамматика G, строится следующим образом: 1) V = T; 2) Q = N{Z}, ZN и ZT, Z – заключительное состояние; 3) q0 = {S}; 4) F = {Z}; 5) отображение (функция переходов)  строится в виде:  каждому правилу подстановки в грамматике G вида Ai  a j Ak ставится в соответствие команда вида ( Ai , a j )  Ak ;  каждому правилу подстановки вида Ai  a j ставится в соответствие команда вида ( Ai , a j )  Z . 121 Пример 4.2. Построить КА для грамматики из примера 4.1. Имеем A  V , Q, q0 ,  , F  , где 1) V  T  {á , ö} 2) Q  N  {Z }  {I , R, Z } 3) q 0  {S}  {I } 4) F  {Z } 5)  : а) в виде совокупности команд: (I , б)  Z (I , б)  K (K , б)  K (K , ц)  K (K , б)  Z (K , ц)  Z б) в виде диаграмм состояний: б ц I б К б Z ц б Рис. 4.5. Диаграмма состояний автомата Допустѝм и обратный переход: конечному автомату A  V , Q, q0 ,  , F  можно поставить в соответствие регулярную грамматику G  T , N , P, S  , у которой: 1) T = V; 2) N = Q; 3) S = {q0}; 4) множество правил подстановки Р строится следующим образом: каждой команде КА (qi , a j )  qk ставится в соответствие правило подстановки qi  a j qk , если qk  Q , или qi  a j , если qk  F . 4.2.3. Детерминированные и недетерминированные распознаватели Различают детерминированные и недетерминированные КА. КА называется недетерминированным (НДКА), если в диаграмме его состояний из одной вершины выходит несколько дуг с одинаковыми пометками (например, КА из примера 4.2, является НДКА) Классы языков, которые допускают ДКА и НДКА, совпадают, хотя НДКА, кажется, обладает большими возможностями, чем ДКА. 122 По описанию НДКА всегда можно построить описание ДКА. При этом НДКА А с входным алфавитом V, множеством состояний и функцией переходов  преобразуется в ДКА A’, у которого: 1) V’ = V; 2) q0’ = {q0}; 3) Q’ = {, {q0}, ,{q1},…, {q0,…, qn-1}}; 4) ’(q’, a) = { (q, a)} qq ' 5) заключительные состояния F’ – все подмножества Q, содержащие хотя бы одно заключительное состояние автомата А. Пример 4.3. Пусть регулярный язык порождается грамматикой G  N , T , P, S  , у которой: N = {S, R}, T = {a, b}, D = {S}, P = {SaS| aR, RbR| a}. Построим НДКА A = . Имеем: V = T = {a, b}; Q = {S, R,Z}; q0 = {S}; F = {Z}. Отображение  представлено на рис.4.6 в виде диаграммы состояний. S a a R a Z b Рис. 4.6. Диаграмма состояний недетерминированного автомата Построим эквивалентный ему ДКА A’ = . Его компонентами будут: 1) V’ = V = {a, b}; 2) Q’ = {{S}, {R}, {S,R,Z}}; остальные 4 состояния можно отбросить, так как ни в одно из них автомат попасть не может; 3) q0’ = {S}; 4) F’ = {{S,R,Z}}. 5) функция переходов  ' можно задать с помощью команд: ({S}, a)  {S , R, Z }; ({S , R, Z }, a)  {S , R, Z }; ({S , R, Z }, b)  {R} ({R}, b)  {R} ({R}, a)  {S , R, Z } или диаграммы состояний (рис.4.7). 123 {S} a {S,R,Z} b {R} a a b Рис. 4.7. Диаграмма состояний детерминированного автомата Теперь построим по описанию ДКА A ' регулярную G '  T ' , N ' , P ' , S '  . Введём новые обозначения элементам множества Q’: {S} – S’, {R} – R’, {S,R,Z} – K’ Имеем: N’ = {S’, R’, R’}, T’ = {a, b}, S’ = {S’} P’ = {{S’aK’, K’aK’|bR’|a, R’bR’| aK’| a}. грамматику 4.2.4. Лексические анализаторы (лексеры) Традиционно принято организовывать процесс лексического анализа, рассматривая входную последовательность символов как поток символов. При такой организации процесс самостоятельно управляет выборкой отдельных символов из входного потока. Распознавание лексем в контексте грамматики обычно производится путём их идентификации (или классификации) согласно идентификаторам (или классам) токенов, определяемых грамматикой языка. При этом любая последовательность символов входного потока (лексема), которая согласно грамматике не может быть идентифицирована как токен языка, обычно рассматривается как специальный токен-ошибка. Каждый токен можно представить в виде структуры, содержащей идентификатор токена (или идентификатор класса токена) и, если нужно, последовательность символов лексемы, выделенной из входного потока (строку, число и т. д.). Цель такой конвертации обычно состоит в том, чтобы подготовить входную последовательность для другой программы, например, для синтаксического анализатора, и избавить его от определения лексических подробностей в контекстно-свободной грамматике (что привело бы к усложнению грамматики). Лексический анализатор (англ. lexical analyzer или коротко lexer) – это программа или часть программы, выполняющая лексический анализ. Лексический анализатор обычно работает в две стадии: сканирование и оценка. На первой стадии, сканировании, лексический анализатор обычно реализуется в виде конечного автомата, определяемого регулярными выражениями. В нём кодируется информация о возможных последовательностях симво124 лов, которые могут встречаться в токенах. Например, токен «целое число» может содержать любую последовательность десятичных цифр. Во многих случаях первый непробельный символ может использоваться для определения типа следующего токена, после чего входные символы обрабатываются один за другим пока не встретится символ, не входящий во множество допустимых символов для данного токена. В некоторых языках правила разбора лексем несколько более сложные и требуют возвратов назад по читаемой последовательности. Полученный таким образом токен содержит необработанный исходный текст (строку). Для того чтобы получить токен со значением, соответствующим типу (например, целое или дробное число), на второй стадии выполняется оценка этой строки — проход по символам и вычисление значения. Токен с типом и соответственно подготовленным значением передаётся на вход синтаксического анализатора. Для практических целей необходимо, чтобы конечный распознаватель играл более активную роль, и сам определял момент окончания входной последовательности символов с выдачей сообщения о правильности или ошибочности входной цепочки. Для этих целей входная цепочка ограничивается справа концевым маркером ├ и в диаграмму состояний КА вводятся интерпретированные состояния. Будем обозначать эти состояния соответственно: Z – «допустить входную цепочку»; O – «запомнена ошибка во входной цепочке»; E – «отвергнуть входную цепочку». Состояния Z и E являются заключительными, и в них КА переходит при прочтении концевого маркера ├ соответственно после обработки правильной или ошибочной входной цепочки. Состояние О является промежуточным, в него КА переходит из любого допустимого состояния КА при обнаружении ошибки во входной цепочке и остаётся в нём до поступления концевого маркера, после чего осуществляется переход в состояние Е – «отвергнуть входную цепочку». На рис. 4.8 приведена модифицированная диаграмма состояний конечного распознавателя из примера 4.2. ц Z I |б К б б O |- E x Рис. 4.8. Модифицированная диаграмма состояний КА для распознавания идентификаторов 125 В общем случае может быть предложен следующий порядок конструирования лексического анализатора: Шаг 1. Выделить во входящем языке L(G) на основании описания его синтаксиса с помощью КС-грамматики G множество классов лексем Li , 1  i  k , k  1 Шаг 2. Построить для каждого класса лексем Li автоматную грамматику Gi , порождающую язык Li , т.е. Li  L(Gi ) Шаг 3. Для каждой автоматной грамматики Gi построить диаграмму состояний Di – неформальную модель распознавателя языка L(Gi ) Шаг 4. Выполнить «склеивание» диаграмм состояний Di . Шаг 5. Определить условия выхода из ЛА (переход ЛА в начальное состояние) при достижении конца произвольной лексемы из каждого класса лексем L (Gi). Шаг 6. Разбить символы входного алфавита на непересекающиеся классы. Шаг 7. Построить матрицу переходов лексического анализатора. Шаг 8. Выбрать формат и код образов лексем-дескрипторов вида (<тип лексем>, <адрес в таблице>). Шаг 9. Запрограммировать семантические подпрограммы и распознаватель по склеенной диаграмме переходов. 4.3. Автоматы с магазинной памятью 4.3.1. Контекстно-свободные грамматики и языки Контекстно-свободные грамматики традиционно служат основой для синтаксического анализа компиляции. Описание входного языка включает правила синтаксиса, в соответствии с которыми порождаются тексты программ. В то же время каждому синтаксическому правилу в КС-грамматике соответствует правило вывода грамматики. Последовательность правил вывода определяет структуру программы. Выводов некоторой цепочки  в грамматике G может быть много. Если некоторая промежуточная цепочка вывода содержит более одного вхождения нетерминала, то правила подстановки могут применяться к любому вхождению нетерминала. Если изменить лишь порядок применения правил при сохранении правил, вывод будет другой, но заключительная терминальная цепочка и её синтаксическая структура останутся неизменными. Множество выводов КС-грамматики ограничивается левосторонними и правосторонними. 126 Определение 4.10. Вывод в КС-грамматике называется левосторонним (правосторонним), если правила вывода применяются к самому левому (правому) вхождению нетерминального символа каждой цепочки вывода. Пример 4.4. Рассмотрим КС-грамматику G  N , T , P, S  T  {i,,*, (, )}, N  {E , R, F }, S  {E} P  { 1.E  E  R 2.E  R 3.R  R * F 4.R  F 5.F  ( E ) 6.F  i } Данная КС-грамматика порождает арифметические выражения, построенные из идентификаторов ( i ), знаков арифметических операций + и *, скобок ( и ). Для терминальной цепочки i+i*i построим: а) левосторонний вывод 1 2 4 6 3 4 6 6 E  E  R  R  R  F  R i  R i  R * F i  F * F i  i * F i  i * i б) правосторонний вывод 1 3 6 4 6 2 4 6 E  E  R  E  R * F  E  R *i  E  F *i  E  i *i  R  i *i  F  i *i i  i *i Получение синтаксической структуры программы в форме шагов вывода неудобно - в выводе не просматривается структура программы. Более наглядно представление программы в виде дерева вывода (дерева синтаксического разбора). Под деревом синтаксического разбора понимают конечный неориентированный граф, обладающий свойствами: 1) есть одна вершина, в которую не входит ни одна дуга – корень дерева, соответствующий начальному символу грамматики – аксиоме; 2) в каждую другую вершину входит лишь одна дуга; вершины без выходящих дуг называются заключительными вершинами дерева (листьями), в КС-грамматике им соответствуют терминалы, незаключительным вершинам – нетерминалы; 3) граф не содержит контуров. Формальное понятие дерева вывода Дерево вывода в КС-грамматике G= – это упорядоченное дерево, каждая вершина которого помечена символом X  T  N . Если внутренняя вершина помечена символом А, а её прямые потомки X 1 , X 2 ... X r , то AX1X2…Xr – правило грамматики G. Построение синтаксического дерева Dn по выводу S  0 , 1,..., n определяется следующим образом: 127 1. При n=0 D0 состоит из одной вершины, помеченной символом S – аксиома грамматики G. 2. Пусть при 0  m  n для вывода S  0 , 1 ,..., т построено дерево Dт и m  x1 Ax 2 , m1  x1x2 , A   , правило из P   x1 , x2 ,..., xr . В дереве Dm символы цепочки  m являются метками его листьев, выписанных слева направо. Тогда дерево вывода Dm1 с цепочкой листьев  m1 строится путём добавления новых листьев с метками X 1 , X 2 ... X r и соответствующих рёбер. 3. Дерево Dn – искомое дерево для вывода S  0 , 1 ,..., n . В случае полного вывода цепочка  n состоит из терминальных символов, следовательно, вывод и дальнейшее построение дерева вывода уже невозможны. На рисунке 4.9 показано дерево синтаксического разбора цепочки i  i * i E R E + R R F F i i * F i Рис. 4.9. Дерево синтаксического разбора Левостороннему выводу цепочки соответствует обход её дерева вывода сверху вниз и слева направо и наоборот для правостороннего вывода. Определение 4.11. КС-грамматика называется однозначной, если для некоторой цепочки   ( N  T )  существует только одно дерево вывода. В противном случае – неоднозначной. Однозначность или неоднозначность – это свойство грамматики G , а не языка L(G) . Один тот же язык можно описать с помощью бесконечного множества порождающих его грамматик. Для практических целей рассматриваются лишь однозначные грамматики, которые обеспечивают однозначную семантическую интерпретацию исходной программы и получении машинной программы. Пример 4.5. Для языка из примера 4.4 грамматика с правилами EE+E|E*E|i неоднозначна, так как цепочка i+i*i имеет 2 дерева вывода (рис. 4.10). 128 E E E E E + * * R i i E i E E + i F i i Рис. 4.10. Варианты деревьев вывода Поэтому такая грамматика не может служить основой для выполнения синтаксического анализа. Определение 4.12. КС-грамматика называется: а) леворекурсивной, если в ней имеются выводы вида * X  X , где X  N ,   V  б) праворекурсивной * X X , где X  N ,   V  в) самовставляющей * X  X  , где X  N ,  ,   V  КС-грамматика G называется рекурсивной, если имеет место один из случаев а) – в). В общем случае любая КС-грамматика, описывающая язык программирования, является рекурсивной. Важным является выявление того или иного вида рекурсии при использовании того или иного метода синтаксического разбора. Различные методы построения дерева допускают, как правило, только один вид рекурсии. Задача синтаксического разбора: для заданного предложения и грамматики построить треугольник и попытаться заполнить его внутреннюю часть деревом синтаксического разбора (рис. S a1, a2, …, an Рис. 4.11. Дерево синтаксического разбора Стратегии синтаксического разбора (заполнения внутренней части треугольника) приведены на рис. 4.12. 129 S S а) б) a1, a2, …, an S в) a1, a2, …, an a1, a2, …, an Рис. 4.12. Стратегии синтаксического разбора На рис. 4.12а изображена стратегия синтаксического разбора, называемая разбором сверху вниз. Программа может состоять из многих тысяч предложений, поэтому методы, требующие размещения в оперативной памяти всего предложения, на практике неприемлемы. Поэтому используются методы, заполняющие треугольник, используя часть предложения. Например, очевидный способ разбора предложения – перебирать слова по одному слева направо в естественной последовательности. При этом используются две основные стратегии разбора:  разбор сверху вниз и слева направо (рис. 4.12.б);  разбор снизу вверх и слева направо (рис.4.12.в). На практике разработано большое количество алгоритмов разбора. Они используют ту или иную стратегию и часто накладывают ограничения на правила КС-грамматик, т. е. исходная КС-грамматика перед использованием в качестве основы синтаксического разбора должна быть подвергнута определённым преобразованиям, которые обеспечивают:  однозначность, детерминированность грамматического разбора;  устранение лишних шагов в дереве разбора;  простые эмпирические критерии выбора продукции (правило вывода), из множества альтернативных. Ниже будут рассмотрены преобразования, не затрагивающие способности порождать преобразованной КС-грамматикой того же языка, что и исходная КС-грамматика. Для КС-грамматик существует несколько стандартных способов задания, так называемых нормальных форм. Рассмотрим основные из них. 1. Каждая КС-грамматика G= эквивалентна КС-грамматике G’= в нормальной форме Хомского, все порождающие правила из множества P’ грамматики G’ имеют вид:  ABC и Aa, где A, B, CN’, a T;  или S  , если L(G) и при этом аксиома S не встречается в правых частях правил подстановки. Алгоритм перевода КС-грамматики в НФХомского Для каждой подстановки из множества Р вида AA1A2…Ak, k>2, включить в множество P’ правил преобразованной грамматики подстановки вида: 130 AA1‘ A2‘AAk-1‘Ak’ где Ai’ = Ai, если AiN, i=1,…,k, и Ai – новый нетерминал, если AiT, – новый нетерминал. 2. Другая стандартная форма – нормальная форма Грейбах. КС-грамматика G называется грамматикой в нормальной форме Грейбах, если все порождающие правила в ней имеют вид Ab, где AN, bT, N*. 4.3.2. Понятие, структура и принцип работы магазинного автомата Описание КС-языка с помощью порождающей КС-грамматики – ещё не описание алгоритма порождения предложений этого языка. Правила подстановки грамматики (Р) – не последовательность предписаний, а совокупность разрешений, причём порядок их примененияв грамматике произволен. В алгоритме же должен быть задан жёсткий порядок применения отдельных инструкций. Получение алгоритмического описания процесса распознавания языка – первоочередная задача при разработке блока синтаксического анализа транслятора. Одним из способов описания алгоритма распознавания языка является задание его в виде некоторого распознающего устройства. Конечный автомат-распознаватель может решать лишь такие задачи, которые требуют фиксированного и конечного объёма памяти. Однако возникает много задач, которые нельзя решить при таком ограничении. Распознавателем КС-языков является класс автоматов с магазинной памятью (МП-автоматы). Именно эти устройства используются в большинстве практически работающих трансляторов для синтаксического анализа программ. МП-автомат – это недетерминированный распознаватель, в потенциально бесконечной памяти которого элементы информации хранятся и используются как патроны в магазине. МП-автомат – это конечный автомат, снабжённый дополнительным стеком (магазином) для хранения промежуточной информации потенциально бесконечного объёма. В МП-автомате комбинируется память конечного автомата и магазинная память. МП-автомат находится в одном из конечного числа состояний и имеет магазин, куда он может помещать и откуда может извлекать информацию. На каждом шаге действия автомата конфигурация его памяти может изменяться за счет перехода в новое состояние, а также вталкивания символа в магазин или выталкивания из него. В отличие от конечного автомата МП-автомат может обрабатывать один входной символ в течение нескольких шагов. Дадим формальное определение и содержательное описание функционирования МП-автомата. 131 Определение 4.13. Недетерминированным МП-автоматом называется семёрка М=, где А – конечное множество входных символов (входной алфавит); Q – конечное множество внутренних состояний (алфавит состояний); Г – конечное множество магазинных символов; q0  Q – начальное состояние автомата; Z 0  Г – начальный (первый) символ в магазинной памяти; F  Q – множество заключительных состояний;  – отображение Q  A  Г в множество подмножеств Q  Г * т.е. отображение вида  : Q  A  Ã  (Q  Ã*) . Структура МП-автомата приведена на рисунке 4.13. Входная лента a b b Головка чтения a c a c b движение головки Управляющее устройство Головка Чт/Зп C B C A  Лента Магазинной памяти маркер дна стека Рис. 4.13. Модель МП-автомата Автомат имеет конечное множество состояний, конечное множество входных символов, неограниченную снизу вспомогательную ленту (ленту магазинной памяти или просто МП). «Дно» магазина (самый нижний символ) отмечается специальным символом – маркером дна (). МП определяется свойствами «первым введён – последним выведен». При записи символа в магазин его содержимое сдвигается на одну ячейку вниз, а на освободившееся место записывается требуемый символ. Говорят, «символ вталкивается в магазин». Для чтения доступен только самый последний (верхний) символ магазина. Он после чтения либо остается в магазине, либо удаляется из него (выталкивается из магазина). За один такт работы МП-автомата из магазина можно удалить не более одного символа. 132 Каждый шаг работы МП-автомата задаётся множеством правил перехода из одних состояний в другие. Переходы в общем случае определяются: а) состоянием МП-автомата; б) верхним символом магазина; в) текущим входным символом. Множество правил перехода называется управляющим устройством. В зависимости от полученной информации, УУ реализует один такт работы МПавтомата, который включает в себя три операции: 1) операции над магазином: - втолкнуть в магазин определенный символ (ВТОЛКНУТЬ (А), где А – магазинный символ); - вытолкнуть верхний символ из магазина (ВЫТОЛКНУТЬ); - оставить содержимое магазина без изменений; 2) операции над состоянием: - перейти в заданное новое состояние (СОСТОЯНИЕ (S), где S – следующее состояние); - остаться в прежнем состоянии; 3) операции над входом: - перейти к следующему входному символу и сделать его текущим (СДВИГ); - оставить данный входной символ текущим, т.е. держать его до следующего шага (ДЕРЖАТЬ). Обработка входной цепочки МП-автомата начинается в некотором выделенном состоянии при определённом содержимом магазина. Затем автомат выполняет операции, задаваемые УУ. При этом выполняется либо завершение обработки, либо переход в новое состояние. При переходе даётся новый верхний символ магазина, новый текущий символ, и автомат переходит в новое состояние, цикл работы автомата повторяется. МП-автомат называется МП - распознавателем, если у него два выхода: ДОПУСТИТЬ и ОТВЕРГНУТЬ. Рассмотрим МП-автомат, распознающий слова языка L  0 n 1n n  1, т.е. слова, состоящие из n нулей и следующих за ними n единицу. Для этого автомата A={0, 1, ├ } – входной алфавит, Q={q1, q2} – алфавит состояний, Г = {z, #} – алфавит магазинных символов, ├ – символ конца цепочки на входной ленте,  – маркер дна магазина, q1 – начальное состояние, # – начальное содержание магазина. Первый способ описания работы УУ для этого автомата (этот автомат является МП-распознавателем) осуществляется в соответствии с управляющими таблицами 4.1, 4.2 для q1, q2. 133 Таблица 4.1. Управляющая таблица для состояния q1 Состояние q1 Магазин Вход 1 Z СОСТОЯНИЕ (q1) СОСТОЯНИЕ (q2) ВТОЛКНУТЬ (Z) ВЫТОЛКНУТЬ СДВИГ СДВИГ СОСТОЯНИЕ (q1) ОТВЕРГНУТЬ  ВТОЛКНУТЬ (Z) СДВИГ Таблица 4.2. Управляющая таблица для состояния q2 Состояние q2 Магазин Вход 1 Z ОТВЕРГНУТЬ СОСТОЯНИЕ (q2) ВЫТОЛКНУТЬ СДВИГ ОТВЕРГНУТЬ ОТВЕРГНУТЬ  ├ ОТВЕРГНУТЬ ОТВЕРГНУТЬ ├ ОТВЕРГНУТЬ ДОПУСТИТЬ Действие автомата для каждого сочетания входного символа и верхнего символа магазина. Работа МП-автомата при распознавании конкретной цепочки описывается обычно в виде последовательности конфигурации МП-автомата. Слева – магазин, в середине – состояние, справа – необработанная часть входной цепочки. Таблица 4.3. Последовательность конфигураций МП-автомата Магазин Состояние Входная лента q1 Считает 000111├  кол-во нуq1 00111├ Z лей и свеq1 0111├ ZZ ряет с коq1 111├ ZZZ личеством q2 11├ ZZ единиц q2 1├ Z q2 ├  ДОПУСТИТЬ. Второй способ описания МП-автомата (более формальный) – в виде команд. Команда записывается в виде: q, a, Z   q1 ,  1 ,......, qm ,  m  где q, q1 ,..., qm  Q; a  A, z  Г ,  1 ,  2 ,....,  m  Г * Интерпретация: МП-автомат находится в состоянии q, считывает входной символ а и верхний символ магазина Z, переходит в состояние qi, заменяя сим134 вол Z в магазине на символ  1 ,1  0  m и продвигает входную головку на 1 символ. Если при выполнении команды сдвига входной ленты не выполняется, то запись команды q, , z   q1 ,  1 ,..., qm ,  m  и используется лишь для изменения содержимого магазина. Схема работы автомата приведена на рис.4.14. Состояние q1 # Состояние q2  1  # втолкнуть(z) 1 отвергнуть  z 1 вытолкнуть вытолкнуть вытолкнуть  z допустить 1 отвергнуть) втолкнуть(z) 1 вытолкнуть Рис. 4.14. Схема работы МП-автомата Различают детерминированные и недетерминированные МП-автоматы. Определение 4.14 МП-автомат называют детерминированным, если среди команд его нет двух таких, у которых совпадают части, стоящие слева от стрелки и не совпадают части, стоящие справа от стрелки. В противном случае, когда для заданного состояния и текущих входного и магазинного символов возможны переходы автомата в различные состояния, его называют недетерминированным. Связь КС-языков и недетерминированных МП-автоматов выражается теоремами. Класс языков, допускаемых магазинными автоматами при пустом магазине, есть в точности класс КС языков. Теорема 4.1. Пусть L(G) – КС-язык, порождаемый грамматикой G = в нормальной форме Грейбах. Тогда существует недетерминированный нисходящий МП-автомат M, такой, что он допускает все слова языка L(G) и только их, причём автомат M  A, Q, Г ,  , q0 , z0 , F  строится следующим образом: 1) A = T; 2) Q = {q1}; 3) Г = N; 4) q0 = q1; 5) Z0 = S; 6) F = ; 7) (q1,)(q1, a, B) всегда, когда подстановка Ba принадлежит множеству правил P грамматики G, при этом BN, aT, {NT}*. 135 Теорема 4.2. Пусть L() – язык, допускаемый магазинным автоматом M = . Тогда существует такая КС – грамматика G = N,T,P,S, что L(G) = L(), где 1) Т = A; 2) N – множество вида {q, B,p), q,p Q и BГ; 3) подстановка S(q0, z0, q)P при любом qQ; 4) подстановки (q,B,p)(q1,B1,q2)(q2,B2,q3)…(qm,Bm,qm+1) принадлежат множеству P для всех q, q1, q2, …, qm+1Q, p=qm+1, для любого a{A{}} и любых B, B1, B2, …,Bm Г таких, что (q1, B1B2…Bm)(q, a, B). Если же m=0, то q1 = p, p(q, a, B) и (q, B, p)a принадлежит множеству P. Пример 4.6. Дана КС – грамматика G = N, T, P, S, у которой N = {S,D,B}, T = {a, b} и Р ={SaB SbD DaS Da DbDD BaBB BbS Bb}. В соответствии с теоремой 4.1 МП-автомат M  A, Q, F ,  , q0 , z0 , F  допускающий данный КС- язык, будет включать в себя компоненты: A  a, b Q  q1  Г  S , D, B q 0  q1 z0  S  : 1.q1 , a, S   q1 , B , т.к.S  aB   P 2.q1 , b, S   q1 , D , т.к.S  bD   P 3.q1 , a, D   q1 , S , q1 ,  , т.к.D  aS u D  a   P 4.q1 , b, D   q1 , DD, т.к.D  bDD  P 5.q1 , a, B   q1 , BB , т.к.B  aBB   P 6.q1 , b, B   q1 , S , q1 ,  , т.к.B  bS и B  b   P Построенный автомат является недетерминированным, т.к. в 3 и 6 правилах допускается неоднозначность перехода для одной и той же комбинации состояния входного и магазинного символов. В общем случае, классы языков, допускаемых детерминированными и недетерминированными МП-автоматами, не совпадают. 136 На практике используются детерминированные методы разбора, для так называемых детерминированных КС – языков, которые хотя и уже всего класса КС – языков, но большинство языков программирования можно отнести к классу этих языков. Последние позволяют строить высокоэффективные алгоритмы синтаксического разбора. Атрибутные автоматы с МП отличаются от обыкновенных тем, что символы и состояние снабжены атрибутами, которые обрабатываются в процессе его работы. 4.3.3. Синтаксические анализаторы (парсеры) Синтаксический анализ (парсинг) — это процесс сопоставления линейной последовательности лексем (слов, токенов) языка с его формальной грамматикой. Результатом обычно является дерево разбора (синтаксическое дерево). Обычно применяется совместно с лексическим анализом. Синтаксический анализатор (парсер) — это программа или часть программы, выполняющая синтаксический анализ. При парсинге исходный текст преобразуется в структуру данных, обычно — в дерево, которое отражает синтаксическую структуру входной последовательности и хорошо подходит для дальнейшей обработки. Как правило, результатом синтаксического анализа является синтаксическая структура предложения, представленная либо в виде дерева зависимостей, либо в виде дерева составляющих, либо в виде некоторой комбинации первого и второго способов представления. Различные языковые конструкции, имеющие «синтаксис», поддаются автоматическому анализу:  языки программирования — разбор исходного кода языков программирования, в процессе трансляции (компиляции или интерпретации);  структурированные данные — данные, языки их описания, оформления и т. д. (например, XML, HTML, CSS, ini-файлы, специализированные конфигурационные файлы и т. п.);  построение индекса в поисковой системе;  SQL-запросы (DSL-язык);  математические выражения;  регулярные выражения (которые, в свою очередь, могут использоваться для автоматизации лексического анализа);  формальные грамматики;  лингвистика — человеческие языки (например, машинный перевод и другие генераторы текстов). Существует несколько типов алгоритмов работы синтаксического анализатора: 1) нисходящий парсер (англ. top-down parser) — продукции грамматики раскрываются, начиная со стартового символа, до получения требуемой последовательности токенов: 137  метод рекурсивного спуска;  LL-анализатор; 2) восходящий парсер (англ. bottom-up parser) — продукции восстанавливаются из правых частей, начиная с токенов и кончая стартовым символом:  LR-анализатор;  GLR-парсер. Каким образом парсеры реагируют на некорректные входные данные и восстанавливаются после ошибок? Простейший способ реагирования на некорректную входную цепочку лексем — завершить синтаксический анализ и вывести сообщение об ошибке. Однако часто оказывается полезным найти за одну попытку синтаксического анализа как можно больше ошибок. Именно так ведут себя трансляторы большинства распространённых языков программирования. Таким образом,  перед обработчиком ошибок синтаксического анализатора стоят следующие задачи:  он должен ясно и точно сообщать о наличии ошибок;  он должен обеспечивать быстрое восстановление после ошибки, чтобы продолжать поиск других ошибок;  он не должен существенно замедлять обработку корректной входной цепочки. Перечислим наиболее известные стратегии восстановления после ошибок. 1. Восстановление в режиме паники При обнаружении ошибки синтаксический анализатор пропускает входные лексемы по одной, пока не будет найдена одна из специально определённого множества синхронизирующих лексем. Обычно такими лексемами являются разделители, например, ; , ) или }. Набор синхронизирующих лексем должен определять разработчик анализируемого языка. При такой стратегии восстановления может оказаться, что значительное количество символов будут пропущены без проверки на наличие дополнительных ошибок. Данная стратегия восстановления наиболее проста в реализации. 2. Восстановление на уровне фразы Иногда при обнаружении ошибки синтаксический анализатор может выполнить локальную коррекцию входного потока так, чтобы это позволило ему продолжать работу. Например, перед точкой с запятой, отделяющей различные операторы в языке программирования, синтаксический анализатор может закрыть все ещё не закрытые круглые скобки. Это более сложный в проектировании и реализации способ, однако, в некоторых ситуациях, он может работать значительно лучше восстановления в режиме паники. Естественно, данная стратегия бессильна, если настоящая ошибка произошла до точки обнаружения ошибки синтаксическим анализатором. 138 3. Продукции ошибок Знание наиболее распространённых ошибок позволяет расширить грамматику языка продукциями, порождающими ошибочные конструкции. При срабатывании таких продукций регистрируется ошибка, но синтаксический анализатор продолжает работать в обычном режиме. 4.4. Машины Тьюринга и линейно-ограниченные автоматы 4.4.1. Неограниченные и контекстно-зависимые грамматики Неограниченные грамматики — формальные грамматики типа 0 по иерархии Хомского (в отличие от более определённых и ограниченных типов). В этих грамматиках на левую и правую части продукции не накладывается никаких ограничений. Эти грамматики характеризуются правилами подстановки вида α → β, где на цепочки αV+ , βV* не накладывается никаких дополнительных ограничений. Обычно α включает по крайней мере один нетерминал, однако Хомский не исключает и возможность продукций, в которых терминальная цепочка заменяется на другую терминальную, как например, ab → ba. Общего алгоритма распознавания для этого типа грамматик не существует. Этот класс грамматик представляет теоретический интерес, но практически не применяется как таковой в силу своей сложности. Для распознавания языков, порождаемых этими грамматиками, используются машины Тьюринга – мощные, абстрактные, и, следовательно, неприменимые на практике математические модели, которые используются в информатике. Класс языков, порождаемых грамматиками типа 0, совпадает с классом рекурсивно-перечислимых множеств слов, поэтому он может быть назван классом рекурсивно-перечислимых языков. Класс рекурсивно-перечислимых множеств слов распознается машинами Тьюринга. Контекстно-зависимые грамматики – формальные грамматики типа 1, в которых используются правила вида α → β, где |α|  |β|. Благодаря этому неравенству эти грамматики называются ещё неукорачивающими. Контекстно-зависимые грамматики содержат важный подкласс НСграмматик. Определение 4.15. НС-грамматикой (или грамматикой непосредственносоставляющих) называется грамматика, правила которой имеют вид αAβ → αβ, где A  N; α, β  V*,   V+. Цепочки α и β фактически задают контекст, в котором нетерминал A можно заменять на непустой цепочкой . Языки, порождаемые НС-грамматиками, называются НС-языками. 139 4.4.2. Машины Тьюринга и способы их построения Машина Тьюринга (МТ) – абстрактный исполнитель (абстрактная вычислительная машина). Была предложена Аланом Тьюрингом в 1936 году для формализации понятия алгоритма. Машина Тьюринга является расширением конечного автомата и, согласно тезису Чёрча–Тьюринга, способна имитировать все другие исполнители (с помощью задания правил перехода), каким-либо образом реализующие процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен Устройство машины Тьюринга В состав машины Тьюринга входит бесконечная в обе стороны лента (возможны машины Тьюринга, которые имеют несколько бесконечных лент), разделённая на ячейки, и управляющее устройство, способное находиться в одном из множества состояний. Число возможных состояний управляющего устройства конечно и точно задано. Управляющее устройство может перемещаться влево и вправо по ленте, читать и записывать в ячейки ленты символы некоторого конечного алфавита. Выделяется особый пустой символ, заполняющий все клетки ленты, кроме тех из них (конечного числа), на которых записаны входные данные. Управляющее устройство работает согласно правилам перехода, которые представляют алгоритм, реализуемый данной машиной Тьюринга. Каждое правило перехода предписывает машине, в зависимости от текущего состояния и наблюдаемого в текущей клетке символа, записать в эту клетку новый символ, перейти в новое состояние и переместиться на одну клетку влево или вправо. Некоторые состояния машины Тьюринга могут быть помечены как терминальные, и переход в любое из них означает конец работы, остановку алгоритма. Машина Тьюринга называется детерминированной, если каждой комбинации состояния и ленточного символа в таблице соответствует не более одного правила. Если существует пара «ленточный символ — состояние», для которой существует 2 и более команд, такая машина Тьюринга называется недетерминированной. Описание машины Тьюринга Конкретная машина Тьюринга задаётся перечислением элементов множества букв алфавита A, множества состояний Q и набором правил, по которым работает машина. Они имеют вид: qiaj→qi1aj1dk (если головка находится в состоянии qi, а в обозреваемой ячейке записана буква aj, то головка переходит в состояние qi1, в ячейку вместо aj записывается aj1, головка делает движение dk, которое имеет три варианта: на ячейку влево (L), на ячейку вправо (R), остаться на месте (N)). Для каждой возможной конфигурации имеется ровно одно правило. Правил нет только для заключительного состояния, попав в которое машина останавливается. Кроме того, необходимо указать конечное и начальное состояния, начальную конфигурацию на ленте и расположение головки машины. 140 Пример 4.7. Приведём пример Машины Тьюринга для умножения чисел в унарной системе счисления. Машина работает по следующему набору правил: Таблица 4.4. Набор правил Машины Тьюринга Набор правил Набор правил q0*→q0*R q4a→q4aR q01→q01R q4=→q4=R q0×→q1×R q41→q41R q11→q2aR q4*→q51R q21→q21L q5*→q2*L q2a→q2aL q6a→q61R q2=→q2=L q6×→q7×R q2×→q3×L q7a→q7aR q31 → q4aR q71→q2aR q3a→q3aL q7=→q8=L q3*→q6*R q8a→q81L q4×→q4×R q8×→q9H Умножим с помощью МТ 3 на 2 в единичной системе (табл.4.5). В протоколе указаны начальное и конечное состояния МТ, начальная конфигурация на ленте и расположение головки машины (подчёркнутый символ). Полнота по Тьюрингу Можно сказать, что машина Тьюринга представляет собой простейшую вычислительную машину с линейной памятью, которая согласно формальным правилам преобразует входные данные с помощью последовательности элементарных действий. Элементарность действий заключается в том, что действие меняет лишь небольшой кусочек данных в памяти (в случае машины Тьюринга — лишь одну ячейку), и число возможных действий конечно. Несмотря на простоту машины Тьюринга, на ней можно вычислить всё, что можно вычислить на любой другой машине, осуществляющей вычисления с помощью последовательности элементарных действий. Это свойство называется полнотой. Один из естественных способов доказательства того, что алгоритмы вычисления, которые можно реализовать на одной машине, можно реализовать и на другой, — это имитация первой машины на второй. Имитация заключается в следующем. На вход второй машине подаётся описание программы (правил работы) первой машины D и входные данные X, которые должны были поступить на вход первой машины. Нужно описать такую программу (правила работы второй машины), чтобы в результате вычислений на выходе оказалось то же самое, что вернула бы первая машина, если бы получила на вход данные X. Как было сказано, на машине Тьюринга можно имитировать (с помощью задания правил перехода) все другие исполнители, каким-либо образом реализующие процесс пошагового вычисления, в котором каждый шаг вычисления достаточно элементарен. 141 Таблица 4.5. Умножение с помощью машины Тьюринга На машине Тьюринга можно имитировать машину Поста, нормальные алгоритмы Маркова и любую программу для обычных компьютеров, преобразующую входные данные в выходные по какому-либо алгоритму. В свою очередь, на различных абстрактных исполнителях можно имитировать Машину Тьюринга. Исполнители, для которых это возможно, называются полными по Тьюрингу (Turing complete). Есть программы для обычных компьютеров, имитирующие работу машины Тьюринга. Но следует отметить, что данная имитация неполная, так как в ма142 шине Тьюринга присутствует абстрактная бесконечная лента. Бесконечную ленту с данными невозможно в полной мере имитировать на компьютере с конечной памятью (суммарная память компьютера — оперативная память, жёсткие диски, различные внешние носители данных, регистры и кэш процессора и др. — может быть очень большой, но, тем не менее, всегда конечна). 4.4.3. Модификации машин Тьюринга Модель машины Тьюринга допускает расширения. Можно рассматривать машины Тьюринга с произвольным числом лент и многомерными лентами с различными ограничениями. Однако все эти машины являются полными по Тьюрингу и моделируются обычной машиной Тьюринга. Машина Тьюринга, работающая на полубесконечной ленте В качестве примера такого сведения рассмотрим следующую теорему: Для любой машины Тьюринга существует эквивалентная машина Тьюринга, работающая на полубесконечной ленте. Рассмотрим доказательство, приведённое Ю. Г. Карповым в книге «Теория автоматов». Доказательство этой теоремы конструктивное, то есть мы дадим алгоритм, по которому для любой машины Тьюринга может быть построена эквивалентная машина Тьюринга с объявленным свойством. Во-первых произвольно занумеруем ячейки рабочей ленты МТ, то есть определим новое расположение информации на ленте (рис. 4.15). Рис. 4.15. Ячейки машины Тьюринга Затем перенумеруем ячейки, причём будем считать, что символ «*» не содержится в словаре МТ (рис. 4.16). Рис. 4.16. Перенумерация ячеек машины Тьюринга Наконец, изменим машину Тьюринга, удвоив число её состояний, и изменим сдвиг головки считывания-записи так, чтобы в одной группе состояний работа машины была бы эквивалентна её работе в заштрихованной зоне, а в другой 143 группе состояний машина работала бы так, как исходная машина работает в незаштрихованной зоне (рис.4.17). Если при работе МТ встретится символ ‘*’, значит головка считывания-записи достигла границы зоны. Рис. 4.17. Преобразование машины Тьюринга Начальное состояние новой машины Тьюринга устанавливается в одной или другой зоне в зависимости от того, в какой части исходной ленты располагалась головка считывания-записи в исходной конфигурации. Очевидно, что слева от ограничивающих маркеров «*» лента в эквивалентной машине Тьюринга не используется. Двумерные машины Тьюринга Муравей Лэнгтона — это двумерная машина Тьюринга с очень простыми правилами, изобретенная Крисом Лэнгтоном. Рассмотрим бесконечную плоскость, разбитую на клетки, покрашенные некоторым образом в чёрный и белый цвет. Пусть в одной из клеток находится «муравей», который на каждом шаге может двигаться в одном из четырёх направлений в клетку, соседнюю по стороне. Муравей движется согласно следующим правилам: На чёрном квадрате — повернуть на 90° влево, изменить цвет квадрата на противоположный, сделать шаг вперед на следующую клетку На белом квадрате — повернуть на 90° вправо, изменить цвет квадрата на противоположный, сделать шаг вперед на следующую клетку Эти простые правила вызывают довольно сложное поведение: после некоторого периода довольно случайного движения, муравей, видимо, начинает непременно строить дорогу из 104 шагов, повторяющуюся бесконечно, независимо от изначальной раскраски поля. Это наводит на мысль, что «магистраль144 ное» поведение является аттрактором муравья Лэнгтона. Муравей Лэнгтона также может быть описан как клеточный автомат, в котором почти все поле покрашено в чёрно-белый цвет, а клетка с «муравьем» имеет один из восьми различных цветов, кодирующих соответственно все возможные комбинации чёрного/белого цвета клетки и направления движения муравья. Другие абстрактные исполнители и формальные системы вычислений:  Нормальный алгоритм Маркова (продукционное программирование);  Машина Поста (автоматное программирование);  Рекурсивная функция (теория вычислимости);  Лямбда-исчисление (функциональное программирование);  Brainfuck (императивное программирование). 4.4.4. Линейно-ограниченные автоматы Машина Тьюринга называется линейно-ограниченным автоматом, если существует такое число C, что в процессе обработки входной ленты, на которой в начальной конфигурации находится цепочка , машина не может использовать более чем C|| ячеек ленты. Таким образом,  объём памяти такого автомата не является неограниченным, как у машины Тьюринга, а определяется длиной последовательности входных символов. Для таких автоматов доказана следующая теорема. Теорема 4.3. Множество цепочек над конечным словарём является языком типа 1 (контекстно-зависимым) тогда и только тогда, когда оно является множеством последовательностей, распознаваемых некоторым недетерминированным линейно-ограниченным автоматом. Таким образом,  любой язык типа 1 может быть представлен недетерминированным линейно-ограниченным автоматом. На рисунке 4.18 представлены схемы моделей абстрактных машин. 1. Конечный автомат (рис. 4.18, а) состоит из конечного графа состояний и рабочей ленты с возможностью перемещения по ней только в одном направлении. При совершении очередной операции автомат считывает следующий символ с ленты и входит в новое состояние (узел на графе). 2. В автомате с магазинной памятью (рис. 4.18, б) в отличие от конечного автомата добавляется стек. При каждой операции автомат считывает следующий символ с рабочей ленты и верхний символ стека, записывает новый символ в стек и входит в новое состояние. 3. Линейно-ограниченный автомат (рис. 4.18, в) похож на конечный авто145 мат, но он может также записывать символы в ячейки рабочей ленты и перемещаться по ней в обоих направлениях. 4. Машина Тьюринга (рис. 4.18, г) похожа на линейно-ограниченный автомат, но только в данном случае лента является неограниченной в обоих направлениях. Рис. 4.18. Модели абстрактных машин: а — конечный автомат; б — автомат с магазинной памятью; в — линейно-ограниченный автомат; г — машина Тьюринга Все классы машин, кроме линейно-ограниченного автомата, уже обсуждались ранее. Линейно-ограниченный автомат, или ЛО-автомат (Linear-Bounded Automation, LBA), определяется как машина Тьюринга, в которой можно использовать только ту часть рабочей ленты, которая содержит входные данные. Таким образом, объём памяти возрастает с увеличением объёма входных данных, и такой автомат способен распознавать более сложные цепочки. Тем не менее по сравнению с машиной Тьюринга возможности этого автомата в отношении хранения информации не так велики, так как в данном случае рабочая лента не увеличивается неограниченно. 146 5. Сети Петри 5.1. Основы теории сетей Петри 5.1.1. Структура сети Петри, её графическое представление и маркировка Изучение свойств цифровых систем и развитие методов их конструирования проводится с помощью различных математических моделей и методов в зависимсти от характера исследуемых проблем. Конечный автомат является математической абстракцией системы переработки информации или процесса переработки и имеет конечное число входов, выходов и состояний. Если автомат моделирует систему сложной структуры, то он может быть представлен как совокупность взаимодействующих автоматов, моделирующих компоненты системы. Автоматы, построенные из определённых компонентов по определённым правилам, часто представляют сетями, т.е. графами специального вида с дополнительной интерпретацией вершин и дуг. Для автомата, реализующего алгоритм, характерен последовательный способ функционирования, когда автомат последовательно переходит из состояния в состояние в соответствии с заданной функцией перехода и осуществляет очередной (последовательный) шаг алгоритма. По мере усложнения цифровых систем всё большее внимание привлекают параллельные системы с недетерминированным поведением, в которых отдельные компоненты функционируют независимо, взаимодействуя друг с другом время от времени. Системы с параллельно функционирующими и асинхронно взаимодействующими компонентами не описываются адекватно в терминах классической теории автоматов. Среди многих существующих методов описания и анализа цифровых параллельных систем выделился подход, который основан на использовании сетевых моделей, восходящих к сетям специального вида, предложенных Карлом Петри для моделирования асинхронных информационных потоков в системах преобразования данных. Теория сетей Петри зародилась в 1962 году после докторской диссертации «Связь автоматов» немецкого математика и учёного в области информатики Карла Петри (1926-2010). В ней Петри начал с рассмотрения конечных автоматов и показал, что они не могут распознавать контекстно-свободные и контекстно-связанные грамматики. Если бы автоматы были не конечны, то времена задержки сигнала тоже были неограниченны, и возникает задача синхронизации. Затем Петри переходит к построению сети для моделирования ленты машины Тьюринга. Эта сеть является целиком асинхронной и строится из идентичных ячеек, которые передают информацию своим соседям по мере необходимости. Сеть Петри состоит из 4 элементов:  множество позиций P; 147  множество переходов T;  входная функция I;  выходная функция O. Входная функция I отображает переход tj в множество позиций, называемых входными позициями перехода. Выходная функция O отображает переход tj в множество позиций, называемых выходными позициями перехода. Определение 5.1. Сеть Петри C является четвёркой C = (P, T, I, O), где Р = {р1, p2, ..., pn} – конечное множество позиций, n ≥ 0; Т = {t1, t2, ..., tm} – конечное множество переходов, m ≥ 0. Множество позиций и множество переходов не пересекаются, Р ∧ Т = ∅; I : T → P∞ есть входная функция – отображение из переходов в комплекты позиций; О : T → P∞ есть выходная функция – отображение из переходов в комплекты позиций. Мощность множества Р есть число n, а мощность множества Т есть число m. Произвольный элемент Р обозначается символом рi, i = 1, ..., n, а произвольный элемент Т – символом tj, j = 1, ..., m. Позиция pi является входной позицией перехода tj в том случае, если pi ∈ I(tj); pi является выходной позицией, если pi ∈ О(tj). Входы и выходы переходов представляют собой комплекты позиций. Комплект является обобщением множества, в которое включены многократно повторяющиеся элементы – тиражированные элементы. Использование комплектов вместо множеств для входов и выходов перехода позволяет позиции быть кратным входом либо кратным выходом перехода. Кратность входной позиции pi для перехода tj есть число появлений позиции во входном комплекте перехода, #(pi, I(tj)). Аналогично кратность выходной позиции pi для перехода tj есть число появлений позиции в выходном комплекте перехода, #(pi, O(tj)). Если входная и выходная функции являются множествами (а не комплектами), то кратность каждой позиции есть либо 0, либо 1. Входные и выходные функции могут использоваться либо для отображения позиций в комплекты переходов, либо для отображения переходов в комплекты позиций. Определим, что переход tj является входом позиции pi, если pi есть выход tj. Переход tj есть выход позиции pi, если pi есть вход tj. Определение 5.2. Определим расширенную входную функцию I:PT и выходную функцию O:PT таким образом, что #(tj, I(pi))= #(pi, O(tj)), #(tj, O(pi))= #(pi, I(tj)). Пример 5.1. Структура сети Петри представлена в виде четвёрки, которая состоит из множества позиций (P), множества переходов (T), входной функции I:TP и выходной функции O:TP: C = (P, T, I, O); P = {p1, p2, p3, p4, p5}; T = {t1, t2, t3, t4}; I(t1) = {p1}; I(t2) = {p2, p3, p5}; I(t3) = {p3}; I(t4) = {p4}; O(t1) = {p2, p3, p5}; O(t2) = {p5}; O(t3) = {p4}; O(t4) = {p2, p3}. 148 Для данной сети Петри расширенными входной и выходной функциями являются: I(p1) = { } O(p1) = {t1} I(p2) = {t1, t4} O(p2) = {t2} I(p3) = {t1, t4} O(p3) = {t2, t3} I(p4) = {t3} O(p4) = {p4} I(p5) = {t1, t2} O(p5) = {t2} Для иллюстрации понятий теории сетей Петри гораздо более удобно графическое представление сети Петри в виде двудольного ориентированного мультиграфа. Структура сети Петри представляет собой совокупность позиций и переходов. В соответствии с этим граф сети Петри обладает двумя типами узлов. Кружок  является позицией, а планка | – переходом. Ориентированные дуги (стрелки) соединяют позиции и переходы, при этом некоторые дуги направлены от позиций к переходам, а другие – от переходов к позициям. Сеть Петри является ориентированным мультиграфом, так как допускает существование кратных направленных дуг от одной вершины графа к другой. Так как вершины графа можно разделить на два множества (позиции и переходы) таким образом, что каждая дуга будет направлена от элементов одного множества к элементу другого множества, то такой граф является двудольным ориентированным мультиграфом. Определение 5.3. Граф G сети Петри есть двудольный ориентированный мультиграф, G = (V, A), где V = {v1, v2, …, vs} – множество вершин, а A={a1, a2, …, ar} – комплект направленных дуг, ai = (vj, vk), где vj, vkV. Множество V может быть разбито на два непересекающихся подмножества P и T, таких что V =PT, PT=, и для любой направленной дуги aiA, если ai = (vj, vk), тогда либо vjP и vkT, либо vjT и vkP. Граф сети Петри, изображенный на рис. 5.1, эквивалентен структуре сети Петри из примера 5.1. p2 t1 t4 t2 p4 p5 p1 t3 p3 Рис. 5.1. Граф сети Петри, эквивалентный структуре в примере 5.1 149 Маркировка  есть присвоение фишек (маркеров, меток) позициям сети Петри. Фишка – это примитивное понятие сетей Петри (подобно позициям и переходам). Фишки присваиваются позициям. Количество и положение фишек при выполнении сети Петри могут изменяться. Фишки используются для определения выполнения сети Петри. Определение 5.4. Маркировка  сети Петри C = (P, T, I, O) есть функция, отображающая множество позиций P в множество неотрицательных целых чисел N : P  N Маркировка  также может быть определена как n-вектор =(1, 2, …, n), где n = P и каждое i  N, i=1, …,n. Вектор  определяет для каждой позиции pi сети Петри количество фишек в этой позиции. Количество фишек в позиции pi есть i, i= 1,…, n. Связь между определениями маркировки как функции и как вектора очевидным образом устанавливается соотношением (pi) = i. Обозначение её в виде функции является несколько более общим и поэтому употребляется гораздо чаще. Маркированная сеть Петри M = (C, ) есть совокупность структуры сети Петри C = (P, T, I, O) и маркировки  и может быть записана в виде M = (P, T, I, O, ) На графе сети Петри фишки изображаются маленькой точкой в кружке, представляющем собой позицию сети Петри (рис.5.2). p2 t1 t4 t2 p4 p5 p1 t3 p3 Рис. 5.2. Маркированная сеть Петри. Маркировка – (1, 2, 0, 0, 1) Так как количество фишек, которое может быть определено для каждой позиции, неограниченно, то в целом для сети Петри существует бесконечно много маркировок. Множество всех маркировок сети Петри, обладающей n позициями, есть множество всех n-векторов, Nn. Это множество, хоть и бесконечно, является счётным. 150 5.1.2. Пространство состояний сети Петри Состояние сети Петри определяется её маркировкой. Запуск перехода изменяет состояние сети Петри посредством изменения маркировки сети. Пространство состояний сети Петри, обладающей n позициями, есть множество всех маркировок, т.е. Nn. Изменение в состоянии, вызванное запуском перехода, определяется функцией изменения , которую мы назовём функцией следующего состояния. Когда эта функция применяется к маркировке  (состоянию) и переходу tj, она образует новую маркировку (состояние), которая получается при запуске перехода tj в маркировке . Так как tj может быть запущен только в том случае, когда он разрешен, то функция (, tj) не определена, если tj не разрешен в маркировке . Если же tj разрешен, то (, tj) = ’, где ’ есть маркировка, полученная в результате удаления фишек из входов tj и добавления фишек в выходы tj. Пусть дана сеть Петри C = (P, T, I, O) с начальной маркировкой 0. Эта сеть может быть выполнена последовательными запусками переходов. Запуск разрешённого перехода tj в начальной маркировке образует новую маркировку 1 = (0, tj). В этой новой маркировке можно запустить любой другой разрешённый переход, например, tk, образующий новую маркировку 2 = (1, tk). Этот процесс будет продолжаться до тех пор, пока в маркировке будет существовать хотя бы один разрешённый переход. Если же получена маркировка, в которой ни один переход не разрешён, то никакой переход не может быть запущен, функция следующего состояния не определена для всех переходов, и выполнение сети должно быть закончено. При выполнении сети Петри получаются две последовательности: последовательность маркировок (0, 1, 2, …) и последовательность переходов (tj0, tj1, tj2, …). Эти две последовательности связаны следующим соотношением: (k, tjk)= k+1 для k= 0, 1, 2, … .Имея последовательность переходов и 0, легко получить последовательность маркировок сети Петри, а имея последовательность маркировок, легко получить последовательность переходов, за исключением нескольких вырожденных случаев. Таким образом, обе эти последовательности представляют описание выполнения сети Петри. Пусть некоторый переход в маркировке  разрешён и, следовательно, может быть запущен. Результат запуска перехода в маркировке  есть новая маркировка ’. Говорят, что ’ является непосредственно достижимой из маркировки , иными словами, состояние ’ непосредственно получается из состояния . Определение 5.5. Для сети Петри C = (P, T, I, O) с маркировкой  маркировка ’ называется непосредственно достижимой из , если существует переход tjT, такой, что (, tj) = ’. 151 Можно распространить это понятие на определение множества достижимых маркировок данной маркированной сети Петри. Если ’ непосредственно достижима из , а ’’ – из ’, говорят, что ’’ достижима из . Определим множество достижимости R(C, ) сети Петри C с маркировкой  как множество всех маркировок, достижимых из . Маркировка ’ принадлежит R(C, ), если существует какая-либо последовательность запусков переходов, изменяющих  на ’. Отношение «достижимости» является рефлексивным транзитивным замыканием отношения «непосредственной достижимости». Определение 5.6. Множество достижимости R(C, ) для сети Петри C = (P, T, I, O) с маркировкой  есть наименьшее множество маркировок, определённых следующим образом: 1.  R(C, ) 2. Если ’R(C, ) и ’’ = (’, tj) для некоторого tjT, то ’’R(C, ). Пример 5.2. Для сети Петри, изображённой на рис. 5.3, и маркировки =(1, 0, 0) непосредственно достижимыми являются две маркировки: (0, 1, 0) и (1, 0, 1). Из (0, 1, 0) нельзя достичь ни одной маркировки, так ка ни один переход не разрешён. Из (1, 0, 1) можно получить (0, 1, 1) и (1, 0, 2). Можно показать, что множество достижимости R(C, ) имеет следующий вид: {(1, 0, n), (0, 1, n|n0}. p3 t1 p1 t2 p2 Рис. 5.3. Маркированная сеть Петри. Маркировка – (1, 0, 0) 5.1.3. Моделирование сетями Петри, представление блок-схем Сети Петри были разработаны и используются в основном для моделирования. С их помощью могут быть промоделированы многие системы, в особенности системы с независимыми компонентами, например, аппаратное и программное обеспечение ЭВМ, физические системы, социальные и др. Сети Петри применяются для моделирования возникновения различных событий в системе. В частности, сети Петри могут моделировать поток информации или другие ресурсы системы. Простое представление системы сетью Петри основано на двух основополагающих понятиях: событиях и условиях. События – это действия, имеющие место в системе. Возникновением событий управляет состояние системы. Состояние системы может быть описано множеством условий. Условие – это предикат или логическое описание состояния системы. Условие может принимать либо значение «истина», либо значение «ложь». Так как события являются действиями, то они могут происходить. Для того, чтобы событие произошло, необходимо выполнение соответствующих условий. 152 Эти условия называются предусловиями события. Возникновение события может вызвать нарушение предусловий и может привести к выполнению других условий постусловий. Пример 5.3. Задача моделирования простого автомата-продавца. Автомат продавец находится в состоянии ожидания до тех пор, пока не появится заказ, который он выполняет и посылает на доставку. Условиями для такой системы являются: а) автомат-продавец ждет; б) заказ прибыл и ждет; в) автомат-продавец выполняет заказ; г) заказ выполнен. Событиями будут: 1. Заказ поступил. 2. Автомат-продавец начинает выполнение заказа. 3. Автомат-продавец заканчивает выполнение заказа. 4. Заказ посылается на доставку. Предусловия события 2: (а) автомат-продавец ждет; (б) заказ прибыл и ждет. Постусловие для события 2: (в) автомат-продавец выполняет заказ. Аналогично мы можем определить предусловия и постусловия для других событий и составить таблицу событий (табл.5.1) и их пред- и постусловий. Таблица 5.1. Таблица событий Событие Предусловия 1 Заказ поступил нет 2 Начало заказа а, б 3 Окончание заказа в 4 Посылка заказа г Постусловия б в г, а нет Такое представление легко моделировать сетью Петри. В сети Петри условия моделируются позициями, события – переходами. При этом входы перехода являются предусловиями, выходы – постусловиями. Возникновение события равносильно запуску соответствующего перехода. Выполнение условия представляется фишкой в позиции, соответствующей этому условию. Запуск перехода удаляет разрешающие фишки, представляющие выполнение предусловий и образует новые фишки, которые представляют выполнение постусловий. Сеть Петри на рис. 5.4 иллюстрирует модель приведённого выше автомата продавца. Каждому переходу и позиции указываются соответствующие событие и условие. Заказ поступил Заказ ждёт Начало выполнения заказа Завершение выполнения Заказ выполнен заказа Заказ выполняется Заказ посылается на доставку Автомат-продавец ждёт Рис. 5.4. Сеть Петри для простого автомата-продавца 153 5.1.4. Основные свойства сетей Петри и их анализ Сети Петри обладают следующими свойствами:  ограниченность (число фишек в любой позиции сети не может превысить некоторого значения K);  безопасность (частный случай ограниченности, K=1);  сохраняемость (постоянство загрузки ресурсов, постоянна, где — число фишек в i-той позиции, — весовой коэффициент);  активность (потенциальная возможность запуска переходов при заданной маркировке);  достижимость (возможность перехода сети из одного заданного состояния (характеризуемого распределением фишек) в другое);  покрываемость (возможность достичь из одного состояния другого состояния, в котором первая маркировка покрывалась бы второй);  живость (возможность срабатывания любого перехода при функционировании моделируемого объекта). Безопасность является одним из важнейших свойств сети Петри, моделирующей реальное устройство. Позиция сети Петри является безопасной, если число фишек в ней никогда не превышает 1. Сеть Петри безопасна, если безопасны все позиции сети. Безопасность является частным случаем более общего свойства ограниченности. Безопасность, например, позволяет реализовать позицию триггером, но в более общем случае можно использовать счётчик. Однако, любой аппаратнореализованный счётчик ограничен по максималному числу, которое он может представить. Позиция является k-безопасной, или k-ограниченной, если количество фишек в ней не может превышать целое число k. 1-безопасная позиция называется просто безопасной. Граница k’ по числу фишек, которые могут находиться в позиции, может быть функцией от позиции (например, позиция p1 может быть 3-безопасной, а позиция p2 – 8безопасной). Однако, если позиция pi k-безопасна, то она также и k’-безопасна для всех k’k. Поскольку число позиций конечно, можно выбрать k, равное максимуму из границ каждой позиции, и определить сеть Пери k-безопасной, если каждая позиция сети k-безопасна. Сети Петри можно использовать для моделирования систем распределения ресурсов. В этих системах некоторые фишки могут представлять ресурсы. Для сетей Петри такого типа важным свойством являеся свойство сохраняемости. Фишки, представляющие ресурсы, никогда не создаются и не уничтожаются. Для этого нужно потребовать, чтобы общее число фишек в сети оставалось постоянным. Различают стого сохраняющие и сохраняющие сети Петри. Определение 5.7. Сеть Петри C= (P, T, I, O) с начальной маркировкой  называется строго сохраняющей, если для всех ’R(C, ) ’(pi) = (pi) piP piP 154 Строгое сохранение сильно ограничивает сеть Петри. Например, из него следует, что число входов в каждый переход должно равняться числу выходов. Для более общего представления о сохранении определим понятие взвешивания фишек. Взвешенная сумма для всех достижимых маркировок должна быть постоянной. Фишкам, не являющимся важными, можно присвоить вес 0; другим фишкам можно присвоить веса 1, 2, 3 или любое другое целое. Веса связываются с позицией сети. Вектор взвешивания w= (w1, w2, …,wn) определяет вес wi для каждой позиции piP. Определение 5.8. Сеть Петри C= (P, T, I, O) с начальной маркировкой  называется сохраняющей по отношению к вектору взвешивания w, w= (w1, w2, …,wn), n=|P|, wi0, если для всех ’R(C, ) wi ’(pi) =  wi (pi) i i Строго сохраняющая сеть Петри является сохраняющей по отношению к вектору взвешивания (1, 1, …, 1). Другая задача, которая может возникнуть при распределении ресурсов вычислительной системы – тупики. Рассмотрим систему, включающую два различных ресурса q и r и два процесса a и b. Если оба процесса нуждаются в обоих ресурсах, им необходимо будет совместно использовать ресурсы. Для выполнения этого потребуем, чтобы каждый процесс запрашивал ресурс, а затем освобождал его. Теперь предположим, что процесс a сначала запрашивает ресурс 1, затем ресурс r и, наконец, освобождает и q, и r. Процесс b работает аналогично, но сначала запрашивает r, а затем q. Сеть Петри на рис.5.5 иллюстрирует два процесса и распределение ресурсов между ними. Начальная маркировка помечает ресурсы q(p4) и r(p5) доступными и указывает на готовность процессов a и b. Одним выполнением этой сети является t1t2t3t4t5t6; другим – t4t5t6t1t2t3. Ни одно из этих выполнений не приводит к тупику. Однако рассмотрим последовательность, которая начинается переходами t1, t4: процесс a обладает ресурсом q и хочет получить r, процесс b обладает ресурсом r и хочет получить q. Система заблокирована; никакой процесс продолжаться не может. Тупик в сети Петри – это переход (или множество переходов), которые не могут быть запущены. В сети Петри на рис.5.5 тупик возникает, если нельзя запустить переходы t2 и t5. Переход называется активным, если он не заблокирован (нетупиковый). Это означает, что переход может быть разрешённым. Переход tj сети Петри называется потенциально запустимым в маркировке , если существует маркировка ’R(C, ), в которой tj разрешён. Переход активен в маркировке , если потенциально запустим во всякой маркировке из R(C, ). Следовательно, если переход активен, то всегда возможно перевести 155 сеть Петри из её текущей маркировки в маркировку, в которой запуск перехода станет разрешённым. Рис. 5.5. Распределение ресурсов для случая двух процессов (a и b) и двух ресурсов q (моделируется p4) и r (моделируется p5) Существует ряд ругих понятий, связанных с активностью. Их можно разбить на категории по уровню активности и определить для сети Петри C с маркировкой  следующим образом. Уровень 0: Переход tj обладает активностью уровня 0, если он никогда не может быть запущен. Переход, обладающий активностью уровня 0, называют пассивным. Уровень 1: Переход tj обладает активностью уровня 1, если он потенциально запустим, т.е. если существует такая ’R(C, ), что tj разрешён в ’. Уровень 2: Переход tj обладает активностью уровня 2, если для всякого целого n существует последовательность запусков, в которой tj присутствует по крайней мере n раз. Уровень 3: Переход tj обладает активностью уровня 3, если существует бесконечная последовательность запусков, в которой tj присутствует неограниченно часто. Уровень 4: Переход tj обладает активностью уровня 4, если для всякой ’R(C, ) существует такая последовательность запусков , что tj разрешён в (’, ). Переход, обладающий активностью уровня 4, называется активным. Сеть Петри, обладает активностью уровня i, если каждый её переход обладает активностью уровня i. 156 Пример 5.4. В качестве примера, иллюстрирующего уровни активности, рассмотрим сеть Петри на рис.5.6. t3 t2 t1 t0 Рис. 5.6. Сеть Петри с различными уровнями активности Переход t0 не может быть запущен никогда; он пассивен. Переход t1 можно запустить точно один раз; он обладает активностью уровня 1. Переход t2 может быть запущен произвольное число раз, но это число зависит от числа запусков перехода t3. Если мы хотим запустить t2 пять раз, мы запускаем пять раз t3, затем t1 и после этого пять раз t2. Однако, как только запустится t1 (t1 должен быть запущен до того, как будет запущен t2), число возможных запусков t2 станет фиксированным. Следовательно, t2 обладает активностью уровня 2, но не уровня 3. С другой стороны, переход t3 можно запускать бесконечное число раз, и поэтому он обладает активностью уровня 3, нго неуровня 4, поскольку, как только запустится t1, t3 больше запустить будет нельзя. Большинство рассматриваемых задач касается так называемых достижимых маркировок. Задача достижимости формулируется наиболее просто. Определение 5.9. Задача достижимости. Для данной сети Петри C с маркировкой  и маркировки ’ определить: ’R(C, )? Задача достижимости – основная задача анализа сетей Петри; многие другие задачи можно сформулировать в терминах задачи лдостижимости. Например, для сети Петри тупик может возникнуть, если достижимым является тупиковое состояние. Один из методов анализа достижимости любой маркировки из состояния M0 — построение графа достижимости. Начальная вершина графа отображает M0, а остальные вершины соответствуют маркировкам. Дуга из Mi в Mj означает событие MiMj и соответствует срабатыванию перехода t. В сложных сетях граф может содержать чрезмерно большое число вер157 шин и дуг. Однако при построении графа можно не отображать все вершины, так как многие из них являются дублями (действительно, от маркировки Mk всегда порождается один и тот же подграф вне зависимости от того. из какого состояния система пришла в Mk). Тупики обнаруживаются по отсутствию разрешенных переходов из какой-либо вершины, т.е. по наличию листьев — терминальных вершин. Неограниченный рост числа фишек в какойлибо позиции свидетельствует о нарушениях ограниченности. Аналогичной задаче достижимости является задача покрываемости. Маркировка ’’ покрывает маркировку ’, если ’’ ’. Определение 5.10. Задача покрываемости. Для данной сети Петри C с начальной маркировкой  и маркировки ’ определить, существует ли такая достижимая маркировка ’’R(C, ), что ’’ ’. В задаче покрываемости мы хотим для данной маркировки μ' определить, достижима ли маркировка μ» μ'. Данная задача решается проверкой дерева достижимости. Строим для начальной маркировки μ дерево достижимости. Затем ищем любую вершину х с μ[х] μ'. Если такой вершины не существует, маркировка μ' не покрывается никакой достижимой маркировкой; если она найдена, μ[х] даёт достижимую маркировку, покрывающую μ'. Живость сети Петри определяется возможностью срабатывания любого перехода при функционировании моделируемого объекта. Отсутствие живости означает либо избыточность аппаратуры в проектируемой системе, либо свидетельствует о возможности возникновения зацикливаний, тупиков, блокировок. 5.2. Языки, подклассы и обобщения сетей Петри 5.2.1. Классы и свойства языков сетей Петри Развитие теории сетей Петри обуславливают две основные причины:  описание предлагаемых и существующих систем;  анализ систем, моделируемых сетями Петри. Цель анализа сети Петри – определение свойств сети и моделируемой системы. Важнейшее свойство – множество всех действий, которые могут произойти. Действия моделируются переходами. Множество разрешенных последовательностей переходов характеризует сеть Петри и моделируемую систему. В целях оптимизации сети Петри полезно проведение множества преобразований, сохраняющих язык (т.е. получение новой оптимальной сети Петри с тем же языком). Язык сетей Петри также полезен для анализа сетей. Если определить множество возможных последовательностей действий как язык системы, то система будет анализироваться путём анализа языка. Задача решается либо рассмотрением вопроса существования (переведёт ли какая-нибудь последовательность действий систему из одного состояния в другое), или вопроса принадлежности (возможна ли последовательность действий данного вида). 158 Второе применение языков сетей Петри – задание и автоматический синтез сетей Петри. Если задать языком требуемое поведение, то можно автоматически синтезировать сеть Петри, обладающую данным языком. Ещё одна причина изучения языков – желание получить информацию о разрешимости ряда задач для сетей Петри. Используя языки сетей Петри, можно перенести понятия и методы теории формальных языков на задачи для сетей Петри, а методы сетей Петри могут быть полезны для изучения формальных языков. Многие понятия теории языков сетей Петри заимствованы из теории формальных языков. Языком называется множество строк над алфавитом. В общем случае языки могут быть бесконечны. Для представления языков используют 2 подхода:  определение машины, порождающей строку из языка, и порождение ею любой строки.  определение грамматики для указания, как последовательным применением её правил порождения получаются строки языка. Основные понятия, используемые для получения регулярного языка по конечному автомату, применимы и к сетям Петри для образования теории языков сетей Петри. В дополнение к сети Петри, определяемой множеством позиций и переходов, необходимо определить:  начальное состояние;  алфавит;  множество заключительных состояний. Это приводит к различным классам языков сетей Петри. Начальное состояние определяют одним из способов – начальное состояние с произвольной маркировкой , маркировкой с одной фишкой в начальной позиции и отсутствием фишек в остальных, множеством начальных маркировок вместо одной. Все три определения оказываются эквивалентны. Символы алфавита связаны с переходами. Связь символов алфавита с переходами осуществляется функцией помечения : T . Различают языки:  свободно помеченных сетей Петри, в которой все переходы помечены поразному;  с возможными одинаковыми метками без -переходов;  с возможными -помеченными переходами. Определение заключительных состояний оказывает наибольшее влияние на язык сети Петри. Существует 4 основных определения множества заключительных состояний и соответствующих языка сети Петри. 1. Язык сети Петри L-типа (для порождения предложения необходимо прийти точно к заключительному состоянию): если существует сеть Петри (P, T, I, O), помечение переходов : T , начальная маркировка  и конечное множество заключительных маркировок F, такое, что L = {()*| T* и (, )А} 159 2. Язык сети Петри G-типа: если существует сеть Петри (P, T, I, O), помечение переходов : T , начальная маркировка  и конечное множество заключительных маркировок F, такое, что L = {()*| T* и  fF такое, что (, )’f, ’ } 3. Язык сети Петри T-типа (множество заключительных состояний, используемое в языке L-типа+множество (не обязательно конечных) терминальных состояний): если существует сеть Петри (P, T, I, O), помечение переходов : T , начальная маркировка  и конечное множество заключительных маркировок F, такое, что L = {()*| T* и (, ) определено, но для tjT, ((, ), tj) не определено} Состояние t является терминальным, если (t, tj) не определено для всех tjT. 4. Язык сети Петри P-типа (множества заключительных состояний включают все достижимые состояния): если существует сеть Петри (P, T, I, O), помечение переходов : T , начальная маркировка  и конечное множество заключительных маркировок F, такое, что L = {()*| T* и определено (, )} В дополнение к 4 классам языков сети Петри имеются вариации, порождённые различными определениями функции помечения (табл.5.2). Таблица 5.2. Классы языков сети Петри Свободные Без -переходов f L-тип L L f G-тип G G f T-тип T T f P-тип P P С -переходами L G T P Можно показать, что всякий язык типа G или G является языком типа L или L соответственно. На рис. 5.7 представлены соотношения рассмотренных классов языков сетей Петри. Дуга между классами означает включение одним классом языков сетей Петри другого. Сила языков сетей Петри отражается в разнообразии классов языков сетей Петри. Ограничимся рассмотрением свойств языков L-типа. Класс языков Lтипа включает классы T-, G- и P-типа и образуют в некотором смысле наибольший класс языков сетей Петри. При изучении свойств языков сетей Петри обратимся к двум аспектам. Сначала представим свойства замкнутости сетей Петри по отношению к операциям конкатенации, объединения, параллельной композиции, пересечения, обращения, дополнения, бесконечной конкатенации и подстановки. Затем рассмотрим взаимосвязь между языками сетей Петри и классическими формальными языками. 160 T T Tf L L Lf G G Gf P P Pf Рис. 5.7. Соотношение классов языков сетей Петри Конкатенация: L1L2 = {x1x2| x1L1, x2L2} Если L1 и L2 - языки сетей Петри, то конкатенация языков L1L2 – язык сети Петри. Объединение: L1L2 = {x| xL1 или xL2} Если L1 и L2 - языки сетей Петри, то объединение языков L1L2 – язык сети Петри. Параллельная композиция: L1||L2 = {x1||x2 | x1L1, x2L2} ax1||bx2 = a(x1||bx2) + b(ax1||x2), a|| = ||a = a Если L1 и L2 - языки сетей Петри, то параллельная композиция языков L1||L2 – язык сети Петри. Пересечение: L1L2 = {x| xL1 и xL2} Если L1 и L2 - языки сетей Петри, то пересечение языков L1L2 – язык сети Петри. Обращение (расположение символов предложения в противоположном порядке): LR = {xR| xL} , aR = a, (ax)R = xRa Если L - язык сети Петри, то обращение LR – язык сети Петри. Дополнение (множество всех строк, отсутствующих в языке): L  *  L или L  {x  * | x  L Замкнутость по отношению к операции дополнения не доказана. Бесконечная конкатенация языка (множество всех конкатенаций произвольной длины элементов языка): L* = L LLLLL … Известно, что регулярные, контекстно-свободные, контекстно-связанные и неограниченные языки замкнуты по отношению к бесконечной конкатенации. Изучение свойств систем, моделируемых языками сетей Петри, ограничено конечными повторениями подсистем и бесконечными повторениями конечных подсистем. 161 5.2.2. Взаимосвязь языков сетей Петри с другими классами языков Регулярные языки являются простейшими и порождаются регулярными грамматиками и конечными автоматами, характеризуясь регулярными выражениями. Задачи эквивалентности и включения для двух регулярных языков разрешимы. Теорема 5.1. Всякий регулярный язык – это язык сети Петри. Всякий регулярный язык порождается некоторым конечным автоматом, а всякий конечный автомат можно преобразовать в эквивалентную сеть Петри. Не все языки сетей Петри являются контекстно-свободными языками, как и не все контекстно-свободные языки являются языками сетей Петри. Теорема 5.2. Существуют КС-языки, не являющиеся языками сетей Петри. Сети Петри ограничены как машины, порождающие языки. В сетях Петри нет возможности запомнить произвольно длинную последовательность произвольных символов. Но в сетях Петри есть способность запоминать число появлений символов в пределах, не доступных для систем, порождающих регулярные и КС-языки. Сети Петри не обладают «объёмом магазинной памяти», необходимым для порождения КС-языков. Скорость роста пространства достижимых состояний с ростом длины входной строки для сетей Петри комбинаторна, но не экспоненциальна. Причина того, что сети Петри могут порождать языки, не порождаемые МПавтоматами, несмотря на меньший размер пространства состояний, заключается в более гибких взаимосвязях между состояниями сети Петри по сравнению с ограниченными путями между состояниями в МП-автомате из-за ограничений на доступ только к верхнему элементу магазина. Пересечением КС-языков и языков сетей Петри являются КС-языки сетей Петри, в которые в качестве собственных подмножеств входят регулярные языки и ограниченные КС-языки. Теорема 5.2. Все языки сетей Петри являются контекстно-связанными. Взаимосвязь языков изображена на рисунке 5.8. 162 Неограниченные языки (T-0) T-0 Контестно-связанные языки (CS) CS Языки сетей Петри (PNL) Контекстно-свободные языки (CF) BCF CF PNL R Регулярные языки (R) Ограниченные контекстносвободные языки (BCF) Рис. 5.8. Взаимосвязь языков 5.2.3. Автоматные сети Петри и маркированные графы Первоначально сети Петри определялись в несколько более ограниченной форме. Введём некоторые ограничения. Ограничение 1. Кратность любой позиции равна 0 или 1. Ограничение 2. Никакая позиция не может быть одновременно входом и выходом одного и того же перехода. Сети Петри, удовлетворяющие ограничению 1, называются ординарными. Сети Петри, удовлетворяющие ограничению 2, называются сетями без петель, или нерефлексивными сетями. Сети Петри, удовлетворяющие обоим ограничениям, называются простыми сетями Петри. Конечные автоматы являются частным случаем сетей Петри и эквивалентны автоматным сетям Петри — сетям, в которых каждый переход может иметь точно одну входную и одну выходную позицию. Автоматные сети Петри — сети, в которых переход имеет не более одного входа и не более одного выхода. Такие сети обычно описывают последовательные процессы с ветвлением по условию. Если сеть имеет только одну метку, то сеть является, по сути, графом автомата, который последовательно переходит из одного состояния в другое. Сеть снабжается одной фишкой, расположенной в начальной вершине. Общее число фишек в автоматной сети при переходе от состояния к состоянию не меняется, т. е. SM-сети являются ограниченными, а при наличии одной фишки — безопасными. Определение 5.11. Автоматная сеть Петри - это сеть Петри C = (P, T, I, O) – такая, что для всех tjT, |I(tj)|=1 и |O(tj)|=1. Автоматные сети – строго сохраняющие (число фишек в сети никогда не меняется). Дерево достижимости является конечным и все вопросы анализа сети разрешимы. 163 Маркированные графы — сети, в которых каждая позиция имеет не более одного входа и не более одного выхода. Маркированные графы также являются подклассом сетей Петри. С помощью них моделируют последовательнопараллельные процессы. MG-сети называют также синхрографами. Переход в синхрографе является потенциально живым, если он не входит ни в один пустой цикл (не содержит ни одной фишки). Синхрограф является живым, если каждый его цикл не пуст при начальной разметке. Живой синхрограф является безопасным тогда и только тогда, когда каждое его место входит в определённый цикл, содержащий ровно одну фишку. Определение 5.12. Маркированный граф есть сеть Петри C = (P, T, I, O) – такая, что для каждой piP |I(pj)|=|{tj|pi O(tj)}|=1 и |O(pj)|= |{tj|pi I(tj)}|=1. Маркированные графы двойственны автоматным сетям Петри в теоретикографовом смысле, поскольку в автоматных сетях Петри переходы имеют один вход и один выход, в то время как в маркированных графах один вход и один выход имеют позиции. Сети свободного выбора — сети, в которых каждая дуга, выходящая из позиции, является либо единственным выходом из неё, либо единственным входом в переход. FC-сети используются для описания процессов управления. Для сетей свободного выбора разработан механизм выявления ловушек и тупиков. Необходимым условием живости сети свободного выбора является то, что тупики должны содержать в себе ловушки. Следовательно, данная сеть живой не является. Путём сети называется последовательность переходов и позиций, связанных направленными дугами. Если начало и конец пути совпадают, то такой путь называется циклом. Критерием близости живой свободной сети является возможность её покрытия циклами. Простые сети — сети, в которых каждый переход может иметь не более одной общей позиции с другими переходами. 5.2.4. Обобщения сетей Петри и модели параллельных вычислений Очевидно, что чем «мощнее» абстракция, чем больше она позволяет синтезировать возможностей, тем хуже у неё дело обстоит с анализом. Иными словами, конечные автоматы анализировать гораздо проще, чем классические сети Петри и уж тем более чем машины Тьюринга. Но обобщения сетей Петри приводят к универсальным моделирующим системам, порождающим рекурсивно-перечислимые классы языков, т.е. к системам, равномощным машинам Тьюринга. 164 Сети Петри с областями ограничений (Патил). Область ограничения – это множество позиций. Правило запуска модифицируется таким образом, что переход может быть запущен тогда и только тогда, когда в результирующей маркировке не все позиции, входящие в область ограничения, одновременно имеют фишки. Например, при области ограничения {p1, p4} в любой момент времени либо p1, либо p4 должны быть пусты. Сети с переходом “исключающее ИЛИ” (Ное) запускаются тогда и только тогда, когда точно один из его входов имеет фишки, а все другие фишек не имеют. В обычных сетях Петри переход запускается, когда все его входы имеют фишки. Такое правило называется логикой И. Сети Петри с переключателями (Баер). Переключатель – это специальный переход со специальным входом, называемым переключающим, и точно двумя выходами (один помечен e – для пустого переключающего входа, другой помечен f – для непустого переключающего входа). Переключаемый переход запускается, когда он разрешен. Когда он запускается, фишка помещается в выход, помеченный символом e, если переключающий вход пуст, или в выход, помеченный символом f, если переключающий вход пуст. В зависимости от состояния переключателя, запуск переключаемого перехода приведет к одной из двух возможных маркировок. Сети Петри со сдерживающими дугами. Сдерживающая дуга из позиции pi в переход tj имеет маленький кружок (а не стрелку). Кружок означает отрицание (“не”). Правила запуска изменяются следующим образом: переход является разрешённым, когда фишки присутствуют во всех его (обычных) входах и отсутствуют в сдерживающих входах. Переход запускается удалением фишек из всех его (обычных) входов. Так можно описывать переходы, «исключающее ИЛИ». В обычных СП переход запускается, когда все его входы имеют фишки (логика И). Переход “исключающее ИЛИ” запускается тогда и только тогда, когда только один из его входов имеет фишки, а все другие фишек не имеют. Когда переход запускается, он удаляет фишку только из входа с фишками. Сети Петри – не единственная модель параллельных вычислений. Существует множество других моделей. Покажем, как они соотносятся между собой. Исследования в области определения языков сетей Петри привели по меньшей мере к 12 различным определениям языков. Сравнение моделей основано как на структурных характеристиках, так и на характеристиках поведения. Рассмотрим соотношения между следующими моделями параллельных вычислений (рис.5.9): 1) конечные автоматы; 2) маркированные графы; 3) графы вычислений; 4) P/V-системы; 5) системы с сообщениями; 6) графы UCLA; 7) системы сложения векторов; 165 8) системы замещения векторов; 9) расширенные сети Петри. Расширенные сети Петри Системы замещения векторов  Системы сложения векторов Сети Петри   Графы UCLA Системы с сообщениями P/V-системы Графы вычислений Маркированные графы Конечные автоматы Рис. 5.9. Полная иерархия моделей параллельных вычислений 1. Конечные автоматы легко преобразуются в сети Петри. Например, модели аппаратуры Бредта (связь между процессорами по входным и выходным каналам), модель с общей памятью Гильберта и Чандлера. 2. Маркированные графы как подкласс сетей Петри обладают более ограниченной мощностью моделирования, но не сопоставимы с конечными автоматами. 3. Одна из ранних моделей параллельных вычислений – граф вычислений, был предложен для представления параллельного выполнения программ, вычисляющих арифметические выражения. Граф вычислений G определяется как ориентированный граф G=(V,A), где V = {v1, v2,…,vn} – множество узлов, A = {a1, a2,…,am} – множество дуг. Каждой дуге сопоставлена четвёрка (Ijk, Vjk, Wjk, Tjk). Дуга – это очередь элементов. Ijk – число элементов данных, находящихся первоначально в очереди. Tjk – пороговое значение числа элементов данных. Wjk – число удаляемых элементов данных из очереди при выполнении операции. Vjk – число элементов данных, помещаемых на выходе элемента после завершения операции. Граф вычислений легко моделируется сетью Петри. Каждая дуга представляется позицией, а каждый узел графа вычислений – становится переходом. Графы вычислений являются более мощным средством, чем маркированные графы. 166 4. P- и V-операции над семаформами впервые введены Дейкстрой для решения проблем синхронизации в системах параллельных процессов. P/V-системы включают модели графов вычислений и конечные автоматы. Каждому состоянию сопоставим семафор. 5. Одним из предложений по улучшению механизма связи процессов в системе является предложение использовать сообщения. Система с сообщениями – это набор процессов, которые взаимодействуют с помощью сообщений. Над сообщениями возможны 2 операции: послать и получить. Передача подобна Vоперации, а приём сообщения подобен P-операции. Эта модель наиболее подходящая для моделирования протоколов в сетях ЭВМ. Но системы с сообщениями не могут моделировать любые сети Петри. 6. Другая модель параллельных вычислений, аналогичная сетям Петри, была разработана в Калифорнийском университете в Лос-Анжелесе под руководством профессора Эстрина – сложная биологическая графовая модель вычислений. UCLA-граф представляет собой ориентированный граф, вершины которого соответствуют операторам параллельной программы, дуги – управляющим или информационным связям между операторами. С каждой вершиной связаны входное управление и выходное управление, каждое из которых может быть двух типов – конъюнктивное и дизъюнктивное. При дизъюнктивном входном управлении выполнение оператора может начаться в том случае, если «активизируется» одна и только одна из дуг, входящих в эту вершину – оператор. В случае конъюнктивного входного управления выполнение оператора может начаться в том случае, если активизированы все дуги, заходящие в вершину. После завершения исполнения вершины с дизъюнктивным входным управлением активизируется одна и только одна из дуг, исходящая из вершины. В случае конъюнктивного выходного управления активизируются все дуги, исходящие из вершины. Существенным недостатком UCLA-графов является требование развертки циклов. 7. Системы сложения векторов были введены Карпом и Миллером как математическое средство анализа систем параллельных процессов. Система сложения векторов V есть пара V = (B, s), где B={b1, b2, …, bm} – множество из m векторов, называемых базисными векторами или векторами смещения. Вектор s есть начальный вектор. Все векторы состоят из n целых величин. Элементы s неотрицательны. Системы сложения векторов и сети Петри эквивалентны. Начальный вектор – начальная маркировка, базисные векторы – переходы. 8. Для более непосредственного моделирования сетей Петри с петлями в модели, подобной системе сложения векторов, Келлер определил системы замещения векторов. 9. Расширенные сети Петри эквивалентны машинам Тьюринга: сети Петри с областями ограничений, переходами исключающее ИЛИ, переключателями, сдерживающими дугами, приоритетами или временными ограничениями. 167 Заключение В рамках дисциплины «Теория автоматов» мы рассмотрели два раздела – «Теория конечных автоматов» и «Теория бесконечных автоматов», дающие общее понимание данной дисциплины. За рамками курса осталось подробное изложение ряда перспективных направлений, находящихся на стыке современных информационных технологий и передовых математических концепций. Это такие теории, как:  теория вероятностных автоматов;  теория клеточных автоматов;  теория многоагентных систем;  теория самоорганизующихся систем;  теория нейронных сетей и др. Рассмотрим кратко эти вопросы для общего представления. Детерминированные автоматы S мы задавали совокупностью из пяти объектов: S(A, X, Y, , ), где A = {a0, a1, a2, ..., aM} – множество внутренних состояний автомата, X = {x1, x2,…, xF} – множество входных сигналов (входной алфавит), xi – буква входного алфавита, Y = {y1, y2,…, yG} – множество выходных сигналов (выходной алфавит), yg – буква выходного алфавита,  – функция переходов, обеспечивающая однозначный переход автомата в состояние as из состояния аm под действием входного сигнала xf, т.е. as = d [am, xf],  – функция выходов, определяющая однозначное значение выходного сигнала yg в зависимости от состояния автомата аm и входного сигнала xf, т.е. yg = l [аm , xf]. В работе Поспелова Д.А. «Вероятностные автоматы» рассмотрена более общая модель автомата, а именно: зная состояние автомата аm и входной сигнал xf, мы не можем с вероятностью равной 1 сказать, в каком состоянии окажется автомат в следующий момент времени, а также какой выходной сигнал он в этом случае вырабатывает. Однако мы можем указать вероятности наступления соответствующего события, а именно: зная состояние аm и входной сигнал xf, мы можем указать вероятности перехода автомата в состояния {а0, а1, …, аm, …, аM}, а также вероятности появления выходных сигналов {y1, y2,…,yg, …, yG}, т.е. задаем закон распределения вероятностей. Законы распределения задаются в виде двух таблиц (табл. К.1, К.2). 168 Таблица К.1. Таблица переходов вероятностного автомата am, xf a0 a1 … am … р010 р011 р01m a0, x1 … … р р р 020 021 02m a0, x2 … … … … … … … … р0F0 р0F1 р0Fm am, xF … … р110 р111 р11m a1, x1 … … … … … … … … рmf0 рmf1 рmfm am, xf … … … … … … … … р р р MF0 MF1 MFm aM, xF … … Таблица К.2. Таблица выходов вероятностного автомата am, xf y1 y2 … yg q011 q012 q01g a0, x1 … q021 q022 q02g a0, x2 … … … … … … q q q0Fg 0F1 0F2 am, xF … q111 q112 q11g a1, x1 … … … … … … qmf1 qmf2 qmfg am, xf … … … … … … qMF1 qMF2 qMFg aM, xF … … … … … … … … … … … aM р01M р02M … р0FM р11M … рmfM … рMFM yG q01G q02G … q0FG q11G … qmfG … qMFG Т.е. в каждом случае имеем закон распределения, заданный в виде гистограмм. Очевидно, т.к. автомат обязательно перейдёт в одно из состояний, то , , где , . Автоматы, в которых зная состояние автомата аm и входной сигнал xf, мы можем указать лишь вероятности перехода в новое состояние и вероятности появления выходных сигналов, т.е. законы распределения, называются вероятностными автоматами. По аналогии с детерминированными автоматами, можно определить вероятностные автоматы (ВА) Мили и Мура. ВА, у которых вероятности появления выходных сигналов (закон распределения) зависят лишь от состояний автомата, но не зависят от входных сигналов, называются ВА Мура. Если же вероятности появления выходных сигналов (закон распределения) зависят как от состояний автомата, так и от входных сигналов, имеем автомат Мили. Рассмотрим некоторые частные случаи вероятностных автоматов. Может быть, что выходные сигналы автомата определяются детерминировано, а переходы автомата – случайно. Такие автоматы называются Y-детерминиро169 ванными вероятностными автоматами. Если состояния определяются детерминировано, то имеем А- детерминированный вероятностный автомат. Если в процессе функционирования автомата законы распределения вероятностей появления выходных сигналов и вероятности перехода автомата в новые состояния не меняются во времени, то такие ВА называются вероятностными автоматами с постоянной структурой. Очевидно, можно рассмотреть общий случай, когда эти законы распределения зависят от времени. Такие автоматы называются вероятностными автоматами с переменной структурой. Вероятностный автомат с переменной структурой в каждый фиксированный такт работы является некоторым обычным ВА, но в период между тактами ВА может изменять свои матрицы переходных вероятностей или таблицы выходных вероятностей, или и то и другое вместе. Часто при построении ВА изменение вероятностей производят по некоторому закону, причем закон зависит от истории функционирования автомата (т.е. зависит от входных сигналов, поданных на него и от выходных сигналов, т.е. реакции автомата). Такие ВА с переменной структурой называются автоматами компенсирующего типа. Их разработке и уделяется основное внимание. В этом случае можно сказать, что ВА работает в некоторой среде, в которую он выдаёт выходные сигналы и из которой он получает входные (рис. К.1). Рис. К.1. Схема вероятностного автомата Входные сигналы условно можно разделить на поощрения («нештрафы») и наказания («штрафы»). При этом в зависимости от выходного сигнала на вход подаётся поощрение или штраф. Если в зависимости от этих сигналов менять вероятности перехода автомата из одного состояния в другое, то оказывается, что с течением времени автомат перестраивается таким образом, что он начинает с большой вероятностью получать сигналы поощрения, т.е. он в некотором смысле приспосабливается к той среде, в которой он находится. Проблема организации целесообразного поведения автомата в случайной среде тесно связана со способом изменения вероятностей перехода автомата. Возможно изменение вероятностей перехода автомата по строкам и по столбцам. 170 Рассмотрим Y-детерминированный вероятностный автомат. Пусть автомат в некоторый момент времени t находится в состоянии аm, выдал соответствующий этому состоянию выходной сигнал yg и получил на вход сигнал поощрения. Тогда вероятность рmm перехода из состоянии аm в состояние аmувеличиваются на некоторую величину , а все остальные вероятности в строке уменьшаются на /М. Если же автомат получает сигнал штрафа, то вероятность рmm перехода из состоянии аm в состояние аmуменьшаются на некоторую величину , а все остальные вероятности в строке на увеличиваются на /М, чтобы сумма вероятностей осталась равной 1. Возможен и другой принцип изменения вероятностей, при котором происходит учёт предыстории поведения автомата. Если автомат в момент времени t перешел из состояния аm в состояние ак и в момент времени t + 1 получил сигнал «штраф», то вероятность рmк заменяется на рmк, где коэффициент больше 0 и меньше 1, а все остальные вероятности в строке изменяются на величину величину . Если же получил сигнал «нештраф», то вероятность рmк , а все остальные уменьшаются на величину . Можно менять вероятности в матрице перехода не только по строкам, но и по столбцам. Например, возможен следующий алгоритм. Если в момент времени t под влиянием входного сигнала xf автомат перешел в состояние аm и в момент времени t + 1 получил сигнал «штраф», то независимо от того, из какого состояния он перешел, все элементы m-го столбца в матрице переходов заменяются на (рmm – ) или рmm , а все остальные вероятности изменяются аналогично тому, как это происходило при изменении вероятностей по строкам. Подобные автоматы уже находят применение при управлении в сложных системах и дают больший эффект там, где раньше работали детерминированные автоматы. Рассмотрим пример, который приводит Д.А. Поспелов – регулирование движения через автомобильный перекрёсток. Обычно (мы с вами всегда сталкиваемся именно с таким светофором) задают жёсткий режим переключения светофоров, при котором длительность включённых сигналов (красного и зелёного) – постоянны. Однако, как показывает практика работы таких светофоров, решение задачи получается малоэффективным, поскольку предполагается, что потоки машин постоянные, стационарные. Можно установить датчики на перекрестке, которые бы подсчитывали число машин (очередь), возникающее в данном направлении при красном свете светофора. Пусть на перекрестке стоит ВА компенсирующего типа, который имеет 2 состояния: включён красный свет вдоль главного направления и включён зелёный свет (рис. К.2). Каждому состоянию однозначно соответствует выходной сигнал, т.е. автомат У-детерминированный. С датчиков поступают сигналы штрафа и нештрафа. 171 Матрица переходов выглядит следующим образом: . Пусть в начале все эти вероятности равны 0,5 и на главном направлении скопилось П1 машин, а на другом – П2. На вход автомата поступает сигнал = П1 – П2. Пусть > 0, т.е. на главном направлении больше машин. Тогда если автомат в момент времени t находился в состоянии «зеленом», перешел в состояние «зелёный» и получил сигнал нештраф, то вероятность рзз (t+1) увеличивается, а вероятность рзк (t+1) уменьшается: рзк (t+1) = рзк (t), рзз (t+1) = 1– рзк (t+1). Рис. К.2. Вероятностный автомат на примере перекрёстка Тем самым увеличивается вероятность состояния «зеленое» вдоль главного направления, т.е. автомат подстраивается под обстановку. Заметим, что если потоки одинаковы, то оптимальной является следующая матрица переходов: . Клеточный автомат — дискретная модель, изучаемая в математике, теории вычислимости, физике, теоретической биологии и микромеханике. Включает регулярную решётку ячеек, каждая из которых может находиться в одном из конечного множества состояний, таких как 1 и 0. Решётка может быть любой размерности. Для каждой ячейки определено множество ячеек, называемых соседством. К примеру, соседство может быть определено как все ячейки на расстоянии не более 2 от текущей. Для работы клеточного автомата требуется задание начального состояния всех ячеек, и правил перехода ячеек из одного состояния в другое. На каждой итерации, используя правила перехода и состояния соседних ячеек, определяется новое состояние каждой ячейки. Обычно правила перехода одинаковы для всех ячеек и применяются сразу ко всей решётке. Основное направление исследования клеточных автоматов — алгоритмическая разрешимость тех или иных проблем. Также рассматриваются вопросы 172 построения начальных состояний, при которых клеточный автомат будет решать заданную задачу. Станислав Улам, работая в Лос-аламосской национальной лаборатории в 1940-е годы, изучал рост кристаллов, используя простую решёточную модель. В это же время Джон фон Нейман, коллега Улама, работал над проблемой самовоспроизводящихся систем. Первоначальная концепция фон Неймана основывалась на идее робота, собирающего другого робота. Такая модель известна как кинематическая. Разработав эту модель, фон Нейман осознал сложность создания самовоспроизводящегося робота и, в частности, обеспечения необходимого «запаса частей», из которого должен строиться робот. Улам предложил фон Нейману использовать более абстрактную математическую модель, подобную той, что Улам использовал для изучения роста кристаллов. Таким образом, возникла первая клеточно-автоматная система. Подобно решётке Улама, клеточный автомат фон Неймана двухмерный, а самовоспроизводящийся робот описан алгоритмически. Результатом явился универсальный конструктор, работающий «внутри» клеточного автомата с окрестностью, включающей непосредственно прилегающие ячейки, и имеющего 29 состояний. Фон Нейман доказал, что для такой модели существует паттерн, который будет бесконечно копировать самого себя. Также в 1940-е годы, Норберт Винер и Артуро Розенблют разработали клеточно-автоматную модель возбудимой среды. Целью было математическое описание распространения импульса в сердечных нервных узлах. Их оригинальная работа продолжает цитироваться в современных исследованиях по аритмии и возбудимым средам. В 1960-е годы клеточные автоматы изучались как частный тип динамических систем, и впервые была установлена их связь с областью символьной динамики. В 1969 году Г.А.Хедланд провёл обзор результатов, полученных в этом направлении. Наиболее значимым результатом явилось описание набора правил клеточного автомата как множества непрерывных эндоморфизмов в сдвиговом пространстве. В 1970-е получила известность двухмерная клеточно-автоматная модель с двумя состояниями, известная как игра «Жизнь». Изобретённая Джоном Конвеем и популяризованная Мартином Гарднером, она использует следующие правила: если клетка имеет двух «живых» соседей, она остаётся в прежнем состоянии. Если клетка имеет трёх «живых» соседей, она переходит в «живое» состояние. В остальных случаях клетка «умирает». Несмотря на свою простоту, система проявляет огромное разнообразие поведения, колеблясь между очевидным хаосом и порядком. Одним из феноменов игры «Жизнь» являются глайдеры – сочетания клеток, движущиеся по сетке как единое целое. Возможно построить автомат, в котором глайдеры будут выполнять некоторые вычисления, и впоследствии было показано, что игра «Жизнь» может эмулировать универсальную машину Тьюринга. В 1969 году немецкий инженер Конрад Цузе опубликовал книгу «Вычислимый космос», где выдвинул предположение, что физические законы дискретны 173 по своей природе, и что вся Вселенная является гигантским клеточным автоматом. Это была первая книга из области, называемой сейчас цифровой физикой. В 1983 Стивен Вольфрам опубликовал первую из серии статей, исследующих очень простой, но до сих пор неизученный класс клеточных автоматов, называемых элементарными клеточными автоматами. Неожиданная сложность поведения этих простых автоматов привела Вольфрама к предположению, что сложность естественных систем обусловлена сходным механизмом. Кроме того, в течение этого периода Вольфрам формулирует концепцию истинной случайности и вычислительной неприводимости, и выдвигает предположение, что Правило 110 (англ.) русск. может быть универсальным – факт, доказанный в 1990 году ассистентом Вольфрама Мэтью Куком. В 2002 году Вольфрам публикует 1280-страничный текст «Новый тип науки» (A New Kind of Science), где широко аргументирует, что достижения в области клеточных автоматов не являются изолированными, но весьма устойчивы и имеют большое значение для всех областей науки. 11-го ноября 2002 года Пауль Чепмен (Paul Chapman) построил образец Жизни, который является РММ (Регистровой Машиной Минского). Фактически РММ эквивалентна машине Тьюринга. Первая версия образца была большой (268,096 живых ячеек на площади 4,558 x 21,469 клеток) и медленной (20 поколений/сек при использовании Life32 Иогана Бонтеса (Johan Bontes) на 400 MHz AMD K6-II). Таким образом, в игре «Жизнь» можно выполнить любой алгоритм, который можно реализовать на современном компьютере. Определение К.1. Клеточный автомат можно определить, как множество конечных автоматов, каждый из которых может находиться в одном из состояний . Изменение состояний автоматов происходит согласно правилу перехода , где – множество автоматов, составляющих соседство. К примеру, соседство фон Неймана определяется как , а соседство Мура . Число всех возможных правил перехода определяется числом состояний и количеством соседей n и составляет Свойство обратимости Клеточный автомат называется обратимым, если для каждой текущей конфигурации существует только одна предшествующая конфигурация. Если рассматривать клеточный автомат как функцию, отображающую одну конфигурацию в другую, то обратимость предполагает биективность этой функции. Если 174 клеточный автомат обратим, то его обратная эволюция также может быть описана клеточным автоматом. Конфигурации, не имеющие предшествующих, т.е. недостижимые в данном клеточном автомате, носят название «Сады Эдема». Для одномерных клеточных автоматов существуют алгоритмы определения обратимости или необратимости. Однако для клеточных автоматов с двумя и более измерениями таких алгоритмов нет. Обратимые клеточные автоматы часто используют для моделирования таких физических феноменов, как динамика жидкости и газа, поскольку они подчиняются законам термодинамики. Такие автоматы специально создаются обратимыми. Такие системы изучались Томасо Тоффоли (Tommaso Toffoli) и Норманом Марголусом (Norman Margolus). Существует несколько типов обратимых конечных автоматов. Наиболее известными являются клеточный автомат второго порядка и блочный клеточный автомат. Обе эти модели следуют несколько модифицированному варианту определения клеточного автомата, однако доказано, что они могут быть эмулированы традиционным клеточным автоматом со значительно большим размером соседства и числом состояний. Также, было доказано, что любой обратимый клеточный автомат может быть сэмулирован блочным клеточным автоматом. Клеточные автоматы в естественной среде Узор на поверхности раковины Conus textile формируется по механизму клеточного автомата (рис.К.3). Рис. К.3. Узор на поверхности раковины Некоторые живые организмы проявляют свойства клеточных автоматов. Раскраска некоторых морских ракушек, таких как Conus или Cymbiola, генерируется естественным клеточным автоматом. Их пигментные клетки располагаются тонкой полоской вдоль края раковины. Секреция пигмента каждой клетки зависит от активирующей и ингибиторной активности соседних клеток. В процессе роста полоса клеток оставляет цветной узор на поверхности ракушки. 175 Растения регулируют приток и отток газообразных веществ посредством механизма клеточных автоматов. Каждое устьице на поверхности листа действует как ячейка. Нейронные сети также могут быть использованы как клеточные автоматы. Сложный движущийся узор на коже головоногих является отражением паттернов активирования в мозгу животных. Реакция Белоусова-Жаботинского представляет собой пространственновременной химический осциллятор, который может быть смоделирован клеточным автоматом. В 1950-х годах А.М.Жаботинский, продолжая работу Б.П.Белоусова, обнаружил, что тонкий однородный слой смеси определённых химических веществ способен образовывать движущиеся геометрические узоры, такие как концентрические круги и спирали. Многоагентная система (МАС, англ. Multi-agent system) — это система, образованная несколькими взаимодействующими интеллектуальными агентами. Многоагентные системы могут быть использованы для решения таких проблем, которые сложно или невозможно решить с помощью одного агента или монолитной системы. В многоагентной системе агенты имеют несколько важных характеристик[4]:  автономность: агенты, хотя бы частично, независимы;  ограниченность представления: ни у одного из агентов нет представления о всей системе, или система слишком сложна, чтобы знание о ней имело практическое применение для агента;  децентрализация: нет агентов, управляющих всей системой. Обычно в многоагентных системах исследуются программные агенты. Тем не менее, составляющими мультиагентной системы могут также быть роботы, люди или команды людей. Также, многоагентные системы могут содержать и смешанные команды. В многоагентных системах может проявляться самоорганизация и сложное поведение даже если стратегия поведения каждого агента достаточно проста. Это лежит в основе так называемого роевого интеллекта. Агенты могут обмениваться полученными знаниями, используя некоторый специальный язык и подчиняясь установленным правилам «общения» (протоколам) в системе. Примерами таких языков являются Knowledge Query Manipulation Language (KQML) и FIPA’s Agent Communication Language(ACL). Изучение многоагентных систем связано с решением проблем искусственного интеллекта. Темы для исследования в рамках многоагентных систем: 1) знания, желания и намерения (BDI); 2) кооперация и координация; 3) организация; 4) коммуникация; 5) согласование; 6) распределенное решение; 176 7) распределенное решение задач; 8) мультиагентное обучение; 9) надёжность и устойчивость к сбоям. МАС также относятся к самоорганизующимся системам, так как в них ищется оптимальное решение задачи без внешнего вмешательства. Под оптимальным решением понимается решение, на которое потрачено наименьшее количество энергии в условиях ограниченных ресурсов. Главное достоинство МАС — это гибкость. Многоагентная система может быть дополнена и модифицирована без переписывания значительной части программы. Также эти системы обладают способностью к самовосстановлению и обладают устойчивостью к сбоям, благодаря достаточному запасу компонентов и самоорганизации. Многоагентные системы применяются в нашей жизни в графических приложениях, например, в компьютерных играх. Агентные системы также были использованы в фильмах. Теория МАС используется в составных системах обороны. Также МАС применяются в транспорте, логистике, графике, геоинформационных системах и многих других. Многоагентные системы хорошо зарекомендовали себя в сфере сетевых и мобильных технологий, для обеспечения автоматического и динамического баланса нагруженности, расширяемости и способности к самовосстановлению. Самоорганизующаяся система – кибернетическая (или динамическая) адаптивная система, в которой запоминание информации (накопление опыта) выражается в изменении структуры системы. Самоорганизующаяся система (СОС) – сложная динамическая система, способная при изменении внешних или внутренних условий её функционирования и развития сохранять или совершенствовать свою организацию с учётом прошлого опыта. Типы объектов, которые могут быть названы СОС, по своему субстрату весьма различны; примерами их являются живая клетка, организм, биологическая популяция, человеческий коллектив. СОС впервые начали исследоваться в кибернетике. Термин «СОС» ввёл в 1947 Эшби (в статье «Principles of self-organizing dynamic system» в «J. Gen. Psychol.», 1947, v. 37, p. 125–28). Широкое изучение СОС началось в конце 50-х гг. В понятии СОС фокусируется целый ряд проблем и специфических трудностей, стоящих перед теоретической кибернетикой и др. связанными с ней отраслями современной науки и техники. С одной стороны, изучение таких систем открывает совершенно новые принципы построения технических устройств с высокой надёжностью, способных работать в широком диапазоне внешних условий. С другой, именно на этом пути возможна передача машине ряда логических операций, считающихся до сих пор исключительной привилегией человека. В настоящее время понятие самоорганизации вышло далеко за рамки кибернетики и все более широко применяется в биологии, а также социальных науках. Характерно, например, рассмотрение отдельного нейрона как СОС либо как её элемента в структуре функционально выделенного участка 177 нейронной сети (работы группы Мак-Каллока – Питса в США, Напалкова и др. в СССР). Это направление составляет основное содержание нейрокибернетики. В настоящее время в науке исследуются различные типы СОС Их типология определяется выделением той или иной группы свойств в качестве ведущей:  саморегулирующиеся системы,  самонастраивающиеся системы,  самообучающиеся системы,  самоалгоритмизирующиеся системы. Уже первые работы по созданию теории СОС показали, что здесь наука столкнулась с принципиально новым классом познавательных задач, для решения которых необходима выработка существенно новых средств и методов анализа. Одна из первых задач в исследовании таких систем состоит в том, чтобы определить и ограничить класс тех реальных объектов, относительно которых можно адекватно употреблять понятие самоорганизации. Поскольку «самоорганизующийся» означает не только организующийся сам, но и организующийся для себя, постольку даже обнаружение естественных СОС оказывается сложной исследовательской задачей. Чтобы выявить самоорганизующийся характер объекта, исследователь должен так построить взаимодействие с ним, чтобы на «вход» подавать определённую последовательность сигналов и на «выходе» получать последовательность ответов, на основании которой можно было бы судить о структуре поведения системы. Иными словами, процесс исследования здесь должен рассматриваться как взаимодействие двух СОС – объекта и исследователя, причем это взаимодействие является значимым для обеих этих систем. Впервые на это обратил внимание известный английский кибернетик Г. Паск (статья «Естественная история цепей», в сборнике: Самоорганизующиеся системы, М., 1964), который назвал такой метод исследования «стратегией естествоиспытателя», в отличие от традиционно применяемой «стратегии специализированного наблюдателя». Тот факт, что развитие организации СОС преследует свои «цели», должен приниматься во внимание и при конструировании искусственных технических устройств, основанных на принципе самоорганизации: параллельно с методами построения таких систем должны создаваться и методы управления их поведением. В противном случае либо нельзя будет использовать их самоорганизующийся характер, либо самоорганизация пойдет в направлении, противоположном замыслам создателей такой системы (см. в этой связи Н. Винер «Останется ли машина рабой человека?» Америка, 1963, No 80, а также У. Росс Эшби, «Принципы самоорганизации», пер. с англ., М., 1966). Ещё не так давно подобная перспектива казалась утопической, но практическое конструирование СОС, поставленное современной наукой в повестку дня, делает такую постановку проблемы реальной и необходимой. Опасные последствия, которые могут возникнуть при создании искусственных систем, осуществляющих собственные цели и трудно контролируемых человеком, рассматривает, например, С. Лем (статья «Введение в интеллектронику», журнал «Знание – сила», 1965, No 3). В общем виде теоретическая проблема здесь та178 кова: либо создание СОС для реализации заранее заданного диапазона задач без выхода за их пределы и, следовательно, планируемое существенное ограничение возможностей и направления самоорганизации, либо создание неполностью СОС в том смысле, что система может функционировать лишь после получения задач извне. Понятно, что исследование естеств. СОС не связано с этой проблемой. Наиболее абстрактную схему СОС можно представить следующим образом. Имеется множество элементов и связей между ними; связи двух типов: жёсткие и изменяющиеся (следует отметить, что до настоящего времени не удалось выделить связи, специфические для СОС). Некоторый механизм управляет изменением связей и (в общем случае) элементов. Большинство исследователей рассматривает механизм как ту часть системы, которая определяет её самоорганизующийся характер, «несёт ответственность» за управление и самоорганизацию, однако вопрос о физической сущности этого механизма остается открытым. Наиболее распространена точка зрения, согласно которой механизм воплощается материально как определённый регулирующий «орган», однако отдельные исследователи считают, что этот механизм можно рассматривать как некоторый логический закон, которому следует система. К этим последним можно, в частности, отнести Эшби, который утверждает, что каждую изолированную динамическую систему, подчиняющуюся постоянному закону, можно считать самоорганизующейся. У других ученых в качестве такого механизма выступает «проект», «идеал» и т.п. По-видимому, возможно и совмещение обоих этих подходов, когда в системе регулятор какой-либо физической природы является вместе с тем логическим механизмом, обусловливающим её функционирование и развитие. В исследованиях СОС у этих последних выделяются и специально описываются такие аспекты, как способность к обучению; самовоспроизведение структуры согласно некоторому «проекту» (эталону); взаимодействие СОС с её окружением (рассматриваемое по типу взаимодействия организма со средой); надёжность систем, созданных из элементов, каждый из которых ненадёжен; поведение (деятельность) системы при решении задач и т.п. Исторически изучение каждой из этих проблем началось раньше, чем развилось понятие СОС. Поэтому на анализ такого рода проблем в связи со спецификой самоорганизации сильное влияние оказывает предшествующая традиция, которая в ряде случаев затрудняет анализ, приводит к односторонности в подходе исследователя, что особенно сказывается на методах и языке, применяемых в попытках построить теорию самоорганизации. Обычно описание СОС производится в специальных терминах и понятиях той или иной научной дисциплины. Например, Г. фон Ферстер оперирует понятиями теории информации и термодинамики, Эшби описывает самоорганизацию с помощью понятий теоретической кибернетики, Паск – при помощи языка теорий игр, советские исследователи Напалков, Брайнес и Свечинский идут 179 к проблеме самоорганизации от нейрофизиологии и свойственного ей аппарата; большое число исследователей привлекает для описания СОС аппарат биологии, в той или иной мере связанный с кибернетическим (теория нейронных сетей, цитология, генетика, эмбриология и др.). Все эти методы позволяют успешно решать ряд важных проблем, однако оказываются недостаточными для построения общей теории СОС Это особенно относится к анализу поведения СОС. Обычно в кибернетике поведение системы изучается как «история выхода» для «чёрного ящика», т.е. как совокупность реакций системы в ответ на входные воздействия. Но применительно к СОС такой подход позволяет фиксировать не само поведение с его механизмом, а лишь результаты, итог поведения. В качестве простейшего элемента, единицы поведения у большинства исследователей выступают отдельные состояния системы, а цели системы рассматриваются как логические связи. Однако такой подход оказывается малоперспективным. Паск (см. Г. Паск, «Модель эволюции», в сборнике: Принципы самоорганизации, пер. с англ., М., 1966) предпринял попытку произвести расчленение структуры поведения иным путём: в качестве элементов у него выступают отдельные характеристики (свойства автоматов); связи можно интерпретировать как логические механизмы модели поведения системы, объясняющие изменения свойств. Такой способ позволил обосновать ряд интересных особенностей рассматриваемой Паском системы автоматов – корреляцию стратегий отдельных автоматов, объединение их в колонии (домены) и т.п. Однако логическая необходимость этих свойств не доказывается. Тем не менее в таком подходе можно усмотреть элементы новой логики – логики поведения систем, т.е. методов и способов обобщённого описания поведения, необходимых как для теории самоорганизующихся систем, так и для научно-технической практики. 180 Список литературы 1. Баранов С.И. Синтез микропрограммных автоматов (граф-схемы и автоматы). – Л.:Энергия, 1979. – 232 с. 2. Булева алгебра и конечные автоматы. Пер. с франц. / Под ред. П.П. Пархоменко. – М.:Мир, 1969. – 296 с. 3. Гаврилов М.А. Теории релейно-контактных схем. – М.-Л.: Изд-во АН СССР, 1950. 4. Глушков В.М. Синтез цифровых автоматов. – М.:Физматгиз, 1962. – 476 с. 5. Гончаренко В.А. Теория автоматов. Практикум. – СПб.:ВКА им.А.Ф.Можайского, 2004. – 76 с. 6. Горбатов В. А., Горбатов А. В., Горбатова М. В. Теория автоматов: учебник для студентов втузов. Высшая школа. Издательство «АСТ», 2008. – 559 с. 7. Городецкий В.И. Прикладная алгебра и дискретная математика. Часть II. Формальные системы нелогического типа. Учебное пособие. – МО СССР, 1986. 8. Гребнев В.В. Основы теории вычислительных машин. Учебное пособие. Часть 2. –Л.:ЛВИКА им.А.Ф.Можайского, 1970. – 213 с. 9. Закревский А.Д. Алгоритмы синтеза дискретных автоматов. – М.:Наука, Гл.ред.физ.-мат.лит-ры, 1971. 10.Карпов Ю.Г. Теория автоматов. – СПб.: Питер, 2002. – 224 с. 11.Карпов Ю.Г. Теория и технология программирования. Основы построения трансляторов. – СПб.: БХВ-Петербург, 2005. – 272 с. 12.Компаниец Р.И. Основы построения синтаксически-управляемых трансляторов / Учебное пособие. – СПб.: ВИККА им.А.Ф.Можайского, 1995. – 156 с. 13.Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов / Учебное пособие для высших и средних учебных заведений. – СПб.: КОРОНА принт, 2000. – 256 с. 14.Котов В.Е. Сети Петри. – М.:Наука, Гл.ред.физ.-ма. лит-ры, 1984. – 160 с. 15.Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. 2-е изд. – М.: Энергоатомиздат, 1988. – 480 с. 16.Лазарев В.Г., Пийль Е.И. Синтез управляющих автоматов. – М.:Энергоатомиздат, 1989. – 328 с. 17.Мацевитый Л.В., Денисенко Е.Л. О кодировании внутренних состояний некоторых многотактных устройств. – Кибернетика, 1966, № 1. 18.Мелихов А.Н. Ориентированные графы и конечные автоматы. – М.:Наука, Гл.ред.физ.-мат.лит-ры, 1971. 19.Питерсон Дж. Теория сетей Петри и моделирование систем. – М.:Мир, 1984. – 264 с. 181 20.Проектирование цифровых вычислительных машин. Учебное пособие для студентов вузов / Под ред.С.А.Майорова. – М.:Высшая школа, 1972. – 344 с. 21.Савельев А.Я. Прикладная теория цифровых автоматов. Учебник для вузов по спец. ЭВМ. – М.: Высшая школа, 1987. – 272 с. 22.Сапожников В.В., Сапожников В.В. Методы синтеза надёжных автоматов. – Л.:Энергия. Ленингр.отд-ние, 1980. – 96 с. 23.Хопкрофт Дж., Мотвани Р., Ульман Дж. Введение в теорию автоматов, языков, вычислений, 2-е изд.: Пер. с англ. – М.: Издательский дом «Вильямс», 2008. – 528 с. 24.Шестаков В.И. Реле и релейные схемы. 1935 (рукопись) // Архив В.И.Шестакова. – 23 с. 25.Шестаков В.И. Некоторые математические методы конструирования и упрощения двухполюсных электрических схем класса А. Дисс…. канд. физ.-мат. наук. – М.: МГУ, 1938. – 232 с. 26.Grasselli A., Luccio F. A Method for Minimizing the Number of Internal States in Incompletely Specified Sequential Networks. – IEEE Transactions on Electronic Computers, 1965, vol. EC–14, N 3. 27.Meisel W.S. A Note on Internal State Minimization in Incompletely Specified Sequential Networks. – IEEE Transactions on Electronic Computers, 1967, vol. EC–16, N 4. 28.Nakashima A., Hanzawa M. The Theory of Equivalent Transformation of Simple Partial Parth of Relay Circuits. Part 1. // Journal of the Institute of Telegraph and Telephone Engineers of Japan. 1936. №165 (Dec). P.263-281; То же. Part 2. // Journal of the Institute of Electrical Communication Engineers of Japan. 1937. №167 (Feb). P.387-415. 29.Paull M.C., Unger S.H. Minimizing the Number of States in Incompletely Specified Sequential Switching Functions. – IRE Transactions on Electronic Computers, 1959, vol.EC–8, N 3. 30.Shannon C.E. A Symbolic Analysis of Relay and Switching Circuits // Transactions of the American Institute of Electrical Engineers. 1938. Vol.57 (June). P.750-769. 31.Unger S.H. Flow Table Simplification – Some Usefull Aids. – IEEE Transactions on Electronic Computers, 1965, vol. EC–14, N 3. 182
«Теория автоматов» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 938 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot