0% нашли этот документ полезным (0 голосов)
6 просмотров289 страниц

Main

Документ представляет собой учебник по теории конечных автоматов и формальных языков, охватывающий основные понятия, методы и алгоритмы, связанные с формальными языками, регулярными языками и конечными автоматами. Учебник состоит из восьми глав, в каждой из которых рассматриваются различные аспекты теории, включая грамматики, регулярные выражения и контекстно-свободные языки, а также содержит упражнения для закрепления материала. В дополнение к основному содержанию, в документе есть приложения с алгоритмами и заданиями для курсовой работы.

Загружено:

ratmirgamesteam
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
6 просмотров289 страниц

Main

Документ представляет собой учебник по теории конечных автоматов и формальных языков, охватывающий основные понятия, методы и алгоритмы, связанные с формальными языками, регулярными языками и конечными автоматами. Учебник состоит из восьми глав, в каждой из которых рассматриваются различные аспекты теории, включая грамматики, регулярные выражения и контекстно-свободные языки, а также содержит упражнения для закрепления материала. В дополнение к основному содержанию, в документе есть приложения с алгоритмами и заданиями для курсовой работы.

Загружено:

ratmirgamesteam
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

ОГЛАВЛЕНИЕ

Введение 7

Глава 1. Способы задания и распознавания формальных


языков 12
§ 1.1. Алфавит и слова . . . . . . . . . . . . . . . . . . . . . . . . . 12
§ 1.2. Языки и операции над языками . . . . . . . . . . . . . . . 14
§ 1.3. Грамматики . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
§ 1.4. Классификация грамматик . . . . . . . . . . . . . . . . . . 26
§ 1.5. Распознаватели . . . . . . . . . . . . . . . . . . . . . . . . . 28
§ 1.6. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Глава 2. Регулярные языки 33


§ 2.1. Регулярные множества и регулярные выражения . . . . 33
§ 2.2. Уравнения и системы уравнений с регулярными коэф-
фициентами . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
§ 2.3. Алгоритм решения систем с регулярными коэффици-
ентами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
§ 2.4. Совпадение классов регулярных и ПЛ-языков . . . . . . 48
4 Оглавление

§ 2.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Глава 3. Конечные автоматы 56


§ 3.1. Определения и примеры . . . . . . . . . . . . . . . . . . . . 56
§ 3.2. Редукция НКА к ДКА . . . . . . . . . . . . . . . . . . . . . . 63
§ 3.3. Граф переходов . . . . . . . . . . . . . . . . . . . . . . . . . . 68
§ 3.4. Совпадение классов КА-, регулярных и ПЛ-языков . . . 69
§ 3.5. Лемма о разрастании для регулярных языков . . . . . . 75
§ 3.6. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Глава 4. Конечные автоматы со спонтанными переходами 80


§ 4.1. Определения и примеры . . . . . . . . . . . . . . . . . . . . 80
§ 4.2. Редукция ε-НКА к ДКА . . . . . . . . . . . . . . . . . . . . . 85
§ 4.3. Преобразование регулярного выражения в автомат . . 88
§ 4.4. Построение ε-НКА по ПЛ-грамматике . . . . . . . . . . . 95
§ 4.5. Вычисление языка ε-НКА . . . . . . . . . . . . . . . . . . . 100
§ 4.6. Задача минимизации конечного автомата . . . . . . . . 106
§ 4.7. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Глава 5. Булева алгебра регулярных языков 125


§ 5.1. Свойства регулярных языков . . . . . . . . . . . . . . . . . 125
§ 5.2. Замкнутость относительно булевых операций . . . . . . 138
§ 5.3. Алгоритмические проблемы регулярных языков . . . . 140
§ 5.4. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Оглавление 5

Глава 6. Контекстно-свободные языки 145


§ 6.1. Деревья выводов в КС-грамматиках . . . . . . . . . . . . 145
§ 6.2. Проблема непустоты и устранение бесполезных сим-
волов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
§ 6.3. Построение приведенной КС-грамматики . . . . . . . . 158
§ 6.4. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Глава 7. Нормальные формы КС-грамматик 168


§ 7.1. Нормальная форма Хомского . . . . . . . . . . . . . . . . . 168
§ 7.2. Проблема принадлежности для КС-языков . . . . . . . . 174
§ 7.3. Матричный метод перехода к нормальной форме
Грейбах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
§ 7.4. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

Глава 8. Автоматы с магазинной памятью 188


§ 8.1. Определения и примеры . . . . . . . . . . . . . . . . . . . . 188
§ 8.2. Расширенный МП-автомат . . . . . . . . . . . . . . . . . . 196
§ 8.3. Автомат, допускающий слово опустошением магазина 202
§ 8.4. Эквивалентность МП-автоматов и КС-грамматик . . . . 209
§ 8.5. Детерминированный МП-автомат . . . . . . . . . . . . . 217
§ 8.6. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Список литературы 220


6 Оглавление

Приложение A. Алгоритмы для контекстно-свободных


грамматик 222

Приложение B. Задание к курсовой работе 230

Приложение C. Варианты заданий 233

Приложение D. Пример выполнения заданий курсовой ра-


боты 242
ВВЕДЕНИЕ

В настоящее время в связи с бурным развитием информацион-


ных технологий и расширением сферы их применения в теоретиче-
ской информатике возникают новые и развиваются старые направ-
ления. Всё это находит своё отражение в формировании учебных
дисциплин по направлению «Фундаментальная информатика и ин-
формационные технологии».
Целью изучения дисциплины «Теория конечных автоматов и
формальных языков» является выработка у студентов компетенций,
связанных с теоретическими понятиями, идеями, методами, моде-
лями, алгоритмами, применяемыми при разработке и сопровожде-
нии проблемно-ориентированных языков. Эта дисциплина содер-
жит сведения, необходимые для научно-исследовательской и прак-
тической работы в области системного программирования, исполь-
зования и развития языков программирования.
К основным задачам дисциплины относятся:

- освоение математических основ теории формальных языков;


изучение классов формальных языков и конечных способов за-
8 Введение

дания потенциально бесконечных множеств; овладение мето-


дами разбора слов, принадлежащих языку, определения эквива-
лентности выводов, установление однозначности грамматик;

- освоение математических основ теории регулярных языков и


выражений; изучение свойств регулярных выражений;

- овладение методами построения регулярных выражений для


языков, заданных неформально и в виде формальных грамма-
тик; освоение методов перехода от грамматики к регулярному
выражению и наоборот;

- освоение математических основ теории детерминированных


и недетерминированных конечных автоматов; изучение об-
щей схемы автомата-распознавателя; освоение метода редук-
ции недетерминированного автомата к детерминированному;
овладение методами построения конечного автомата по регу-
лярной грамматике; изучение свойств праволинейных, регу-
лярных и автоматных языков;

- освоение понятия конечного автомата со спонтанными перехо-


дами; овладение методами построения конечного автомата по
праволинейной грамматике и вычисления языка конечного ав-
томата с помощью последовательного исключения состояний;
изучение понятий отношения эквивалентности на множестве
конечных автоматов, недостижимых состояний автомата;
9

- изучение задачи минимизации детерминированного конечно-


го автомата; освоение понятий различимых и неразличимых
состояний и метода построения системы отношений неразли-
чимости состояний конечного автомата;

- овладение методами определения регулярности языка; изуче-


ние алгоритмических проблем регулярных языков;

- освоение математических основ теории контекстно-свободных


(КС) языков; изучение понятий дерева вывода в КС-грамматике;
овладение методами проверки КС-грамматики на непустоту,
построения по КС-грамматике стабилизационного множества,
построения приведенной КС-грамматики; изучение нормаль-
ных форм Хомского и Грейбах КС-языков; освоение метода
определения принадлежности цепочки языку, заданному КС-
грамматикой;

- освоение математических основ теории автоматов с магазин-


ной памятью (МП-автоматов); изучение понятия недетерми-
низма для МП-автоматов, расширенной формы МП-автомата
(РМП-автомат), автомата, допускающего язык опустошением
магазина (МПε-автомат); овладение методами перехода от МП-
автомата к МПε-автомату и наоборот;

- овладение методом построения МПε-автомата по КС-


грамматике; овладение методом перехода от МПε-автомата к
КС-грамматике.
10 Введение

Исчерпывающее изложение элементов теории формальных


языков и конечных автоматов имеется в ставшей редкостью замеча-
тельной монографии А. Ахо и Дж. Ульмана [2], материалы которой
в современной форме представлены в [8]. Настоящий учебник со-
держит систематическое изложение значительной части материала
курса «Теория конечных автоматов и формальных языков» в объёме,
достаточном для успешного его освоения. При изложении материа-
ла мы пытались придерживаться канонов монографии А. Ахо и Дж.
Ульмана [2], опуская, однако, более глубокие аспекты рассматрива-
емой теории, на которые не достает времени в рамках данного кур-
са. По курсу «Теория автоматов и формальных языков» можно по-
рекомендовать ряд хороших книг, названия некоторых содержатся
в списке литературы.

Учебник состоит из введения, восьми глав, списка литературы и


четырёх приложений. В главе 1 идет речь о способах задания и рас-
познавания формальных языков; в главе 2 исследуются регулярные
языки; в главах 3 и 4 изучаются разные типы конечных автоматов
и доказывается совпадение классов конечно-автоматных, регуляр-
ных и праволинейных языков; в главе 5 изучается булева алгебра ре-
гулярных языков, свойства замкнутости операций над регулярными
множествами и алгоритмические проблемы регулярных языков; в
главах 6 и 7 исследуются контекстно-свободные грамматики и язы-
ки; в главе 8 устанавливается связь между контекстно-свободны-
11

ми языками и конечными автоматами с магазинной памятью. Каж-


дая глава снабжена набором упражнений для лучшего понимания
и усвоения материала. В учебнике имеется четыре приложения, ко-
торые содержат алгоритмы для контекстно-свободных грамматик,
задания к курсовой работе и варианты к ним, пример выполнения
одного варианта курсовой работы. Мы благодарны Артёму Коненко
за исходные коды последнего.
У читателя предполагается знакомство с некоторыми темами
стандартного курса дискретной математики, в остальном же изло-
жение замкнуто. Полезным, однако, является хорошее освоение ма-
териала курсов математическая логики и теории алгоритмов.
Нумерация всех утверждений имеет вид: α.β.γ , где α — номер
главы, β — номер раздела главы, γ — номер утверждения в разделе.
Формулировки теорем, лемм и утверждений заканчиваются симво-
лом ◻ , а доказательства заканчиваются символом ∎. Формулировки
упражнений заканчиваются символом ◻, а окончания примеров по-
мечаются символом ∎.
В тексте не выделяются и не нумеруются определения, однако
некоторые важные понятия, появляющиеся по ходу изложения, на-
браны курсивом.
Мы благодарны С. Борисову и И. Сороканюку за помощь в набо-
ре текста. О всех найденных в тексте ошибках и опечатках следует
сообщать по адресу электронной почты [Link]@[Link].
ГЛАВА 1

СПОСОБЫ ЗАДАНИЯ И РАСПОЗНАВАНИЯ


ФОРМАЛЬНЫХ ЯЗЫКОВ

1.1. Алфавит и слова

Алфавитом будем называть любое множество символов. Пред-


полагается, что термин «символ» имеет достаточно ясный интуи-
тивный смысл и не нуждается в дальнейшем пояснении. Алфавит,
вообще говоря, не обязан быть ни конечным, ни даже счетным, но
везде далее мы будем предполагать его конечным. Термины «буква»
и «знак» используются как синонимы термина «символ» для обозна-
чения элемента алфавита. Термин «буква» будет для нас основным.
Если написать последовательность букв алфавита Σ, располагая
их одну за другой, то получится «слово». Термины «цепочка», «стро-
ка» и даже «предложение» часто используются как синонимы тер-
мина «слово». Термин «слово» будет для нас основным.
1.1. Алфавит и слова 13

Слово называется пустым, если оно не содержит ни одной бук-


вы. Это слово обозначается символом ε.

Пример 1.1.1. Латинский алфавит: множество, состоящее из 26


прописных и 26 строчных латинских букв; begin — слово в этом ал-
фавите. ∎

Пример 1.1.2. Бинарный (или двоичный) алфавит: множество


(0; 1); 001001 — слово в этом алфавите. ∎

Определим две операции над словами:

1) Если α и β — слова, то слово αβ называется конкатенацией


(сцеплением) α и β . Например, если α = вино, β = град, то
αβ = виноград. Для любого слова α всегда αε = εα = α.

2) Обращением слова α называется слово αR , которое отличается от


α только порядком следования входящих в него букв, т.е. если a1 ,
a2 , . . . , an — буквы и α = a1 . . . an , то αR = an . . . a1 . Ясно, что εR = ε.
Например, если α = нос, то αR = сон.

Пусть α, β и γ — произвольные слова в некотором алфавите Σ.


Назовем α префиксом слова αβ , а β — суффиксом слова αβ . Слово β
назовем подсловом слова αβγ . Префикс и суффикс являются подсло-
вами. Заметим, что пустое слово является префиксом, суффиксом и
подсловом любого слова. Если α ≠ β и α — префикс слова β , то α назы-
вается собственным префиксом слова β ; аналогично определяются
собственные суффиксы и подслова.
14 Глава 1. Способы задания и распознавания формальных языков

Слова вида aa. . . a (n букв) будем записывать короче: an . Напри-


мер:
aabbba = a2 b3 a, ε = a0 .

Длиной слова будем называть число букв в нем. Длину слова α


будем обозначать ∣α∣. Например, ∣aab∣ = 3, ∣ε∣ = 0.

Упражнение 1.1.1. Выясните, сколько букв в русском алфавите. ◻

Упражнение 1.1.2. Найдите все префиксы, суффиксы и подслова


слова арбуз. ◻

1.2. Языки и операции над языками


Языком над алфавитом Σ называется произвольное множество
слов, записанных буквами из Σ. Под это определение, конечно, под-
ходит почти любое известное понятие языка. Например, англий-
ский и русский языки, различные алгоритмические языки и т. д.
Рассмотрим простейшие примеры языков над некоторым алфа-
витом Σ:

- пустое множество ∅;

- множество {ε}, состоящее из одного пустого слова;

- множество {a}, где a ∈ Σ, состоящее из одного однобуквенного


слова.
1.2. Языки и операции над языками 15

Отметим, что ∅ и {ε} — два различных языка.


Обозначим через Σ∗ множество, содержащее все слова в алфа-
вите Σ, включая ε. Пусть Σ+ = Σ∗ − {ε}. Например, если Σ — бинарный
алфавит {0, 1}, то

Σ∗ = {ε; 0; 1; 00; 01; 10; 11; 000; 001; . . .}.

Каждый язык L в алфавите Σ является подмножеством множества


Σ∗ и содержит язык ∅. Отметим, что слово “liFe”, составленное из
английских букв, не является словом английского языка, а слово
«жызнь», составленное из русских букв, не является словом русского
языка.

Пример 1.2.1. Рассмотрим язык L1 , содержащий все слова из нуля


или более букв a. Тогда L1 = {ai ∣ i ⩾ 0} = {a}∗ . ∎

В тех случаях, когда это не может привести к путанице, мы бу-


дем обозначать множество, состоящее из одного элемента, самим
элементом. В соответствии с этим соглашением a∗ = {a}∗ .
Если язык L таков, что произвольное слово из L не может яв-
ляться собственным префиксом (суффиксом) никакого другого сло-
ва из L, то говорят, что L обладает префиксным (суффиксным) свой-
ством. Например, язык a∗ не обладает префиксным свойством, а
язык {ai b ∣ i ⩾ 0} этим свойством обладает. В некотором смысле сло-
ва из языка, обладающего префиксным свойством, не продолжимы
16 Глава 1. Способы задания и распознавания формальных языков

вправо, а слова из языка, обладающего суффиксным свойством, не


продолжимы влево.
Рассмотрим некоторые операции над языками. Из того, что
язык является множеством, вытекает, что операции объединения,
пересечения и разности применимы к произвольным языкам. Опе-
рацию конкатенации можно применять к языкам так же, как и к сло-
вам: а именно, если L1 — язык в алфавите Σ1 , а L2 — язык в алфавите
Σ2 , то язык L1 L2 , называемый конкатенацией (а также сцеплением
или произведением) языков L1 , и L2 . определяется равенством:

L1 L2 = {xy ∣ x ∈ L1 , y ∈ L2 } (⊂ {Σ1 ∪ Σ2 }∗ ).

Итерации языка 2 определяются следующим образом:

1) L0 = {ε},
2) Ln = LLn−1 для n ⩾ 1,
3) L∗ = ⋃n⩾0 Ln — полная итерация,
4) L+ = ⋃n⩾1 Ln — позитивная итерация.

Отметим, что

L+ = LL∗ = L∗ L, L∗ = L+ ∪ {ε}.

Пусть Σ1 и Σ2 — алфавиты. Рассмотрим произвольное отображе-


ние h∶ Σ1 → Σ∗2 и расширим его до отображения Σ∗1 в Σ∗2 , полагая

h(ε) = ε, h(xa) = h(x)(a)


1.2. Языки и операции над языками 17

для всех x ∈ Σ∗1 и a ∈ Σ1 . Легко показать, что новое отображение опре-


делено корректно. Для него мы сохраним символ h. Отображение
h∶ Σ∗1 → Σ∗2 называется гомоморфизмом.
Применяя гомоморфизм h к языку L, мы получаем новый язык
h(L), который представляет собой множество слов {h(ω ) ∣ ω ∈ L}.

Пример 1.2.2. Рассмотрим алфавиты Σ1 = {0; 1} и Σ2 = {a; b}. Пусть

L = {0n 1n ∣ n ⩾ 1}.

Предположим, мы хотим заменить каждое вхождение буквы 0 в сло-


вах из языка L на букву a, а каждое вхождение буквы 1 — на bb. Тогда
можно определить гомоморфизм h так, что h(0) = a, h(1) = bb. В этом
случае h(L) = {an b2n ∣ n ⩾ 1}. ∎

Пусть Σ1 и Σ2 — алфавиты, L — язык над алфавитом Σ2 . Рассмот-


рим произвольный гомоморфизм h∶ Σ∗1 → Σ∗2 . Прообразом языка L
называется язык

h−1 (L) = ⋃ h−1 (y ) = {x ∣ h(x) ∈ L} (⊂ Σ∗1 ).


y ∈L

Пример 1.2.3. Пусть h∶ {0; 1}∗ → {a; b}∗ — гомоморфизм, для которо-
го
h(0) = h(1) = a.

Тогда h−1 (a) = {0; 1}, h−1 (b) = ∅. Пусть L1 = {b}∗ , L2 = {a}∗ . Тогда
h−1 (L1 ) = {ε}, h−1 (L2 ) = {0; 1}∗ . ∎
18 Глава 1. Способы задания и распознавания формальных языков

Пример 1.2.4. Пусть h∶ {0; 1}∗ → {a; b}∗ — гомоморфизм, для которо-
го h(0) = a, h(1) = ε. Тогда h−1 (ε) = 1∗ , h−1 (a) = {1i 01j ∣ i, j ⩾ 0}. ∎

Упражнение 1.2.1. Верно ли, что L+ = L∗ − {ε}. ◻

Упражнение 1.2.2. Какие из следующих языков обладают префикс-


ным (суффиксным) свойством?

- ∅;

- {ε};

- {an bn ∣ n ⩾ 1};

- L∗ , если L обладает префиксным (суффиксным) свойством;

- {ω ∣ ω ∈ {a, b}∗ и число символов a в ω равно числу символов b}. ◻

Упражнение 1.2.3. Пусть h∶ {0; 1; 2}∗ → {a; b}∗ — гомоморфизм,


определённый равенствами h(0) = a, h(1) = bb и h(2) = ε. Опишите
языки h({012}∗ ), h({0; 1; 2}∗ ), h−1 ({ab}∗ ). ◻

Упражнение 1.2.4. Докажите или опровергните следующие утвер-


ждения:

h−1 (h(L)) = L,
h(h−1 (L)) = L. ◻
1.3. Грамматики 19

1.3. Грамматики
Грамматика — это математическая система, определяющая
язык. В грамматике G, определяющей язык L, используются два ко-
нечных непересекающихся множества символов: множество нетер-
минальных символов, которое часто будет обозначаться буквой N ,
и множество терминальных символов, обозначаемое обычно Σ. Из
терминальных символов образуются слова языка L, а нетерминаль-
ные символы играют вспомогательную роль. Ядром грамматики яв-
ляется конечное множество P правил образования, которые описы-
вают процесс порождения слов языка.
Дадим теперь точное определение грамматики. Грамматикой
называется четверка G = (N, Σ, P, S ), где N — конечное множество
нетерминальных символов (алфавит нетерминалов), Σ — не пере-
секающееся с N конечное множество терминальных символов (ал-
фавит терминалов), P — конечное подмножество множества

(N ∪ Σ)∗ N (N ∪ Σ)∗ × (N ∪ Σ)∗ .

Пара (α, β ) ∈ P , где α ∈ (N ∪ Σ)∗ N (N ∪ Σ)∗ ,β ∈ (N ∪ Σ)∗ , называется пра-


вилом или продукцией и записывается в виде α → β . S — выделенный
символ из N , называемый начальным или стартовым символом.

Пример 1.3.1. Рассмотрим грамматику G = ({A; S }, {0; 1}, P, S ), где


P состоит из продукций

S → 0A1, S → 01A01, S → 00A1, A → ε.


20 Глава 1. Способы задания и распознавания формальных языков

Нетерминальными символами в этой грамматике являются буквы A


и S , терминальными — 0 и 1, а S — начальный символ. ∎

Продукции с одинаковыми правыми частями будем иногда за-


писывать в одну строчку через символ |, например, две первых про-
дукции из примера 1.3.1 будем записывать так:

S → 0A1 ∣ 01A01. (1.3.1)

Грамматика определяет язык рекурсивным образом. Рекурсив-


ность проявляется в определении особого рода слов, называемых
выводимыми словами грамматики G = (N, Σ, P, S ): S — выводимое
слово; если αβγ — выводимое слово и (β → δ ) ∈ P , то αβγ — тоже
выводимое слово; никакие другие слова нe являются выводимыми.
Выводимое слово грамматики G. не содержащее нетерминальных
символов, называется терминальным словом, порождаемым грам-
матикой G.
Язык L(G), порождаемый грамматикой G, определяется как
множество всех терминальных слов, порождаемых грамматикой G.
Пусть G = (N, Σ, P, S ) — некоторая грамматика. Если
αβγ ∈ (N ∪ Σ)∗ и (β → δ ) ∈ P , то будем говорить, что слово αδγ непо-
средственно выводимо из αβγ и записывать это так: αβγ →G αδγ .
В тех случаях, когда из контекста ясно, о какой грамматике идет
речь, нижний индекс G будем опускать. Через →k будем обозначать
k -ю степень отношения →, т.е. будем записывать α →k β , если
1.3. Грамматики 21

существует последовательность k + 1 слов α0 , α1 , . . . , αk , для которых


α = α0 , αi−1 → αi при 1 ⩽ i ⩽ k и αk = β . Эта последовательность слов
называется выводом длины k слова β из слова α в грамматике G.
Транзитивное замыкание отношения → обозначим через →+ ; ϕ →+ ψ
читается так: слово ψ выводимо из ϕ нетривиальным образом.
Рефлексивное и транзитивное замыкание отношения → обозначим
через →∗ ; ϕ →∗ ψ читается так: ψ выводимо из ϕ. Отметим, что
α →+ β тогда и только тогда, когда α →i β для некоторого i ⩾ 1, а
α →∗ β тогда и только тогда, когда α →i β для некоторого i ⩾ 0. Таким
образом, L(G) = {ω ∣ ω ∈ Σ∗ , S →∗ ω }.

Упражнение 1.3.1. Рассмотрим грамматику G = ({A; S }, {0; 1}, P, S ),


где P состоит из продукций:

S → 0A1, 0A → 00A1, A → ε.

Доказать, что L(G) = {0n 1n ∣ n ⩾ 1}. ◻

Приведем существенные для дальнейшего примеры грамматик.

Пример 1.3.2. Пусть G = ({Ц}, {0; 1; . . . ; 9}, Ц → 0 ∣ 1 ∣ . . . ∣ 9, Ц). В


грамматике G единственный нетерминальный символ. Ясно, что
L(G) = {0; 1; . . . ; 9}. ∎
22 Глава 1. Способы задания и распознавания формальных языков

Пример 1.3.3. Пусть G0 = ({E; T ; F }, {a; +; ∗; (; )}, P, E ), где P состоит


из продукций:

E → E + T ∣ T, T → T ∗ F ∣ F, F → (E ) ∣ a.

Пример вывода в этой грамматике:

E ⇒E+T ⇒T +T ⇒
F +T ⇒a+T ⇒a+T ∗F ⇒a+F ∗F ⇒
a + a ∗ F ⇒ a + a ∗ a.

Можно доказать, что язык L(G0 ) — это множество арифметических


выражений, построенных из пяти символов +, ∗, a, (, ). ∎

Пример 1.3.4. Рассмотрим грамматику G = ({B; C; S }, {a, b, c}, P, S ),


где P состоит из продукций:

S → aSBC ∣ abC, CB → BC, bB → bb,


bC → bc, cC → cc.

Пример вывода в этой грамматике:

S ⇒ aSBC ⇒ aabCBC ⇒ aabBCC ⇒ aabbCC ⇒ aabbcC ⇒ aabbcc.

Можно формально доказать, что эта грамматика порождает язык


{an bn cn ∣ n ⩾ 1}. ∎
1.3. Грамматики 23

Пример 1.3.5. Пусть G = ({A; B; C; D; S }, {a; b}, P, S ), где P состоит из


продукций:

S → CD, Ab → bA, C → aCA ∣ bCB ∣ ε, Ba → aB,


AD → aD, Bb → bB, BD → bD, Aa → aA,
D → ε.

Пример вывода в этой грамматике:

S ⇒ CD ⇒ aCAD ⇒ abCBAD ⇒ abBAD ⇒


abBaD ⇒ abaBD ⇒ ababD ⇒ abab.

Покажем, что L(G) = {ωω ∣ ω ∈ {a, b}∗ }, т.е. язык L(G) состоит из слов
четной длины, составленных из букв a и b, причем первая половина
каждого слова совпадает со второй половиной.
Сначала докажем, что {ωω ∣ ω ∈ {a, b}∗ } ⊆ L(G). Для этого надо
проверить, что каждое слово вида ωω можно вывести из S . Непосред-
ственно проверяется, что в G возможны следующие выводы:

1) S ⇒ CD
2) C ⇒n c1 c2 . . . cn CXn Xn−1 . . . X1 ⇒ c1 c2 . . . cn Xn Xn−1 . . . X1 , где для
всех i ci = a тогда и только тогда, когда Xi = A, и ci = b тогда и
только тогда, когда Xi = B ;
3)

Xn . . . X2 X1 D ⇒ Xn . . . X2 c1 D ⇒n−1 c1 Xn . . . X2 D ⇒
24 Глава 1. Способы задания и распознавания формальных языков

c1 Xn . . . X3 c2 D ⇒n−2 c1 c2 Xn . . . X3 D ⇒ . . . ⇒
c1 c2 . . . cn−1 Xn D ⇒ c1 c2 . . . cn−1 cn D ⇒ c1 c2 . . . cn−1 cn .

В 2) из C выводится слово, составленное из букв a и b, за которым


следует его зеркальное отражение, составленное соответственно из
букв A и B .
В 3) нетерминалы A и B перемещаются к правому концу слова,
где A становится терминалом a, а B становится терминалом b, всту-
пая в контакт с нетерминалом D. Нетерминалы A и B могут превра-
титься в терминалы единственным способом — только передвинув-
шись к правому концу слова. При этом слово, составленное из букв A
и B , будет обращено и совпадет, таким образом, со cловом с буквами
a и b, выведенным из C в выводе 2).
Комбинируя выводы 1), 2) и 3), получаем для n ⩾ 0

S ⇒∗ c1 c2 . . . cn c1 c2 . . . cn ,

где ci ∈ {a, b} для 1 ⩽ i ⩽ n. Итак, {ωω ∣ ω ∈ {a, b}∗ } ⊆ L(G).


Теперь докажем, что L(G) ⊆ {ωω ∣ ω ∈ {a, b}∗ }. Для этого надо про-
верить, что из S выводятся только те терминальные слова, которые
имеют вид ωω . Зададим два гомоморфизма:

g ∶ {a; b; A; B }∗ → {a; b; A; B }∗ , h∶ {a; b; A; B }∗ → {a; b; A; B }∗ ,

удовлетворяющие условиям:

g (a) = a, g (b) = b, g (A) = g (B ) = ε,


1.3. Грамматики 25

h(A) = A, h(B ) = B, h(a) = h(b) = ε.

Применяя метод математической индукции по параметру m и ана-


лизируя множество продукций P , легко доказать следующее вспо-
могательное утверждение: если S ⇒m α, то α представимо в виде

c1 c2 . . . cn U βV,

где ci ∈ {a; b}, U ∈ {C; ε}, V ∈ {D; ε}, а β такое слово длины n из языка
{a; b; A; B }∗ , что

g (β ) = c1 c2 . . . ci , h(β ) = Xn Xn−1 . . . Xi+1 ,

где




⎪A, если cj = a;
Xj = ⎨


⎪ B, если cj = b.


Из этого утверждения вытекает, что все слова из L(G) имеют вид

c1 c2 . . . cn c1 c2 . . . cn ,

где ci ∈ {a, b}, поэтому L(G) ⊆ {ωω ∣ ω ∈ {a, b}∗ }.


Итак, равенство L(G) = {ωω ∣ ω ∈ {a, b}∗ } доказано. ∎

Упражнение 1.3.2. Докажите, что язык L(G0 ) из примера 1.3.3 сов-


падает со множеством всех арифметических выражений, построен-
ных из пяти символов:

+, ∗, a, (, ). ◻
26 Глава 1. Способы задания и распознавания формальных языков

Упражнение 1.3.3. Докажите, что грамматика из примера 1.3.4 по-


рождает язык
{an bn cn ∣ n ⩾ 1}. ◻

1.4. Классификация грамматик


В соответствии с подходом Хомского грамматики классифици-
руют по структуре их продукций. Грамматика G = (N, Σ, P, S ) назы-
вается:

1) праволинейной, если каждая продукция из P имеет вид A → xB


или A → x, где A, B ∈ N , x ∈ Σ∗ ;

2) контекстно-свободной (или бесконтекстной), если каждая про-


дукция из P имеет вид A → α, где A ∈ N , α ∈ (N ∪ Σ)∗ ;

3) контекстно-зависимой (или неукорачивающейся), если каждая


продукция из P имеет вид α → β , где ∣α∣ ⩽ ∣β ∣.

Грамматика, не удовлетворяющая ни одному из указанных


ограничений, называется грамматикой общего вида (или без огра-
ничений). Далее мы будем пользоваться сокращениями ПЛ, КС
и КЗ для терминов «праволинейный», «контекстно-свободный» и
«контекстно-зависимый» соответственно.
Грамматика примера 1.3.2 — праволинейная. Такой же является
и грамматика G = ({S }, {0; 1}, {S → 0S ∣ 1S ∣ ε}, S ) с языком {0, 1}∗ .
1.4. Классификация грамматик 27

Примером КС-грамматики служит грамматика из примера 1.3.3.


Ясно, что каждая ПЛ-грамматика является контекстно-свободной.
В примере 1.3.4 грамматика является контекстно-зависимой.
КЗ-грамматика не допускает продукций вида A → ε, называе-
мых ε-продукциями. Поэтому КС-грамматика, содержащая ε-про-
дукции, не является КЗ-грамматикой.
Если язык L порождается грамматикой типа i, то L называется
языком типа i. Таким образом, язык L(G) примера 1.3.2 — праволи-
нейный, язык L(G0 ) примера 1.3.3 — контекстно-свободный, а язык
L(G) примера 1.3.4 — контекстно-зависимый. Язык, порожденный
грамматикой примера 1.3.5, — это язык без ограничений.
Если язык задан какой-то грамматикой, это еще не значит, что
его нельзя породить менее мощной грамматикой. Например, КС-
грамматика

G = ({A; S }, {0; 1}, {S → AS ∣ ε; A → 0 ∣ 1}, S )

порождает язык {0; 1}∗ , который, как отмечено выше, можно полу-
чить и с помощью ПЛ-грамматики.
Определенные выше четыре типа грамматик и языков называ-
ют иерархией Хомского.

Упражнение 1.4.1. Постройте ПЛ-грамматику для языка, состоя-


щего из идентификаторов, которые могут быть произвольной дли-
ны, но должны начинаться с буквы (как в Алголе). ◻
28 Глава 1. Способы задания и распознавания формальных языков

Упражнение 1.4.2. Постройте ПЛ-грамматику для языка, состоя-


щего из идентификаторов, которые должны содержать от одного до
шести символов и начинаться с буквы I , J , K , L, M или N (как иден-
тификаторы целых переменных в Фортране). ◻

Упражнение 1.4.3. Постройте КС-грамматику, порождающую язык

(a1 a2 . . . an an . . . a2 a1 ∣ ai ∈ {0, 1}, 1 ⩽ i ⩽ n}. ◻

1.5. Распознаватели
В 1.3 было отмечено, что грамматика — это математическая си-
стема, определяющая язык. Второй метод, обеспечивающий зада-
ние языка конечными средствами, состоит в использовании рас-
познавателей. Распознаватель это очень схематизированный алго-
ритм, определяющий некоторое множество. В нём можно выделить
три основные части: входную ленту ВЛ, управляющее устройство с
конечной памятью УУ, вспомогательную или рабочую память РП.
Входная лента (ВЛ) — это линейная последовательность ячеек,
причем каждая ячейка содержит точно одну букву из некоторого ко-
нечного входного алфавита. Самую левую и самую правую ячейки
могут занимать особые концевые маркеры; причем маркер может
стоять только на правом конце ленты, или маркеров может не быть
совсем.
1.5. Распознаватели 29

Входная головка в каждый данный момент читает одну входную


ячейку. За один шаг работы распознавателя входная головка может
сдвинуться на одну ячейку влево, остаться неподвижной или сдви-
нуться на одну ячейку вправо. Распознаватель, который никогда не
передвигает свою входную головку влево, называется односторон-
ним. Обычно предполагается, что входная головка только читает,
т.е. в ходе работы распознавателя буквы на входной ленте не ме-
няются. Но можно рассматривать и такие распознаватели, входная
головка которых и читает, и пишет.

Рабочей памятью (РП) распознавателя может быть любого ти-


па хранилище информации. Предполагается, что алфавит памяти
конечен и хранящаяся в памяти информация образована только
из букв этого алфавита. Предполагается также, что в любой мо-
мент времени можно конечными средствами описать содержимое
и структуру памяти, хотя с течением времени объем памяти может
становиться сколь угодно большим.

Ядром распознавателя является управляющее устройство с ко-


нечной памятью (УУ), под которым можно понимать программу,
управляющую поведением распознавателя. УУ представляет собой
конечное множество состояний вместе с функцией, которое опи-
сывает, как меняются состояния в соответствии с текущим вход-
ным символом и текущей информацией, извлеченной из памяти.
30 Глава 1. Способы задания и распознавания формальных языков

УУ определяет также, в каком направлении сдвинуть входную го-


ловку и какую информацию поместить в память.
Распознаватель работает, проделывая некоторую последова-
тельность шагов (или тактов). В начале такта читается текущий
входной символ и исследуется память. После этого с распознавате-
лем происходит следующее:

1) входная головка сдвигается на одну ячейку влево, одну ячейку


вправо или сохраняется в исходном положении;

2) в память помещается некоторая информация;

3) изменяется состояние управляющего устройства.

Поведение распознавателя удобно описывать в терминах кон-


фигураций распознавателя, которые описывают состояние УУ, со-
держимое ВЛ вместе с положением входной головки и, наконец, со-
держимое РП. Во множестве всех состояний выделяют начальное
состояние и множество заключительных состояний. Конфигурация
называется начальной, если УУ находится в начальном состоянии,
входная головка читает самую левую букву на ВЛ, и РП имеет зара-
нее установленное начальное содержимое. Конфигурация называ-
ется заключительной, если УУ находится в заключительном состоя-
нии, а входная головка читает правый концевой маркер или, если
маркер отсутствует, сошла с правого конца входной ленты. (Иногда
1.6. Упражнения 31

требуют, чтобы РП в заключительной конфигурации тоже удовле-


творяла некоторым условиям.)
Говорят, что распознаватель допускает входное слово ω , если,
начиная с начальной конфигурации, в которой слово ω записано
на входной ленте, распознаватель может проделать последователь-
ность шагов, заканчивающуюся заключительной конфигурацией.
Язык, определяемый распознавателем, — это множество входных
слов, которые он допускает.
Для каждого класса грамматик из иерархии Хомского существу-
ет естественный класс распознавателей, определяющий тот же класс
языков. Некоторые из таких распознавателей будут изучаться далее.

1.6. Упражнения

Для каждой грамматики, встречающейся в заданиях, следует


указать её тип (в иерархии Хомского). Написать грамматику, порож-
дающую:

1) язык Σ∗ , где (a) Σ = {0, 1}; (b) Σ — произвольный (конечный) ал-


фавит;

2) некоторый конечный язык L = {ωi }ni=1 ;

3) {a+ b+ }, {an bn ∣ n ∈ N}, {an bn am ∣ m, n ∈ N}; {an bn cn ∣ n ∈ N};


32 Глава 1. Способы задания и распознавания формальных языков

4) множество правильных скобочных последовательностей («язык


Дика») с одним типом скобок;

5) множество правильных скобочных последовательностей («язык


Дика») с двумя типами скобок;

6) арифметическую прогрессию {a + nd ∣ n ∈ N0 }, d > 0, 0 ⩽ a < d


(имея в виду изоморфизм моноидов (N0 , +) ≅ ({∣}∗ , ⋅), где ⋅ озна-
чает операцию конкатенации);

7) язык, являющийся объединением конечного числа арифмети-


ческих прогрессий.
ГЛАВА 2

РЕГУЛЯРНЫЕ ЯЗЫКИ

2.1. Регулярные множества и регулярные


выражения

Пусть Σ — конечный алфавит. Регулярное множество над алфа-


витом Σ определяется рекурсивно следующим образом: множества
∅, {ε} и {a} для каждого a из Σ — регулярные; если P и Q — регуляр-
ные множества, то таковы же и множества P ∪ Q, P Q, P ∗ ; ничто дру-
гое не является регулярным множеством. Другими словами, множе-
ство регулярно над алфавитом Σ тогда и только тогда, когда оно либо
∅, либо {ε}, либо {a} для некоторого a ∈ Σ. либо его можно получить
из этих множеств применением конечного числа операций объеди-
нения, конкатенации и итерации.
Регулярное множество над алфавитом Σ иначе называется регу-
лярным языком над этим алфавитом
34 Глава 2. Регулярные языки

Для обозначения регулярных множеств используют регулярные


выражения. Регулярные выражения над алфавитом Σ и регулярные
множества, которые они обозначают, определяются рекурсивно сле-
дующим образом: ∅ — регулярное выражение, обозначающее регу-
лярное множество ∅; ε — регулярное выражение, обозначающее ре-
гулярное множество {ε} если a ∈ Σ, то a — регулярное выражение,
обозначающее регулярное множество {a}; если p и q — регулярные
выражения, обозначающие регулярные множества P и Q соответ-
ственно, то (p + q ), (pq ) и (p)∗ — регулярные выражения, обознача-
ющие P ∪ Q, P Q и p∗ соответственно; ничто другое не является регу-
лярным выражением.
Для сокращения будем далее вместо pp∗ писать p+ и устранять
из регулярных выражений лишние скобки там, где это не приво-
дит к недоразумениям. При этом будем предполагать, что наивыс-
шим приоритетом обладает итерация, затем конкатенация и, нако-
нец, операция +. Например, вместо (01(1∗ )) + (1(0∗ ))) будем писать
01+ + 10∗ .

Пример 2.1.1. Приведем несколько регулярных выражений и соот-


ветствующих им множеств:

1) (0 + 1)∗ обозначает {0; 1}∗ ;

2) (0 + 1)∗ 0101 обозначает множество всех слов над алфавитом {0; 1}


с суффиксом 0101;
2.1. Регулярные множества и регулярные выражения 35

3) (a + b + c + d)(a + b + c + d + 0 + 1)∗ обозначает множество всех слов


над алфавитом {0; 1; a; b; c; d} с префиксами a, b, c или d;

4) (00+11)∗ ((01+10)(00+11)∗ (01+10)(01+11)∗ )∗ обозначает множество


всех слов над алфавитом {0; 1}, содержащих четное число нулей
и четное число единиц.

Последний пример представляется весьма поучительным, и хо-


телось бы порекомендовать читателю поразмышлять над ним до тех
пор, пока он не станет «очевидным». ∎

Для каждого регулярного множества можно найти по крайней


мере одно регулярное выражение, которое его обозначает. Обрат-
но, для каждого регулярного выражения можно построить регуляр-
ное множество, обозначаемое этим выражением. Но для каждого
регулярного множества существует бесконечно много обозначаю-
щих его регулярных выражений. Будем говорить, что два регуляр-
ных выражения равны (=), если они обозначают одно и то же мно-
жество.

Лемма 2.1.1. Пусть α, β , γ — регулярные выражения. Тогда

1) α + ∅ = α, 5) α(β + γ ) = αβ + αγ ,

2) α + α = α, 6) (α + β )γ = αγ + βγ ,

3) α + β = β + α, 7) αε = εα = α,

4) α + (β + γ ) = (α + β ) + γ , 8) ∅α = α∅ = ∅,
36 Глава 2. Регулярные языки

9) α(βγ ) = (αβ )γ , 12) α∗ = α + α∗ ,

10) ∅∗ = ε, 13) (α + β )∗ = (α∗ β ∗ )∗ ,

11) (α∗ )∗ = α∗ , 14) αα∗ + ε = α∗ . ◻

Доказательство. Каждое из равенств легко проверить, используя


свойства множеств и приведенные выше определения. Рассмотрим,
для примера, лишь некоторые из приведенных равенств.
Равенство 4). Пусть α, β и γ — регулярные выражения, обозна-
чающие регулярные множества A, B и Γ соответственно. Тогда β + γ
обозначает B ∪ Γ, а α + (β + γ ) обозначает A ∪ (B ∪ Γ); аналогично,
(α + β ) + γ обозначает (A ∪ B ) ∪ Γ. Но A ∪ (B ∪ Γ) = (A ∪ B ) ∪ Γ, поэтому
α + (β + γ ) = (α + β ) + γ .
Равенство 12). Пусть α — регулярное выражение, обозначающее
регулярное множество A. Ясно, что множество A∗ = ⋃n⩾0 An содержит
A, поэтому A∗ ∪ A = A∗ и, следовательно, α∗ + α = α∗ .

Упражнение 2.1.1. Приведите доказательства всех равенств из


леммы 2.1.1 Постарайтесь обнаружить новые равенства и доказать
их (см. [6]). ◻

В дальнейшем, если это не будет приводить к недоразумению,


мы не будем различать регулярное выражение и обозначаемое им
регулярное множество.
2.2. Уравнения и системы уравнений с регулярными коэффициентами 37

2.2. Уравнения и системы уравнений с


регулярными коэффициентами
Рассмотрим уравнение

X = αX + β, (2.2.1)

где α и β — регулярные выражения над некоторым алфавитом Σ.


Прямой подстановкой проверим, что X = α∗ β — решение уравне-
ния (2.2.1):
(?) α∗ β = α(α∗ β ) + β,
(?) α∗ β = (αα∗ )β + εβ,
(?) α∗ β = (αα∗ + ε)β,
(!) α∗ β = α∗ β.
Решение уравнения с регулярными коэффициентами может
быть не единственным. Например, если в уравнении (2.2.1) потре-
бовать, чтобы ε ∈ α, то
X = α∗ (β ∪ L)

будет решением этого уравнения для любого (не обязательно регу-


лярного) языка L. Действительно,
(?) α∗ (β ∪ L) = α(α∗ (β ∪ L)) ∪ β,
(?) α∗ (β ∪ L) = (αα∗ )(β ∪ L)) ∪ β,
(?) α∗ (β ∪ L) = α∗ (β ∪ L) ∪ β,
(!) α∗ (β ∪ L) = α∗ (β ∪ L).
38 Глава 2. Регулярные языки

Таким образом, уравнение (2.2.1) при ε ∈ α имеет бесконечно


много решений.
В теории формальных языков представляет интерес, глав-
ным образом, наименьшее решение, которое называют наимень-
шей неподвижной точкой. (В математике решение уравнения вида
x = f (x) принято называть неподвижной точкой отображения f , по-
этому термин «неподвижная точка» используется и здесь [3].)

Теорема 2.2.1. Пусть α и β — регулярные выражения над алфави-


том Σ и X ∉ Σ. Рассмотрим уравнение (2.2.1). Тогда

1) X = α∗ β — наименьшая неподвижная точка уравнения;

2) если ε ∉ α, то X = α∗ β — единственное решение уравнения;

3) если ε ∈ α, то для произвольного (не обязательно регулярного)


языка L язык α∗ (β ∪ L) является решением уравнения, и наобо-
рот, всякое решение уравнения может быть записано в таком
виде. ◻

Доказательство.
1) Ранее мы проверили, что X = α∗ β — решение уравнения (2.2.1).
Пусть Ω — произвольное решение этого уравнения; покажем, что
α∗ β ⊂ Ω. Предположим, что ω ∈ α∗ β . Тогда ω = ωk ωk−1 . . . ω1 b, где ωi ∈ α,
b ∈ β . Из того, что Ω — решение уравнения (2.2.1), вытекает, что

Ω = αΩ + β
2.2. Уравнения и системы уравнений с регулярными коэффициентами 39

и, следовательно, β ⊂ Ω, αΩ ⊂ Ω. Тогда

b ∈ Ω, ω1 b ∈ Ω, ω2 ω1 b ∈ Ω, . . . , ωk ωk−1 . . . ω1 b ∈ Ω.

Таким образом, α∗ β ⊂ Ω. Это означает, что X = α∗ β - наименьшая


неподвижная точка.
2) Пусть ε ∉ α. Предположим, что Ω — произвольное решение
уравнения (2.2.1), и покажем, что Ω = α∗ β . Пусть ω = a1 a2 . . . am ∈ Ω
где ai ∈ Σ. Из того, что Ω = αΩ + β , вытекает: либо ω ∈ β ⊂ α∗ β , либо
ω ∈ αΩ. Если ω ∈ αΩ = ααΩ + αβ , то либо ω ∈ αβ ⊂ α∗ β , либо ω ∈ ααΩ.
Продолжим этот процесс до тех пор, пока альтернатива ω ∈ αα . . . αΩ
окажется невозможной (в силу того, что ω имеет m букв, а ε ∉ α, это
обязательно произойдет по крайней мере при k > m). В итоге полу-
чим, что ω ∈ α∗ β .
3) Пусть ε ∈ α. Ранее мы проверили, что множество α∗ (β ∪ L),
где L — произвольный язык, является решением уравнения (2.2.1).
Пусть теперь Ω — какое-нибудь решение этого уравнения; покажем,
что Ω можно записать в виде α∗ (β ∪ L), где L — некоторый язык. По
условию
Ω = αΩ + β.

Отсюда вытекает, что


αΩ ⊆ Ω, β ⊆ Ω.

С другой стороны, из условия ε ∈ α следует, что

Ω ⊆ αΩ.
40 Глава 2. Регулярные языки

Получаем равенство:
Ω = αΩ.

Его непосредственным следствием является равенство:

Ω = α∗ Ω.

Тогда в силу соотношения β ⊆ Ω получаем:

Ω = α∗ (Ω ∪ β ),

так как Ω = Ω ∪ β . Итак, действительно показано, что если множество


Ω — решение уравнения (2.2.1), то оно имеет такой вид:

Ω = α∗ (L ∪ β ),

где L — некоторый язык.

Систему уравнений с регулярными коэффициентами над неко-


торым алфавитом Σ назовем стандартной системой со множеством
неизвестных
∆ = {X1 ; X2 ; . . . ; Xn },

если она имеет вид






⎪ X1 = α10 + α11 X1 + α12 X2 + . . . + α1n Xn






⎪X2 = α20 + α21 X1 + α22 X2 + . . . + α2n Xn
⎨ (2.2.2)


⎪ .....................................







⎩Xn = αn0 + αn1 X1 + αn2 X2 + . . . + αnn Xn

2.2. Уравнения и системы уравнений с регулярными коэффициентами 41

где αij — регулярные выражения над Σ и Σ ∩ ∆ = ∅.

Коэффициентами уравнений являются регулярные выражения


αij . Если αij = ∅, то в уравнении для Xi нет компонента, содержаще-
го Xj . Аналогично, если αij = ε, то в уравнении для Xi компонент,
содержащий Xj , совпадает с Xj . Иными словами, ∅ играет роль ко-
эффициента 0, а ε - роль коэффициента 1 в обычных линейных ал-
гебраических уравнениях.

Пусть Q — стандартная система уравнения со множеством неиз-


вестных ∆ и с коэффициентами над алфавитом Σ. Отображение f
множества ∆ во множество языков над Σ называют решением систе-
мы Q, если после подстановки f (X ) вместо X (∈ ∆) в каждое уравне-
ние системы все уравнения становятся равенствами. Отображение
f ∶ ∆ → P (Σ∗ ) называют наименьшей неподвижной точкой системы
Q, если, во-первых, f — решение и, во-вторых, f (X ) ⊆ g (X ) для лю-
бого другого решения g и всех X ∈ ∆.

Теорема 2.2.2. Пусть Q — стандартная система уравнений, а Yi —


множество всех слов ω . . . ωm , где m ⩾ 1 и ωm ∈ αjm 0 , ωk ∈ αjk jk+1 для
некоторой последовательности ji = j1 , . . . , jm (∈ {1; 2; . . . ; n}). Отобра-
жение f множества ∆ = {X1 ; X2 ; . . . ; Xn } во множество языков над Σ
определим равенством: f (Xi ) = Yi , где i ∈ {1; 2; . . . ; n}. Тогда f — наи-
меньшая неподвижная точка системы Q. ◻
42 Глава 2. Регулярные языки

Доказательство. Путем непосредственной подстановки проверяет-


ся, что для всех i

f (Xi ) = αi0 ∪ αi1 f (X1 ) ∪ ⋅ ⋅ ⋅ ∪ αin f (Xn ).

Таким образом, f — решение.


Покажем, что f — наименьшая неподвижная точка. Пусть g —
какое-нибудь решение системы и i ∈ {1; 2; . . . ; n}. Рассмотрим про-
извольное слово ω из f (Xi ). Тогда ω = ω1 . . . ωm (m ⩾ 1), где для неко-
торой последовательности чисел j1 , . . . , jm (∈ {1; 2; . . . ; n}) выполнены
условия:
ωm ∈ αjm 0 , ωk ∈ αjk jk+1

Так как g - решение, то

g (Xi ) = αi0 ∪ αi1 g (X1 ) ∪ ⋅ ⋅ ⋅ ∪ αin g (Xn ).

В частности,
αi0 ⊆ g (Xi ), αik g (Xk ) ⊆ g (Xi )

для всех i и k . Тогда

ωm ∈ αjm 0 ⊆ g (Xjm ),
ωm−1 ωm ∈ αjm−1 jm g (Xjm ) ⊆ g (Xjm−1 ),
...
ω = ω1 ω2 . . . ωm ∈ αj1 j2 g (Xj2 ) ⊆ g (Xj1 ) = g (Xi ).

Таким образом, f (Xi ) ⊆ g (Xi ). Отсюда следует, что f — наимень-


шая неподвижная точка системы Q.
2.3. Алгоритм решения систем с регулярными коэффициентами 43

В этой теореме получено описание наименьшей неподвижной


точки стандартной системы с регулярными коэффициентами, но,
во-первых, нет гарантий, что наименьшая неподвижная точка яв-
ляется регулярным множеством, и, во-вторых, неясно, как эту наи-
меньшую неподвижную точку найти. Эти вопросы будут рассмотре-
ны в следующем пункте.

Упражнение 2.2.1. Проверьте (любым способом), что наименьшая


неподвижная точка системы




⎪X1 = a10 + a11 X1 + a12 X2
⎨ (2.2.3)


⎪ X = a20 + a21 X1 + a22 X2

⎩ 2
имеет вид



⎪ ∗ ∗ ∗
⎪f (X1 ) = (a11 + a12 a22 a21 ) (a10 + a12 a22 a20 ),
⎨ (2.2.4)


⎪ f (X2 ) = (a22 + a21 a∗11 a12 )∗ (a20 + a21 a∗11 a10 )

⎩ ◻

Упражнение 2.2.2. Сформулируйте и докажите аналог теоре-


мы 2.2.1 для систем. ◻

2.3. Алгоритм решения систем уравнений с


регулярными коэффициентами
Рассмотрим стандартную систему уравнений с регулярными ко-
эффициентами вида (2.2.2).
44 Глава 2. Регулярные языки

Алгоритм 2.3.1 Решение систем уравнений с регулярными коэффициентами

Вход: Стандартная система уравнения с регулярными коэффициентами над ал-


фавитом Σ и множеством неизвестных ∆ = {X1 , . . . , Xn }.
Выход: Решение системы в виде X1 = α1 , . . . , Xn = αn , где αi — регулярные выраже-
ния над алфавитом Σ.
Метод: Напоминает обычный метод Гаусса решения систем линейных уравнения
и основан на систематическом использовании формулы X = α∗ β для наименьшей
неподвижной точки уравнения (2.2.1).

Шаг 1. Положим i = 1.
Шаг 2. Если i = n, перейти к шагу 4. В противном случае с помощью тождеств из
леммы 2.1.1 записать уравнение для Xi в виде Xi = αXi + β , где α и β — регулярные
выражения над Σ. Затем в правых частях уравнений для Xi+1 , /ldots, Xn заменить
Xi регулярным выражением α∗ β .
Шаг 3. Увеличить i на 1 и вернуться к шагу 2.
Шаг 4. Записать уравнение для Xn в виде Xn = αXn + β где α и β — регулярные
выражения над Σ. (После выполнения шага 2 для каждого i при l < n в правой
части уравнения для Xi не будет неизвестных X1 , . . . , Xi−1 . В частности, на шаге 4
этим свойством будет обладать и уравнение для Xn .) Перейти к шагу 5 (при этом
i = n).

Теорема 2.3.1. Алгоритм 2.3.1 строит наименьшую неподвижную


точку системы уравнений как регулярный язык. ◻

Доказательству теоремы 2.3.1 предпошлём две леммы.


2.3. Алгоритм решения систем с регулярными коэффициентами 45

Лемма 2.3.1. Пусть Q1 и Q2 — системы уравнений с регулярными


коэффициентами до и после одного применения шага 2 алгорит-
ма 2.3.1. Тогда эти системы имеют одну и ту же наименьшую непо-
движную точку. ◻

Доказательство. Отметим, что в ходе работы алгоритма для 1 ⩽ l < i


коэффициент при Al в уравнении для Ai оказывается равным ∅.
Предположим, что на шаге 2 рассматривается уравнение

Ai = αi0 + αilAi + αi,i+1 Ai+1 + . . . + αin An

системы Q1 .
В системах Q1 и Q2 уравнения для Aj при j ⩽ i совпадают, а при
j > i эти уравнения совпадать не обязаны.
Пусть j > i и
n
Aj = αj0 + ∑αjk Ah (2.3.1)
h=i
это уравнение для Aj в системе Q1 . Тогда в силу того, что
n

Ai = αii αi0 + ∑ αii∗ αih Ah ,
h=i+1

уравнение для Aj в системе Q2 имеет вид


n

Aj = (αj0 + αji αii αi0 ) + ∑(αjk + αji α ∗ii αih )Ah . (2.3.2)
h=i

Пусть

βjk = αjh + αji α ∗ii αjk (k ∈ {0; 1 + 1; . . . ; n}.


46 Глава 2. Регулярные языки

Через f1 и f2 обозначим наименьшие неподвижные точки систем Q1


и Q2 соответственно. Далее будем пользоваться тем описанием наи-
меньших неподвижных точек систем, которое дано в теореме 2.2.2.
В частности, f2 (Aj ) — множество всех слов, представимых в виде
ω1 . . . ωm , где m ⩾ 1 и ωm ∈ βjm 0 , ωk ∈ βjk jk+1 для некоторой последова-
тельности j1 = j, . . . , jm (∈ {1; 2; . . . ; n}).
Сравнение формул (2.3.1) и (2.3.2) показывает, что

f2 (Aj ) ⊆ f1 (Aj ).

Действительно, любое слово x из αji αii∗ αjk можно представить в ви-


де x1 x2 . . . xr , где ω1 ∈ αji , ωr ∈ αjk и ω2 , . . . , ωr−1 ∈ αii . Таким образом,
слово ω является конкатенацией слов, каждое из которых принад-
лежит множеству, обозначаемому некоторым коэффициентом си-
стемы Q1 , и индексы этих коэффициентов удовлетворяют необхо-
димым условиям.
Докажем обратное включение

f2 (Aj ) ⊇ f1 (Aj ).

Предположим, что ω ∈ f1 (Aj ). Тогда ω = ω1 . . . ωm , где для некото-


рой последовательности ненулевых индексов l1 = f, . . . , lm выполне-
ны условия ωm ∈ αlm 0 и ωp ∈ αlp lp+1 для 1 ⩽ p < m. Сгруппируем слова ωp
так, чтобы имело место равенство ω = y1 . . . yr , где yp = ωt . . . ωs , и

1) если lt ⩽ i, то s = t + 1,
2.3. Алгоритм решения систем с регулярными коэффициентами 47

2) если lt > i, то s таково, что lt+1 = . . . = ls = i, ls+1 ≠ i.

Отсюда следует, что в любом случае yp — коэффициент при Ajs+1 в


уравнении для Alt системы Q2 , и, значит, ω ∈ f2 (Aj ). В итоге получа-
ем, что f1 (Aj ) = f2 (Aj ) для всех j .

Лемма 2.3.2. Пусть Q1 и Q2 — системы уравнений с регулярными


коэффициентами до и после одного применения шага 5 алгорит-
ма 2.3.1. Тогда эти системы имеют одну и ту же наименьшую непо-
движную точку. ◻

Доказательство. аналогично доказательству леммы 2.3.1 и здесь не


приводится.

Доказательство. теоремы 2.3.1. После того как шаг 5 алгорит-


ма 2.3.1 применен для всех i, мы получим новую систему, у кото-
рой все уравнения имеют вид Xi = αi , где αi — регулярное выраже-
ние над алфавитом Σ. Согласно теореме 2.2.2 отображение f , для ко-
торого f (Xi ) = αi , является наименьшей неподвижной точкой этой
новой системы. В силу лемм 2.3.1 и 2.3.2 в ходе работы алгоритма
наименьшая неподвижная точка не менялась. Таким образом, по-
казано, что алгоритм 2.3.1 строит наименьшую неподвижную точку
системы уравнений как регулярный язык.

Упражнение 2.3.1. Найдите наименьшую неподвижную точку си-


стемы (2.2.2) при условии, что αi0 = ∅ для всех i. ◻
48 Глава 2. Регулярные языки

2.4. Совпадение классов регулярных и


ПЛ-языков
Лемма 2.4.1. Пусть Σ — конечный алфавит. Множества ∅, {ε} и {a}
для всех a ∈ Σ являются ПЛ-языками. ◻

Доказательство. Чтобы доказать лемму, достаточно для каждого из


трех множеств построить такую ПЛ-грамматику G, чтобы язык L(G)
совпадал с этим множеством:

1) G∅ = ({S }, Σ, ∅, S ) — ПЛ-грамматика и L(G∅ ) = ∅;

2) Gε = ({S }, Σ, {S → ε}, S ) — ПЛ-грамматика и L(Gε ) = {ε};

3) Ga = ({S }, Σ, {S → a}, S ) — ПЛ-грамматика и L(Ga ) = {a}.

Лемма 2.4.2. Пусть Σ — конечный алфавит. Если L1 , L2 — ПЛ-языки


над Σ, то и языки L3 = L1 ∪ L2 , L4 = L1 L2 , L5 = L∗1 тоже являются ПЛ-
языками над Σ. ◻

Доказательство. Пусть G1 = (N1 , Σ, P1 , S1 ), G2 = (N2 , Σ, P2 , S2 ) — такие


ПЛ-грамматики, для которых L(G1 ) = L1 , L(G2 ) = L2 . Не теряя общ-
ности, будем предполагать, что алфавиты N1 и N2 не пересекаются.
Теперь, как и в доказательстве леммы 2.4.1, для каждого из трех но-
вых языков Li построим такую ПЛ-грамматику Gi , чтобы L(Gi ) = Li ,
i ∈ {3; 4; 5}.
2.4. Совпадение классов регулярных и ПЛ-языков 49

1) Пусть G3 = (N1 ∪ N2 ∪{S3 }, Σ, P1 ∪ P2 ∪{S3 → S1 ∣ S2 }, S3 ), где S3 — но-


вый нетерминальный символ, не принадлежащий ни N1 , ни N2 .
Ясно, что G3 — ПЛ-грамматика, причем L(G3 ) = L1 ∪ L2 , так как
для каждого вывода S3 ⇒+G3 ω существует либо вывод S1 ⇒+G1 ω ,
либо вывод S2 ⇒+G2 ω , и обратно. Таким образом, L3 = L1 ∪ L2 —
ПЛ-язык.

2) Пусть G4 = (N1 ∪ N2 }, Σ, P4 , S1 , ), а множество продукций P4 опре-


деляется так:

(i) если A, B ∈ N , x ∈ Σ∗ и (A → xB ) ∈ P1 , то A → xB ) ∈ P4 ;

(ii) если A ∈ N , x ∈ Σ∗ и (A → x) ∈ P1 , то (A → xS2 ) ∈ P4 ;

(iii) P2 ⊂ P4 .

Ясно, что G4 — ПЛ-грамматика. Если S1 ⇒+G1 ω , то S1 ⇒+G4 ωS2 , а


если S2 ⇒+G2 x, то S2 ⇒+G4 x. Таким образом, L(G1 ) ∪ L(G2 ) ⊆ L(G4 ).

Проверим теперь противоположное вложение. Пусть S1 ⇒+G4 ω .


Так как в P4 нет продукций вида A → x, которые попали бы туда
из P1 , то этот вывод можно записать в виде S1 ⇒+G4 xS2 ⇒+G4 xy ,
где ω = xy и все продукции, используемые в выводе S1 ⇒+G4 xS2 ,
попали в P4 с помощью (i) и (ii). Следовательно, должны быть
выводы S1 ⇒+G1 x и S2 ⇒+G2 y . Отсюда вытекает вложение
L(G4 ) ⊆ L(G1 )L(G2 ).

Итак, L(G4 ) = L(G1 )L(G2 ).


50 Глава 2. Регулярные языки

3) Пусть грамматика G5 = (N1 ∪ {S5 }, Σ, P5 , S5 ) такова, что S5 ⊈ N1 , а


P5 строится следующим образом:

(i) если A, B ∈ N , x ∈ Σ∗ и (A → xB ) ∈ P1 , то (A → xB ) ∈ P5 ;

(ii) если A ∈ N , x ∈ Σ∗ и (A → x) ∈ P1 , то {A → xS5 ; A → x} ∈ P5 ;

(iii) {S5 → S1 ∣ ε} ⊂ P5 .

Равенство L(G5 ) = (L(G1 ))∗ является следствием того, что вывод

S5 ⇒+G5 x1 S5 ⇒+G5 x1 x2 S5 ⇒+G5 x1 x2 . . . xn−1 S5 ⇒+G5 x1 x2 . . . xn−1 xn

реализуем тогда и только тогда, когда реализуема последова-


тельность выводов

S1 ⇒+G1 x1 , S1 ⇒+G1 x2 , . . . , S1 ⇒+G1 xn .

Лемма 2.4.3. Рассмотрим ПЛ-грамматику G = (N, Σ, P, S ), где

N = {A1 = S, . . . , A1 },

и построим стандартную систему уравнений с регулярными коэф-


фициентами, неизвестными которой служат нетерминалы из N , а
уравнение для Ai определяется равенством

Ai = αi0 + αi1 A1 + . . . + αin An ,

где
2.4. Совпадение классов регулярных и ПЛ-языков 51

1) αi0 = x1 + . . . + xk , если Ai → x1 ∣ . . . ∣ xk — все продукции с левой ча-


стью Ai и правой частью, состоящей только из терминалов (при
k = 0 полагаем αi0 = ∅);

2) для j > 0 αij = x1 + . . . + xm , если Ai → x1 Aj ∣ . . . ∣ xm Aj — все про-


дукции с левой частью Ai и правой частью, содержащей Aj (при
m = 0 полагаем αij = ∅).

Пусть f — наименьшая неподвижная точка построенной систе-


мы уравнений. Тогда L(G) = f (S ) — регулярный язык. ◻

Доказательство. Пусть ω ∈ f (S ). Ввиду теоремы 2.2.2 слово ω можно


записать в виде: ω = ω1 . . . ωm , где m ⩾ l и ωm ∈ αjm 0 , ωk ∈ αjk jk+1 для
некоторой последовательности j1 = 1, . . . , jm (∈ {1; 2; . . . ; n}). Заметим,
что коэффициенты αij определены таким образом, что в грамматике
G возможен вывод:

S ⇒G ω1 Aj2 ⇒G ω1 ω2 Aj3 ⇒G . . . ⇒G
ω1 ω2 . . . ωm−1 Ajm ⇒G ω1 ω2 . . . ωm−1 ωm .

Это означает, что f (S ) ⊆ L(G). С помощью похожих рассуждений


проверяется обратное вложение L(G) ⊆ f (S ). Напомним теперь, что
алгоритм 2.3.1 строит f (S ) как регулярный язык. Таким образом,
язык L(G) = f (S ) — регулярный.

Теорема 2.4.1. Пусть Σ — конечный алфавит. Для того, чтобы язык


L над алфавитом Σ был регулярным, необходимо и достаточно, что-
бы он был праволинейным. ◻
52 Глава 2. Регулярные языки

Доказательство. Достаточность вытекает из леммы 2.4.3, проверим


необходимость. Пусть L — регулярное множество над Σ. Напомним,
что множество регулярно над алфавитом Σ тогда и только тогда, ко-
гда оно либо ∅, либо {ε}, либо {a} для некоторого a ∈ Σ, либо его
можно получить из этих множеств применением конечного числа
операций объединения, конкатенации и итерации. По лемме 2.4.11
∅, {ε} и < a > — ПЛ-языки. В силу леммы 2.4.2 для завершения дока-
зательства теперь можно воспользоваться индукцией по числу ша-
гов построения регулярного множества, где один шаг соответствует
применению одного из правил, определяющих регулярное множе-
ство.

Пример 2.4.1. Пусть G = ({A; B; S }, {0; 1}, P, S ), где P состоит из про-


дукций

S → 0A ∣ 1S ∣ ε
A → 0B ∣ 1A
B → 0S ∣ 1B.

Построим язык L(G). Применим конструкцию из леммы 2.4.3 и со-


ставим систему уравнений




⎪ X1 = 0X2 + 1X1 + ε



⎨X2 = 0X3 + 1X2






⎩X3 = 0X1 + 1X3

2.5. Упражнения 53

где X1 = S , X2 = A, X3 = B . Для решения системы воспользуемся


алгоритмом 2.3.1 и на его выходе получим:




⎪ X3 = (01∗ 01∗ 0 + 1)∗ 01∗



⎨X2 = 1∗ 0(01∗ 01∗ 0 + 1)∗ 01∗





⎪ ∗ ∗ ∗ ∗ ∗ ∗
⎩X1 = 1 (01 0(01 01 0 + 1) 01 + ε

Из теоремы 2.2.2 вытекает, что L(G) = f (X1 ), где f — наименьшая


неподвижная точка системы уравнений. Таким образом,

L(G) = 1∗ (01∗ 0(01∗ 01∗ 0 + 1)∗ 01∗ + ε). ∎

Упражнение 2.4.1. Проверьте, что язык L(G) из примера 2.4.1 со-


стоит из множества всех таких слов над алфавитом {0; 1}, в которых
число нулей кратно трем. ◻

2.5. Упражнения

Составление регулярных выражений


Написать регулярное выражение для

1) языка над {a, b, c} из всех слов, содержащих хотя бы один символ


a;

2) языка над {a, b, c} из всех слов, содержащих хотя бы один символ


a и хотя бы один символ b;
54 Глава 2. Регулярные языки

3) языка над {0, 1} из всех слов, в которых третий с правого края


символ равен 1;

4) языка над {0, 1} из всех слов, в которых нет двух подряд идущих
единиц;

5) языка над {0, 1} из всех слов, в которых любая пара смежных ну-
лей, расположена левее любой пары смежных единиц;

6) языка над {0, 1} из всех слов с чередующимися нулями и едини-


цами.

Системы линейных уравнений с регулярными


коэффициентами
Решить системы уравнений:




⎪X1 = aX1 + aX2 ;
⎨ (2.5.1)


⎪ X = bX2 + b.

⎩ 2




⎪ X1 = 1X1 + 0X2 + ∅X3 ;



⎨X2 = 1X1 + ∅X2 + 0X3 ; (2.5.2)






⎩X3 = 0X1 + ∅X2 + 1X3 .




⎪ ∗ ∗
⎪X1 = a X1 + (a + b) X2 ;
⎨ (2.5.3)


⎪ X = (a + b∗ )X1 + aX2 + b∗ .

⎩ 2
2.5. Упражнения 55





⎪ X1 = (a + b)X1 + ∅X2 + a∗ X3 ;



⎨X2 = ∅X1 + aX2 + a∗ ; (2.5.4)





⎪ ∗ ∗
⎩ X3 = b X 1 + ∅ X2 + a X3 .

Написать регулярные выражения для языков, заданных грамма-
тиками cо следующими продукциями:

S → 1A ∣ 2S;
A → 0B ∣ 0S ∣ 1A;
(2.5.5)
B → 1C ∣ 2C;
C → ε ∣ 1S ∣ 2A.

S → 0A ∣ 1S ∣ ε;
A → 0B ∣ 1A; (2.5.6)
B → 0S ∣ 1B.
ГЛАВА 3

КОНЕЧНЫЕ АВТОМАТЫ

3.1. Определения и примеры

Конечный автомат является одним из простейших распозна-


вателей (см. 1.5). Он состоит из входной ленты и управляющего
устройства с конечной памятью. Управляющее устройство может
быть недетерминированным. Входную головку далее будем пола-
гать односторонней, более того, фактически мы потребуем, чтобы
входная головка сдвигалась вправо на каждом такте.
Недетерминированным конечным автоматом называется пятер-
ка

M = (Q, Σ, δ, q0 , F ),

где Q — конечное множество состояний, Σ — конечное множество


допустимых входных символов, δ — отображение множества Σ во
множество P (Q) всех подмножеств множества Q, q0 (∈ Q) — началь-
3.1. Определения и примеры 57

ное состояние управляющего устройства, F (⊆ Q) — множество за-


ключительных состояний.

Функцию δ называют функцией переходов, именно она фактиче-


ски определяет поведение управляющего устройства. Функция пе-
реходов по данному «текущему» состоянию и «текущему» входно-
му символу указывает набор всех возможных следующих состояний.
Нестрого говоря, автомат дублирует себя так, что в каждом из воз-
можных следующих состояний находится как бы один из равноправ-
ных экземпляров этого устройства; при этом недетерминирован-
ный автомат допускает входное слово в том случае, если какой-ни-
будь из его параллельно работающих экземпляров достигает допус-
кающего состояния.

«Недетерминизм» конечного автомата не следует смешивать со


«случайностью», при которой автомат может случайно выбрать одно
из следующих состояний с фиксированными вероятностями, но этот
автомат всегда имеется только в одном экземпляре. Такой автомат
называется «вероятностным», и мы его изучать не будем.

Детерминированный конечный автомат определим как


частный случай недетерминированного. Именно, пусть
M = (Q, Σ, δ, q0 , F ) — недетерминированный конечный автомат.
Автомат M назовем детерминированным, если множество δ (q, a)
содержит не более одного состояния для любых q ∈ Q и a ∈ Σ.
58 Глава 3. Конечные автоматы

Если δ (q, a) содержит точно одно состояние, то автомат M назовем


полностью определенным.

Работа конечного автомата представляет собой некоторую по-


следовательность тактов. Такт определяется текущим состоянием
управляющего устройства и входным символом, считываемым в
данный момент входной головкой. Сам такт состоит из изменения
состояния и сдвига входной головки на одну ячейку вправо. Для то-
го чтобы определить будущее поведение конечного автомата, нуж-
но знать лишь текущее состоятие управляющего устройства и сло-
во на входной ленте, состоящее из буквы под головкой и всех букв,
расположенных вправо от неё. Эги два элемента информации дают
мгновенное описание конечного автомата, которое называют кон-
фигурацией. Другими словами, если M = (Q,
Σ, δ, q0 , F ) — конечный автомат, то пара (q, ω ) ∈ Q ∗ Σ∗ называется кон-
фигурацией автомата M . Конфигурация (q0 ω ) называется началь-
ной, а конфигурация (q, ε), где q ∈ F , называется заключительной.

Состояние p называется достижимым, если существует такое


слово ω , что (q0 , ω ) ⊢∗ (p, ε).

Такт автомата M представляется бинарным отношением ⊢M


(или, короче, ⊢), определенным на конфигурациях: если q ′ ∈ δ (q, a),
то (q, aω ) ⊢ (q ′ , ω ) для всех ω ∈ Σ∗ . Таким образом, если M находится в
состоянии q и входная головка обозревает входной символ a, то ав-
томат M может делать такт, за который он переходит в состояние q ′
3.1. Определения и примеры 59

сдвигает головку на одну ячейку вправо. Так как автомат M , вообще


говоря, может быть недетерминированным, то могут быть и другие
состояния, в которые он тоже может перейти за один такт.
Запись C ⊢0M C ′ означает, что C = C ′ , а C0 ⊢kM Ck для k ⩾ 1 — что
существуют такие конфигурации Ci , . . . , Ck−1 , что Ci ⊢M Ci+1 0 ⩽ i < k .
Запись C ⊢+M C ′ означает, что C ⊢kM C ′ для некоторого k ⩾ 1, а C ⊢∗M C ′
— что C ⊢kM для некоторого k ⩾ 0. Будем опускать нижний индекс M
там, где это не приведет к недоразумениям.
Говорят, что автомат M допускает слово ω , если (q0 , ω ) ⊢∗ (q, ε)
для некоторого q ∈ F . Языком, допускаемым (определяемым, распо-
знаваемым) автоматом M , называется множество L(M ) всех вход-
ных слов, допускаемых автоматом M , т. е.

L(M ) = {ω (∈ Σ∗ ) ∣ ∃q ∈ F ∶ (q0 , ω ) ⊢∗ (q, ε)}.

Рассмотрим два конечных автомата, один из которых являет-


ся детерминированным (пример 3.1.1), а второй — недетерминиро-
ванным (пример 3.1.2).

Пример 3.1.1. Пусть M = ({p; q; r}, {0; 1}, δ, p, {r}) — конечный авто-
мат, где функция переходов δ задаётся таблицей с рисунка 3.1. Этот
автомат допускает все слова из нулей и единиц, содержащие два сто-
ящих рядом нуля. Начальное состояние p можно интерпретировать
так: «два стоящих рядом нуля еще не появились, и предыдущая бук-
ва не нуль». Состояние q означает, что «два стоящих рядом нуля еще
не появились, но предыдущая буква — нуль». Состояние r означает,
60 Глава 3. Конечные автоматы

Вход
δ
0 1

p {q } {p}
Состояние q {r} {p}
r {r} {r}

Рис. 3.1. Функция перехода δ для автомата из примера 3.1.1.

что «Два стоящих рядом нуля уже появились». Попав в состояние r,


автомат остается в этом состоянии навсегда.
Например, если на вход автомата поступило слово ω = 1010011, то
единственно возможной последовательностью конфигураций, на-
чинающейся с конфигурации (p, 1010011), будет следующая последо-
вательность:

(p, 1010011) ⊢
(p, 010011) ⊢ (q, 10011) ⊢ (p, 0011) ⊢ (q, 011) ⊢ (r, 11) ⊢ (r, 1) ⊢
(r, ε).

Таким образом, 1010011 ∈ L(M ). ∎

Далее в случае детерминированных конечных автоматов мы


будем писать, как правило, δ (q, a) = p вместо δ (q, a) = {p}. Если
δ (q, a) = ∅, то мы часто будем говорить, что δ (q, a) не определено.
3.1. Определения и примеры 61

Упражнение 3.1.1. Построите конечный автомат M = (Q, Σ, δ, q0 , F ),


допускающий те и только те слова над алфавитом Σ = {0; 1}, у кото-
рых встречается три стоящих рядом нуля, но после этого подслова
нет двух стоящих рядом единиц. ◻

Упражнение 3.1.2. Покажите, что конечный автомат из приме-


ра 3.1.1 допускает язык (0 + 1)∗ 00(0 + 1)∗ . ◻

Пример 3.1.2. Построим недетерминированный конечный авто-


мат
M = (Q.Σ, δ, q0 , F ),

допускающий те и только те слова над алфавитом Σ = {1; 2; 3}, у ко-


торых последняя буква уже появлялась раньше. Прежде всего вве-
дем так называемое нейтральное состояние q0 , в котором автомат
не пытается ничего распознать. Введем также состояния q1 , q2 и q3 , в
каждом из которых M делает предположение о том, что последняя
буква слова совпадает с индексом состояния. Пусть qf — одно заклю-
чительное состояние. Находясь в состоянии q0 , один из экземпляров
автомата «бездумно» остаётся в нем и дальше, а другой экземпляр
переходит в состояние qi , если i — очередной символ. Находясь в со-
стоянии qi , один из экземпляров автомата, независимо от считыва-
емой буквы, остаётся в нем и «размышляет» о том, что букву i в сло-
ве он уже обнаружил, а именно она и может совпасть с последней
буквой в слове. Другой же экземпляр, если видит букву i, сразу без
62 Глава 3. Конечные автоматы

Вход
δ
1 2 3

q0 {q0 ; q1 } {q0 ; q2 } {q0 ; q3 }


q 1 { q1 ; qf } { q1 } { q1 }
Состояние q2 {q2 } { q2 ; qf } { q2 }
q3 { q3 } { q3 } { q3 ; qf }
qf ∅ ∅ ∅

Рис. 3.2. Функция перехода δ для автомата из примера 3.1.2.

всяких сомнений переходит в финальное состояние qf . Из состояния


qf автомат никуда не переходит, так как вопрос о том, допускается
ли входное слово, решается только один раз, когда автомат сочтет
входную букву последней. Итак, формально автомат определяется
как пятерка

M = ({q0 ; q1 ; q2 ; q3 ; qf }, {1; 2; 3}, δ, q, {qf }),

где функция переходов δ задается таблицей с рисунка 3.2.


Работа этого автомата при чтении слова ω = 12321 проиллюстри-
рована схемой на рисунке 3.3.
Таким образом, возможна последовательность конфигураций:

(q0 , 12321) ⊢ (q1 , 2321) ⊢ (q1 , 321) ⊢ (q1 , 21) ⊢ (q1 , 1) ⊢ (qf , ε).

Это означает, что 12321 ∈ L(M ). ∎


3.2. Редукция НКА к ДКА 63

(q0 , 12321) (q0 , 2321) (q0 , 321) (q0 , 21) (q0 , 1) (q0 , ε)

(q1 , ε)

(q2 , 1) (q2 , ε)

(q3 , 21) (q3 , 1) (q3 , ε)

(q2 , 321) (q2 , 21) (q2 , 1) (q2 , ε)

(qf , 1)

(q1 , 2321) (q1 , 321) (q1 , 21) (q1 , 1) (q1 , ε)

(qf , ε)

Рис. 3.3. Схема работы автомата из примера 3.1.2 на слове ω = 12321.

Упражнение 3.1.3. Докажите, что конечный автомат из приме-


ра 3.1.2 допускает язык {ωa ∣ a ∈ {1, 2, 3} и a входит в ω }. Постройте
регулярное выражение для этого языка. ◻

3.2. Редукция недетерминированных


конечных автоматов к детерминированным

В этом разделе будет доказано, что класс языков, определяе-


мых недетерминизированными конечными автоматами, совпада-
64 Глава 3. Конечные автоматы

ет с классом языков, определяемых полностью определенными де-


терминизированными конечными автоматами. В силу этого произ-
вольный язык из этого класса мы будем называть далее конечно-ав-
томатным.

Теорема 3.2.1. Пусть M = (Q, Σ, δ, q0 , F ) — недетерминированный


конечный автомат. Тогда существует такой детерминированый ко-
нечный автомат M ′ что L(M ) = L(M ′ ). ◻

Доказательство. По данному недетерминированному автомату M


построим новый автомат M = (Q′ , Σ, δ ′ , q0′ , F ′ ) следующим образом:

1) Q′ = P (Q), т.е. состояниями автомата M ′ являются всевозмож-


ные подмножеста множества состояний автомата M ;
2) Если S ∈ Q′ , a ∈ Σ, то определим δ ′ (S, a) равенством

δ ′ (S, a) = ⋃ {δ (q, a)};


q ∈S

3) q0′ = {q0 };
4) F ′ состоит из всех таких подмножеств S множества состояний Q,
что
S ∩ F ≠ ∅.

Применяя метод математической индукции по i, нетрудно прове-


рить, что (S, ω ) ⊢iM ′ (S ′ , ε) в том и только в том случае, когда

S ′ = {p ∣ ∃q ∈ S ∶ (q, ω ) ⊢iM (p, ε)}


3.2. Редукция НКА к ДКА 65

Отсюда, в частности, следует, что ({q0 }, ω ) ⊢iM ′ (S ′ , ε) для некоторого


S ′ ∈ F ′ тогда и только тогда, когда (q0 , ω ) ⊢iM (p, ε) для некоторого
p ∈ F . Итак, L(M ′ ) = L(M ).

Пример 3.2.1. Пусть

M = ({q0 ; q1 ; q2 ; q3 ; qf }, {1; 2; 3}, δ, q, {qf })

недетерминированный конечный автомат, определенный в при-


мере 3.1.2. Воспользуемся конструкцией из доказательства теоре-
мы 3.2.1 и построим полностью определенный детерминированный
конечный автомат M ′ = (Q′ , {1; 2; 3}, δ ′ , {q0 }, F ′ ), допускающий язык
L(M ).
Так как автомат M имеет пять состояний, то новый автомат M ′
может иметь 32 (= 25 ) состояния, однако не все они достижимы из
начального. (Напомним, что состояние p называется достижимым,
если существует такое слово ω , что (q0 , ω ) ⊢∗ (p, ε).) Мы будем стро-
ить, естественно, только достижимые состояния.
Сделаем несколько полезных наблюдений.

1) Очевидно, что состояние {q0 } достижимо.

2) Достижимыми являются состояния {q0 ; qa } для a ∈ {1; 2; 3}; дей-


ствительно,

δ ′ ({q0 }a) = {q0 ; qa }.


66 Глава 3. Конечные автоматы

3) Достижимыми являются состояния {q0 ; qa ; qf } для a ∈ {1; 2; 3};


действительно, δ ′ ({q0 ; qa }, a) = {q0 ; qa ; qf }. Аналогично проверяет-
ся, что состояния {q0 ; q1 ; q2 }, {q0 ; q1 ; q3 }, {q0 ; q2 ; q3 } — достижимы.
4) Из предыдущего факта легко выводится достижимость состоя-
ний

{q0 ; q1 ; q2 ; q3 }, {q0 ; q1 ; q2 ; qf }, {q0 ; q1 ; q3 ; qf }, {q0 ; q2 ; q3 ; qf },

а отсюда — достижимость состояния {q0 ; q1 ; q2 ; q3 ; qf }.

Всего мы выявили 16 достижимых состояний. Анализ показы-


вает, что подмножество D множества состояний автомата M , т.е. со-
стояние автомата M ′ , достижимо тогда и только тогда, когда выпол-
няется условия: 1) D содержит q0 , 2) если D содержит qf , то оно со-
держит также и q1 , q2 или q3 . Легко видеть, что состояния, отличные
от выделенных, не достижимы.
Итак, Q′ — множество всех достижимых состояний автомата M ′
— состоит из 15 элементов и вместе с функцией переходов δ ′ пред-
ставлено в таблице с рисунка 3.4 (с. 67), где для простоты вместо
состояний вида {qi ; qj ; . . . ; qk } помещены списки (i; j; . . . ; k ).
Начальным состоянием автомата M ′ является {q0 } ∈ Q′ , а мно-
жество заключительных состояний F ′ имеет вид:
F ′ = { {q0 , q1 , qf }; {q0 , q2 , qf }; {q0 , q3 , qf };
{q0 , q1 , q2 , qf }; {q0 , q1 , q3 , qf }; {q0 , q2 , q3 , qf };
{q0 , q1 , q2 , q3 , qf } }. ∎
3.2. Редукция НКА к ДКА 67

Вход
δ′
1 2 3

{0} {0; 1} {0; 2} {0; 3}


{0; 1} {0; 1; f } {0; 1; 2} {0; 1; 3}
{0; 2} {0; 1; 2} {0; 2; f } {0; 2; 3}
{0; 3} {0; 1; 3} {0; 2; 3} {0; 3; f }
{0; 1; 2} {0; 1; 2; f } {0; 1; 2; f } {0; 1; 2; 3}
{0; 1; 3} {0; 1; 3; f } {0; 1; 2; 3} {0; 1; 3; f }
{0; 1; f } {0; 1; f } {0; 1; 2} {0; 1; 3}
{0; 2; 3} {0; 1; 2; 3} {0; 2; 3; f } {0; 2; 3; f }
{0; 2; f } {0; 1; 2} {0; 2; f } {0; 2; 3}
{0; 3; f } {0; 1; 3} {0; 2; 3} {0; 3; f }
{0; 1; 2; f } {0; 1; 2; f } {0; 1; 2; f } {0; 1; 2; 3}
{0; 1; 3; f } {0; 1; 3; f } {0; 1; 2; 3} {0; 1; 3; f }
{0; 2; 3; f } {0; 1; 2; 3} {0; 2; 3; f } {0; 2; 3; f }
{0; 1; 2; 3} {0; 1; 2; 3; f } {0; 1; 2; 3; f } {0; 1; 2; 3; f }
{0; 1; 2; 3; f } {0; 1; 2; 3; f } {0; 1; 2; 3; f } {0; 1; 2; 3; f }

Рис. 3.4. Функция перехода δ ′ для автомата из примера 3.2.1


68 Глава 3. Конечные автоматы

3.3. Граф переходов

Пусть M = (Q, Σ, δ, q0 , F ) — недетерминированный конечный ав-


томат. Графом переходов (или диаграммой) автомата M называют
неупорядоченый помеченный граф, вершины которого помечены
именами состояний; в графе есть дуга (p, q ), если существует такая
буква a ∈ Σ, что q ∈ δ (p, a); кроме того, дуга (p, q ) помечается списком,
состоящим из всех таких a, что q ∈ δ (p, a).
При изображении графа переходов условимся начальное состо-
яние указывать направленной в него стрелкой, помеченной словом
начало, а заключительные состояния обводить двойным кружком.

Пример 3.3.1. Рассмотрим детерминированный конечный авто-


мат из примера 3.1.1. Его граф переходов изображен на рисунке 3.5.

1 0, 1
1
0 q 0
P r

Рис. 3.5. Граф переходов автомата из примера 3.1.1

Пример 3.3.2. Рассмотрим недетерминированный конечный авто-


мат из примера 3.1.2. Его граф переходов изображен на рисунке 3.6.∎
3.4. Совпадение классов КА-, регулярных и ПЛ-языков 69

1, 2, 3

q1

1, 2, 3 1 1
1, 2, 3

q0 2 q2 2 qf

3 3
1, 2, 3

q3

Рис. 3.6. Граф переходов автомата из примера 3.1.2.

Упражнение 3.3.1. Изобразите граф переходов детерминирован-


ного конечного автомата из примера 3.2.1 (с. 65). ◻

3.4. Совпадение классов конечно-автоматных,


регулярных и ПЛ-языков

Лемма 3.4.1. Пусть M = (Q, Σ, δ, q0 , F ) — детерминированный ко-


нечный автомат. Тогда существует такая ПЛ-грамматика G, что
L(M ) = L(G). ◻
70 Глава 3. Конечные автоматы

Доказательство. Рассмотрим грамматику G = (Q, Σ, P, q0 ), где мно-


жество продукций P определяется по правилам:

1) если q, r ∈ Q, a ∈ Σ и δ (q, a) = r, то (q → ar) ∈ P .

2) если p ∈ F , то (p → ε) ∈ P .

Грамматика G определена таким образом, что каждый шаг вывода в


ней имитирует такт автомата M .
Применяя метод математической индукции по параметру i, до-
кажем следующее вспомогательное

Утверждение 3.4.1. q ⇒i+1 ω для q ∈ Q тогда и только тогда, когда


(q, ω ) ⊢i (r, ε) для r ∈ F . ◻

Если i = 0, то это утверждение приобретает вид: q ⇒ ε тогда и


только тогда, когда (q, ε) ⊢0 (q, ε) для q ∈ F , и является очевидным.
Предположим теперь, что утверждение верно для i = k , и прове-
рим его для i = k + 1. Пусть ω = ax, где ∣x∣ = k , — слово над алфавитом
Σ. Тогда вывод q ⇒k+1 ω равносилен выводу q ⇒ as ⇒k ax для некото-
рого s ∈ Q, а вывод q ⇒ as равносилен тому, что δ (q, a) = s. По предпо-
ложению индукции s ⇒k x тогда и только тогда, когда (s, x) ⊢k−1 (r, ε)
для некоторого r ∈ F . Следовательно, вывод q ⇒k+1 ω равносилен то-
му, что (q, ω ) ⊢k (r, ε) для некоторого r ∈ F .
Итак, вспомогательное утверждение верно.
3.4. Совпадение классов КА-, регулярных и ПЛ-языков 71

Подставляя в доказанное утверждение q0 вместо q , получаем:


q0 ⇒+ ω тогда и только тогда, когда (q0 , ω ) ⊢∗ (r, ε) для некоторого
r ∈ F . Таким образом, L(G) = L(M ).

Отметим, что в лемме 3.4.1 не просто доказывается существо-


вание нужной грамматики G, а указывается ее конструкция.

Лемма 3.4.2. Пусть Σ — конечный алфавит. Множества ∅, {ε} и {a}


для всех a ∈ Σ являются конечно-автоматными языками. ◻

Доказательство. Доказательство. Любой конечный автомат с пу-


стым множеством заключительных состояний допускает ∅.
Пусть Mε = ({q0 }, Σ, δ, q0 , {q0 }), где δ (q0 , a) не определяется ни для
каких a ∈ Σ. Тогда L(Mε ) = {ε}.
Пусть Ma = ({q0 , qa }, Σ, δ, q0 , {qa }), где δ (q0 , a) = qa , а в остальных
случаях функция δ не определена. Тогда, очевидно, L(Ma ) = {a}

Лемма 3.4.3. Пусть M1 = (Q1 , Σ, δ1 , q1 , F1 ). M2 (Q2 , Σ, δ2 , q2 , F2 ) — ко-


нечные автоматы; Li = L(Mi ). Тогда множества L1 ∪ L2 , L1 L2 и L∗1 яв-
ляются конечно-автоматными языками. ◻

Доказательство. Не теряя общности, можно считать, что Q1 ∩ Q2 = ∅,


так как в противном случае состояния можно было бы переимено-
вать. Чтобы доказать лемму, достаточно для каждого из трех мно-
жеств построить такой конечный автомат M , чтобы язык L(M ) сов-
падал с этим множеством.
72 Глава 3. Конечные автоматы

1) Построим автомат M = (Q1 ∪ Q2 ∩ {q0 }, Σ, δ, q0 , F ) для языка L1 ∪ L2 ,


полагая, что q0 — новое состояние, F = F1 ∪ F2 при ε ∉ L1 ∪ L2 , и
F = F1 ∪F2 ∪{q0 } при ε ∈ L1 ∪L2 а функция переходов δ определяется
так:

(i) δ (q0 , a) = δ1 (q1 , a) ∪ δ (q2 , a) для всех a ∈ Σ,

(ii) δ (q, a) = δ1 (q, a) для всех q ∈ Q1 , a ∈ Σ,

(iii) δ (q, a) = δ2 (q, a) для всех q ∈ Q2 , a ∈ Σ.

Таким образом, сначала автомат M как бы решает, какой из ав-


томатов M 1, M 2 ему моделировать, но так как M — недетерми-
нированный автомат, то фактически он моделирует и тот и дру-
гой.

Используя непосредственный анализ функции переходов δ лег-


ко проверить, что (q0 , ω ) ⊢iM (q, ε) тогда и только тогда, когда
q ∈ Q1 и (q1 , ω ) ⊢iM1 (q, ε) или q ∈ Q2 и (q2 , ω ) ⊢iM2 (q, e).

Из этого утверждения и определения множества F вытекает, что


L1 ∪ L2 = L(M1 ) ∪ L(M2 ) = L(M ) — конечно-автоматный язык.

2) Построим автомат M = (Q1 ∪ Q2 , Σ, δ, q1 , F ) для L1 L2 , полагая





⎪F 2 , если q2 ∉ F2 ,
F =⎨


⎪ F ∪ F2 , если q2 ∈ F2 ,

⎩ 1
а функцию переходов δ определяя равенствами
3.4. Совпадение классов КА-, регулярных и ПЛ-языков 73

(i) δ (q, a) = δ1 (q, a) для всех q ∈ Q1 /F1 , a ∈ Σ,

(ii) δ (q, a) = δ1 (q, a) ∪ δ2 (q, a) для всех q ∈ F , a ∈ Σ,

(iii) δ (q, a) = δ2 (q, a) для всех q ∈ Q2 , a ∈ Σ.

Ясно, что когда M начинает работать, то он моделирует автомат


M1 . Когда же M достигает заключительного состояния M1 , он мо-
жет (если пожелает!) предположить, что оказался в начальном
состоянии автомата M2 и начать моделировать M2 , а может (до-
пускается и это!) продолжать функционировать в режиме M1 .

Проверим, что L1 L2 ⊂ L(M ).

Пусть x ∈ L, y ∈ L. Тогда (q1 , xy ) ⊢∗M (q, y ) для некоторого q ∈ F1 ,


причем q = q1 в случае x = ε. Пусть y = ε. Тогда q2 ∈ F2 и, следова-
тельно, F = F1 ∪ F2 . Последняя конфигурация (q, ε), где q ∈ F1 ⊂ F ,
означает, что слово xy = xε автомат M считал.

Пусть теперь y ≠ ε. Применяя один раз (ii) и нуль или более раз
(iii), получаем: (q, y ) ⊢+M (r, e) для некоторого r из F2 ⊂ F . Отсюда
вытекает, что xy ∈ L(M ), и, следовательно, L1 L2 ⊂ L(M ).

Проверим, что L(M ) ⊂ L1 L2 .

Пусть ω ∈ L(M ). Тогда (q1 , ω ) ⊢∗M (q, ε) для некоторого q ∈ F . Рас-


смотрим отдельно два случая: q ∈ F2 и q ∈ F1 (⊂ F ). Если q ∈ F2 , то
ω = xay для некоторого a ∈ Σ, удовлетворяющего условиям

(q1 , xay ) ⊢∗M (r, ay ) ⊢M (s, y ) ⊢∗M (q, ε),


74 Глава 3. Конечные автоматы

где r ∈ F1 , s ∈ Q2 и s ∈ δ (r, a). Следовательно, x ∈ L1 , ay ∈ L2 и, таким


образом, ω = xay ∈ L1 L2 . Если же q ∈ F1 (⊂ F ), то q2 ∈ F2 , ε ∈ L2 и,
таким образом, ω ∈ L1 , ωε ∈ L1 L2 . Отсюда вытекает: L(M ) ⊂ L1 L2 .
В итоге получаем, что L1 L2 = L(M ) — конечно-автоматный язык.
3) Построим автомат M = (Q1 ∪{q ′ }, Σ, δ, q ′ , F ∪{q ′ }) для языка L∗1 , по-
лагая, что q ′ — новое состояние, не принадлежащее Q1 , а функ-
цию переходов δ определяя равенствами

(i) δ (q ′ , a) = δ1 (q1 , a) для всех a ∈ Σ,


(ii) δ (q, a) = δ1 (q, a), для всех q ∈ Q/F1 , a ∈ Σ,
(iii) δ (q, a) = δ1 (q, a) ∪ δ1 (q1 , a), для всех q ∈ F1 , a ∈ Σ.

Ясно, что когда M начинает работать, то он моделирует авто-


мат M1 . Когда же M достигает заключительного состояния M1 ,
он может предположить, что вновь оказался в начальном состо-
янии автомата M1 и снова начать моделировать M1 , а может и
продолжать функционировать в режиме M1 . Доказательство то-
го, что L(M ) = L∗1 , аналогично доказательству из 2) и мы его не
приводим. Отметим лишь, что ε ∈ L(M ), так как q — заключи-
тельное состояние автомата M .

Теорема 3.4.1. Пусть Σ — конечный алфавит, L — язык над этим ал-


фавитом. Следующие утверждения эквивалентны:

1) L — регулярный язык;
3.5. Лемма о разрастании для регулярных языков 75

2) L — праволинейный язык;

3) L — конечно-автоматный язык. ◻

Доказательство. Эквивалентность утверждений 1) и 2) доказана в


теореме 2.4.1. То, что утверждение 2) является следствием утвер-
ждения 3) доказано в лемме 3.4.1. Из лемм 3.4.2 и 3.4.3 вытекает, что
утверждение 3) — следствие утверждения 1). Таким образом, теоре-
ма доказана.

3.5. Лемма о разрастании для регулярных


языков
Лемма о разрастании (или накачке) позволяет решать конкрет-
ную задачу: опровергать принадлежность заданного языка классу
регулярных языков. Зачем может понадобиться такое опроверже-
ние? Если считать класс регулярных языков в определенном смысле
(а именно, с точки зрения иерархии Хомского) самым простым клас-
сом языков, то «непринадлежность» языка этому классу может гово-
рить о «сложности» этого языка (в том же специальном смысле). Сто-
ит обратить внимание на указание относительности понятий «про-
стой» и «сложный»: язык, который с обыденной точки зрения может
казаться «простым», вполне может не принадлежать классу регуляр-
ных языков.
76 Глава 3. Конечные автоматы

Теорема 3.5.1. («Лемма о накачке» или «Лемма о разрастании»)


Пусть L — регулярный язык. Тогда существует такая константа n ∈ N,
что для любого слова w ∈ L, такого что ∣w∣ ⩾ n, существует разбиение
w = xyz слова w со следующими свойствами:

1) y ≠ ε;

2) ∣xy ∣ ⩽ n;

3) {xy k z ∣ k ⩾ 0} ⊂ L. ◻

Доказательство. Так как L — регулярный язык, то существует де-


терминированный конечный автомат A = (Q, Σ, δ, q0 , F ) с ∣Q∣ = N со-
стояниями, распознающий язык L. Пусть w ∈ L и ∣w∣ = N + 1. Подадим
на вход автомату A слово w. Очевидно, существует состояние q ∈ Q,
в котором автомат окажется дважды, читая это слово (принцип Ди-
рихле / принцип голубятни). Разобьём слово w на три части w = xyz ,
так что:

(q0 , xyz ) ⊢ (q, yz ) ⊢ (q, z ) ⊢∗ (qF , ε),
∗ ∗

где qF ∈ F . Покажем, что для любого целого k ⩾ 0 автомат распознает


слово xy k z . Действительно, последовательность переходов при чте-
нии цепочек x и z остаётся такой же, как для слова w. Часть y k чита-
ется k -кратным повтором последовательности переходов △. Таким
образом, {xy k z ∣ k ⩾ 0} ⊂ L и выполнено условие 3).
3.5. Лемма о разрастании для регулярных языков 77

Части x и y слова w удовлетворяют условиям 1)–2) по постро-


ению. Полагая n = N + 1, получаем выполненными все требования
теоремы.

Заметим, что лемма о накачке формулирует необходимое свой-


ство регулярного языка. То есть, если язык не обладает этим свой-
ством, то он точно не является регулярным. На этом основано при-
менение леммы на практике: вначале доказывается, что для рас-
сматриваемого языка нарушается условие леммы, на основе это-
го делается вывод о нерегулярности. Такое доказательство обычно
проводится от противного.
В случае, когда нарушение свойства, описываемого леммой о
накачке, доказать не удается, ничего определенного о классе язы-
ка без дополнительных рассуждений сказать нельзя.

Пример 3.5.1. Рассмотрим язык L = {0m 1m ∣ m ∈ N}. Предположим,


что L регулярный, а значит, существует константа n, о которой идет
речь в лемме. Рассмотрим слово 0n 1n (∈ L). Пусть xyz = 0n 1n — раз-
биение, о котором говорится в лемме. Заметим, что в силу условия
∣xy ∣ ⩽ n из леммы подстрока y целиком состоит из нулей и при этом
не пуста. Очевидно, что для любого k > 1 слово xy k z уже не будет
принадлежать языку L, так как в этом слове нулей станет больше,
чем единиц. Это свидетельствует о нарушении условия леммы о на-
качке, а значит, о том, что язык L не является регулярным. ∎
78 Глава 3. Конечные автоматы

3.6. Упражнения

Построение недетерминированных автоматов


Построить автомат, распознающий

1) язык над {0, 1} из слов, заканчивающихся на 01;


2) язык, представляющий собой десятичную запись чисел, деля-
щихся на 4;
3) язык над {a, b}, заданный регулярным выражением (ab + aba)∗ ;
4) язык над {0, 1, . . . , 9} из слов, в которых последняя цифра встре-
чается ещё где-то в них;
5) язык над {0, 1, . . . , 9} из слов, в которых последняя цифра больше
нигде в них не встречается;
6) язык над {0, 1} из слов, в которых содержится два 0, разделённых
символами, количество которых кратно 4 (нуль символов также
считать кратными четырём).

Детерминизация конечных автоматов


Провести детерминизацию следующих НКА:

1) распознающего язык над {0, 1} из слов, заканчивающихся на 01;


2) распознающего язык, заданный регулярным выражением
(ab + aba)∗ ;
3.6. Упражнения 79

Вход Вход Вход


δ δ δ
0 1 0 1 0 1

3) → p {p, q } {p} 4) → p {q, s} {q } → p {p, q } {p}


5)
q {r} {r } q {r} {q, r} q {r, s} {t}
r {s} ∅ r {s} { p} r {p, r} {t}
s {s} { s} s ∅ {p} s ∅ ∅
t ∅ ∅

Доказательство нерегулярности языков


С помощью леммы о накачке доказать, что следующие языки
нерегулярны:

1) {w ∈ {0, 1}∗ ∣ ∣w∣0 = ∣w∣1 }; 5) {0n 10n ∣ n ∈ N};


2) {ww ∣ w ∈ {0, 1}∗ };
6) {1n ∣n ∈ N};
2

3) {0n 1m ∣ n ⩽ m};
4) {1p ∣ p — простое число}; 7) {1n! ∣n ∈ N}.

Запись вида ∣w∣z (см. язык 1) означает количество вхождений симво-


ла z в строку w.
ГЛАВА 4

КОНЕЧНЫЕ АВТОМАТЫ СО СПОНТАННЫМИ


ПЕРЕХОДАМИ

4.1. Определения и примеры


Конечный автомат со спонтанными переходами (или ε-
переходами) — это одно из обобщений конечных автоматов.У
конечного автомата появляется новое свойство — возможность
совершать переходы по ε (пустой цепочке), т. е. спонтанно, не
получая на вход никакого символа. Эта новая возможность, как и
недетерминизм, не расширяет класс языков, допустимых конеч-
ными автоматами, но дает некоторое дополнительное «удобство
программирования».
Пусть M = (Q, Σ, δ, q0 , F ) — недетерминированный конечный ав-
томат. Автомат M назовем ε-НКА, если

δ ∶ Q × (Σ ∪ {ε}) → P (Q)
4.1. Определения и примеры 81

Пример 4.1.1. Рассмотрим ε-НКА, распознающий ключевые слова


web и day в последовательности символов {a..z }. Граф переходов это-
го автомата представлен на рисунке 4.1. Для каждого ключевого сло-

w e b
1 2 3 4
a..z
ε

8
ε

d a y
0 5 6 7

Рис. 4.1. Использование спонтанных переходов для распознавания


ключевых слов

ва строится полная последоватльность состояний, как если бы это


было единственное слово, которое автомат должен распознать. За-
тем добавляется новое начальное состояние (состояние 8 на рисун-
ке 4.1) с ε-переходами в начальные состояния автоматов для каждо-
го из ключевых слов. ∎

Пример 4.1.2. Рассмотрим ε-НКА (рисунок 4.2), допускающий за-


пись десятичных чисел из следующих элементов ∶

1) Необязательный знак + или −.

2) Цепочка цифр.
82 Глава 4. Конечные автоматы со спонтанными переходами

3) Разделяющая десятичная точка.

4) Еще одна цепочка цифр. Эта цепочка, как и цепочка (2), может
быть пустой, но хотя бы одна из них должна быть непустой.

0, 1, .., 9 0, 1, .., 9

ε, +, − . 0, 1, .., 9 ε
q0 q1 q2 q3 q5

0, 1, .., 9 .

q4

Рис. 4.2. ε-НКА, допускающий десятичные числа

Поскольку переход из состояния q0 в q1 может произойти по лю-


бому из символов +, −, ε, то состояние q1 моделирует ситуацию, ко-
гд а прочитан знак числа (если есть), он не прочитана ни одна из
цифр, ни десятичная точка. Состояние q2 соответствует ситуации,
когда только что прочитана десятичная точка, а цифры целой ча-
сти числа либо уже прочитаны, либо нет. В состоянии q4 уже навер-
няка прочитана хотя бы одна цифра, но еще не прочитана десятич-
ная точка. Состояние q3 определяет ситуацию, когда прочитаны де-
сятичная точка и хотя бы одна цифра слева или справа от нее. Ав-
томат может оставаться в состоянии q3 , продолжая читать цифры, а
4.1. Определения и примеры 83

может и «предположить», что цепочка цифр закончена, и спонтанно


перейти в допускающее состояние q5 . δ -функция переходов автома-
та представлена в таблице на рисунке 4.3. ∎

Вход
δ
ε {+;-} {.} {0,1,..,9}

→ q0 {q1 } {q1 } ∅ ∅
q1 ∅ ∅ {q2 } {q1 ; q4 }
Состояние q2 ∅ ∅ ∅ { q3 }
q3 { q3 } ∅ ∅ { q3 }
q4 ∅ ∅ { q3 } ∅
q5 ∅ ∅ ∅ ∅

Рис. 4.3. Функция перехода δ для автомата, распознающего деся-


тичные числа

Пусть M = (Q, Σ, δ, q0 , F ) — ε-НКА. Определим ε-замыкание состо-


яния q ∈ Σ рекурсивно следующим образом:

1) E (q ) ⊆ P (q ).
2) q ∈ E (q ).
3) Если p ∈ E (q ) и r ∈ δ (p, ε), то r ∈ E (q ).

Пример 4.1.3. Построим ε-замыкание для состояния q из ε-НКА, за-


данного графом переходов (рисунок 4.4).
84 Глава 4. Конечные автоматы со спонтанными переходами

q1 ε q2 ε q3 ε q6

ε b

q4 a q5 ε q7

Рис. 4.4. ε-НКА из примера 4.1.3

E 0 (q1 ) = {q1 };
E 1 (q1 ) = {q1 ; q2 ; q4 };
E 2 (q1 ) = {q1 ; q2 ; q4 ; q3 };
E 3 (q1 ) = {q1 ; q2 ; q4 ; q3 ; q6 }.

Таким образом, E (q1 ) = {q1 ; q2 ; q4 ; q3 ; q6 }. ∎

Пусть M = (Q, Σ, δ, q0 , F ) — ε-НКА и S ⊆ Q — произвольное под-


множество множества Q. Назовем множестов S ε-замкнутым, если
S = {q ∣ если p ∈ δ (q, ε), то p ∈ S }. Отметим, что ∅ — ε-замкнутое мно-
жество.
4.2. Редукция ε-НКА к ДКА 85

4.2. Редукция ε-НКА к ДКА


Для всякого ε-НКА E можно найти ДКА D, допускающий тот же
язык, что и E .

Лемма 4.2.1. Пусть ME = (QE , Σ, δE , qE , FE ) — ε-НКА. Тогда найдется


такой ДКА MD , что L(ME ) = L(MD ). ◻

Доказательство. По данному ε-НКА построим новый ДКА


MD = (QD , Σ, δD , qD , FD ) следующим образом:

1) Qd = P (QE ). Причем, достижимыми состояниями автомата MD


будут только такие S ∈ QD , что S является ε-замкнутым множе-
ством.

2) qD = E (qE ).

3) FD = {S ∈ QD ∶ S ∩ FE ≠ ∅}.

4) Функция переходов δD определим следующим образом:


если S ∈ QD и a ∈ Σ, то δd (S, a) строится по правилам:

a) пусть {q1 ; q2 ; ...; qn } — множество состояний S ;

b) {r1 ; r2 ; ...; rm } = ⋃ni∈1 δE (qi , a);

c) δD (S, a) = ⋃m
j ∈1 E (rj ).

Доказательство корректности конструкций леммы основывается на


стягивании вершин автомата по ε-переходам.
86 Глава 4. Конечные автоматы со спонтанными переходами

a a

Вход b
δ p q
ε {a} {b} {c} ε
ε
→p ∅ {p} {q } {r} c c
q {p} {q } {r} ∅ b

Состояние r {q } {r} ∅ {p} r

(a) Функция переходов (b) Граф переходов

Рис. 4.5. Описание ε-НКА из примера 4.2.1

Пример 4.2.1. Пусть ME = ({p; q; r}, {a; b; c}, δE , p, {r}) — ε-НКА. δ -


функция переходов автомата задана таблицей на рисунке 4.5a. Граф
переходов автомата представлен на рисунке 4.5b. Пользуясь кон-
струкциями из леммы 4.2.1, по данному автомату построим ДКА
MD = (QD , Σ, δD , qD , FD ). Начальным состоянием ДКА является ε-
замыкание начального состояния исходного автомата.

qD = E (p).

Построим ε-замыкание:

E 0 (p) = {p}; E 1 (p) = {p}.

Таким образом qD = {p}.


Аналогично начальному состоянию, построим ε-замыкания для
остальных состояний исходного автомата. δ -функция переходов ав-
4.2. Редукция ε-НКА к ДКА 87

Вход
δ
{a} {b} {c}

→ {p} {p} {q; p} {r; q; p}


{q; p} {q; p} {r; q; p} {r; q; p}
Состояние {r; q; p} {r; q; p} {r; q; p} {r; q; p}

Рис. 4.6. Функция перехода δ для ДКА из примера 4.2.1

b a
a

c
{p} {r; q; p} {q; p}
{b; c}

{a; b; c}

Рис. 4.7. Граф переходов ДКА из примера 4.2.1

томата MD представлена в таблице на рисунке 4.6. Граф переходов


автомата MD представлен на рисунке 4.7 (с. 87). Отметим, что мно-
жество конечных состояний FD содержит единственное состояние
{r; q; p}, поскольку состояние {r} было конечным состоянием исход-
ного автомата. ∎
88 Глава 4. Конечные автоматы со спонтанными переходами

4.3. Преобразование регулярного выражения


в автомат

Для любого регулярного языка L, заданного регулярным выра-


жением R, может быть построен ε-НКА, распознающий этот язык.
Эта возможность заложена в определение регулярного языка и за-
дающего его регулярного выражения (см. раздел 2.1). Регулярными
являются элементарные множества над алфавитом Σ : пустое мно-
жество (ему соответствует регулярное выражение ∅), множество из
одной пустой цепочке (регулярное выражение ε) и множество из од-
ного однобуквенного слова из любой буквы a множества Σ (регуляр-
ное выражение a). Также из определения следует, что результаты
объединения, конкатенации и итерации регулярных языков явля-
ются регулярными языками. Далее мы построим автоматы для эле-
ментарных языков и опишем процесс построения более сложных ав-
томатов, допускающих объединение, конкатенацию или итерацию
языков, распознаваемых более простыми автоматами.

Для связывания простых автоматов в сложные конструкции


удобно использовать ε-переходы. Условимся, что каждый автомат
любой степени сложности будет иметь ровно один вход и один вы-
ход. Начальное состояние у автомата всегда единственное. Одно ко-
нечное состояние можем получить, если ввести новое конечное со-
4.3. Преобразование регулярного выражения в автомат 89

стояние и связать его ε-переходами со старыми конечными состоя-


ниями.
Таким образом все конструируемые на основе регулярных вы-
ражений автоматы будут представлять собой ε-НКА с одним допус-
кающим состоянием.

Теорема 4.3.1. Любой язык, определяемый регулярным выражени-


ем, можно задать некоторым конечным автоматом. ◻

Доказательство. Предположим, что L = L(R) для регулярного вы-


ражения R. Покажем, что L = L(E ) для некоторого ε-НКА E , облада-
ющего следующими свойствами:

1) Автомат имеет ровно одно допускающее состояние.


2) У автомата нет дуг, ведущих в начальное состояние.
3) У автомата нет дуг, выходящих из допускающего состояния.

Для доказательства теоремы применим структурную индукцию по


выражению R, следуя рекурсивному определению регулярных вы-
ражений из раздела 2.1.
В доказательстве леммы 3.4.2 построены конечные автоматы,
распознающие элементарные языки. На рисунке 4.8 (с. 90) приведе-
ны схемы автоматов, распознающих пустой язык (a), язык из одного
символа eps (b ) и язык из одного однобуквенного слова (c). Все эти
автоматы удовлетворяют условиям (1), (2), (3) индуктивной гипоте-
зы.
90 Глава 4. Конечные автоматы со спонтанными переходами

ε a

(a) (b) (c)

Рис. 4.8. Схемы автоматов, распознающих элементарные языки

ε ε

ε ε
S

Рис. 4.9. Схема автомата, распознающего объединение двух языков

Предположим, что утверждение теоремы истинно для непо-


средственных подвыражений данного регулярного выражения, т. е.
языки этих подвыражений являются также языками ε-НКА с един-
ственным допускающим состоянием. Возможны четыре случая.

1) Данное выражение имеет вид R + S для некоторых подвыраже-


ний R и S . Тогда ему соответствует автомат MU , представленный
на рисунке 4.9.
4.3. Преобразование регулярного выражения в автомат 91

R ε S

Рис. 4.10. Схема автомата для конкатенации двух языков

В этот автомат добавлено новое начальное состояние, из кото-


рого можно перейти в начальное состояние автомата для вы-
ражения R или S и продолжать работу, моделируя выбранный
автомат. Попав в допускающее состояние автомата для R или
S (распознав цепочку из языка L(R) или L(S ) соответственно),
новый автомат может по одному из ε-путей перейти в свое до-
пускающее состояние. Таким образом, L(MU ) = L(R) ∪ L(S ).

2) Выражение имеет вид RS для некоторых подвыражений R и S .


Автомат MC для распознавания конкатенации представлен на
рисунке 4.10.

Начальное состояние первого автомата становится начальным


для всего автомата MC , представляющего конкатенацию, а до-
пускающим для него будет допускающее состояние второго ав-
томата. Вначале автомат MC моделирует поведение автомата
для R (распознает цепочку из языка L(R)), потом из допускаю-
щего состояния первого автомата он переходит в начальное со-
стояние автомата для S и моделирует его поведение (распознает
цепочку из языка L(S )). Таким образом, L(MC ) = L(R)L(S ).
92 Глава 4. Конечные автоматы со спонтанными переходами

ε R ε
ε

Рис. 4.11. Схема автомата, распознающего итерацию языка

3) Выражение имеет вид R∗ для некоторого подвыражения R. Рас-


смотрим автомат MI , представленный на рисунке 4.11. Возмож-
ные случаи распознавания:

a) из начального состояния автомат MI сразу переходит в до-


пускающее состояние по символу ε. В этом случае допуска-
ется цепочка ε, которая принадлежит L(R∗ ) независимо от
выражения R;

b) из начального состояния автомат MI переходит в началь-


ное состояние автомата для R, моделирует поведение этого
автомата и попадает в его допускающее состояние, из ко-
торого может начать заново моделировать автомат для R
или перейти в свое допускающее состояние. Такое поведе-
ние автомата дает возможность распознавать цепочки, при-
надлежащие языкам L(R), L(R)L(R), L(R)L(R)L(R) ... (R∗ ),
за исключением, возможно, цепочки ε. Но возможность ее
4.3. Преобразование регулярного выражения в автомат 93

0
ε ε

ε ε
1

Рис. 4.12. Автомат для регулярного выражения 0 + 1

распознавания показана в предыдущем пункте. Таким об-


разом, L(MI ) = L(R∗ ).

4) Выражение имеет вид (R) для некоторого подвыражения R. Ав-


томат для R может быть автоматом и для (R), поскольку скобки
не влияют на язык, задаваемый выражением.

Построенные автоматы удовлетворяют всем трем условиям индук-


тивной гипотезы: одно допускающее состояние, отсутствие дуг, ве-
дущих в начальное состояние, и дуг, выходящих из допускающего
состояния.

Пример 4.3.1. Преобразуем регулярное выражение (0 + 1)∗ 1(0 + 1)


в ε-НКА. Вначале построим автомат для выражения 0 + 1. Для это-
го используем два автомата, построенные по схеме на рисунке 4.8с
(с. 90): один автомат с меткой 0 на дуге, другой — с меткой 1. Эти
автоматы соединим с помощью конструкции объединения по схеме
94 Глава 4. Конечные автоматы со спонтанными переходами

0
ε ε
ε ε
ε ε
1

Рис. 4.13. Автомат для регулярного выражения (0 + 1)∗

с рисунка 4.9 (с. 90). Полученный результат представлен на рисун-


ке 4.12 (с. 93):. После этого применим к полученному автомату кон-
струкцию итерации по схеме с рисунка 4.11 (с. 92). Получим автомат,
представленный на рисунке 4.13.
Осталось к полученному автомату применить конструкции кон-
катенации по схеме с рисунка 4.10 (с. 91). Сначала автомат, пред-
ставленный на рисунке 4.13, соединяется с автоматом, допускаю-
щим только цепочку 1 (нужно еще раз применить конструкцию по
схеме с рисунка 4.8с с меткой 1 на дуге). Последним автоматом в
конкатенации будет еще один автомат для выражения 0 + 1, постро-
енный по тем же принципам, что и автомат на рисунке 4.13. Полный
4.4. Построение ε-НКА по ПЛ-грамматике 95

0
ε ε
ε ε
ε ε ε
1

ε 0
1
ε ε
ε
ε ε
1

Рис. 4.14. Автомат для регулярного выражения (0 + 1)∗ 1(0 + 1)

автомат для выражения (0 + 1)∗ 1(0 + 1) представлен на рисунке 4.14


(с. 95). ∎

4.4. Построение ε-НКА по ПЛ-грамматике

В разделе 1.4 приведена классификация Хомского формальных


грамматик. По этой классификации ПЛ-грамматикой являются та-
кая грамматика, все правила которой имеют вид:

A → xB,
где A, B ∈ N , x ∈ Σ∗ .
A → x,
96 Глава 4. Конечные автоматы со спонтанными переходами

Из леммы 3.4.1 известно, что для любого конечного автомата


можно построить ПЛ-грамматику, порождающую тот же язык, что
распознает исходный автомат. При этом получается, строго говоря,
не ПЛ-грамматика, а автоматная грамматика, все правила которой
имеют вид:
A → xB,
где A, B ∈ N, x ∈ Σ.
A → x,

Фактически автоматная грамматика — это ПЛ-грамматика, в


правилах которой могут встречаться только одиночные терминаль-
ные буквы. Автомат работает следующим образом: по текущему со-
стоянию и текущему входному символу автомат переходит в следу-
ющее состояние. В формальной грамматике нетерминальные сим-
волы соответствуют состояниям, а терминальные символы - вход-
ным символом автомата. За один раз автомат может прочитать
только один входной символ, который в принципе может состоять
из нескольких букв, но автомат считает этот символ неделимым.
С точки зрения же ПЛ-грамматики последовательность терминаль-
ных букв в правилах является частью выводимого слова.

Лемма 4.4.1. Пусть задана ПЛ-грамматика G = (Σ, N, P , S ∈ N ). То-


гда ∃ такой ε-НКА M , что L(M ) = L(G). ◻

Доказательство. Построим M = (Q, Σ, δ, q0 , F ) следующим образом:

1) Q = N ∪ {f }, где f ∉ N .
4.4. Построение ε-НКА по ПЛ-грамматике 97

2) F = {f }.
3) q0 = S .
4) Для определения δ -функции введем вспомогательную δ̂ -
функцию по аналогии с конструкциями из леммы 3.4.1:

a) Если (A → αB ) ∈ P, где A, B ∈ N, α ∈ Σ∗ , то δ̂ (A, α) = B .


b) Если (A → α) ∈ P, где A ∈ N, α ∈ Σ∗ , то δ̂ (A, α) = f .

δ̂ -функция в качестве второго входного параметра принимает


цепочку (возможно, пустую) символов входного алфавита, т. е.

δ̂ ∶ Q × (Σ∗ ) → P (Q).

Поскольку автомат за один такт может прочитать не более од-


ного символа входного алфавита, необходимо перейти от δ̂ -
функции к δ -функции автомата M :

δ ∶ Q × (Σ ∪ {ε}) → P (Q).

Пусть ω ∈ L(M ), тогда (q0 , ω ) ⊢∗M (f, ε). Представим ω = α1 α2 ...αn .


Тогда

(q0 , α1 α2 ...αn ) ⊢M (q1 , α2 ...αn ) ⊢∗M (qn−1 , αn ) ⊢M (f, ε).

Дополним множество P правил грамматики G правилом


S → α1 q1 . Этому правилу будет соответствовать δ (q0 , α1 ) = {q1 }.
Повторяя эти действия для всех αi , получим:

S ⇒∗ α1 α2 ...αn−1 qn−1 ⇒ α1 ...αn = ω.


98 Глава 4. Конечные автоматы со спонтанными переходами

000
1
01 01
S T f
11 ε

Рис. 4.15. Граф переходов δ̂ -функции из примера 4.4.1

Если δ̂ (q1 , ω = α1 α2 ...αk ) = {q2 }, то


(1 )
δ (q1 , α1 ) = {q1 };
(1 ) (2)
δ (q1 , α2 ) = {q1 };
...
(k −2) ( k −1 )
δ (q1 , αk−2 ) = {q1 };
(k −1)
δ (q1 , αk ) = {q2 }.

Таким образом, каждый такт автомата M соответствует одному пра-


вилу грамматики G, и L(M ) = L(G).

Пример 4.4.1. Рассмотрим грамматику G = ({S; T }, {0; 1}, P , S ), где


множество P состоит из следующих продукций:

S → 01T ∣ 1S ∣ ε; T → 11S ∣ 000T ∣ 01 ∣ ε.

Построим ε-НКА M , применяя конструкции из леммы 4.4.1.

Q = {S; T } ∪ {f }; Σ = {0; 1}; q0 = S; F = {f }.


4.4. Построение ε-НКА по ПЛ-грамматике 99

δ (S, 0) = S1 ; δ (S1 , 1) = T ; δ (S, 1) = S; δ (S, ε) = f ;


δ (T, 1) = T1 ; δ (T, 0) = T2 ; δ (T, 0) = T3 ; δ (T, 0) = T4 ;
δ (T, ε) = f ; δ (T1 , 1) = S; δ (T2 , 0) = T3 ; δ (T3 , 0) = T ;
δ (T4 , 1) = f.

Рис. 4.16. Функция переходов автомата из примера 4.4.1.

По правилам грамматики G определим δ̂ -функцию:

δ̂ (S, 01) = T ; δ̂ (S, 1) = S; δ̂ (S, ε) = f ; δ̂ (T, 11) = S;


δ̂ (T, 000) = T ; δ̂ (T, 01) = f ; δ̂ (T, ε) = f.

Граф переходов δ̂ -функции представлен на рисунке 4.15. Для постро-


ения δ -функции автомата M определим множество «промежуточ-
ных» состояний, изменив множество P правил грамматики G сле-
дующим образом:

S → 0S1 ∣ 1S ∣ ε; S1 → 1T ; T → 1T1 ∣ 0T2 ∣ 0T3 ∣ 0T4 ∣ ε;


T1 → 1S; T2 → 0T3 ; T3 → 0T ; T4 → 1.

По модифицированным правилам грамматики G определим δ -


функцию как показано на рисунке .
Множество состояний Q дополняется состояниями, полученны-
ми при расширении правил грамматики G:

Q = {S; T ; F } ∪ {S1 ; T1 ; T2 ; T3 ; T4 }
100 Глава 4. Конечные автоматы со спонтанными переходами

T1 T3

1 1 1 0 0

0 1 0 1
S S1 T T2 f

Рис. 4.17. Граф переходов ε-НКА из примера 4.4.1

Граф искомого автомата M = (Q, Σ, q0 , δ, F ) представлен на ри-


сунке 4.17. ∎

4.5. Вычисление языка ε-НКА


По автомату, допускающему некоторый язык, можно построить
регулярное выражение, задающее этот язык. Для этого нужно по-
строить выражения, описывающие множества цепочек, которыми
помечены определенные пути на графе переходов автомата. Эти пу-
ти могут проходить только через ограниченное подмножество со-
стояний. При индуктивном определении таких выражений нужно
начинать с самых простых выражений, описывающих пути, кото-
4.5. Вычисление языка ε-НКА 101

рые не проходят ни через одно состояние (т. е. являются отдельны-


ми вершинами или дугами). После этого индуктивно строятся выра-
жения, которые позволяют этим путям проходить через постепенно
расширяющиеся множества состояний. В конце этой процедуры бу-
дут получены пути, которые могут проходить через любые состоя-
ния, т. е. генерируются выражения, представляющие все возможные
пути. Подробно эти идеи излагаются в [8] (раздел 3.2.1). В данной
работе будет рассмотрен менее трудоёмкий способ вычисления ре-
гулярного выражения по конечному автомату.

Метод последовательного исключения состояний

Метод вычисления регулярного выражения, рассматриваемый


в данном разделе, предполагает исключение состояний конечного
автомата. Если исключить некоторое состояние r, то все пути авто-
мата, проходящие через это состояние, исчезают. Чтобы язык, до-
пускаемый автоматом, не изменился, необходимо написать на ду-
ге, ведущей непосредственно из некоторого состояния q в состояние
p, метки всех тех путей, которые вели из состояния q в состояние p,
проходя через состояние r. Поскольку теперь метка такой дуги будет
содержать цепочки, а не отдельные символы, и таких цепочек может
быть даже бесконечно много, то нельзя использовать список этих
цепочек в качестве метки. Необходимо использовать конечный спо-
102 Глава 4. Конечные автоматы со спонтанными переходами

соб представления всех подобных цепочек, т. е., использовать регу-


лярные выражения.
Таким образом, мы можем рассматривать автоматы, у которых
метками являются регулярные выражения. Язык такого автомата
представляет собой объединение по всем путям, ведущим от на-
чального к заключительному состоянию, языков, образуемых с по-
мощью конкатенации языков регулярных выражений, расположен-
ных вдоль этих путей.
Опишем процедуру исключения состояния. Пусть
M = (Q, Σ, δ, q0 , F ) — конечный автомат. Рассмотрим подграф
графа переходов автомата M (см. рис. 4.18). Введем операцию
DEL(p, r, q ), где r — вершина, подлежащая удалению, следующим
образом:

1) Если из вершины r ведет дуга с меткой γ в эту же вершину (пет-


ля), то после удаления вершины r этой дуге будет соответство-
вать метка γ ∗ (соответствие операции итерация).

2) Если ∃ путь из вершины p в вершину q , и этот путь проходит по


дугам, помеченным α, α1 ,..., β , то после удаления вершины r ду-
га (p, q ) будет помечена меткой αα1 , ..., β , составленной из меток
всех дуг, образующих этот путь (соответствие операции конка-
тенация).

3) Если ∃ другие пути, ведущие из вершины p в вершину q , то их


метки объединяются (соответствие операции объединение).
4.5. Вычисление языка ε-НКА 103

α β
p r q

Рис. 4.18. Подграф графа конечного автомата M до удаления вер-


шины r

ξ + αγ ∗ β
p q

Рис. 4.19. Подграф графа конечного автомата M после удаления


вершины r

Результат применения операции DEL(p, r, q ) к подграфу из рисун-


ка 4.18 представлен на рисунке 4.19.
Опишем стратегию построения регулярного выражения по ко-
нечному автомату.

1) Если начальное состояние совпадает с допускающим, нужно


ввести новое допускающее состояние и добавить ε-переход из
начального состояния в добавленное. После этого начальное со-
стояние перестает быть допускающим.

2) Если автомат содержит более одного допускающего состояния,


то нужно ввести новое допускающее состояние и добавить ε-
104 Глава 4. Конечные автоматы со спонтанными переходами

Алгоритм 4.5.1 Алгоритм исключения вершины из графа конечного автомата

Вход: Γ = (V, E, φ) — граф автомата M , где φ — функция разметки;


r ∈ V — вершина, которая исключается из графа автомата.
Выход: Γ′ = (V ′ , E ′ , φ) — граф автомата M без вершины r.
Метод:

Шаг 1. Для p ∈ V , p ≠ r и (p, r) ∈ E выполнить:


Для q ∈ V , q ≠ r и (r, q ) ∈ E выполнить:
φ(p, q ) = φ(p, q ) ∪ φ(p, r)(φ(r, r))∗ φ(r, q )
Шаг 2. Исключить из графа Γ вершину q и инцидентные ей дуги.

переходы из старых допускающих состояний в добавленное со-


стояние. Новое состояние становится единственным допускаю-
щим состоянием автомата.

3) С помощью алгоритма 4.5.1 исключить все состояния, кроме на-


чального (q0 ) и конечного (f ).

4) После шагов 1-3 должен остаться автомат с двумя состояниями,


подобный автомату на рисунке 4.20. Регулярное выражение по
этому автомату может быть выписано разными способами.

Рассмотрим выражение (R + SU ∗ T )∗ SU ∗ как один из возможных


вариантов записи регулярного выражения по данному автома-
ту. В автомате есть возможность переходить из начального со-
стояния в него же любое количество раз, проходя по путям, мет-
ки которых принадлежат либо L(R), либо L(SU ∗ T ). Выражение
4.5. Вычисление языка ε-НКА 105

R U
S

q0 f

Рис. 4.20. Обобщенный автомат с двумя состояниями

SU ∗ T представляет пути, которые ведут в допускающее состоя-


ние по пути с меткой из языка L(S ), затем, возможно, несколь-
ко раз проходят через допускающее состояние, используя пути
с метками из L(U ), и наконец возвращаются в начальное состо-
яние, следуя по пути с меткой из L(T ). Отсюда нужно перейти в
допускающее состояние, уже никогда не возвращаясь в началь-
ное, вдоль пути с меткой из L(S ). Находясь в допускающем со-
стоянии, можно произвольное количество раз вернуться в него
по пути с меткой из L(U ).

5) Искомое выражение представляет собой регулярное выраже-


ние, являющееся меткой дуги из начального состояния в конеч-
ное сокращенного автомата.
106 Глава 4. Конечные автоматы со спонтанными переходами

4.6. Задача минимизации конечного автомата


Конечный автомат распознаёт регулярный язык, для которого
может существовать несколько вариантов записи в виде регулярных
выражений. В разделе 4.3 показано, что любое регулярное выраже-
ние можно преобразовать в конечный автомат, распознающий тот
же язык. Таким образом один и тот же язык может быть распознан
различными конечными автоматами, причём эти автоматы будут
эквивалентны между собой.
В решении практических задач удобнее пользоваться конечным
автоматом с меньшим числом состояний, поэтому возникает задача
выбора конечного автомата с меньшим числом состояний из множе-
ства эквивалентных ему автоматов. Далее будет показано, что для
любого конечного автомата можно построить эквивалентный ему
автомат с меньшим числом состояний или установить минималь-
ность исходного автомата.

Отношение эквивалентности на множестве конечных


автоматов
Напомним, что отношение эквивалентности на множестве X
— это бинарное отношение, для которого выполняются следующие
условия:

1) Рефлексивность: a ∼ a для ∀a ∈ X .
4.6. Задача минимизации конечного автомата 107

2) Симметричность: a ∼ b, то b ∼ a для ∀a, b ∈ X .

3) Транзитивность: a ∼ b и b ∼ c, то a ∼ c для ∀a, b, c ∈ X .

Лемма 4.6.1. Конечные автоматы (ε-НКА, НКА, ДКА) M1 и M2 над


одним и тем же конечным алфавитом Σ называются эквивалентны-
ми, если L(M1 ) = L(M2 ). ◻

Доказательство. Покажем, что для введённого отношения эквива-


лентности на конечных автоматах выполняются свойства рефлек-
сивности, симметричности и транзитивности. Пусть MΣ — множе-
ство всех конечных автоматов (ε-НКА, НКА, ДКА) над входным ал-
фавитом Σ.

1) Рефлексивность: ∀M ∈ MΣ M ∼ M ⇔ L(M ) = L(M ).

2) Симметричность: ∀M1 , M2 ∈ MΣ если M1 ∼ M2 ⇔ M2 ∼ M1 , то


L(M1 ) = L(M2 ) ⇔ L(M2 ) = L(M1 ).

3) Транзитивность: ∀M1 , M2 , M3 ∈ MΣ M1 ∼ M2 и M2 ∼ M3 ⇒ M1 ∼ M3 ,
т. к. L(M1 ) = L(M2 ) и L(M2 ) = L(M3 ) ⇒ L(M1 ) = L(M3 ).

Итак, два конечных автомата (ε-НКА, НКА, ДКА) считаются эквива-


лентными между собой, если они допускают один и тот же язык. Нам
известно, что автомат любого типа (ε − , НКА) может быть сведён к
ДКА. Тогда сформулируем задачу минимизации конечного автома-
та следующим образом:
Задача: Для произвольного ДКА найти эквивалентный ему ДКА с
108 Глава 4. Конечные автоматы со спонтанными переходами

минимальным числом состояний. Минимальные ДКА всегда оди-


наковые. Если даны два минимальных ДКА для одного и того же
языка, то всегда можно переименовать состояния так, что данные
ДКА будут одинаковыми. Для того, чтобы построить минимальный
ДКА, необходимо выделить состояния, которые можно удалить, не
нарушая при этом эквивалентность исходного и модифицирован-
ного ДКА.

Недостижимые состояния конечного автомата


Безболезненно из конечного автомата можно удалить только те
состояния, которые не участвуют в распознавании языка.
Определение: Состояние q ∈ Q конечного автома-
та M = (Q, Σ, δ, q0 , F ) называется недостижимым, если
∄ω ∈ Σ∗ ∣ (q0 , ω ) ⊢∗M (q, ε).
Из определения следует, что нельзя подобрать никакую цепочку,
по которой можно было бы пройти от стартового состояния до
недостижимого, следовательно, это состояние не используется при
распознавании любых цепочек языка и может быть удалено вместе
с соответствующими переходами.

Пример 4.6.1. Рассмотрим детерминированный конечный авто-


мат M = (Q, Σ, δ, q0 , F ), заданный графом переходов на рисунке 4.21.
По алгоритму 4.6.1 построим множество достижимых состояний QD :
QD0 = {q0 }
4.6. Задача минимизации конечного автомата 109

Алгоритм 4.6.1 Устранение недостижимых состояний конечного автомата

Вход: Конечный автомат M = (Q, Σ, δ, q0 , F ).


Выход: Конечный автомат M ′ = (Q′ , Σ, δ ′ , q0 , F ′ ) — КА без недостижимых состоя-
ний, такой что L(M ) = L(M ′ ).
Метод: Рекурсивное построение расширяющейся последовательности подмно-
жеств специального вида специального вида множества Q.

Шаг 1. Положить QD0 = {q0 }, i = 1.


Шаг 2. Положить QDi = {p ∣ ∀q ∈ QDi−1 ∃δ (q, t) = {p}, t ∈ Σ} ∪ QDi−1 .
Шаг 3. Если QDi ≠ QDi−1 , то положить i = i + 1 перейти к шагу 2, в противном случае
положить QD = QDi .
Шаг 4. Вернуть КА M ′ = (Q′ , Σ, δ ′ , q0 , F ′ ), где Q′ = QD ∩ Q, F ′ = QD ∩ F ,
δ ′ = δ ∖ {δ (q, t) = p ∣ q ∈ (Q ∖ QD ), t ∈ Σ}.

Из вершины q0 можно перейти в вершины q1 , q2 . Таким образом


QD1 = {q1 , q2 } ∪ {q0 }
Из вершин q1 , q2 можно попасть в вершины q3 , q4 соответственно. Та-
ким образом
QD2 = {q3 , q4 } ∪ {q0 , q1 , q2 }
Из вершины q3 можно попасть в вершины q2 , q4 , а из q4 — в вершины
q1 , q3 . Тогда
QD3 = {q2 , q4 , q1 , q3 } ∪ {q0 , q1 , q2 , q3 , q4 }, следовательно QD2 = QD3 и иско-
мое множество достижимых состояний QD = {q0 , q1 , q2 , q3 , q4 }. Конеч-
ный автомат без недостижимых состояний, эквивалентный исход-
ному, представлен на рисунке 4.22. ∎
110 Глава 4. Конечные автоматы со спонтанными переходами

q1 b q3 a q5

b a
a a
a b b

q0 b q2 b q4 b q6

Рис. 4.21. Граф переходов ДКА с недостижимыми состояниями

q1 b q3

b
a a
a b

q0 b q2 b q4

Рис. 4.22. Граф переходов ДКА без недостижимых состояний

Неразличимые состояния конечного автомата

Определение: Пусть M = (Q, Σ, δ, q0 , F ) — детерминированный


конечный автомат. Два состояния p, q ∈ Q называются неразличимы-
ми, если для ∀ω ∈ Σ∗ выполняется

(p, ω ) ⊢∗M (f1 , ε), (q, ω ) ⊢∗M (f2 , ε),

при этом либо f1 , f2 ∈ F , либо f1 , f2 ∉ F . f1 , f2 могут быть двумя раз-


ными или одним состоянием.
4.6. Задача минимизации конечного автомата 111

Иными словами, состояния невозможно различить, если просто


проверить, допускает ли данный КА входную цепочку, начиная ра-
боту в одном (произвольно) из этих состояний.
Определение: Пусть M = (Q, Σ, δ, q0 , F ) — детерминированный
конечный автомат. Два состояния p, q ∈ Q называются различимыми,
если ∃ω ∈ Σ∗ такая, что

(p, ω ) ⊢∗M (f1 , ε), (q, ω ) ⊢∗M (f2 , ε),

при этом либо f1 ∈ F и f2 ∉ F , либо наоборот. Очевидно, что f1 ≠ f2 в


обязательном порядке.
Слово ω в этом случае называется различающим словом состоя-
ний p, q . Любая пара состояний конечного автомата либо различима,
либо нет.
Рассмотрим лемму об отношении неразличимости.

Лемма 4.6.2. Пусть M = (Q, Σ, δ, q0 , F ) — ДКА. Неразличимость яв-


ляется отношением эквивалентности на множестве Q и разбивает
Q в объединение непересекающихся классов эквивалентности, каж-
дый из которых состоит из попарно непересекающихся состояний,
но при этом любая пара состояний из разных классов эквивалент-
ности будет различимой. ◻

Доказательство. Покажем, что для введённого отношения нераз-


личимости на множестве состояний конечного автомата выполня-
ются свойства рефлексивности, симметричности и транзитивности.
112 Глава 4. Конечные автоматы со спонтанными переходами

1) Рефлексивность: ∀p ∈ Q p ∼ p ⇔ ∀ω ∈ Σ∗
(p, ω ) ⊢∗ (f1 , ε), (p, ω ) ⊢∗ (f1 , ε), так как f1 = f1 , то (p, p) —
неразличимы, следовательно p ∼ p.

2) Симметричность: ∀p, q ∈ Q если p ∼ q , то q ∼ p:


∀ω ∈ Σ∗ (p, ω ) ⊢∗ (f1 , ε), (q, ω ) ⊢∗ (f2 , ε). Так как p ∼ q , то либо
f1 , f2 ∈ F , либо f1 , f2 ∉ F .

3) Транзитивность: ∀p, q, r если p ∼ q, q ∼ r, то p ∼ r.


∀ω ∈ Σ∗ (p, ω ) ⊢∗ (f1 , ε), (q, ω ) ⊢∗ (f2 , ε). Так как p ∼ q , то либо
f1 , f2 ∈ F , либо f1 , f2 ∉ F .
(q, ω ) ⊢∗ (f2 , ε), (r, ω ) ⊢∗ (f3 , ε). Так как q ∼ r, то либо f2 , f3 ∈ F , либо
f2 , f 3 ∉ F .
(p, ω ) ⊢∗ (f1 , ε), (q, ω ) ⊢∗ (f2 , ε), (r, ω ) ⊢∗ (f3 , ε) и либо f1 , f2 , f3 ∈ F ,
либо f1 , f2 , f3 ∉ F .

Определение: Пусть M = (Q, Σ, δ, q0 , F ) — ДКА. q1 , q2 — различи-


мые состояния M .
Будем говорить, что q1 , q2 — k -неразличимы q1 ∼k q2 , если не су-
ществует такой цепочки ω , различающей q1 , q2 , длина которой мень-
ше или равна k .
Состояния q1 , q2 неразличимы (q1 ∼ q2 ), если они k -неразличимы
при любом k ⩾ 0.

Лемма 4.6.3. Пусть M = (Q, Σ, δ, q0 , F ) — ДКА c n состояниями. Со-


стояния q1 , q2 неразличимы ⇔ они (n − 2) неразличимы. ◻
4.6. Задача минимизации конечного автомата 113

Доказательство. Необходимость условия тривиальна. Для того, что-


бы была возможность различения состояний, в конечном автомате
должны быть минимум одно обычное и одно конечное состояние.
Количество остальных состояний не превышает n − 2.
Достаточность тривиальна в тех случаях, когда множество F
содержит 0 или n элементов. Рассмотрим случай, когда число эле-
ментов множества F отличается от 0 или n.
Покажем, что

∼⊆∼n−2 ⊆∼n−3 ⊆ . . . ⊆∼2 ⊆∼1 ⊆∼0

Заметим, что для любых состояний q1 , q2 выполняются следующие


свойства:

1) q1 ∼0 q2 ⇔ q1 , q2 ∈ F или q1 , q2 ∉ F .

2) q1 ∼k q2 ⇔ q1 ∼k−1 q2 и ∀x ∈ Σδ (q1 , x) ∼k−1 δ (q2 , x).

Отношение ∼0 самое грубое. Оно разбивает множество Q на два клас-


са: F и Q ∖ F . Если ∼k+1 ≠∼k , то отношение ∼k+1 содержит по крайней
мере на один класс эквивалентности больше, чем ∼k , т. е. оно тонь-
ше. Поскольку каждое множество из F и Q ∖ F содержит не более n − 1
элементов, можно получить не более n − 2 последовательных утонче-
ний отношения ∼0 . Если ∼k+1 =∼k для некоторого k , то в силу свойства
2 ∼k+1 =∼k+2 = . . .. Таким образом, ∼ — это первое из отношений ∼k , для
которых ∼k+1 =∼k .
114 Глава 4. Конечные автоматы со спонтанными переходами

Вывод: если два состояния можно различить, то их можно различить


с помощью входной цепочки, длина которой меньше числа состоя-
ний конечного автомата. Таким образом процесс различения любой
пары состояний конечен.

Построение минимального конечного автомата

Для любого конечного автомата можно найти эквивалентный


ему минимальный конечный автомат. Для этого нужно убрать из
исходного автомата недостижимые и неразличимые состояния. По-
скольку неразличимые состояния не участвуют в распознавании це-
почек, а пара неразличимых состояний не влияет на результат рас-
познавания, то удаление этих состояний не приведёт к изменению
распознаваемого языка.
Определение: Полностью определённый детерминированный
конечный автомат называется каноническим (приведённым), если
он не содержит недостижимых состояний и любая пара состояний
этого автомата различима.

Теорема 4.6.1. Автомат M ′ , который строится алгоритмом 4.6.2,


содержит наименьшее число состояний среди всех эквивалентных
ему конечных автоматов. ◻
4.6. Задача минимизации конечного автомата 115

Алгоритм 4.6.2 Построение канонического автомата (Минимизация ДКА)

Вход: Полностью определённый ДКА M = (Q, Σ, δ, q0 , F ).


Выход: Приведённый ДКА M ′ = (Q′ , Σ, δ ′ , q0 , F ′ ), такой что L(M ′ ) = L(M ).
Метод: Поиск и удаление недостижимых и неразличимых состояний.

Шаг 1. Применить к конечному автомату M алгоритм поиска недостижимых со-


стояний и построить конечный автомат M1 без недостижимых состояний, такой
что L(M1 ) = L(M ).
Шаг 2. Строить отношения эквивалентности ∼0 , ∼1 , . . . по описанию в лемме 4.6.3
до тех пор, пока это будет возможно, т. е. ∼k+1 =∼k . Взять в качестве ∼ отношение
∼k .
Шаг 3. Построить множество Q′ как множество классов эквивалентности отноше-
ния ∼. Через [p] будем обозначать класс эквивалентности отношения ∼, содержа-
щий состояние p.
Шаг 4. Построить δ ′ ([p], a) = [q ], если delta(p, a) = q .
Шаг 5. Обозначить q0′ как q0 .
Шаг 6. Обозначить F ′ как {[q ], q ∈ F }.
Шаг 7. Вернуть M ′ = (Q′ , Σ, δ ′ , q0 , F ′ ).

Доказательство. Пусть M ′ = (Q′ , Σ, δ ′ , q0 , F ′ ) — приведённый


конечный автомат. Предположим, что существует такой КА
Mm = (Qm , Σ, δm , q0m , Fm ), что /Qm / < /Q′ / и L(Mm ) = L(M ′ ).
В силу шага 1 алгоритма все состояния автомата M ′ достижи-
мы. Так как Mm имеет меньше состояний, то найдутся цепочки ω, x,
переводящие состояние q0 в разные состояния, а q0m — в одно и то
же: (q0m , ω ) ⊢∗Mm (q, ε) и (q0m , x) ⊢∗Mm (q, ε). Следовательно, ω, x перево-
116 Глава 4. Конечные автоматы со спонтанными переходами

Вход
δ
a b

→A {F } {B }
B {E } {D}
C {C } {F }
Состояние
D {D} {A}
E {B } {C }
F {F } {E }

Рис. 4.23. Функция перехода δ для автомата из примера 4.6.2.

дят автомат M ′ в различимые состояния, например в p, r. Следова-


тельно, существует такая цепочка y , что точно одна из цепочек ωy, xy
принадлежит L(M ′ ). Но ωy, xy должны переводить Mm в одно и то же
состояние s, для которого (q, y ) ⊢∗Mm (s, ε). Таким образом, точно одна
из цепочек ωy, xy не может принадлежать L(Mm ), а это противоре-
чит предположению о том, что L(Mm ) = L(M ′ ).

Пример 4.6.2. Пусть M = ({A; B; C; D; E; F }, {a; b}, δ, A, {A; F }) — де-


терминированный полностью определённый конечный автомат,
где функция переходов δ задаётся таблицей с рисунка 4.23. При-
меним к автомату M алгоритм 4.6.2 минимизации ДКА и построим
приведённый автомат M ′ , эквивалентный исходному.
4.6. Задача минимизации конечного автомата 117

Вначале убедимся, что все состояния автомата M достижи-


мы. Для этого проследим переходы из начального автомата во все
остальные: из начального состояния A достижимы состояния F, B .
Из пары F, B можно перейти в состояния F, E, D. Из состояний E, D
возможны переходы в состояния B, C, D, A. Таким образом, все со-
стояния автомата M достижимы.
Начнём разбиение множества Q на классы неразличимости:

- Неразличимость цепочками длины 0(∼0 ). На этом этапе множе-


ство состояний разбивается на два класса финальных и обычных
состояний. Чтобы отличить финальное состояние от нефиналь-
ного, цепочка не требуется. В результате получим два непересе-
кающихся подмножества множества Q: [A; F ], [B; C; D; E ].

- Неразличимость цепочками длины 1(∼1 ). Здесь будем работать с


каждым классом, выделенным на предыдущем шаге. Неразли-
чимость цепочками длины 1 означает, что переход по одной
букве из проверяемой пары состояний приводит в одинаковые
по типу состояния. Проверим пару состояний [A; F ]. Из состо-
яния A по букве a попадаем в финальное состояние F , по бук-
ве b — в обычное состояние B . Из состояния F по букве a по-
падаем в финальное состояние F , по букве b — в обычное со-
стояние E . Таким образом, переход по одной букве (любой из
алфавита Σ не различает состояния, множество неразличимый
состояний стабилизировалось. Мы нашли первую группу нераз-
118 Глава 4. Конечные автоматы со спонтанными переходами

∼1 ∼2 ∼1 ∼2

B {E, D} E {B, C } C {C, F} C {C, F}


E {B, C } D {D, A} D {D, A} F {F, E }
B {E, D} D {D, A}
C {C, F} A {F, B }

(a) Для пары состояний [B; E ] (b) Для пары состояний [C; D]

Рис. 4.24. Проверка неразличимости состояний

личимых состояний [A; F ]. Проверим пары состояний из множе-


ства [B; C; D; E ]. Для установления неразличимости цепочками
длины 1 достаточно посмотреть на правую часть таблицы пе-
реходов. Если в паре строк для проверяемых состояний справа
финальные и нефинальные состояния расположены одинаково,
то эти состояния находятся в классе неразличимости ∼1 . В дан-
ном примере будут выделены следующие классы неразличимо-
сти цепочками длины 1: [B; E ] и [C; D].

- Неразличимость цепочками длины 0(∼2 ). На этом шаге нам оста-


лось проверить, различимы ли пары [B; E ] и [C; D] цепочками
терминалов длины 2. Для этого из каждой пары состояний нуж-
но сделать два перехода по всем комбинациям цепочек длины
2 и сравнить пары состояний, в которых автомат остановился.
Проверим пару состояний [B; E ] (рисунок 4.24a). Жирным в таб-
4.6. Задача минимизации конечного автомата 119

Вход
δ
a b

→ X {X } {Y }
Состояние Y {Y } {Z }
Z {Z } {X }

Рис. 4.25. Функция перехода δ для минимального автомата из при-


мера 4.6.2.

лице выделены финальные состояния. Заметим, что расположе-


ние финальных и обычных состояний в таблице одинаково, сле-
довательно рассматриваемая пара состояний неразличима це-
почками длины 2.

Проверим пару состояний [C; D], как показано на рисунке 4.24b


(с. 118). В получившейся таблице расположение финальных и
нефинальных состояний одинаково, следовательно пара [C; D]
неразличима цепочками длины 2.

Поскольку на этом шаге нам не удалось уточнить предыдущие


классы неразличимости (множества неразличимых состояний
стабилизировались), процесс выделения классов неразличимо-
сти можно завершить.
120 Глава 4. Конечные автоматы со спонтанными переходами

B B X
C C X
D D X
E E X
F F X X X X
A B C D E A B C D E
(a) (b)

Рис. 4.26.

В результате выделены три класса неразличимости:


X = [A; F ], Y = [B; E ] и Z = [C; D]. Минимальный автомат
M ′ = ({X; Y ; Z }, {a; b}, δ ′ , X, {X }) задаётся таблицей переходов с
рисунка 4.25 (с. 119). ∎

В примере 4.6.2 показан принцип разбиения множества состо-


яний конечного автомата на классы неразличимости. Для простых
случаев вести «дневник» переходов достаточно просто, но если нуж-
но установить неразличимость цепочками длины больше 3, то за-
пись переходов будет очень громоздкой. В [8] изложена методика
поиска неразличимых состояний путём заполнения таблицы. В дан-
ном случае громоздкий «дневник» переходов представляется в ком-
пактной форме таблицы неразличимости.
4.6. Задача минимизации конечного автомата 121

B X B X
C X X C X X
D X X D X X O
E X X X E X O X X
F X X X X F O X X X X
A B C D E A B C D E
(a) (b)

Рис. 4.27.

Пример 4.6.3. Еще раз рассмотрим автомат из примера 4.6.2. Пусть


M = ({A; B; C; D; E; F }, {a; b}, δ, A, {A; F }) — детерминированный пол-
ностью определённый конечный автомат, где функция переходов δ
задаётся таблицей с рисунка 4.23. В примере 4.6.2 установлено, что
этот автомат не содержит недостижимых состояний. Подготовим
для множества Q таблицу неразличимости как показано на рисун-
ке 4.26a.
Принцип заполнения таблицы следующий: в ячейку ставим X ,
если пара состояний, соответствующая этой ячейке, различима. На
первом шаге расставим X в ячейках, соответсвующих парам фи-
нальных и обычных состояний (установим неразличимость состо-
яний цепочками длины 0) — рисунок 4.26b.
Далее по таблице переходов определяем пары неразличимых
состояний цепочками длины 1. Для этого нам достаточно сравнить
122 Глава 4. Конечные автоматы со спонтанными переходами

строки справа и посмотреть расположение финальных и нефиналь-


ных состояний. Получим следующую таблицу неразличимости с ри-
сунка 4.27a.

Незаполненными остались ячейки на пересечении пар состоя-


ний [F ; A], [E; B ], [D; C ]. Рассмотрим пару [F ; A]. По таблице пере-
ходов из состояния F можно попасть в состояния F, E по одной бук-
ве, а из состояния A — в состояния F, B . В результате получается, что
буква a не различает состояния [F ; A], поскольку переводит автомат
в одно и то же состояние F . Буква b переводит автомат из состоя-
ний F, A в состояния B, E соответственно. В таблице неразличимо-
сти на пересечении этих состояний пока нет отметки о неразличи-
мости. Можем условно поставить в ячейку на пересечении состоя-
ний [F ; A] знак вопроса и перейти к исследованию пары состояний
[E; B ]. Для этой пары состояний буква a переводит автомат в те же
состояния (перекрёстно), а буква b переводит автомат в состояния
D, C . Для этой пары в таблице нет отметки о неразличимости, по-
этому ставим знак вопроса и переходим к анализу пары состояний
[D; C ]. Буква a переводит автомат в ту же пару состояний C, D, а b — в
пару состояний F, A, для которой мы уже поставили в таблицу знак
вопроса. В итоге круг замкунлся, и мы выделили пары неразличи-
мых состояний (рисунок 4.27b).

Далее можно переобозначить выделенные классы неразличи-


мости: X = [A; F ], Y = [B; E ] и Z = [C; D]. Минимальный автомат
4.7. Упражнения 123

M ′ , эквивалентный исходному автомату M , уже построен в примере


4.6.2. ∎

4.7. Упражнения

Построение ε-НКА по регулярному выражению

Построить ε-НКА по следующим регулярным выражениям:

1) R = (a + b + c)(bab) ∗ (a + b);

2) R = 1(10 + 10)∗ 1(0 + 1)∗ ;

3) R = (a∗ b∗ )∗ + (ab + b)∗ .

Для каждого полученного ε-НКА построить соответствующий ему


ДКА.

Построение ε-НКА по ПЛ-грамматике

Построить ε-НКА по грамматикам со стартовым символом S и


продукциями:

S → abaA ∣ abB,
S → 10A ∣ 101A, S → xA ∣ B,
A → a ∣ aaB ∣ baC,
(1) A → 0A ∣ 1B, (2) (3) A → yxyA ∣ ε ∣ xB,
B → b ∣ abaC,
B → 1 ∣ 0; B → b ∣ ε.
C → aaB ∣ a;
124 Глава 4. Конечные автоматы со спонтанными переходами

Методом исключения состояний определить язык для каждого по-


лученного автомата.

Минимизация конечного автомата


Минимизировать конечные автоматы, заданные таблицами пе-
реходов, а также определить язык полученных автоматов методом
исключения состояний:

Вход Вход
δ δ
a b ε a b

1) → A {B; C } {C } {D} → q1 q 2 q 4
2)
B {C } {D} q2 q 2 q 3
C {B; C } {D} q3 q4 q5
D ∅ ∅ q4 q 4 q 5
q5 q2 q3
ГЛАВА 5

БУЛЕВА АЛГЕБРА РЕГУЛЯРНЫХ ЯЗЫКОВ

5.1. Свойства регулярных языков

Регулярные (а значит, и автоматные, и ПЛ-) языки обладают


большим количеством интересных свойств, многие из которых лег-
ко доказываются на основе соответствия между упомянутыми клас-
сами языков.
Второе свойство регулярных языков, которое мы рассмотрим,
назовем свойством замкнутости относительно теоретико-множе-
ственных операций. Иначе, можно сказать, что регулярные множе-
ства представляют собой подалгебру алгебры всех подмножеств Σ∗ .

Теорема 5.1.1. Класс регулярных языков замкнут относительно


операций: объединения, конкатенации, итерации, дополнения, пе-
ресечения, разности. ◻
126 Глава 5. Булева алгебра регулярных языков

Доказательство. Для регулярных языков L1 , L2 рассмотрим описы-


вающие их регулярные выражения RE(L1 ), RE(L2 ). Язык объедине-
ния (соответственно, конкатенации, итерации) описывается выра-
жением RE(L1 ) + RE(L2 ) (соответственно, RE(L1 ) RE(L2 ), RE(L1 )∗ ), а
значит, регулярен.
Для регулярного языка L построим распознающий его де-
терминированный конечный автомат A(L), задаваемый пятеркой
̃ L) = (Q, Σ, δ, q0 , Q ∖ F )
(Q, Σ, δ, q0 , F ). Легко проверить, что автомат A(
допускает дополнение L = Σ∗ ∖ L языка L, которое является, таким
образом, регулярным языком.
Поскольку справедливо L1 ∩ L2 = L1 ∪ L2 , то язык L1 ∩ L2 регуля-
рен, исходя из доказанного выше. Аналогично регулярность опера-
ции взятия разности языков выводится из равенства L1 ∖L2 = L1 ∩L2 .

Упражнение 5.1.1. Задача построения конечного автомата, распо-


знающего дополнение языка, была сведена к взятию дополнения
множества заключительных состояний детерминированного авто-
мата исходного языка. На самом деле, этот факт требует отдельного
доказательства, которое читателю предлагается построить самосто-
ятельно. Неожиданным является то, что для недетерминированного
автомата исходного языка такая конструкция в общем случае не ра-
ботает. Приведите контрпример, иллюстрирующий эту проблему. ◻

Упражнение 5.1.2. Доказательство регулярности L1 ∩ L2 можно


провести конструктивно, а не формально, как это было сделано с
5.1. Свойства регулярных языков 127

помощью определения операции пересечения через дополнение и


разность. А именно, имеется явная схема для ДКА, допускающего
L1 ∩ L2 , внутри которой «параллельно» работают автоматы A(L1 ) и
A(L2 ) для языков L1 и L2 . Попытайтесь придумать эту схему или раз-
берите теорему 4.8 раздела 4.2.1 учебника [8]. ◻

Упражнение 5.1.3. (Контрпример к достаточности леммы о на-


качке.) Необходимо понимать, что условие леммы о накачке не яв-
ляется достаточным для регулярности языка. То есть, если некото-
рый язык ему удовлетворяет, из этого не следует регулярность язы-
ка. Рассмотрим язык

L = {ai bj ck ∣ i, j, k ∈ N0 ∧ (i = 1 ⇒ j = k )}.

Покажите, что

1) L нерегулярен (с помощью свойства замкнутости),

2) L удовлетворяет условию леммы о накачке. ◻

Пусть Σ — конечный алфавит, Σ∗ — полный язык над алфави-


том Σ. Выделим регулярные подмножества L1 , L2 ⊆ Σ∗ . Если L1 , L2 —
регулярные языки над алфавитом Σ, то регулярными являются сле-
дующие языки:

1) L1 ∪ L2 3) L∗1 5) L̄1 = Σ∗ ∖ L1

1 = {ω ∣ ω ∈ L1 }
4) LR 6) L1 ∩ L2
2) L1 L2 R
128 Глава 5. Булева алгебра регулярных языков

7) L1 ∖ L2 8) H (L1 ) 9) H −1 (L1 )

Язык регулярен, если можно построить конечный автомат, рас-


познающий этот язык. Пункты 1, 2, 3 подробно рассматривались и
доказывались в разделе 3.4. Построим конечные автоматы для язы-
ков из пунктов 4, 5, 6, 7.
1 = {ω
Рассмотрим язык LR R ∣ ω ∈ L }, полученный обращени-
1

ем языка L1 (пункт 4). Поскольку язык L1 — регулярный, для него


существует конечный автомат. Пусть M1 = (Q, Σ, δ, q0 , F ) — конеч-
ный автомат, у которого L(M1 ) = L1 . Построим конечный автомат
M R = (QR , Σ, δ R , F R ) следующим образом:

1) Если ∣ F ∣> 1, то ввести новое финальное состояние qf . Из каждого


старого финального состояния p ∈ F ввести ε-переход в новое
финальное состояние. Положить F = {qf }.
2) Обратить все стрелки диаграммы переходов автомата M .
3) Положить qR = qf , F R = {q0 }.

Построенный таким образом автомат M R начинает распознавать


цепочку с последней буквы и входит в допускающее состояние после
прочтения первой буквы.
Проверим, что результат обращения регулярного языка в алфа-
вите Σ также является регулярным языком:

1) {∅}R = {∅}, {ε}R = {ε}, {a}R = {a}∀a ∈ Σ.


2) (L1 ∪ L2 )R = (LR
1 ∪ L2 ).
R
5.1. Свойства регулярных языков 129

1 0

q0 0 q1 0 q2

Рис. 5.1. ДКА из примера 5.1.1, распознающий язык L = 01∗ 0∗

qf ε q2 0 q1 0 q0

0 1

Рис. 5.2. ДКА из примера 5.1.1, распознающий язык LR = 0∗ 1∗ 0

3) (L1 L2 )R = (LR
1 L2 ).
R

4) (L∗1 )R = {ε}R ∪ (L1 )R ∪ (L2 )R . . . (LR ∗


1) .

Пример 5.1.1. Пусть L = 01∗ 0∗ . Диаграмма автомата, распознающе-


го язык L, приведена на рисунке 5.1. В автомате два допускающих
состояния: q1 и q2 . Сведём эти состояния в одно новое допускающее
состояние qf , добавив ε-переходы. Диаграмма конечного автомата,
допускающего язык-обращение LR = 0∗ 1∗ 0 представлена на рисун-
ке 5.2. ∎

Рассмотрим язык L̄1 (пункт 5). Поскольку язык L1 — регулярный,


для него существует конечный автомат. Пусть M1 = (Q, Σ, δ, q0 , F ) —
130 Глава 5. Булева алгебра регулярных языков

q0 0 q1 0 qf

Рис. 5.3. ДКА из примера 5.1.2, распознающий язык L = 01∗ 0

полностью определённый ДКА, у которого L(M1 ) = L1 . Рассмотрим


конечный автомат M̄1 = (Q, Σ, δ, q0 , Q ∖ F ). Автомат M̄1 определяется
такой же δ -функцией, что и M1 , т. е. их поведение одинаково. Возь-
мём произвольную цепочку ω ∈ L1 . Для неё справедливо следующее:

(q0 , ω ) ⊢∗M1 (qf , ε), qf ∈ F

В то же время в автомате M̄1 для этой цепочки выполняется следую-


щее:

(q0 , ω ) ⊢M̄ 1
(qf , ε), qf ∈ (Q ∖ F )

Отсюда следует, что если произвольная цепочка допускается в M1 , то


в автомате M̄1 эта цепочка приводит к недопускающему состоянию.
Таким образом L(M̄1 ) = L̄1 — регулярный язык.

Пример 5.1.2. Пусть L = 01∗ 0. Диаграмма автомата, распознающе-


го язык L, приведена на рисунке 5.3. Представленный ДКА не пол-
ностью определён. Идея инвертирования конечного автомата за-
ключается в том, чтобы все недопускающие состояния стали допус-
кающими и наоборот, а в неполностью определенных ДКА дан не
5.1. Свойства регулярных языков 131

q0 0 q1 0 qf

1
0, 1

qE

0, 1

Рис. 5.4. Полностью определённый ДКА из примера 5.1.2, распозна-


ющий язык L = 01∗ 0

весь набор состояний, в который автомат может перейти. Иными


словами, в полностью определённых конечных автоматах заложе-
но описание как распознаваемого языка, так и дополнения к нему,
а в неполностью определённых — только описание распознаваемого
языка.
Доопределим ДКА на рисунке 5.3 следующим образом: вве-
дём новое недопускающее состояние qE и добавим недостаю-
щие переходы в это состояние. Получившийся полностью опре-
делённый ДКА представлен на рисунке 5.4. Теперь инвертиру-
ем состояния и получим ДКА (рисунок 5.5), распознающий язык
L̄ = ε + 1(0 + 1)∗ + 01∗ (ε + 0(0 + 1)(0 + 1)∗ ) ∎
132 Глава 5. Булева алгебра регулярных языков

q0 0 q1 0 qf

1
0, 1

qE

0, 1

Рис. 5.5. ДКА, распознающий язык-дополнение из примера 5.1.2

Рассмотрим язык L = L1 ∩ L2 (пункт 6). Поскольку язы-


ки L1 , L2 — регулярны, для них существуют конечные автома-
ты. Пусть M1 = (Q1 , Σ, δ1 , q1 , F1 ) — ДКА, у которого L(M1 ) = L1 .
M2 = (Q2 , Σ, δ2 , q2 , F2 ) — ДКА, у которого L(M2 ) = L2 .
Построим конечный автомат

M = (Q1 × Q2 , Σ, δ, (q1 , q2 ), F1 × F2 ), где


δ ∶∀a ∈ Σ, ∀p ∈ Q1 , ∀q ∈ Q2 δ ((p, q ), a) = (δ1 (p, a), δ2 (q, a)).

Покажем, что данный автомат распознаёт L1 ∩ L2 .


Произвольная цепочка

ω ∈ L(M ) ⇔ ((q1 , q2 ), ω ) ⊢∗M ((qf1 , qf2 ), ε), qf1 ∈ F1 , qf2 ∈ F2 .


5.1. Свойства регулярных языков 133

Вход
δ1 Вход
a b c δ2
a b c
→ q0 {q0 } {q1 } ∅
→ p0 ∅ {p0 } {pf }
q1 ∅ ∅ {qf }
pf {pf } ∅ ∅
qf ∅ ∅ ∅

Рис. 5.6.

Вместе с этим

(q1 , ω ) ⊢∗M1 (qf1 , ε), qf1 ∈ F1 ,


(q2 , ω ) ⊢∗M2 (qf2 , ε), qf2 ∈ F2 .

Таким образом, цепочка допускается автоматом M , если она одно-


временно допускается и автоматом M1 , и автоматом M2 .

Пример 5.1.3. Пусть

L1 = a∗ bc M1 = ({q0 ; q1 ; qf }, {a; b; c}, δ1 , q0 , {qf })


L2 = b∗ ca∗ M2 = ({p0 ; pf }, {a; b; c}, δ2 , p0 , {pf }).

где δ1 и δ2 определены как показано на рисунке 5.6.


Построим новую таблицу функции переходов для автомата, рас-
познающего пересечение исходных языков, как показано на рисун-
ке 5.7 (с. 134). Таким образом

M = ({(q0 , p0 ); (q1 , p0 ); (qf , pf )}, Σ, δ, (q0 , p0 ), {(qf , pf )}.


134 Глава 5. Булева алгебра регулярных языков

Вход
δ
a b c

→ (q0 , p0 ) {(q0 , ∅)} {(q1 , p0 )} {(∅, p1 )}


(q1 , p0 ) {(∅, ∅)} {(∅, p0 )} {(qf , pf )}
(qf , pf ) {(∅, p1 )} (∅, ∅) (∅, ∅)

Рис. 5.7.

Язык L(M ) = {bc}. ∎

Рассмотрим язык L = L1 ∖ L2 (пункт 7). Поскольку L1 и L2 — мно-


жества (регулярные), то теоретико-множественная операция разно-
сти может быть выражена через другие операции следующим обра-
зом: L = L1 ∖ L2 = L1 ∩ L̄2 . В пунктах 5, 6 показано, как строить авто-
маты для операций дополнения и пересечения, так что построение
автомата для разности двух регулярных выражений заключается в
построении автомата, распознающего дополнение к языку L2 , и по-
строении автомата, распознающего пересечение между L1 и допол-
нением к L2 .

Пример 5.1.4. Пусть L1 = a∗ b∗ c, L2 = ab∗ c∗ . Построим конечный ав-


томат ML̄2 , такой что L(ML̄2 ) = L̄2 . Для этого необходимо построить
конечный автомат, распознающий язык L2 , доопределить его, если
5.1. Свойства регулярных языков 135

b c a b

q0 a q1 c q2 p0 b p1

b, c c
a c
a, b

qE a, b, c p2

(a) Язык L̄2 (b) Язык L1

Рис. 5.8. Два ДКА для примера 5.1.4

это необходимо, и инвертировать состояния. Диаграмма автомата,


распознающего язык L̄2 , приведена на рисунке 5.8a.
Построим автомат, распознающий язык L1 . Поскольку он будет
использоваться для построения автомата, распознающего пересе-
чение языков, этот автомат доопределять не будем. Диаграмма ав-
томата, распознающего язык L2 , приведена на рисунке 5.8b.
Для построения автомата, распознающего L1 ∩L̄2 , воспользуемся
таблицами δ -функций переходов автоматов для языка L1 и L̄2 (рису-
нок 5.9, с. 136).
На основе построенных таблиц сформируем новую таблицу
функции переходов для автомата, распознающего язык L1 ∩ L̄2 (ри-
сунок 5.10, с. 136).
136 Глава 5. Булева алгебра регулярных языков

Вход
Вход δL̄2
δL1 a b c
a b c
→ q0 q1 {qE } {qE }
→ p0 {p0 } {p1 } {p2 }
q1 qE {q1 } {q2 }
p1 ∅ {p1 } {p2 }
q2 qE {qE } {q2 }
p2 ∅ ∅ ∅
pE {pE } {pE } {pE }

Рис. 5.9.

Вход
δL1∩L̄2
a b c

→ A = (q0 , p0 ) {(q1 , p1 )} {(qE , p2 )} {(qE , p3 )}


B = (q1 , p1 ) {(qE , p1 )} {(q1 , p2 )} {(q2 , p3 )}
C = (qE , p2 ) {(qE , ∅)} {(qE , p2 )} {(qE , p3 )}
D = (qE , p3 ) {(qE , ∅)} {(qE , ∅)} {(qE , ∅)}
E = (qE , p1 ) {(qE , p1 )} {(qE , p2 )} {(qE , p3 )}
F = (q1 , p2 ) {(qE , ∅)} {(q1 , p2 )} {(q2 , p3 )}
G = (q2 , p3 ) {(qE , ∅)} {(qE , ∅)} {(qE , ∅)}

Рис. 5.10.

Диаграмма автомата M , распознающего L1 ∩ L̄2 , представлена на


рисунке 5.11 (с. 137).
5.1. Свойства регулярных языков 137

c
A D

b c

b
G C
c
a c b
F
c
b b

a
B E

Рис. 5.11. ДКА из примера 5.1.4, распознающий язык L1 ∩ L̄2

Вычислив язык автомата M методом исключения состояний,


можно убедиться, что

L(M ) = c + bc + aaa∗ (c + bc) + (ab + bb + aaa∗ bb)(bb)∗ bc. ∎

Упражнение 5.1.4. Пусть L1 , L2 — регулярные языки над алфави-


том Σ. Покажите, что языки H (L1 ) и H −1 (L1 ) являются регулярны-
ми. ◻
138 Глава 5. Булева алгебра регулярных языков

5.2. Замкнутость регулярных множеств


относительно булевых операций

Рассматривая свойства регулярных языков, мы получили ин-


струкции построения конечных автоматов, распознающих языки —
результаты операций над регулярными множествами. Регулярные
множества обладают еще одним важным свойством, которое позво-
ляет определять произвольные операции над языками и строить ко-
нечные автоматы для их распознавания.
Напомним, что множество A называется замкнутым относи-
тельно n-местной операции Ψ, если Ψ(a1 , a2 , . . . an ) ∈ A∀ai ∈ A, 1 ⩽ i ⩽ n.
Так, например, множество натуральных чисел замкнуто относи-
тельно операции сложения.
Определение: Класс множеств называется булевой алгеброй
множеств, если он замкнут относительно дополнения, объединения
и пересечения.

Теорема 5.2.1. Пусть Σ — произвольный (необязательно конечный)


алфавит. Класс регулярных множеств, содержащихся в Σ∗ , является
булевой алгеброй множеств. ◻

Доказательство. Замкнутость относительно объединения уже до-


казывалась ранее. Замкнутость относительно пересечения следует
из теоретико-множественного закона A ∩ B = Ā ∪ B̄ .
5.2. Замкнутость относительно булевых операций 139

Докажем замкнутость относительно дополнения. Пусть


M = (Q, ∆, δ, q0 , F ) — конечный автомат, у которого ∆ ⊆ Σ, ∆ —
конечный алфавит. Легко показать, что каждое регулярное мно-
жество L ⊆ Σ∗ допускается некоторым таким автоматом. Тогда
конечный автомат M ′ = (Q, ∆, δ, q0 , Q ∖ F ) допускает ∆∗ ∖ L(M ). При
этом автомат M должен быть полностью определён.
Дополнение L(M ) относительно Σ∗ можно представить в виде

L(M ) = L(M ′ ) ∪ Σ∗ (Σ ∖ ∆)Σ∗

Так как множество Σ∗ (Σ ∖ ∆)Σ∗ регулярно, то регулярность множе-


ства L(M ) следует из замкнутости регулярных множеств относи-
тельно объединения.

Из свойства замкнутости регулярных множеств относительно


базисных операций дополнения, объединения и пересечения следу-
ет, в частности, что произвольные конечные комбинации этих опе-
раций также являются регулярными множествами, и через базис-
ные операции можно вывести любые другие операции над регуляр-
ными множествами.
140 Глава 5. Булева алгебра регулярных языков

5.3. Алгоритмические проблемы регулярных


языков

Регулярный язык может быть задан конечным образом с помо-


щью трех типов описаний: праволинейной грамматики, регулярно-
го выражения или конечного автомата. Имея одно описание, можно
перейти к любому другому с помощью известных алгоритмов.
Для конечных описаний регулярных множеств естественным
образом возникают алгоритмические проблемы. Рассмотрим три из
них.

1) Проблема принадлежности: Дано конечное описание языка и це-


почка w. Принадлежит ли цепочка w этому языку?

2) Проблема пустоты: Дано конечное описание языка. Пуст ли этот


язык?

3) Проблема эквивалентности: Даны два конечных описания язы-


ка одного типа. Задают ли эти описания один и тот же язык?

Поскольку для каждого типа описания можно построить эквива-


лентное ему описание другого типа, то достаточно рассмотреть ре-
шение этих проблем только для одного типа описания. Будем рас-
сматривать решения обозначенных алгоритмических проблем для
конечных автоматов.
5.3. Алгоритмические проблемы регулярных языков 141

Проблема принадлежности для конечных автоматов решается с


помощью следующего алгоритма. На вход алгоритм получает конеч-
ный автомат M = (Q, Σ, δ, q0 , F ) и цепочку w ∈ Σ∗ . На выходе алгоритм
возвращает ответ «ДА», если w ∈ L(M ), в противном случае возвра-
щается ответ «НЕТ». Принцип работы алгоритма следующий.
Пусть w = a1 a2 . . . an . Найти последовательно состояния

q1 = δ (q0 , a1 ), q2 = δ (q1 , a2 ), ..., qn = δ (qn−1 , an ).

Если qn ∈ F , вернуть «ДА». В противном случае вернуть «НЕТ». Ины-


ми словами, задача алгоритма — определить достижимость любого
финального состояния из начального по заданной цепочке.
Шаги алгоритма:

1) Представить w = a1 a2 . . . an . Если n = 0, перейти к Шагу 5.

2) Положить i = 0.

3) qi+1 = δ (qi , ai+1 ).

4) Если i ≠ n, i = i + 1 и перейти к Шагу 2.

5) Если qi ∈ F , вернуть «ДА», иначе вернуть «НЕТ».

Проблема пустоты языка конечного автомата M = (Q, Σ, δ, q0 , F )


решается путём определения множества состояний, достижимых из
q0 . Если хотя бы одно финальное состояние принадлежит этому мно-
жеству, то алгоритм возвращает ответ «ДА», иначе — «НЕТ».
Шаги алгоритма:
142 Глава 5. Булева алгебра регулярных языков

1) Положить Q0 = q0 , i = 1.

2) Qi = p ∈ Q ⊢ ∀a ∈ Σδ (q, a) = p , q ∈ Qi−1 ,.

3) Если Qi = Qi−1 , i = i + 1 и перейти на Шаг 2.

4) Если Qi ∩ F ≠ ∅, вернуть «ДА», иначе вернуть «НЕТ».

Проблема эквивалентности для конечных автоматов может быть


решена двумя способами. Первый способ — это проверка симметри-
ческой разности двух исходных языков на непустоту.
Пусть M1 = (Q1 , Σ1 , δ1 , q1 , F1 ) и M2 = (Q2 , Σ2 , δ2 , q2 , F2 ) конеч-
ные автоматы, такие что L1 = L(M1 ) и L2 = L(M2 ). Симметриче-
ская разность двух языков может быть построена через теоретико-
логические операции:

L1 △ L2 = (L1 ∖ L2 ) ∪ (L2 ∖ L1 ) = (L1 ∩ L̄2 ) ∪ (L2 ∩ L̄1 ).

В разделе 4.7 показано, как построить конечные автоматы для ре-


зультатов операций над регулярными языками. Далее с помощью
алгоритма, решающего проблему пустоты языка, можно проверить,
пуста ли полученная симметрическая разность. Если множество
симметрической разности двух языков пусто, значит языки совпа-
дают между собой. Следовательно, можно сделать вывод, что конеч-
ные автоматы, распознающие эти языки, эквивалентны.
Второй способ установления эквивалентности двух конечных
автоматов основан на поиске неразличимых состояний в объеди-
5.4. Упражнения 143

нённом множестве состояний исходных автоматов. Изложим схему


алгоритма установления экваиалентности двух автоматов.
Пусть M1 = (Q1 , Σ1 , δ1 , q1 , F1 ) и M2 = (Q2 , Σ2 , δ2 , q2 , F2 ) конечные ав-
томаты, такие что L1 = L(M1 ) и L2 = L(M2 ). Построим конечный ав-
томат MU = (Q1 ∪Q2 , Σ1 ∪Σ2 , q1 , F1 ∪F2 ). Поскольку автомат MU констру-
ируется только для анализа, выбор начального состояния не имеет
значения. Далее на множестве Q1 ∪ Q2 выделяются классы неразли-
чимости состояний. Если начальные состояния исходных автоматов
находятся в оном классе эквивалентности, то алгоритм возвращает
ответ «ДА», иначе — «НЕТ».

5.4. Упражнения

Свойства регулярных языков

Построить регулярные выражения для множеств L1 ∖ L2 , LR


1,
L1 ∪ L2 , L1 △ L2 , если языки L1 и L2 заданы следующими регулярными
выражениями:

1) L1 = a∗ b(a + b)∗ и L2 = a∗ b(a + b)∗

2) L1 = (00 + 11)∗ 10(1 + 0)∗ и L2 = (00)∗ (11)∗ 0∗ 1∗


144 Глава 5. Булева алгебра регулярных языков

Доказательство нерегулярности языков


Пользуясь свойством замкнутости класса регулярных языков,
выяснить, какие из следующих языков регулярны:

1) {0n 1m ∣ n ≠ m} (подсказка: воспользуйтесь нерегулярностью


{0n 1n });

2) {w ∈ {0, 1}∗ ∣ ∣w∣0 = ∣w∣1 };

3) язык из слов w ∈ {0, . . . , 9}∗ , которые являются десятичной запи-


сью чисел, делящихся на 2 или на 3, без лишних лидирующих
нулей;

4) {0n 1m 2n−m ∣ n ⩾ m};

5) {an bam ban+m ∣ n, m ∈ N}.


ГЛАВА 6

КОНТЕКСТНО-СВОБОДНЫЕ ЯЗЫКИ

6.1. Деревья выводов в КС-грамматиках


В грамматике может быть несколько выводов, эквивалентных в
том смысле, что во всех них применяются одни и те же правила в од-
них и тех же местах, но в различном порядке, в случае КС-грамматик
можно ввести удобное графическое представление класса эквива-
лентных выводов, называемое деревом вывода.
Далее мы будем использовать некоторые стандартные поня-
тия теории графов: (ориентированное!) дерево, поддерево, корень,
доминирование, помеченное дерево, упорядоченное дерево и т. п.
Предполагается, что читателю эти понятия известны.
Сечением дерева D назовем такое множество C вершин дерева
D. что выполняются следующие свойства:

1) никакие две вершины из C не лежат на одном пути из корня в


дереве D;
146 Глава 6. Контекстно-свободные языки

2) ни одну вершину дерева D нельзя добавить к C , не нарушив пер-


вого свойства.

Множество вершин дерева D, состоящее из одного корня, явля-


ется сечением; листья тоже образуют сечение; остальные сечения
можно расположить как бы между этими крайними сечениями.
Помеченное упорядоченное дерево D называется деревом выво-
да в КС-грамматике G(A) = (N, Σ, P, A), если выполнены следующие
условия.

1) Корень дерева D помечен A.

2) Если корень дерева имеет единственного потомка, помеченного


ε, то этот потомок образует дерево, состоящее из единственной
вершины, и A → ε — продукция из множества P .

3) Если D1 , . . . , Dk — поддеревья, над которыми доминируют пря-


мые потомки корня дерева, и корень дерева Di помечен Xi , то
A → X1 . . . Xk — продукция из множества P . Если при этом Xi —
нетерминал, то дерево D должно быть деревом вывода в грам-
матике G(Xi ) = (N, Σ, P, Xi ), а если Xi — терминал, то дерево Di
состоит из единственной вершины, помеченной Xi .

Далее будем рассматривать естественное упорядочение листьев


упорядоченного дерева — «слева направо». Кроной дерева выво-
да назовем слово, которое получится, если выписать слева напра-
во метки листьев. Определим крону ω сечения C дерева D как слово,
6.1. Деревья выводов в КС-грамматиках 147

которое получается конкатенацией (в порядке слева направо) меток


вершин, образующих сечение C .

Лемма 6.1.1. Пусть S = α0 ⇒ α1 ⇒ . . . ⇒ αn — вывод слова αn в


КС-грамматике G = (N, Σ, P, S ). Тогда в G можно построить дерево
вывода D, для которого αn — крона, а α0 , α1 , . . . , αn−1 — набор крон
некоторых сечений. ◻

Доказательство. Построим такую последовательность деревьев


выводов Di , где 0 ⩽ i ⩽ n, что — крона дерева Di .
Пусть D0 — дерево, состоящее из единственной вершины, поме-
ченной начальным нетерминалом S .
Предположим теперь, что дерево Di с нужными свойствами уже
построено, и по нему построим дерево Di+1 . Допустим, что αi = βi Aγi
и после применения продукции A → X1 X2 . . . Xk получается слово
αi+1 = βi X1 X2 . . . Xk γi . Дерево Di+1 построим при помощи Di добавле-
нием к листу, помеченному выделенным вхождением A (он является
(∣βi ∣ + 1)-м символом кроны дерева Di ), k прямых потомков, которые
помечаются X1 , X2 , . . . , Xk . Ясно, что αi+1 — крона дерева Di+1 .
Итак, Dn = D — искомое дерево вывода, a α0 , α1 , . . . , αn−1 — набор
крон сечений этого дерева.

Лемма 6.1.2. Пусть G = (N, Σ, P, S ) — КС-грамматика, a D — дерево


вывода в G с кроной α. Тогда α ∈ L(G). ◻
148 Глава 6. Контекстно-свободные языки

Доказательство. Пусть C0 , C1 , C2 , . . . , Cn — такая последовательность


сечений дерева D, что выполняются следующие условия:

1) C содержит только корень дерева D;

2) Ci+1 для 0 ⩽ i < n получается из Ci заменой одной нетерминаль-


ной вершины ее прямыми потомками;

3) Cn — множество листьев дерева D.

Ясно, что хотя бы одна такая последовательность существует.


Если αi — крона сечения Ci , то S = α0 ⇒ α1 ⇒ . . . ⇒ αn = a — вывод
слова α из S в G. Поэтому α ∈ L(G).

Непосредственным следствием лемм 6.1.1 и 6.1.2 является

Теорема 6.1.1. Пусть G = (N, Σ, P, S ) — КС-грамматика. S ⇒∗ α тогда


и только тогда, когда в G существует дерево вывода с кроной α. ◻

По одному дереву вывода с кроной α можно построить разные


выводы в грамматике, для которых S ⇒∗ α; среди всех таких вы-
водов два вызывают особый интерес. Именно, если в доказатель-
стве леммы 6.1.2 сечение Ci+1 получается из Ci заменой самой левой
нетерминальной вершины в Ci ее прямыми потомками, то соответ-
ствующий вывод S = α0 , α1 , . . . , αn называется левым выводом слова
αn из α0 в грамматике G. Правый вывод определяется аналогично.
Заметим, что и левый и правый выводы определяются по дереву од-
нозначно.
6.1. Деревья выводов в КС-грамматиках 149

Если S = α0 , α1 , . . . , αn = ω — левый вывод терминального слова ω


и αi (0 ⩽ i < n) имеет вид xi Ai βi , где xi ∈ Σ∗ , Ai ∈ N , βi ∈ (N ∪ Σ)∗ , то
каждое следующее слово αi+1 левого вывода получается из предыду-
щего слова αi заменой самого левого нетерминала Ai правой частью
некоторой продукции. В правом выводе заменяется самый правый
нетерминал.

Упражнение 6.1.1. Рассмотрим грамматику G из примера 1.3.3:

G0 = ({E; T ; F }, {a; +; ∗; (; )}, P, E ),

где P состоит из продукций

E → E + T ∣ T, T → T ∗ F ∣ F, F → (E ) ∣ a.

Постройте такое дерево вывода в этой грамматике, кроной которого


является слово a + a. Укажите левый и правый выводы. ◻

Слово α будем называть левовыводимым в грамматике G и пи-


сать S ⇒∗l α, если существует левый вывод S = α0 , α1 , . . . , αn = α. Ана-
логично, слово α будем называть правовыводимым и писать S ⇒∗r α,
если существует правый вывод S = α0 , α1 , . . . , αn = α. Один шаг левого
вывода обозначается через ⇒l , а шаг правого вывода — через ⇒r .
Если дан вывод S ⇒∗ α в КС-грамматике G, то не всегда мож-
но найти единственное дерево вывода с кроной α. Причина этого
заключается в том, что есть КС-грамматики, у которых может быть
несколько различных деревьев выводов с одной и той же кроной.
150 Глава 6. Контекстно-свободные языки

Упражнение 6.1.2. Пусть G = ({S }, {a, b}, {S → aSbS ∣ bSaS ∣ ε}, S ).


Постройте разные деревья выводов в этой грамматике, у которых
кроной является слово abab. ◻

КС-грамматику G называют неоднозначной, если существует хо-


тя бы одно слово ω ∈ L(G), которое является кроной двух или более
различных деревьев выводов в G. В противном случае КС-грамма-
тика G называется однозначной. Неоднозначность КС-грамматики
можно связать с существованием различных левых и (или) правых
выводов.

Упражнение 6.1.3. Рассмотрим КС-грамматику G. Пусть ω ∈ L(G),


докажите, что следующие утверждения эквивалентны:

1) ω — крона двух различных деревьев выводов в G;

2) ω имеет два различных левых вывода в G;

3) ω имеет два различных правых вывода в G. ◻

6.2. Проблема непустоты и устранение


бесполезных символов

Грамматика может, вообще говоря, содержать бесполезные сим-


волы и продукции. Например, в грамматике G = ({S, A}, {a, b}, P, S ),
6.2. Проблема непустоты и устранение бесполезных символов 151

Алгоритм 6.2.1 Проверка на непустоту

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: «ДА», если L(G) ≠ ∅, «НЕТ», если L(G) = ∅.
Метод: Рекурсивное построение расширяющейся последовательности специаль-
ного вида множества N .

Шаг 1. Положить N0 = ∅, i = 1.
Шаг 2. Положить Ni = {A ∣ A → α ∈ P, α ∈ (Ni−1 ∪ Σ)∗ ) ∪ Ni−1 .
Шаг 3. Если Ni ≠ Ni−1 , то положить i = i + 1 и перейти к шагу 2, в противном случае
положить NΣ = Nl .
Шаг 4. Если S ∈ NΣ , выдать на печать «ДА», в противном случае — «НЕТ».

где P = {S → a; A → b}, нетерминал A и терминал b не могут появить-


ся ни в каком выводимом слове. Таким образом, и эти символы, и
продукцию (A → b) можно устранить из грамматики G, не изменив
языка L(G).
Дадим точное определение. Назовем символ X ∈ N ∪ Σ бесполез-
ным в КС-грамматике G = (N, Σ, P, S ), если в ней невозможен вывод
вида S ⇒∗ ωXy ⇒∗ ωxy , где ω, x, y ∈ Σ∗ .
Ясно, что если язык L(G) пуст, то все символы бесполезны. По-
строим алгоритм 6.2.1, выясняющий, может ли нетерминал порож-
дать какие-нибудь терминальные слова. Далее будет доказано, что
этот алгоритм годится для проверки на непустоту произвольных КС-
языков. Таким образом, проблема непустоты для КС-языков разре-
шима.
152 Глава 6. Контекстно-свободные языки

Алгоритм 6.2.2 Построение множества NΩ

Вход: КС-грамматика G = (M, Σ, P, S ), Ω — подмножество множества Σ ∪ {ε}.


Выход: Множество NΩ .
Метод: Рекурсивное построение расширяющейся последовательности подмно-
жеств специального вида множества N .

Шаг 1. Положить N0 = ∅, i = 1.
Шаг 2. Положить Ni = {A ∣ A → α ∈ P, α ∈ (Ni−1 ∪ Ω)∗ } ∪ Ni−1 .
Шаг 3. Если Ni ≠ Ni−1 , то положить i = i + 1 и перейти к шагу 2, в противном случае
положить NΩ = Ni ..

Так как NΣ ⊆ N , то алгоритм 6.2.1 должен остановиться самое


большее после ∣N ∣ + 1 повторений шага 2.
Алгоритм 6.2.1 строит множество «стабилизации» NΣ , соответ-
ствующее алфавиту Σ. Аналог этого множества можно определить и
для произвольного подмножества Ω множества Σ ∪ {ε}:

NΩ = {A ∣ A ∈ N, A ⇒∗G α, α ∈ Ω∗ }.

Множества такого типа встречаются в различных алгоритмах, по-


этому выделим ту часть алгоритма 6.2.1, которая позволяет постро-
ить NΩ (см. алгоритм 6.2.2).
Рассмотрим КС-грамматику G = (N, Σ, P, S ) и займемся теперь
обоснованием алгоритма 6.2.1.

Лемма 6.2.1. Пусть i ∈ {0; 1; 2; . . .}. Если A ∈ Ni , то A ⇒∗G ω для неко-


торого слова ω = Σ∗ . ◻
6.2. Проблема непустоты и устранение бесполезных символов 153

Доказательство. Применим метод математической индукции по i.


Случай i = 0 не нуждается в доказательстве, так как N0 = ∅.
Предположим, что утверждение верно для i = k , и докажем его
для i = k + 1 Рассмотрим A ∈ Nk+1 . Если A принадлежит также и Nk ,то
A ⇒∗G ω для некоторого слова ω ∈ Σ∗ в силу индуктивного пред-
положения. Если же A ∈ Nk+1 − Nk , то существует такая продукция
A → X1 . . . Xm , в которой X ∈ Σ ∪ Nk . Тогда для каждого Xj , можно най-
ти такое слово ωj , что Xj ⇒∗G ωj : если Xj ∈ Σ, то ωj = Xj , в противном
случае существование ωj следует из индуктивного предположения.
Итак, A ⇒ X1 . . . Xm ⇒∗G ω1 X2 . . . Xm ⇒∗G . . . ⇒∗G ω1 . . . ωm . (Подчеркнем,
что случай m = 0 на первом шаге, т. е. продукция A → ε, не составляет
исключения.)
Таким образом, лемма верна для произвольного i.

Лемма 6.2.2. Пусть n ∈ {1; 2; . . .}. Если A ⇒nG ω для некоторого слова
ω ∈ Σ∗ , то существует такое i ∈ {0; 1; 2; . . .}, что A ∈ Ni . ◻

Доказательство. Применим метод математической индукции по n.


В случае n = 1, очевидно, i = 1.
Допустим, что утверждение верно для n = k , и докажем его для
n = k + 1. Пусть A ⇒kg +1 ω . Тогда A ⇒ X1 . . . Xm ⇒kG ω , где слово
n
ω = ω1 . . . ωm таково, что Xj ⇒Gj ω для каждого j и nj ⩽ k (в дереве
вывода A ⇒kG+1 ω слово ωj является кроной поддерева с корнем Xj ). В
силу индуктивного предположения, если Xj ∈ N , то Xj ∈ Nij для неко-
154 Глава 6. Контекстно-свободные языки

торого ij , а если Xj ∈ Σ, то определим ij = 0. Пусть i = 1 + max(i1 , . . . , ik ).


Тогда A ∈ Ni .
Итак, лемма верна для произвольного n.

Теорема 6.2.1. Алгоритм 6.2.1 говорит «Да» тогда и только тогда,


когда S ⇒∗G ω для некоторого слова ω из Σ∗ . ◻

Доказательство. Согласно алгоритму 6.2.1 «Да» выводится тогда и


только тогда, когда S ∈ NΣ . Для завершения доказательства теоремы
теперь достаточно воспользоваться леммами 6.2.1 и 6.2.2 при A = S ,
так как NΣ = ⋃i Ni .

Символ X ∈ N ∪ Σ назовем недостижимым в КС-грамматике


G = (N, Σ, P, S ), если X не появляется ни в одной выводимой цепочке.
Иначе говоря, символ X ∈ N ∪ Σ достижим, если для него существуют
такие слова α, β из (N ∪ Σ)∗ , что S ⇒∗G αXβ . Недостижимые символы
являются примерами бесполезных символов; их можно устранить
из КС-грамматики с помощью алгоритма 6.2.3.
Так как V S ⊆ N ∪ Σ, то алгоритм 6.2.3 должен остановиться самое
большее после ∣N ∣+∣Σ∣+ 1 повторений шага 2. Алгоритмы 6.2.1 и 6.2.3
очень похожи; более того, обосновываются они тоже сходным обра-
зом.

Упражнение 6.2.1. Используя метод математической индукции по


i, докажите, что существует вывод S ⇒iG′ αXβ тогда и только тогда,
когда X ∈ Vi ◻
6.2. Проблема непустоты и устранение бесполезных символов 155

Алгоритм 6.2.3 Устранение недостижимых символов

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: КС-грамматика G′ = (N, Σ, P, S ), у которой L(G′ ) = L(G) и нет недостижи-
мых символов.
Метод: Рекурсивное построение расширяющейся последовательности подмно-
жеств специального вида множества N ∪ Σ.

Шаг 1. Положить V0 = {S }, i = 1.
Шаг 2. Положить Vi = {X ∣ (A → αXβ ) ∈ P , A ∈ Vi−1 } ∪ Vi−1 .
Шаг 3. Если Vi ≠ Vi−1 , то положить i = i + 1 перейти к шагу 2, в противном случае
положить V S = Vi .
Шаг 4. Построить грамматику G′ = (N, Σ, P, S ), где N ′ = V S ∩ N , Σ′ = V S ∩ Σ, а в P ′
включены те и только те продукции из P , которые содержат только символы из
V S.

Упражнение 6.2.2. Докажите, что алгоритм 6.2.3 по КС-


грамматике G = (N, Σ, P, S ) строит такую КС-грамматику
G′ = (N ′ , Σ′ , P ′ , S ), у которой L(G′ ) = L(G) и для всех X ∈ N ′ ∪ Σ′ суще-
ствуют такие слова α, β из (N ′ ∪ Σ′ )∗ , что S ⇒∗G′ αXβ . (Другими сло-
вами, алгоритм 6.2.3 строит новую КС-грамматику G′ = (N ′ , Σ′ , P ′ , S )
без недостижимых символов, для которой L(G′ ) = L(G).) ◻

Дадим пояснения к алгоритму 6.2.4 (с. 156) устранения беспо-


лезных символов. На шаге 1 из G устраняются все нетерминалы,
которые не могут порождать терминальных слов. Затем на шаге 2
устраняются все недостижимые символы. Каждый символ X резуль-
156 Глава 6. Контекстно-свободные языки

Алгоритм 6.2.4 Устранение бесполезных символов

Вход: КС-грамматика G = (N, Σ, P, S ), у которой L(G) ≠ ∅.


Выход: КС-грамматика G′ = (N ′ , Σ′ , P ′ , S ). У которой L(G′ ) = L(G) и в N ′ ∪ Σ′ нет
бесполезных символов.
Метод: Последовательное применение алгоритма 6.2.2 для Ω = Σ и алгорит-
ма 6.2.3.

Шаг 1. К грамматике G = (N, Σ, P, S ) применить алгоритм 6.2.2 и найти множество


NΣ ; построить грамматику G1 = (N ∩ NΣ , Σ, P1 , S ), где в P1 включены те и только те
продукции из P , которые содержат только символы из N ∩ NΣ .
Шаг 2. К грамматике G1 = (N ∩ NΣ , Σ, P1 , S ) применить алгоритм 6.2.3 и построить
грамматику G′ = (N ′ , Σ′ , P ′ , S ).

тирующей грамматики должен появиться хотя бы в одном выводе


вида S ⇒∗ ωXy ⇒∗ ωxy . В примере 6.2.1 показано, что если сначала
применить алгоритм 6.2.3, а потом алгоритм 6.2.2, то в результате
может получиться грамматика, содержащая бесполезные символы.

Теорема 6.2.2. Грамматика G′ , которую строит алгоритм 6.2.4, яв-


ляется не содержащей бесполезных символов КС-грамматикой, и
L(G) = L(G′ ). ◻

Доказательство. При переходе от грамматики G к грамматике G1 ,


исключаются только те нетерминалы и продукции, которые не
участвуют в выводах терминальных слов, поэтому L(G) = L(G1 ).
6.2. Проблема непустоты и устранение бесполезных символов 157

Равенство L(G1 ) = L(G′ ) обсуждалось выше (см. упражнение 6.2.2).


Следовательно, L(G) = L(G′ ).
Покажем теперь, что в G′ нет бесполезных символов. Предпо-
ложим, что A ∈ N ′ — бесполезный символ. Тогда по определению
бесполезности символа могут представиться два случая:

1) Вывод S ⇒∗G′ αAβ ни для каких α и β невозможен. Но в этом слу-


чае символ A должен был быть устраненным на шаге 2 алгорит-
ма 6.2.4, что приводит к противоречию.

2) Вывод S ⇒∗G′ αAβ для некоторых α и β возможен, но вывода


A ⇒∗G′ ω для ω ∈ Σ′∗ не существует. Ясно, что если символ A «про-
скочил» шаг 1, то на шаге 2 в рассматриваемой ситуации его уже
не устранить. Кроме того, если в этом случае A ⇒∗G γBδ , то и сим-
вол B не устраним на шаге 2. Итак, предположим, что символ A
не устранен на первом шаге, т. е. A ⇒∗G ω для ω ∈ Σ∗ . Если воз-
можен вывод A ⇒∗G γBδ ⇒∗G ω то в силу сказанного выше символ
B не устраним на шаге 2, это означает, что A ⇒∗G′ ω . Полученное
противоречие показывает, что в действительности A устраняет-
ся на шаге 1.

Доказательство того, что ни один терминал в G′ не может быть


бесполезным, проводится аналогично.
158 Глава 6. Контекстно-свободные языки

Пример 6.2.1. Рассмотрим грамматику G = ({S; A; B }, {a ∶ b}, P, S ),


где P состоит из продукций

S → a ∣ A; A → AB; B → b.

Применим к G алгоритм 6.2.4. На шаге 1 этого алгоритма полу-


чим: Nε {S; B } и G = ({S; B }, {a; b}, {S → a; B → b}, S ). На втором
шаге, применив алгоритм 6.2.3, получим: V2 = V1 = {S, a}. Итак,
G′ = ({S }, {a}, {S → a}, S ).
Теперь в алгоритме 6.2.4 поменяем местами шаги 1 и 2. После
применения к G алгоритма 6.2.3 грамматика не изменится в силу
того, что все символы достижимы. Последующее применение алго-
ритма 6.2.2 дает Nε = {S; B }. Следовательно, результирующей будет
грамматика G , отличная от G′ . ∎

6.3. Построение приведенной КС-грамматики


В пункте 6.2 было показано, как, не меняя языка, устранить из
КС-грамматики все бесполезные символы. Целью этого пункта яв-
ляется устранение из КС-грамматики «нехороших» продукций.
Назовем КС-грамматику G = (N, Σ, P, S ) неукорачивающейся
грамматикой, если либо P вовсе не содержит ε-продукции типа
A → ε, либо в P есть точно одна ε-продукция S → ε и S , при этом
не встречается в правых частях остальных продукций.
6.3. Построение приведенной КС-грамматики 159

Алгоритм 6.3.1 Преобразование КС-грамматики в неукорачивающуюся форму

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: Неукорачивающаяся КС-грамматика G′ = (N ′ , Σ, P ′ , S ′ ), у которой

L(G′ ) = L(G).

Метод: «Устранение перегородок».

Шаг 1. Применить алгоритм 6.2.2 для Ω = {ε} и построить множество

Nε = {A ∣ A ∈ N, A ⇒∗G ε}.

Шаг 2. Если
(A → α0 B1 α1 B2 α2 . . . Bk αk ) ∈ P,

где k ⩾ 0, Bi ∈ Nε и ни один символ в словах αj не принадлежит Nε , то включить в P ′


все продукции вида A → α0 X1 α1 X2 . . . αk−1 Xk αk , где Xi — либо Bi , либо ε, исключая
продукцию A → ε (это могло бы произойти в случаe, если все αi , равны ε).
Шаг 3. Если S ∈ Nε , то ввести новый нетерминал S ′ и дополнительно включить в
P ′ продукции (S ′ → S ∣ε), в противном случае положить N ′ = N, S ′ = S .
Шаг 4. Положить G′ = (N ′ , Σ, P ′ , S ′ ).

Теорема 6.3.1. Грамматика G′ , которую строит алгоритм 6.3.1 по


КС-грамматике G, является неукорачивающейся КС-грамматикой и
L(G) = L(G′ ). ◻

Доказательство. Тот факт, что грамматика G′ является неукорачи-


вающейся, вытекает из простого анализа алгоритма.
160 Глава 6. Контекстно-свободные языки

Применяя метод математической индукции по длине слова ω ,


можно доказать следующее вспомогательное утверждение: для про-
извольного слова ω из Σ∗ /{ε} и буквы A из N вывод A ⇒∗G′ возможен
тогда и только тогда, когда A ⇒∗G ω . Применим это утверждение для
S = A и ω ∈ Σ∗ /{ε} получим: ω ∈ L(G) тогда и только тогда, когда
ω ∈ L(G′ ). Заметим теперь, что ε ∈ L(G) тогда и только тогда, когда
ε ∈ L(G′ ). Таким образом, L(G) = L(G′ ).

Упражнение 6.3.1. Докажите, что если на вход алгоритма 6.3.1 по-


дается КС-грамматика без бесполезных символов, то и на выходе ал-
горитма получается такая же грамматика. ◻

Пример 6.3.1. Рассмотрим контекстно-свободную грамматику

G = ({S; A; B }, {0; 1}, P, S ),

где P состоит из продукций

S → 0A ∣ 1B ∣ ε, A → AB ∣ 0 ∣ ε, B → 0 ∣ A.

Применим к грамматике G алгоритм 6.3.1 и получим неукорачива-


ющуюся КС-грамматику G′ = ({S ′ ; S; A; B }, {0; 1}, P, S ), где P ′ состоит
из продукций

S ′ → S ∣ ε, S → 0A ∣ 0 ∣ 1B ∣ 1,
A → AB ∣ A ∣ B ∣ 0, B → 0 ∣ A. ∎
6.3. Построение приведенной КС-грамматики 161

Алгоритм 6.3.2 Устранение цепных продукций

Вход: Неукорачивающаяся КС-грамматика G = (N, Σ, P, S ).


Выход: Неукорачивающаяся КС-грамматика G′ = (N ′ , Σ′ , P ′ , S ′ ) без цепных про-
дукций, у которой L(G′ ) = L(G).
Метод: Для каждого A из N строится подмножество N A = {B ∣ A ⇒∗ B )} множества
N , и на основе этого конструируется новая грамматика.

Шаг 1. Для каждого A из N построить N A = {B ∣ A ⇒∗ B } следующим образом.

1) Положить N0 = {A} и i = 1.
2) Положить Ni ∣ = {C ∣ (B → C ) ∈ P и B ∈ Ni−1 } ∪ Ni−1 .
3) Если Ni ≠ Ni−1 , то положить i = i + 1 и повторить шаг 1.2, в противном случае
положить N A = Ni .

Шаг 2. Построить P ′ так: если продукция B → α принадлежит P и не является цеп-


ной, то включить в P ′ продукцию (A → α) для всех таких A, что B ∈ N A .
Шаг 3. Положить G′ = (N, Σ, P ′ , S ).

Другое полезное преобразование грамматик — устранение про-


дукций вида A → B , где A и B — нетерминалы: такие продукции
далее будем называть цепными.

Теорема 6.3.2. Грамматика G′ , которую строит алгоритм 6.3.2 по


неукорачивающейся КС-грамматике G, является неукорачиваю-
щейся КС-грамматикой без цепных продукций и L(G) = L(G′ ). ◻
162 Глава 6. Контекстно-свободные языки

Доказательство. Тот факт, что грамматика G′ является неукорачи-


вающейся и не имеет цепных продукций, вытекает из простого ана-
лиза алгоритма.
Покажем, что L(G′ ) ⊆ L(G). Пусть ω ∈ L(G′ ). Тогда в грамматике
G′ существует вывод S ⇒1 α0 ⇒1 α1 ⇒1 . . . ⇒1 αn = ω . Если при пере-
ходе от некоторого αi к αi+1 применяется продукция A → β из P ′ , то
тогда существует такой символ B ∈ N (не исключено, что B = A), что
A ⇒∗G B ⇒G β . Таким образом, A ⇒∗G β и, следовательно, αi ⇒∗G αi+1 .
Отсюда следует, что S ⇒∗G ω ∈ L(G), так что L(G′ ) ⊆ L(G).
Теперь покажем, что L(G) ⊆ L(G′ ); причем далее мы будем
пользоваться понятиями, которые обсуждались в конце раздела 6.1.
Пусть ω ∈ L(G) и S = α0 ⇒l α1 ⇒l . . . ⇒l αn = ω — левый вывод слова ω
в грамматике G. Рассмотрим подпоследовательность i1 , i2 , . . . , ik по-
следовательности 1, 2, . . . , n, состоящую в точности из тех номеров j ,
для которых на шаге αjj −1 ⇒l αj вывода S = α0 ⇒l α1 ⇒l . . . ⇒l αn = ω
применяется нецепная продукция. В частности, ik = n, так как вывод
терминального слова не может оканчиваться цепной продукцией.
Так как мы рассматриваем левый вывод, то последовательные при-
менения нескольких исключительно цепных продукций заменяют
нетерминальный символ, занимающий одну и ту же позицию в ле-
вовыводимых словах. Используя конструкцию P , отсюда получаем:

S ⇒G′ αi1 ⇒G′ αi2 ⇒G′ . . . ⇒G′ αik = ω.

Таким образом, ω ∈ L(G′ ) и, следовательно, L(G) ⊆ L(G′ ).


6.3. Построение приведенной КС-грамматики 163

В итоге получаем: L(G′ ) = L(G).

С точки зрения анализа бесполезности символов алгоритм 6.3.2


является «плохим».

Пример 6.3.2. Рассмотрим неукорачивающуюся КС-грамматику

G = ({S; A}, {a}, {S → A; A → a}, S ),

у которой нет бесполезных символов. Применяя к ней алго-


ритм 6.3.2, получаем грамматику G = ({S; A}, {a}, {S → a; A → a}, S ) с
бесполезным символом A. ∎

Пример 6.3.3. Рассмотрим неукорачивающуюся КС-грамматику

G′ = ({W ; S; A; B }, {0; 1}, P ′ , W ).

где P ′ состоит из продукций

W → S ∣ ε, S → 0A ∣ 0 ∣ 1B ∣ 1,
A → AB ∣ A ∣ B ∣ 0, B → 0.

Применим к грамматике G алгоритм 6.3.2 и получим неукорачиваю-


щуюся КС-грамматику G′ = ({W ; S; A; B }, {0; 1}, P ′ , W ), где P ′ состоит
из продукций

W → ε ∣ 0A ∣ 0 ∣ 1B ∣ 1, S → 0A ∣ 0 ∣ 1B ∣ 1,
A → AB ∣ 0, B → 0,
164 Глава 6. Контекстно-свободные языки

среди которых нет цепных.


Легко обнаружить, что построенная грамматика G′ име-
ет бесполезные символы. Применим к грамматике G′ алго-
ритм 6.2.4 и получим неукорачивающуюся КС-грамматику
G = ({W ; S; A; B }, {0; 1}, P ′ , W ), где P ′ состоит из продукций

W → ε ∣ 0A ∣ 0 ∣ 1B ∣ 1, A → 0, B → 0.

У нее нет ни цепных продукций, ни бесполезных символов. ∎

Упражнение 6.3.2. Докажите, что если на вход алгоритма 6.2.4 по-


дается неукорачивающаяся КС-грамматика без цепных продукций,
то на выходе алгоритма получится неукорачивающаяся КС-грамма-
тика без бесполезных символов и цепных продукций.
КС-грамматика G = (H, Σ, P, S ) называется грамматикой без
циклов, если в ней нет выводов A ⇒∗ A для A ∈ N . ◻

Упражнение 6.3.3. Докажите, что если неукорачивающаяся


КС-грамматика G = (N, Σ, P, S ) не имеет цепных продукций, то
в ней нет циклов. Существуют ли КСграмматики с циклами, но без
цепных продукций? ◻

КС-грамматика G называется приведенной, если она не имеет


бесполезных символов, циклов и является неукорачивающейся.

Теорема 6.3.3. Грамматика G′ , которую строит алгоритм 6.3.3


(с. 165) по произвольной КС-грамматике G, является приведенной
КС-грамматикой, и L(G) = L(G′ ). ◻
6.4. Упражнения 165

Алгоритм 6.3.3 Преобразование произвольной КС-грамматики в приведенную

Вход: КС-грамматика G.
Выход: Приведенная КС-грамматика G′ , для которой L(G′ ) = L(G).
Метод: Применение алгоритмов 6.2.4, 6.3.1, 6.3.2.

Шаг 1. Применить алгоритм 6.2.4 и по КС-грамматике G построить КС-грамма-


тику без бесполезных символов G1 , для которой L(G1 ) = L(G).
Шаг 2. Применить алгоритм 6.3.1 и по КС-грамматике G1 построить неуко-
рачивающуюся КС-грамматику без бесполезных символов G2 , для которой
L(G2 ) = L(G1 ).
Шаг 3. Применить алгоритм 6.3.2 и по КС-грамматике G2 построить неукорачи-
вающуюся КС-грамматику без цепных продукций G3 , для которой L(G3 ) = L(G2 ).
Шаг 4. Применить алгоритм 6.2.4 и по КС-грамматике G3 построить искомую
КС-грамматику G, для которой L(G3 ) = L(G′ ).

Доказательство. Для доказательства этой теоремы достаточно по-


следовательно воспользоваться теоремой 6.2.2, теоремой 6.3.1,
упражнением 6.3.1, теоремой 6.3.2, теоремой 6.2.2 и упражнени-
ем 6.3.2.

6.4. Упражнения

Построение КС-грамматик

Построить КС-грамматики для следующих языков:


166 Глава 6. Контекстно-свободные языки

- {an bn cm dm ∣ n, m ∈ N};

- {ai bj cj di ∣ i, j ∈ N};

- {an bn cm dm ∣ n, m ∈ N} ∪ {ai bj cj di ∣ i, j ∈ N}.

Неоднозначность в КС-грамматиках

1) Найдите, если это возможно, грамматику без неоднозначности


для каждого языка из предыдущего упражнения.

2) Докажите или опровергните контрпримером, что если L1 и L2


это КС-языки, не обладающие неоднозначностью, то язык L1 ∪ L2
тоже не обладает этим свойством.

Алгоритмы для КС-грамматик

Удалить бесполезные символы в грамматиках с продукциями:

S → AB ∣ CA,
S → 0 ∣ A,
A → a,
(1) A → AB, (2)
B → BC ∣ AB,
B → 1;
C → aB ∣ ε.

Преобразовать следующую грамматику к неукорачивающейся:

S → AB, A → aAA ∣ ε, B → bBB ∣ ε;


6.4. Упражнения 167

Удалить цепные продукции из грамматики с продукциями:

E → T ∣ E + T,
T → F ∣ T ∗ F,
F → I ∣ (E ),
I → a ∣ b ∣ Ia ∣ Ib ∣ I0 ∣ I1.
ГЛАВА 7

НОРМАЛЬНЫЕ ФОРМЫ КС-ГРАММАТИК

В предыдущем параграфе было показано, как, не меняя язы-


ка, устранить из КС-грамматики все бесполезные символы, циклы
и сделать ее неукорачивающейся. В этом параграфе процесс упро-
щения формы записи грамматик для КС-языков будет продолжен.
Мы рассмотрим две нормальные формы КС-грамматик, каждая из
которых используется для решения определенной практической за-
дачи. Эти задачи будут рассмотрены, соответственно, в конце этой
и следующей главы.

7.1. Нормальная форма Хомского


Говорят, что КС-грамматика G = (N, Σ, P, S ) представлена в нор-
мальной форме Хомского, если продукции из P имеют один из следу-
ющих видов:

1) A → BC , где A, B, C ∈ N ,
7.1. Нормальная форма Хомского 169

2) A → a, где A ∈ N , a ∈ Σ,

3) S → ε, если ε ∈ L(G),

причем S не встречается в правых частях продукций.


Для обоснования алгоритма преобразования КС-грамматики к
нормальной форме Хомского (см. алгоритм 7.1.1, с. 170) нам пона-
добится вспомогательное утверждение, которое позволит без изме-
нения языка удалять из грамматики продукции вида A → α. Продук-
ции вида A → α будем называть нетерминальными A-продукциями.

Лемма 7.1.1. Пусть G = (N, Σ, P, S ) — КС-грамматика и P содержит


продукцию A → αBβ , где B ∈ N , α, β ∈ (N ∪ Σ)∗ . Рассмотрим все нетер-
минальные B -продукции этой грамматики

B → γ1 ∣ γ2 ∣ . . . ∣ γk ∣.

Пусть G′ = (N, Σ, P ′ , S ), где

P ′ = (P − {A → αBβ }) ∪ {A → αγ1 β ∣ αγ2 β ∣ . . . ∣ αγk β }.

Тогда L(G) = L(G′ ). ◻

Упражнение 7.1.1. Доказать лемму 7.1.1. ◻

Теорема 7.1.1. Пусть G — произвольная КС-грамматика. Алго-


ритм 7.1.1 строит по G такую КС-грамматику G′ в нормальной форме
Хомского, что L(G) = L(G′ ). ◻
170 Глава 7. Нормальные формы КС-грамматик

Алгоритм 7.1.1 Преобразование КС-грамматики к нормальной форме Хомского

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: КС-грамматика G′ в нормальной форме Хомского, у которой L(G′ ) = L(G).
Метод: Предварительное приведение исходной грамматики и последовательное
конструирование продукций новой грамматики.

Шаг 1. Ввести новый стартовый нетерминал S1 и добавить к P одну продукцию


S1 → S . Применить к модифицированной грамматике алгоритм 6.3.3 и построить
тем самым приведенную КС-грамматику G1 = (N1 , Σ, P1 , S1 ), в продукциях которой
S1 не встречается в правых частях. Перейти на следующий шаг, где начинается
построение искомой грамматики G′ = (N ′ , Σ, P ′ , S1 ).
Шаг 2. Включить в P ′ все продукции из P1 , вида A → a, где A ∈ N1 , a ∈ Σ.
Шаг 3. Включить в P ′ все продукции из P1 вида A → BC , где A, B, C ∈ N1 .
Шаг 4. Включить в P ′ продукцию S1 → ε, если она была в P1 .
Шаг 5. Для каждой продукции из P вида A → X1 . . . Xk включить в P ′ продукции

A → X1′ ⟨X2 . . . Xk ⟩,
⟨X2 . . . Xk > → X2′ ⟨X3 . . . Xk ⟩,
...
⟨Xk−2 Xk−1 Xk > → Xk′ −2 ⟨Xk−1 Xk ⟩,
⟨Xk−1 Xk ⟩ → Xk′ −1 Xk′ ,

где Xi′ = Xi , если Xi ∈ N , и Xi′ — новый нетерминал, если Xi ∈ Σ, а ⟨Xi . . . Xk ⟩ — новый


нетерминал в любом случае.
Шаг 6. Для каждой продукции из P вида A → X1 X2 , где хотя бы один из символов
X1 и X2 принадлежит Σ, включить в P ′ продукцию A → X1′ X2′ , где Xi′ определяется
так же, как на шаге 5.
Шаг 7. Для каждого нетерминала вида a′ , введенного на шагах 5 и 6, включить в
P ′ продукцию a′ → a.
Шаг 8. Положить G′ = (N ′ , Σ, P ′ , S1 ).
7.1. Нормальная форма Хомского 171

Доказательство. Применим к КС-грамматике G алгоритм 7.1.1. В


силу теоремы 6.3.3 на шаге 1 этого алгоритма строится приведен-
ная КС-грамматика G1 = (N1 , Σ, P1 , S1 ), в продукциях которой S1 не
встречается в правых частях и для которой L(G) = L(G1 ). Шаги 2–8
алгоритма 7.1.1 позволяют построить по G1 грамматику G′ , которая,
очевидно, имеет нормальную форму Хомского. Чтобы показать, что
L(G1 ) = L(G′ ), достаточно применить лемму 7.1.1 к каждой продук-
ции грамматики G′ , в правую часть которой входит a′ , а затем при-
менить эту лемму к продукциям с нетерминалами вида ⟨Xi . . . Xj ⟩.

Иногда вместо нормальной формы Хомского рассматривают


другую, слегка измененную, каноническую форму. Будем говорить,
что КС-грамматика G = (N, Σ, P, S ) представлена в модифицирован-
ной нормальной форме Хомского, если продукции из P имеют один
из следующих видов:

1) A → BC , где A, B, C ∈ N ;

2) A → a, где A ∈ N , a ∈ Σ;

3) S → ε, если ε ∈ L(G), причем в этом случае S не встречается в


правых частях продукций.

Чтобы преобразовать произвольную КС-грамматику к модифи-


цированной нормальной форме Хомского достаточно слегка под-
править алгоритм 7.1.1.
172 Глава 7. Нормальные формы КС-грамматик

Алгоритм 7.1.2 Преобразование КС-грамматики к модифицированной нормаль-


ной форме Хомского

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: КС-грамматика G′ в модифицированной нормальной форме Хомского, у
которой L(G′ ) = L(G).
Метод: Модификация одного шага алгоритма 7.1.1.

Шаг 1. Применить к грамматике G = (N, Σ, P, S ) алгоритм 6.3.3 и построить тем


самым приведенную КС-грамматику G1 = (N1 , Σ, P1 , S1 ). Перейти на следующий
шаг, где начинается построение искомой грамматики G′ = (N ′ , Σ, P ′ , S1 ).
Шаги 2–8 повторяют соответствующие шаги алгоритма 7.1.1.

Упражнение 7.1.2. Сформулировать и доказать аналог теоре-


мы 7.1.1 для обоснования алгоритма ??. ◻

Пример 7.1.1. Преобразуем КС-грамматику

G = ({A; B; S }, {a; b; c; d}, P, S )

с продукциями

S → αAB ∣ BA, A → BBB ∣ a, B → AS ∣ b,

к нормальной форме Хомского. Для этого применим к грамматике


G алгоритм 7.1.1. В соответствии с первым шагом алгоритма вве-
дем новый стартовый нетерминал S1 и добавим к P одну продукцию
S1 → S . Применим теперь к полученной грамматике алгоритм 6.3.3
7.1. Нормальная форма Хомского 173

и построим приведенную КС-грамматику

G1 = ({A; B; S; S1 }, {a; b; c; d}, P1 , S1 )

с продукциями

S1 → aAB ∣ BA, S → aAB ∣ BA, A → BBB ∣ a, B → AS ∣ b

(в продукциях стартовый нетерминал S1 в правых частях не встре-


чается). Начнём преобразовывать грамматику G1 к грамматике G′ в
нормальной форме Хомского. Из P1 в P ′ продукции S1 → BA, S → BA,
A → a, B → AS и B → b переносим без изменения. Заменяем продук-
цию S1 → aAB продукциями S → a′ ⟨AB ⟩ и ⟨AB ⟩ → AB , S → aAB —
продукциями S → a′ ⟨AB ⟩ и ⟨AB ⟩ → AB , а A → BBB — продукциями
A → B ⟨BB ⟩ и ⟨BB ⟩ → BB . Наконец, добавляем к P ′ продукцию a′ → a.
В результате получаем грамматику

G′ = ({A; B; S; S1 ; ⟨AB ⟩; ⟨BB ⟩; a′ }, {a, b}, P ′ , S1 ),

с продукциями

S1 → a′ ⟨AB ⟩ ∣ BA, S → a′ ⟨AB ⟩ ∣ BA,


A → B ⟨BB ⟩ ∣ a, B → AS ∣ b,
⟨AB ⟩ → AB, ⟨BB ⟩ → BB,
a′ → a.

Эта грамматика имеет нормальную форму Хомского. По теоре-


ме 7.1.1
L(G) = L(G′ ),
174 Глава 7. Нормальные формы КС-грамматик

и, следовательно, G′ — искомая грамматика. ∎

Упражнение 7.1.3. Преобразовать КС-грамматику из примера 7.1.1


к модифицированной нормальной форме Хомского. ◻

7.2. Проблема принадлежности для


КС-языков
Нормальные формы, как правило, вводятся для удобства фор-
мулировки алгоритмов, решающих конкретные задачи. Нормаль-
ная форма Хомского позволяет, в частности, сформулировать алго-
ритм решения проблемы принадлежности для КС-языков, а имен-
но, по данному слову и данному КС-языку, представленному в ви-
де КС-грамматики, его порождающей, определить, принадлежит ли
это слово языку. Описанию данного алгоритма посвящён настоя-
щий раздел.
Для описания алгоритма 7.2.1 (с. 175) используется одно важное
обозначение. Пусть задана КС-грамматика G = (N, Σ, P, S ) и слово
w ∈ Σ∗ . Для всех 1 ⩽ i ⩽ j ⩽ n определим множество

Nijw = {A ∈ N ∣ A ⇒∗G wi . . . wj }.

То есть Nijw — это множество нетерминалов, которые порождают


подстроку wi . . . wj строки w в грамматике G. Когда слово w фикси-
7.2. Проблема принадлежности для КС-языков 175

Алгоритм 7.2.1 Алгоритм Кока—Янгера—Касами («CYK-алгоритм»)

Вход: КС-грамматика в нормальной форме Хомского G = (N, Σ, P, S ), слово w ∈ Σ∗


длины n.
Выход: истина, если w ∈ L(G), и ложь в противном случае.
Метод: последовательное определение нетерминалов, выводящих всевозможные
подстроки w всё большей длины.

Шаг 1. Для всех k ∈ [1, n]N положить Nkk = {A ∈ N ∣ A → wi ∈ P }. Таким образом


учтены все подстроки w длины единица.
Шаг 2. Если n = 1, завершить алгоритм и вернуть результат проверки S ∈ N11 . Ина-
че положить длину рассматриваемых подстрок s = 2.
Шаг 3. Положить i = 1.
Шаг 4. Положить j = i + s − 1. Положить

Nij = {A ∈ N ∣ A → BC ∈ P ; ∃k ∈ [i, j − 1]N ∶ B ∈ Nik , C ∈ Nk+1j }.

Шаг 5. Увеличить i на единицу. Если i < n − s, перейти к шагу 4.


Шаг 6. Если s = n, завершить алгоритм и вернуть результат проверки S ∈ N1n . Ина-
че увеличить s на единицу и перейти к шагу 3.

ровано и ясно из контекста, будем опускать верхний индекс в обо-


значении Nijw .

Упражнение 7.2.1. Постройте модификацию CYK-алгоритма, ко-


торая позволяет в случае w ∈ L(G) давать на выходе вывод слова w в
грамматике G. ◻
176 Глава 7. Нормальные формы КС-грамматик

Замечание (о структуре CYK-алгоритма). Заметим, что вычисле-


ние множеств Nij в алгоритме 7.2.1 происходит таким образом,
что на более поздних итерациях (для больших значений j − i) ис-
пользуются результаты более ранних. Такой подход к проектирова-
нию алгоритмов, когда решение задачи определяется через реше-
ние нескольких таких же задач, но меньшего размера, называется
динамическим программированием. Отличие от более простого под-
хода разделяй и властвуй, обычно основанного на прямой рекурсии,
состоит в том, что подзадачи могут перекрываться. Более точно,
результат решения одной подзадачи может использоваться много-
кратно. В такой ситуации простая рекурсивная реализация будет за-
ведомо неэффективной. Вместо этого предлагается решать все под-
задачи подряд, начиная с самых маленьких, а их результаты записы-
вать для дальнейшего использования при решении более крупных
подзадач. ◻

Как это часто бывает в динамическом программировании,


CYK-алгоритм удобно проводить с помощью заполнения некоторой
таблицы (см. рисунок 7.1 на с. 177).
Таблица заполняется снизу вверх и слева направо. При этом для
подсчёта очередного множества будут использоваться лишь клетки,
расположенные ниже текущей.
Рассмотрим в качестве примера, какие пары множеств нетер-
миналов Nij потребуется просматривать, чтобы построить N25 . В со-
7.2. Проблема принадлежности для КС-языков 177

N15
N14 N25
N13 N24 N35
N12 N23 N34 N45
N11 N22 N33 N44 N55

Рис. 7.1. Пример таблицы CYK-алгоритма для n = 5

N15
N14 N25
N13 {N24 } (N35 )
N12 [N23 ] N34 [N45 ]
N11 (N22 ) N33 N44 {N55 }

Рис. 7.2. Используемые для расчета N25 множества

ответствии с описанием алгоритма (шаг 4, формула для Nij ) это пары


N24 и N55 , N23 и N45 , N22 и N35 . Они отмечены в таблице на рисунке 7.2
(с. 177) разными типами скобок (фигурными, квадратными и круг-
лыми соответственно), чтобы подчеркнуть геометрическую после-
довательность работы алгоритма. Аналогичная треугольная форма
будет появляться при расчете и всех других множеств, кроме Nii , ко-
торые строятся непосредственно по грамматике.
178 Глава 7. Нормальные формы КС-грамматик

Замечание (о сложности CYK-алгоритма). Отметим, что с точки


зрения теории синтаксического анализа CYK-алгоритм проводит
восходящий (bottom—up) анализ, т. е. восстанавливает дерево выво-
да, начиная с кроны, а не с корня. Нетрудно видеть, что сложность
CYK-алгоритма может быть оценена как O(n3 ⋅∣P ∣), это ограничивает
применение алгоритма на практике. В теории компиляторов и при-
ложениях чаще рассматривается подкласс КС-грамматик, детерми-
нированные КС-грамматики (по-другому, LL(k )- и LR(k )-граммати-
ки), для которых существуют линейные алгоритмы разбора (слож-
ность O(n)). ◻

7.3. Матричный метод перехода к


нормальной форме Грейбах
КС-грамматика G = (N, Σ, P, S ) называется грамматикой в нор-
мальной форме Грейбах, если она является неукорачивающеися и
каждая продукция из P , отличная от S → ε, имеет вид A → aα, где
a ∈ Σ и α ∈ N ∗ . В [1] описан алгоритм пребразования произвольной
КС-грамматики к нормальной форме Грейбах, основанный на пред-
варительном устранении левой рекурсии.
Рассмотрим КС-грамматику G = (N, Σ, P, S ), в которой нет цеп-
ных правил и ε-продукций (даже вида S → ε), и схематично опи-
шем принадлежащий Розенкранцу матричный метод преобразова-
7.3. Матричный метод перехода к нормальной форме Грейбах 179

ния такой грамматики к нормальной форме Грейбах. Этот метод ис-


пользует технику, напоминающую технику работы с регулярными
выражениями из главы 2.
Дадим необходимые определения. Пусть ∆ и Σ — два непересе-
кающихся алфавита; алфавит ∆ будем называть нетерминальным,
а алфавит Σ — терминальным. Системой определяющих уравнений
над конечными алфавитами Σ и ∆ назовем систему уравнений вида

A = α1 + . . . + αk , (7.3.1)

где A ∈ ∆ и αi ∈ (∆ ∪ Σ)∗ ; если k = 0, то уравнение имеет вид A = ∅.


Предполагается, что для каждого A ∈ ∆ в системе есть только од-
но уравнение с левой частью A. Решением системы определяющих
уравнений назовем такое отображение f множества ∆ в P (Σ∗ ), что
если вместо каждого A ∈ ∆ подставить f (A) в уравнения системы,
то эти уравнения превратятся в равенства. Решение f назовем наи-
меньшей неподвижной точкой, если f (A) ⊆ g (A) для любого реше-
ния g и любого A ∈ ∆. Стандартные системы линейных уравнений
с регулярными коэффициентами из главы 2 входят в класс систем
определяющих уравнений.
Выделим в ∆ символ S . Системе определяющих уравнений над
конечными алфавитами ∆ и Σ с выделенным символом S ∈ ∆ мож-
но естественным образом сопоставить КС-грамматику, в которой ∆
— нетерминальный алфавит, Σ — терминальный алфавит, S — на-
180 Глава 7. Нормальные формы КС-грамматик

чальные символ, а продукции определяются по каждому уравне-


нию (7.3.1) исходной системы следующим образом:

A → α1 ∣ α2 ∣ . . . ∣ αk . (7.3.2)

Ясно, что разным системам сопоставляются разные грамматики и


приведенная конструкция осуществляет взаимно однозначное со-
ответствие между множеством всех систем определяющих уравне-
ний над конечными алфавитами и множеством КС-грамматик.
Приведем без доказательства несколько результатов о систе-
мах определяющих уравнений, обобщающих результаты о стан-
дартных системах линейных уравнений с регулярными коэффици-
ентами. Отметим прежде всего, что при сделанных предположени-
ях наименьшая неподвижная точка системы определяющих уравне-
ний над алфавитами ∆ и Σ существует, единственна и имеет вид

f (A) = {ω ∣ A ⇒∗G ω, ω ∈ Σ∗ },

где G — соответствующая системе КС-грамматика.


Мы будем пользоваться далее матричным представлением си-
стем определяющих уравнений. Именно пусть алфавит ∆ состоит из
нетерминалов
A1 , A2 , . . . , An

1) ∆ — вектор-строка [A1 ; A2 ; . . . ; An ];
7.3. Матричный метод перехода к нормальной форме Грейбах 181

2) R — квадратная матрица порядка n, элементами которой служат


регулярные выражения над N ∪ Σ: стоящий в i-й строке и j -м
столбце элемент матрицы R определяется равенством

Rij = α1 + α2 + . . . + αk ,

где Ai α1 , Ai α2 , . . . , Ai αk — все члены уравнения для Aj , первой


буквой которых является Ai ;
3) B — вектор-строка, состоящая из n регулярных выражений над
N ∪ Σ: стоящий на j -м месте элемент Bj определяется как сумма
членов уравнения для Aj , которые начинаются буквой из Σ.

Таким образом, Bj и Rij — такие выражения, что уравнение для


Aj можно записать в виде

Aj = A1 R1j + A2 R2j + . . . + Ai Rij + . . . + An Rnj + Bj .

Сложение и умножение векторов и матриц определим как обыч-


но, при этом в качестве «умножения» элементов матриц будем
рассматривать конкатенацию, а в качестве «сложения» — опера-
цию объединения. Систему определяющих уравнений теперь будем
представлять при помощи матриц:

∆ = ∆R + B. (7.3.3)

Пример 7.3.1. Рассмотрим грамматику G = ({A; B }, {b; a; c; d}, P, A) с


продукциями

A → AaB ∣ BB ∣ b,
182 Глава 7. Нормальные формы КС-грамматик

B → aA ∣ BAa ∣ Bd ∣ c.

Построим систему определяющих уравнений для этой грамматики:






⎪A = AaB + BB + b



⎪ B = aA + BAa + Bd + c.


При помощи матриц эту систему можно переписать так:
⎡ ⎤
⎢aB ∅ ⎥
[A; B ] = [A; B ] ⎢⎢ ⎥ + [b; aA + C ].
⎥ (7.3.4)
⎢ B Aa + d⎥
⎣ ⎦ ∎
Для системы (7.3.3) можно найти такую равносильную ей систе-
му определяющих уравнений, что все правые части продукций из
КС-грамматики, которая соответствует новой системе, начинаются
терминальными буквами.

Теорема 7.3.1. Пусть (7.3.3) — записанная в матричном виде систе-


ма определяющих уравнений над алфавитами ∆ и Σ, Q — квадратная
̃
матрица порядка b = ∣∆∣ с n2 различными новыми элементами qi,j . Q
̃ = ∆∪Q
— множество всех элементов qi,j , ∆ ̃. Тогда система определя-
ющих уравнений





⎪∆ = BQ + B,
⎨ (7.3.5)


⎪ Q = RQ + R


̃ и Σ имеет наименьшую неподвижную точку, ко-
над алфавитами ∆
торая совпадает на ∆ с наименьшей неподвижной точкой систе-
мы (7.3.3). ◻
7.3. Матричный метод перехода к нормальной форме Грейбах 183

Приведем алгоритм преобразования КС-грамматики к нор-


мальной форме Грейбах, основанный на конструкции из этой тео-
ремы.

Алгоритм 7.3.1 Преобразование к нормальной форме Грейбах

Вход: приведенная КС-грамматика G = (N, Σ, P, S ), не содержащая продукции


S → ε.
Выход: КС-грамматика G′ = (N ′ , Σ, P ′ , S ) в нормальной форме Грейбах.

Шаг 1. По грамматике G построить систему определяющих уравнений ∆ = ∆R + B


над алфавитами N и Σ.
Шаг 2. Ввести Q — квадратную матрицу порядка n = ∣N ∣, состоящую из новых
нетерминальных букв qij . Построить по Q и исходной системе (7.3.3) новую систе-
му (7.3.5) и соответствующую новой системе КС-грамматику G1 . (Так как в B каж-
дая компонента, отличная от ∅, начинается терминалом, то для A ∈ N все нетер-
минальные A-продукции грамматики G1 будут начинаться терминалами; нали-
чие в B ненулевых компонент вытекает из приведенности грамматики G.)
Шаг 3. (Так как G — приведенная грамматика, то ε не встречается среди элемен-
тов матрицы R; поэтому для каждого элемента q ∈ Q все нетерминальные q -про-
дукции грамматики G1 начинаются символами из N ∪ Σ.) Для каждого нетерми-
нала A из N в тех правых частях нетерминальных q -продукций грамматики G1 ,
которые начинаются буквой A, заменить этот нетерминал правыми частями всех
A-продукций. В результате получится грамматика, у которой правые части всех
продукций начинаются терминалом.
Шаг 4. Если в правой части продукции терминал a встречается не на первом ме-
сте, заменить его новым нетерминалом a′ и добавить продукцию a′ → a. В итоге
получим искомую КС-грамматику G′ .∎
184 Глава 7. Нормальные формы КС-грамматик

Теорема 7.3.2. Алгоритм 7.3.1 строит грамматику G′ в нормальной


форме Грейбах и L(G) = L(G′ ). ◻

Пример 7.3.2. Рассмотрим КС-грамматику G = ({A; B }, {b; a; c}, P, A)


из примера 7.3.1, где реализован первый шаг алгоритма. На втором
шаге введем нетерминальную матрицу
⎡ ⎤
⎢W X ⎥
⎢ ⎥
⎢ ⎥
⎢Y Z⎥
⎣ ⎦
и построим по этой матрице и системе 7.3.5 новую систему

⎪ ⎡ ⎤

⎪ ⎢W X ⎥

⎪ ⎢ ⎥

⎪ [A, B ] = [b, aA + c] ⎢ ⎥ + [b, aA + c],

⎪ ⎢ ⎥

⎪ ⎢Y Z⎥
⎨⎡ ⎣ ⎦ (7.3.6)

⎪ ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤

⎪ ⎢W X ⎥ ⎢ab ∅ ⎥ ⎢W X ⎥ ⎢aB ∅ ⎥

⎪ ⎢ ⎥ ⎢ ⎥⎢ ⎥ ⎢ ⎥

⎪ ⎢ ⎥=⎢ ⎥⎢ ⎥+⎢ ⎥.

⎪ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥
⎪ ⎢ Y Z ⎥ ⎢ B Aa + d⎥ ⎢ Y Z ⎥ ⎢ B Aa + d ⎥
⎩⎣ ⎦ ⎣ ⎦⎣ ⎦ ⎣ ⎦
Системе 7.3.6 соответствует КС-грамматика с продукциями

A → bW ∣ aAY ∣ cY ∣ b, B → bX ∣ aAZ ∣ cZ ∣ aA ∣ c,
W → aBW ∣ aB, X → aBX,
Y → BW ∣ AaY ∣ dY ∣ B, Z → BX ∣ AaZ ∣ dZ ∣ Aa ∣ d.

Заметим, что X — бесполезный символ. Следовательно, полученные


продукции можно упростить:

A → bW ∣ aAY ∣ cY ∣ b, B → aAZ ∣ cZ ∣ aA ∣ c,
7.3. Матричный метод перехода к нормальной форме Грейбах 185

W → aBW ∣ aB, Y → BW ∣AaY ∣ dY ∣ B,


Z → AaZ ∣ dZ ∣ Aa ∣ d.

Итак, в результате второго шага алгоритма построена грамматика

G1 = ({A; B; W ; Y ; Z }, {a; b; c; d}, P1 , A),

где P1 — описанное выше множество.


На третьем шаге алгоритма в пяти «нехороших» продукциях

Y → BW ∣ AaY ∣ B,
Z → AaZ ∣ Aa

нетерминалы A и B надо заменить правыми частями соответствую-


щих нетерминальных A- и B -продукций. Например, из продукции
Y → BW получаем:

Y → aAZW ∣ cZW ∣ aAW ∣ cW,

а из продукции Z → AaZ :

Z → bW aZ ∣ aAY aZ ∣ cY aZ ∣ baZ.

В результате третьего шага алгоритма вместо пяти «нехороших»


продукций мы построили двадцать новых:

Y → aAZW ∣ cZW ∣ aAW ∣ cW ∣ bW aY ∣ aAY aY ∣ cY aY ∣ baY ∣ cAZ ∣ cZ ∣ aA ∣ c,


Z → bW aZ ∣ aAY aZ ∣ cY aZ ∣ baZ ∣ bW a ∣ aAY a ∣ cY a ∣ ba.
186 Глава 7. Нормальные формы КС-грамматик

Теперь правые части всех продукций начинаются терминалами.


На четвертом шаге алгоритма в тех продукциях, у которых
в правой части терминал x встречается не на первом месте, на-
до заменить его новым нетерминалом x′ : после этого надо доба-
вить новую продукцию x′ → x. В итоге получаем КС-грамматику
G′ = ({A; B; W ; Y ; Z; a′ }, {a; b; c; d}, P ′ , A) с множеством продукций P ′ :

A → bW ∣ aAY ∣ cY ∣ b,
B → aAZ ∣ cZ ∣ aA ∣ c,
W → aBW ∣ aB,
Y → aAZW ∣ cZW ∣ aAW ∣ cW ∣ bW a′ Y ∣ cY a′ Y ∣ ba′ Y ∣ aAZ ∣ cZ ∣ aA ∣ c ∣ dY,
Z → bW a′ Z ∣ aAY a′ Z ∣ cY a′ Z ∣ ba′ Z ∣ bW a′ ∣ aAY a′ ∣ cY a′ ∣ ba′ ∣ dZ ∣ d,
a′ → a.

Эта грамматика имеет нормальную форму Грейбах. С другой сторо-


ны, по теореме 7.3.2 L(G) = L(G′ ). ∎

7.4. Упражнения

Получение нормальных форм

Привести к нормальной форме Хомского, а также, к нормальной


форме Грейбах, грамматики с продукциями:
7.4. Упражнения 187

S → 0A0 ∣ 1B1 ∣ BB,


S → ASB ∣ ε,
A → C,
1) A → aAS ∣ a, 2)
B → S ∣ A,
B → SbS ∣ A ∣ bb;
C → S ∣ ε;
S → aAa ∣ bBb ∣ ε,
S → AAA ∣ B, A → C ∣ a,
3) A → aA ∣ B, 4) B → C ∣ b,
B → ε; C → CDE ∣ ε,
D → A ∣ B ∣ ab.

CYK-алгоритм
Используя CYK-алгоритм,

1) для грамматики G с продукциями:

S → AB, A → BB ∣ a, B → AB ∣ b

определить, принадлежат ли L(G) строки: (а) aabbb, (б) babab, (в)


b7 ;

2) для грамматики G с продукциями:

S → AB ∣ BC, A → BA ∣ a, B → CC ∣ b, C → AB ∣ a

определить, принадлежат ли L(G) строки: (а) ababa, (б) baaab, (в)


aabab.
ГЛАВА 8

АВТОМАТЫ С МАГАЗИННОЙ ПАМЯТЬЮ

8.1. Определения и примеры


Перед тем, как изучать этот параграф, было бы хорошо еще раз
просмотреть содержание пункта 3.1.
Автомат с магазинной памятью — это односторонний недетер-
минированный распознаватель (см. 1.5), в потенциально бесконеч-
ной памяти которого элементы информации хранятся и использу-
ются так же, как патроны в магазине автоматического оружия, т. е. в
каждый момент доступен только верхний элемент магазина. Можно
представлять себе магазин в виде слова, причем верхним символом
магазина будем считать самую левую букву.
Автомат с магазинной памятью (сокращенно МП-автомат) —
это семерка
P = (Q, Σ, Γ, δ, q0 , Z0 , F ),

где
8.1. Определения и примеры 189

1) Q — конечное множество состояний;

2) Σ — конечный входной алфавит;

3) Γ — конечный алфавит магазинных символов;

4) функция переходов δ — отображение множества Q×(Σ∪{ε})×Γ во


множество P (Q × Γ∗ ) конечных подмножеств множества Q × Γ∗ ;

5) q0 (∈ Q) — начальное состояние;

6) Z0 (∈ Γ) — начальный символ магазина;

7) F (⊆ Q) — множество заключительных (финальных) состояний.

Конфигурацией МП-автомата P называется тройка (q, ω, α) из


Q × Σ∗ × Γ∗ , где q — текущее состояние управляющего устройства; ω —
непрочтенная часть входного слова (первая буква слова ω находит-
ся под входной головкой; при этом, если ω = ε, то считается, что все
входное слово прочитано); α — содержимое магазина (самый левый
символ слова α отождествляется с верхним символом магазина; при
этом, если a = ε, то магазин считается пустым).
Такт работы МП-автомата P будем представлять бинар-
ным отношением ⊢p (или, короче, ⊢), определенным на кон-
фигурациях. Именно, если (q, γ ) ∈ δ (q, a, Σ), то будем писать
(q, aω, Zα)} ⊢ (q ′ , ω, γα), где q, q ′ ∈ Q, a ∈ Σ ∪ {ε}, ω ∈ Σ∗ , Z ∈ Γ и
α, γ ∈ Γ∗ . Если a ≠ ε, то формула (q, aω, Zα) ⊢ (q ′ , ω, γα) говорит о
том, что МП-автомат P сначала находился в состоянии q , имел a в
качестве текущей входной буквы и Z в качестве верхнего символа
190 Глава 8. Автоматы с магазинной памятью

магазина; после чего он перешел в новое состояние q , сдвинул


входную головку на одну ячейку вправо и заменил верхний символ
магазина словом γ , составленным из магазинных букв. Если же
a = ε (такой такт называется ε-тактом), то текущая входная буква не
принимается во внимание и входная головка не двигается, однако
состояние управляющего устройства и содержимое памяти могут
измениться.
Подчеркнем, что ε-такт может происходить и тогда, когда все
входное слово прочитано; при пустом же магазине следующий такт
невозможен.
Обычным образом вводятся обозначения ⊢iP для i ⩾ 0, ⊢∗P и ⊢+P
(далее значок P мы часто будем в этих обозначениях пропускать).
Начальной конфигурацией МП-автомата P называется конфи-
гурация вида {q0 , ω, Σ0 }; в этом случае управляющее устройство на-
ходится в начальном состоянии, входная лента содержит некоторое
слово из Σ∗ , а в магазине есть только начальный символ Z0 .
Заключительная конфигурация — это конфигурация вида
(q, ε, α), где
q∈F и α ∈ Γ∗ .

Говорят, что слово ω допускается МП-автоматом P, если


(q0 , ω, Z0 ) ⊢∗ (q, ε, α) для некоторых q ∈ F и α ∈ Γ∗ . Языком, определя-
емым (или допускаемым) автоматом P , называют множество всех
слов, допускаемых автоматом P ; этот язык обозначается L(P ).
8.1. Определения и примеры 191

Как и в случае обычных автоматов, недетерминированность


удобно интепретировать как наличие нескольких параллельно ра-
ботающих экземпляров исходного МП-автомата.

Пример 8.1.1. Для того, чтобы задать язык

L = {0n 1n ∣ n ⩾ 0},

рассмотрим МП-автомат

P = ({q0 ; q1 ; q2 }, {0; 1}, {Z; 0}, δ, q0 , Z, {q0 }),

где

δ (q0 , 0, Z ) = {(q1 , 0Z )}, δ (q1 , 0, 0) = {(q1 , 00)}, δ (q1 , 1, 0) = {(q2 , ε)},

а для остальных элементов из Q × (Σ ∪ {ε}) × Γ функция переходов не


определена.
Работа автомата P состоит в том, что он копирует в магазин со-
стоящий из нулей префикс входного слова, а затем устраняет из ма-
газина по одному нулю на каждую единицу, которую он обнаружи-
вает на входе.
Например, для входного слова 0011 автомат P проделает такую
последовательность тактов:

(q0 , 0011, Z ) ⊢ (g1 , 011, 0Z ) ⊢ (q1 , 11, 00Z ) ⊢ (q2 , 1, 0Z ) ⊢ (q2 , ε, Z ) ⊢ (q0 , ε, ε).

Докажем, что L ⊆ L(P ). Прежде всего заметим, что осуществимы


следующие пять последовательностей тактов:

(q0 , 0, Z ) ⊢ (q1 , ε, 0Z ),
192 Глава 8. Автоматы с магазинной памятью

(q1 , 0i , 0Z ) ⊢i (q1 , ε, 0i+1 Z ),


(q1 , 1, 0i+1 Z ) ⊢ (q2 , ε, 0i Z ),
(q2 , 1i , 0i Z ) ⊢i (q2 , ε, Z ),
(q2 , ε, Z ) ⊢ (q0 , ε, ε).

Отсюда вытекает, что

(q0 , ε, Z ) ⊢0 (q0 , ε, Z )

и для n ⩾ 1 возможна последовательность

(q0 , 0n 1n , Z ) ⊢2n+1 (q0 , ε, ε).

Таким образом, L ⊆ L(P ).


Докажем, что L ⊇ L(P ). Анализ функции переходов показывает,
что если P допускает непустое слово, то он обязан последовательно
пройти через состояния q0 , q1 , q2 , q0 . Если для i ⩾ 1

(q0 , ω, Z ) ⊢i (q1 , ε, α),

то ω = 0i , α = 0i Z . Аналогично, если для i ⩾ 1

(q2 , ω, α) ⊢i (q2 , ε, β ),

то ω = 1i , α = 0i β . Такт

(q1 , ω, α) ⊢ (q2 , ε, β )
8.1. Определения и примеры 193

возможен тогда и только тогда, когда ω = 1, α = 0β , а последователь-


ность тактов
(q2 , ω, Z ) ⊢∗ (q0 , ε, ε)

возможна только и только тогда, когда ω = ε. Таким образом, если

(q0 , ω, Z ) ⊢i (q0 , ε, α)

для некоторого i ⩾ 0, то либо ω = ω и i = 0, либо ω = 0n 1n , i = 2n + 1 и


α = ε. Следовательно, L ⊇ L(P ). ∎

Пример 8.1.2. Построим МП-автомат, допускающий язык

L = {ωω R ∣ ω ∈ {a, b}+ }.

Пусть P = ({q0 ; q1 ; q2 }, {a; b}, {Z; a; b}, δ, q0 , Z, {q2 }, где

1) δ (q0 , a, Z ) = {(q0 , aZ )},

2) δ (q0 , b, Z ) = {(q0 , bZ )},

3) δ (g0 , a, a) = {(g, aa), (q1 , ε)},

4) δ (q0 , a, b) = {(q0 , a, b)},

5) δ (q0 , b, a) = {(q0 , ba)},

6) δ (q0 , b, b) = {(g0 , bb), (q1 , ε)},

7) δ (q1 , a, a) = {(q1ε )},

8) δ (q1 , b, b) = {(q1 , ε)},


194 Глава 8. Автоматы с магазинной памятью

9) δ (q1 , ε, Z ) = {(q2 , ε)},

а для остальных элементов из Q × (Σ ∪ {ε}) × Γ функция пареходов не


определена.

Опишем работу МП-автомата P . Сначала P копирует в магазине


какую-то часть входного слова по правилам (1), (2), (4), (5) и пер-
вым альтернативам правил (3) и (6). Однако в том случае, когда те-
кущая входная буква совпадет с верхним символом магазина, авто-
мат может перейти (если пожелает!) в состояние q1 и начать сравни-
вать слово в магазине с оставшейся частью входного слова. Эта воз-
можность гарантируется вторыми альтернативами правил (3) и (6),
а по правилам (7) и (8) происходит сравнение символов. Если в хо-
да сравнения обнаруживается несовпадение очередных букв, то со-
ответствующий экземпляр МП-автомата «умирает». Однако в силу
недетерминированности разные экземпляры P могут проделывать
все возможные для него такты, и если реализация какой-нибудь по-
следовательности тактов приводит к тому, что Z снова оказывается
верхним (и единственным!) символом магазина, то по правилу (8)
P стирает Z и попадает в состояние q2 . МП-автомат P должен допу-
стить слово тогда и только тогда, когда все сравнения обнаружили
совпадение букв.

Рассмотрим работу МП-автомата P в случав, когда aabbaa —


входное слово. Ясно, что среда прочих возможны «смертельные» по-
8.1. Определения и примеры 195

следовательности тактов, например:

(q0 , aabbaa, Z ) ⊢ (q0 , abbaa, aZ ) ⊢ (q1 , bbaa, Z )

или

(q0 , aabbaa, Z ) ⊢ (q0 , abbaa, aZ ) ⊢ (q0 , bbaa, aaZ ) ⊢ (q0 , baa, baaZ ) ⊢
(q0 , aa, bbaaZ ) ⊢ (q0 , a, abbaaZ ) ⊢ (q0 , ε, aabbaaZ ).

С другой стороны, возможна последовательность, оканчивающаяся


заключительной конфигурацией:

(q0 , abba, Z ) ⊢ (q0 , bba, aZ ) ⊢ (q0 , ba, baZ ) ⊢ (q1 , a, aZ ) ⊢ (q1 , ε, Z ) ⊢ (q2 , ε, ε).

Это означает, что МП-автомат P допускает входное слово aabbaa.


Докажем, что L ⊆ L(P ). Пусть ω = c1 c2 . . . cn−1 cn cn−1 . . . c1 , где
Ci ∈ {a, b} для 1 ⩽ i ⩽ n. Возможна следующая последовательность
тактов:

(q0 , ω, Z ) ⊢n (q0 , cn , cn−1 . . . c1 , cn cn−1 . . . c1 Z ) ⊢


(q1 , cn−1 . . . c1 , cn−1 . . . c1 , cn−1 . . . c1 Z ) ⊢n−1 (q1 , ε, Z ) ⊢ q2 , ε, ε.

Таким образом, L ⊆ L(P ).


Доказательство вложения L ⊇ L(P ) не приводим. ∎

Упражнение 8.1.1. Завершить доказательство равенства L = L(P )


в примере 7.1.2, то есть доказать, что если (q0 , ω, Z ) ⊢∗ (q2 , ε, α), где
α ∈ Γ∗ , то ω = xxR для некоторого x ∈ (a + b)+ и α = ε. ◻
196 Глава 8. Автоматы с магазинной памятью

Упражнение 8.1.2. Для произвольного МП-автомата

P = (Q, Σ, Γ, δ, q0 , Z0 , F )

доказать, что если (q, ω, A) ⊢n (q ′ , ε, ε), то (q, ω, Aα) ⊢n (q ′ , ε, α) для всех


A ∈ Γ и α ∈ Γ∗ . Этот факт можно было бы сформулировать так: «То,
что происходит с верхним символом магазина, не зависит от того,
что находится в магазине под ним». ◻

8.2. Расширенный МП-автомат

Напомним, что МП-автомат мог на каждом такте заменять лишь


один верхний символ магазина. Теперь определение МП-автомата
будет слегка изменено, именно, автомату будет позволено заменять
за один такт какой-нибудь магазинный префикс.
Расширенным МП-автоматом (РМП-автоматом) назовем се-
мерку

P = (Q, Σ, Γ, δ, q0 , Z0 , F ),

где δ — отображение конечного подмножества множества


Q × (Σ ∪ {ε}) × Γ∗ во множество конечных подмножеств множе-
ства Q × Γ∗ , а все другие символы имеют такой же смысл, как и
в 8.1.
8.2. Расширенный МП-автомат 197

Ясно, что каждый обычный МП-автомат является РМП-автома-


том. Конфигурация определяется как и прежде. Мы будем писать

(q, aω, αγ ) ⊢ (q ′ , ω, βγ ),

если (q ′ , β ) ∈ δ (q, a, α), где q ∈ Q, a ∈ Σ ∪ {ε}, α, β, γ ∈ Γ∗ . Языком L(P ),


определяемым РМП-автоматом P , называется множество всех та-
ких слов ω , что (q0 , ω, Z0 ) ⊢∗ (q, ε, α) для некоторых q ∈ Q и α ∈ Γ∗ .
Отметим, что в отличие от МП-автомата РМП-автомат обладает
способностью продолжать работу и тогда, когда магазин пуст.

Пример 8.2.1. Построим РМП-автомат P , распознающий язык


L = {ωω R ∣ ω ∈ {a, b}∗ }. Пусть P = ({q; p}, {a; b}, {a; b; S; Z }, δ, q, Z, {p}),
где

1) δ (q, a, ε) = {(q, a)}, 4) (q, ε, aSa) = {(q, S )},

2) δ (q, b, ε) = {(q, b)}, 5) (q, ε, bSb) = {(q, S )},

3) δ (q, ε, ε) = {(q, S )}, 6) (q, ε, SZ ) = {(p, ε)}.

Для остальных элементов из Q × (Σ ∪ {ε}) × Γ∗ функция переходов не


определена.
Сначала автомат P записывает в магазине некоторый префикс
входного слова (правила (1),(2)). Далее автомат может предполо-
жить, что середина слова достигнута, и записать верхним симво-
лом магазина маркер S (правило (3)). Можно проверить, что если
автомат неправильно угадает середину слова, то рано или поздно
198 Глава 8. Автоматы с магазинной памятью

он обязательно «умрет», но если же автомат в нужном слове угадает


середину правильно, то он имеет возможность выжить и достигнуть
заключительного состояния. После угадывания середины слова ав-
томат P помещает в магазин очередную входную букву и заменяет
в магазине aSa или bSb на S (правила (1),(4) или (2),(5)). Автомат P
работает до тех пор, пока не исчерпается все входное слово. Если по-
сле этого в магазине останется слово SZ , то P сотрет его и тем самым
будет получена заключительная конфигурация.
Рассмотрим работу РМП-автомата P в случае, когда aabbaa —
входное слово. Разумеется, как это обычно бывает, среди прочих
возможны «смертельные» последовательности тактов, например:

(q, aabbaa, Z ) ⊢ (q, abbaa, aZ ) ⊢ (q, abbaa, SaZ ) ⊢ (q, bbaa, aSaZ ) ⊢
(q, bbaa, SZ ) ⊢ (q, baa, bSZ ) ⊢ (q, baa, SbSZ ) ⊢ (q, aa, bSbSZ ) ⊢
(q, aa, SSZ ) ⊢ (q, a, aSSZ ) ⊢ (q, a, SaSSZ ) ⊢ (q, a, SSZ ) ⊢ (q, ε, aSSZ )

или

(q, aabbaa, Z ) ⊢ (q, abbaa, aZ ) ⊢ (q, bbaa, aaZ ) ⊢ (q, bbaa, SaaZ ) ⊢
(q, aa, bbSaaZ ) ⊢ (q, a, abbSaaZ ) ⊢ (q, ε, aabbSaaZ ).

С другой стороны, возможна последовательность, оканчивающаяся


заключительной конфигурацией:

(q, aabbaa, Z ) ⊢ (q, abbaa, aZ ) ⊢ (q, bbaa, aaZ ) ⊢ (q, baa, baaZ )
8.2. Расширенный МП-автомат 199

⊢ (q, baa, SbaaZ ) ⊢ (q, aa, bSbaaZ ) ⊢ (q, aa, SaaZ ) ⊢ (q, a, aSaaZ )
⊢ (q, a, SaZ ) ⊢ (q, ε, aSaZ ) ⊢ (q, ε, SZ ) ⊢ (q, ε, ε).

Это означает, что РМП-автомат P допускает входное слово aabbaa. ∎

Упражнение 8.2.1. Доказать, что построенный в приме-


ре 8.2.1 РМП-автомат P, действительно распознает язык
L = {ωω R ∣ ω ∈ {a, b}∗ }. ◻

Теорема 8.2.1. Класс языков, определяемых МП-автоматами, сов-


падает с классом языков, определяемых РМП-автоматами. ◻

Доказательство. Пусть P = (Q, Σ, Γ, δ, q0 , Z0 , F ) — произвольный


РМП-автомат. Для доказательства теоремы достаточно построить
такой МП-автомат P1 , что L(P1 ) = L(P ). Ниже будет предъявлена
конструкция автомата и приведена схема доказательства равенства.
Введем обозначение:

m = max {∣α∣ ∶ δ (q, a, α) ≠ ∅, α ∈ Γ∗ , q ∈ Q, a ∈ Σ ∪ {ε}} .

Построим МП-автомат P1 , который будет моделировать автомат P ,


храня верхние m символов его магазина в «буфере» длины m, зани-
мающим часть памяти управляющего устройства автомата P1 . При
этом автомат P1 сможет сообщить в начале каждого такта, каковы
m верхних символов магазина автомата P . Если в некотором так-
те P заменяет слово из k верхних символов магазина словом из l
200 Глава 8. Автоматы с магазинной памятью

символов, то P1 заменит k первых символов в буфере этим словом


длины l. Если l < k , то P1 сделает k − i вспомогательных ε-тактов, в
течение которых k − i символов перейдут из верхней части магази-
на в буфер управляющего устройства; после этого буфер окажется
заполненным, и P1 будет готов моделировать очередной такт авто-
мата P . Если i > k , то символы передаются из буфера в магазин. В
качестве состояний МП-автомата P1 будут рассматриваться упоря-
доченные пары [q, α], где q — состояние из множества Q, α(∈ Γ∗1 ) —
буфер, 0 ⩽ ∣α∣ ⩽ m.
Итак, рассмотрим МП-автомат P1 = (Q1 , Σ, Γ1 , δ1 , q1 , Z1 , F1 ), где

Γ1 = Γ ∪ {Z1 },

Q1 = {[q, α] ∣ q ∈ Q, α ∈ Γ∗1 , 0 ⩽ α ⩽ m},

q1 = [q0 , Z0 Z1m−1 ],

F1 = {[q, α] ∣ q ∈ F, α ∈ Γ∗1 },

а функция переходов δ1 определяется по правилам:

1) если (r, Y1 . . . Yl ) ∈ δ (q, a, X1 . . . Xk ), то для всех Z ∈ Γ1 и всех таких


α ∈ Γ∗1 , у которых ∣α∣ = m − k положим

1.1) при l ⩾ k для всех β ∈ Γ∗1 , у которых βγ = Y1 . . . Yl α и ∣β ∣ = m:

([r, β ], γZ ) ∈ δ1 ([q, X1 . . . Xk α], a, Z ),


8.2. Расширенный МП-автомат 201

1.2) при l < k :

([r, Y1 . . . Yl αZ ], ε) ∈ δ1 ([q, X1 . . . Xk α], a, Z );

2) δ1 ([q, α], ε, Z ) = {([q, αZ ], ε)} для всех q ∈ Q, Σ ∈ Γ1 и всех таких


α ∈ Γ∗1 , у которых ∣α∣ < m.

По этим правилам осуществляется заполнение буфера управляюще-


го устройства, который содержит m символов. Отметим, что в на-
чальный момент буфер содержит символ Z0 наверху и (m − 1) симво-
лов Z1 ниже. Символ Z1 используется как специальный маркер, от-
мечающий «дно» магазина.
Анализ конструкции автомата P1 позволяет показать, что такт

(q, aω, X1 . . . Xk Xk+1 . . . Xn ) ⊢P (r, ω, Y1 . . . Yl Xk+1 . . . Xn )

происходит тогда и только тогда, когда

([q, α], aω, β ) ⊢+P1 ([r, α′ ], ω, β ′ ),

где

αβ = X1 . . . Xn Z1m , α′ β ′ = Y1 . . . Yl Xk+1 . . . Xn Z1m , ∣α∣ = ∣α′ ∣ = m,

и между двумя конфигурациями ([q, α], aω, β ) и ([r, α′ ], ω, β ′ ) МП-ав-


томата P1 нет ни одной, в которой состояние имело бы вторую ком-
поненту (буфер) длины m.
202 Глава 8. Автоматы с магазинной памятью

Таким образом, для некоторых q ∈ F и α ∈ Γ∗ такт

(q0 , ω, Σ0 ) ⊢∗P (q, ε, α)

происходит тогда и только тогда, когда

([q0 , Z0 Z1m−1 ], ω, Z1 ) ⊢∗P1 ([q, β ], ε, γ ),

1 . Отсюда вытекает, что L(P1 ) = L(P ).


где ∣β ∣ = m и βγ = αΣm

Теорема 8.2.1 предоставляет и обосновывает все необходимые


конструкции для перехода от РМП к МП-автомату. На основе этой
теоремы сформулируем алгоритм 8.2.1 (с. 203).

8.3. Автомат, допускающий слово


опустошением магазина
Напомним, что согласно данным ранее определениям, слово ω
из Σ∗ допускается РМП-автоматом P = (G, Σ, Γ, δ, q0 , Z0 , F ) тогда и
только тогда, когда
(q0 , ω, Z0 ) ⊢∗ (q, ε, α)

для некоторых q ∈ F и α ∈ Γ∗ , а языком L(P ), определяемым автома-


том P , называют множество всех слов, допускаемых автоматом P .
Теперь изменим условие допускаемости слова.
8.3. Автомат, допускающий слово опустошением магазина 203

Алгоритм 8.2.1 Построение МП-автомата по РМП-автомату

Вход: РМП-автомат P = (Q, Σ, Γ, q0 , Z0 , F ).


Выход: МП-автомат P ′ = (Q1 , Σ, Γ1 , q1 , Z1 , F1 ), такой что L(P ′ ) = L(P ).
Метод: конструирование элементов автомата P ′ по правилам теоремы 8.2.1.

Шаг 1. Положить m = max{∣α∣ ∣ α ∈ Γ∗ , δ (q, a, α) ≠ ∅, q ∈ Q, a ∈ Σ ∪ {ε}}.


Шаг 2. Положить Γ1 = Γ ∪ {Z1 }.
Шаг 3. Положить Q1 = {[q, α] ∣ q ∈ Q ∪ {qnew }, α ∈ Γ∗1 , 0 ⩽ ∣α∣ ⩽ m}.
Шаг 4. Определить δ1 следующим образом:

1) если δ (q, a, X1 . . . Xk ) ∋ (r, Y1 . . . Yl ) и l ⩾ k , то для всех Z ∈ Γ1 и α ∈ Γ∗1 , ∣α∣ = m − k ,

δ1 ([q, X1 . . . Xk α], a, Z ) ∋ ([r, β ], γZ ),

где βγ = Y1 . . . Yl α и ∣β ∣ = m;
2) если δ (q, a, X1 . . . Xk ) ∋ (r, Y1 . . . Yl ) и l ⩽ k , то для всех Z ∈ Γ1 и α ∈ Γ∗1 , ∣α∣ = m − k ,

δ1 ([q, X1 . . . Xk α], a, Z ) ∋ ([r, Y1 . . . αZ ], ε);

3) для всех q ∈ Q, Z ∈ Γ1 и α ∈ Γ∗1 , ∣α∣ ⩽ m,

δ1 (q1 , ε, Z1 ) = {([q, αZ ], ε)};

4) δ1 (q1 , ε, Z1 ) = {([q0 , Z0 Z1m−1 ], Z1 Z1 )}.

Шаг 5. Положить q1 = [qnew , Z1m ].


Шаг 6. Положить F1 = {[q, α] ∣ q ∈ F, α ∈ Γ∗1 }.
Шаг 7. Вернуть МП-автомат P ′ = (Q1 , Σ, Γ1 , δ1 , q1 , Z1 , F1 ) в качестве результата.
204 Глава 8. Автоматы с магазинной памятью

Пусть P = (Q, Σ, Γ, δ, q0 , Z0 , P ) — РМП-автомат. Будем говорить,


что автомат P допускает слово ω ∈ Σ∗ опустошением магазина, ес-
ли (q0 , ω, Z0 ) ⊢+ (q, ε, ε) для некоторого q ∈ Q. Пусть Lε (P ) — множе-
ство всех слов, допускаемых автоматом P опустошением магазина.
Далее, если нас в автомате (МП или РМП) будет интересовать толь-
ко язык Lε (P ), то такие автоматы будем называть МПε-автомат и
РМПε-автомат соответственно.
Если два РМП-автомата. P и R, отличаются друг от друга толь-
ко множествами заключительных состояний, то Lε (P ) = L′ε (R), хо-
тя, разумеется, языки L(P ) и L(R) не обязаны совпадать. Поэтому
при изучении языков, допускаемых РМП-автоматами опустошени-
ем магазина, обычно рассматривают только такие автоматы, у ко-
торых P = ∅.
Выясним, как связано новое условие допускаемости слов с
прежним.

Теорема 8.3.1. Пусть P = (Q, Σ, Γ, δ, q0 , Z0 , F ) — РМП-автомат. Тогда


можно построить такой МПε-автомат P ′ , что Lε (P ′ ) = L(P ). ◻

Доказательство. Ввиду теоремы 8.2.1 будем, не теряя общности,


полагать, что P — МП-автомат.
Предположим, что автомат P ′ моделирует действия автомата P ,
и прикинем, каким требованиям он обязан в этом случае удовлетво-
рять. Введем специальное состояние qε , которое позволяет опусто-
шать магазин; всякий раз, когда P переходит в заключительное со-
8.3. Автомат, допускающий слово опустошением магазина 205

стояние, P ′ должен решать, продолжать ли моделирование P или пе-


рейти в состояние qε . Второй важный момент, который надо учесть,
состоит в том, что для некоторого входного слова ω автомат P мо-
жет сделать последовательность тактов, приводящую к опустоше-
нию магазина, но управляющее устройство окажется при этом не
в заключительном состоянии; тогда для того, чтобы помешать P ′
допустить в этом случае слово ω , надо добавить к P ′ специальный
маркер Z ′ , отмечающий «дно» магазина, который автомат P ′ может
устранить только в состоянии qε . Этот же символ, Z ′ , будет началь-
ным символом магазина.
Итак, пусть

P ′ = (Q ∪ {qε ; q ′ }, Σ, Γ ∪ {Z ′ }, δ ′ , q ′ , Z ′ , ∅),

где δ ′ определяется так:

1) δ ′ (q ′ , ε, Z ′ ) = {(q0 , Z0 , Z ′ )};
2) ∀q ∈ Q, ∀a ∈ Σ ∪ {ε}, ∀Z ∈ Γ:

(r, γ ) ∈ δ (q, a, Z ) ⇒ (r, γ ) ∈ δ ′ (q, a, Z );

3) ∀q ∈ F , ∀Z ∈ Γ ∪ {Z ′ }: (qε , ε) ∈ δ ′ (q, ε, Z );
4) ∀Z ∈ Γ ∪ {Z ′ }: δ ′ (qε , ε, Z ) = {(qε , ε)}.

Отметим, что на первом такте автомат P ′ записывает в магазин


Z0 Z ′ и переходит в начальное состояние q0 автомата P , a Z ′ начинает
играть роль маркера, отмечающего «дно» магазина.
206 Глава 8. Автоматы с магазинной памятью

Анализ функций переходов δ и δ ′ показывает, что для некото-


рых натуральных r и n, произвольного q из F и произвольных слов
Y1 , . . . , Yr−1 , Yr = Z ′ из Γ∗ последовательность тактов автомата P ′

(q ′ , ω, Z ′ ) ⊢P ′ (q0 , ω, Z0 , Z ′ ) ⊢nP ′
(q, ε, Y1 . . . Yr ) ⊢P ′ (qε , ε, Y2 . . . Yr ) ⊢rP−′ 1 (qε , ε, ε)

осуществима тогда и только тогда, когда

(q0 , ω, Z0 ) ⊢nP (q, ε, Y1 . . . Yr−1 ).

Следовательно, Lε (P ′ ) = L(P ).

Сформулируем основной результат теоремы 8.3.1 в виде алго-


ритма 8.3.1.
Заметим, что алгоритм 8.3.1 «заворачивает» исходный МП-ав-
томат в автоматную обёртку, цель которой — очистить магазин по-
сле перехода исходного автомата в завершающую конфигурацию.
Справедливо обращение теоремы 8.3.1.

Теорема 8.3.2. Пусть P = (Q, Σ, Γ, δ, q0 , Σ0 , ∅) — РМПε-автомат. Тогда


можно построить такой МП-автомат P ′ , что L(P ′ ) = Lε (P ). ◻

Доказательство. Ввиду теоремы 8.2.1 будем, не теряя общности,


полагать, что P — МП-автомат.
Как и при доказательстве теоремы 8.3.1 предположим, что авто-
мат P ′ моделирует действия автомата P , и выясним, каким требова-
8.3. Автомат, допускающий слово опустошением магазина 207

ниям он обязан в этом случае удовлетворять. Введем заключитель-


ное состояние gf и маркер Z ′ , отмечающий «дно» магазина нового
автомата (Z ′ будет, кроме того, начальным магазинным символом).
В тот момент, когда автомат P ′ может прочесть Z ′ , он будет перехо-
дить в новое заключительное состояние qf .
Итак, пусть

P ′ = (Q ∪ {qf ; q ′ }, Σ, Γ ∪ {Z ′ }, δ ′ , q ′ , Z ′ , {qf }),

где δ ′ определяется так:

1) δ ′ (q ′ , ε, Z ′ ) = {(q0 , Z0 , Z ′ )};

Алгоритм 8.3.1 Построение МПε-автомата по МП-автомату

Вход: МП-автомат P = (Q, Σ, Γ, q0 , Z0 , F ).


Выход: МП-автомат P ′ = (Q1 , Σ, Γ1 , q1 , Z1 , ∅), такой что Lε (P ′ ) = L(P ).
Метод: конструирование элементов автомата P ′ по правилам теоремы 8.3.1.

Шаг 1. Положить Q1 = Q ∪ {qε , q1 }.


Шаг 2. Положить Γ1 = Γ ∪ {Z1 }.
Шаг 3. Определить δ1 следующим образом:

1) δ1 (q1 , ε, Z1 ) = {(q0 , Z0 Z1 )};


2) если δ (q, a, Z ) ∋ (r, γ ), то δ1 (q, a, Z ) ∋ (r, γ ) для всех q ∈ Q, a ∈ Σ ∪ {ε} и Z ∈ Γ;
3) δ1 (q, ε, Z ) ∋ (qε , ε) для всех a ∈ F и Z ∈ Γ1 ;
4) δ1 (qε , ε, Z ) = {(qε , ε)} для всех Z ∈ Γ1 .

Шаг 4. Вернуть МП-автомат P ′ = (Q1 , Σ, Γ1 , δ1 , q1 , Z1 , ∅) в качестве результата.


208 Глава 8. Автоматы с магазинной памятью

Алгоритм 8.3.2 Построение МП-автомата по МПε-автомату

Вход: МПε-автомат P = (Q, Σ, Γ, q0 , Z0 , ∅).


Выход: МП-автомат P ′ = (Q1 , Σ, Γ1 , q1 , Z1 , F1 ), такой что L( P ′ ) = Lε(P ).
Метод: конструирование элементов автомата P ′ по правилам теоремы 8.3.2.

Шаг 1. Положить Q1 = Q ∪ {qf , q1 }.


Шаг 2. Положить Γ1 = Γ ∪ {Z1 }.
Шаг 3. Положить F1 = {qf }.
Шаг 4. Определить δ1 следующим образом:

1) δ1 (q1 , ε, Z1 ) = {(q0 , Z0 Z1 )};


2) если δ (q, a, Z ) ∋ (r, γ ), то δ1 (q, a, Z ) ∋ (r, γ ) для всех q ∈ Q, a ∈ Σ ∪ {ε} и Z ∈ Γ;
3) δ1 (q, ε, Z1 ) = {(qf , ε)} для всех q ∈ Q.

Шаг 5. Вернуть МП-автомат P ′ = (Q1 , Σ, Γ1 , δ1 , q1 , Z1 , F1 ) в качестве результата.

2) ∀q ∈ Q, ∀a ∈ Σ ∪ {ε}, ∀ Z ∈ Γ: (r, γ ) ∈ δ (q, a, Z ) ⇒ (r, γ ) ∈ δ ′ (q, a, Z );


3) ∀q ∈ Q: δ ′ (q, ε, Z ′ ) = {(qf , ε)}.

Доказательство равенства L(P ′ ) = Lε (P ) не приводим.

Упражнение 8.3.1. Доказать равенство L(P ′ ) = Lε (P ) из теоре-


мы 8.3.1. ◻

Сформулируем основной результат теоремы 8.3.2 в виде алго-


ритма 8.3.2.
Как и в случае алгоритма 8.3.1, алгоритм 8.3.2 создаёт над ис-
ходным МП-автоматом обёртку, цель которой — перевести резуль-
8.4. Эквивалентность МП-автоматов и КС-грамматик 209

тирующий автомат в финальное состояние, когда исходный автомат


допустил цепочку опустошением магазина.

8.4. Эквивалентность МП-автоматов и


КС-грамматик
Сформулируем теперь один из фундаментальных результа-
тов теории КС-языков, показывающий, что языки, определяемые
МП-автоматами, — это в точности КС-языки.

Теорема 8.4.1. Пусть Σ — конечный алфавит, L — язык над этим ал-


фавитом. Тогда следующие условия эквивалентны:

1) L = L(G) для некоторой КС-грамматики G;

2) L = L(P1 ) для некоторого МП-автомата P1 ;

3) L = L(P2 ) для некоторого РМП-автомата P2 ;

4) L = Lε (P3 ) для некоторого МП-автомата P3 . ◻

Доказательство. Эквивалентность утверждений 2) и 3) доказана в


теореме 8.2.1. Эквивалентность утверждении 3) и 4) вытекает из тео-
рем 8.3.1 и 8.3.2. Ниже будут доказаны еще две теоремы — 8.4.2
и 8.4.3. В силу теоремы 8.4.2 утверждение 4) — следствие утвержде-
ния 1), а в силу теоремы 8.4.3 утверждение 1) — следствие утвержде-
ния 4). Это завершает доказательство теоремы 8.4.1.
210 Глава 8. Автоматы с магазинной памятью

Теорема 8.4.2. Пусть G = (N, Σ, P, S ) — КС-грамматика. Тогда можно


построить такой МП-автомат R, что Lε (R) = L(G). ◻

Доказательство. Построим МП-автомат R так, чтобы он моде-


лировал все левые выводы в G (см. пункт 6.1). Именно, пусть
R = ({q }, Σ, N ∪ Σ, δ, q, S, ∅), и функция переходов δ полностью опре-
деляется правилами:

(i) если A → α ∈ P , то (q, α) ∈ δ (q, ε, A), где, напомним, α ∈ (N ∪ Σ)∗ ;

(ii) δ (q, a, a) = {(q, ε)} для всех a ∈ Σ.

Первое правило моделирует продукции грамматики G, а второе —


позволяет эти продукции применять.
Перед тем, как проверить равенство Lε (R) = L(G), докажем ме-
тодом математической индукции два вспомогательных утвержде-
ния.
A) Для произвольного натурального числа m из возможности
вывода A ⇒m ω (∈ Σ∗ ) вытекает, что (q, ω, A) ⊢+ (q, ε, ε).
Пусть A ⇒∗ ω . Если m = 1, ω = a1 . . . ak , где k ⩾ 1, то из i) и ii)
получаем:

(q, a1 . . . ak , A) ⊢ (q, a1 . . . ak , a1 . . . ak ) ⊢k (q, ε, ε).

Если же m = 1 и ω = ε, то, как легко видеть, (q, ε, A) ⊢ (q, ε, ε).


Теперь предположим, что утверждение верно для m ⩽ j и дока-
жем его для m = j + 1. Итак, пусть A ⇒j +1 ω . Первый шаг этого вывода
8.4. Эквивалентность МП-автоматов и КС-грамматик 211

должен иметь вид A ⇒ X1 X2 . . . Xk , где Xi ⇒∗ xi , xi ∈ Σ и x1 x2 . . . xk = ωi .


Тогда в силу правила i) (q, ω, A) ⊢ (q, ω, X1 X2 . . . Xk ). Если Xi ∈ N , то по
предположению индукции (q, xi , Xi ) ⊢∗ (q, ε, ε). Если же Xi = xi ∈ Σ, то
(q, xi , Xi ) ⊢ (q, ε, ε). Объединяя эти последовательности тактов, полу-
чаем: (q, ω, A) ⊢+ (q, ε, ε).
Таким образом, утверждение A) верно.
B ) Для произвольного натурального числа n из существования
последовательности тактов (q, ω, A) ⊢n (q, ε, ε) вытекает, что A ⇒+ ω .
Пусть n = 1. Тогда, как нетрудно убедиться, ω = ε и (A → ε) ∈ P .
Таким образом, A ⇒+ ω .
Теперь предположим, что утверждение верно для n ⩽ j и дока-
жем его для n = j + 1. Первый такт, сделанный МП-автоматом R, дол-
жен иметь вид (q, ω, A) ⊢ (q, ω, X1 , X2 . . . Xk ), где (q, xi , Xi ) ⊢+ (q, ε, ε),
xi ∈ Σ и x1 x2 . . . xk = ωi (см. упражнение ??). Тогда (A → X1 . . . Xk ) ∈ P ,
а по предположению индукции Xi ⇒+ xi для Xi ∈ N и Xi ⇒0 x1 при
Xi ∈ Σ. Таким образом, искомый вывод A ⇒+ ω строится так:

A ⇒ Xi . . . Xk ⇒∗ x1 X2 . . . Xk ⇒∗ x1 x2 . . . xk−1 Xk ⇒∗ x1 x2 . . . xk−1 xk = ω.

Итак, утверждение B ) верно.


Из утверждений A) и B ) вытекает, что S ⇒+ ω тогда и только
тогда, когда (q, ω, S ) ⊢+ (q, ε, ε). Следовательно, Lε (R) = L(G).

Сформулируем результаты теоремы 8.4.2 в виде алгоритма 8.4.1


(с. 212).
212 Глава 8. Автоматы с магазинной памятью

Алгоритм 8.4.1 Построение МПε-автомата по КС-грамматике.

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: МПε-автомат P = (Q, Σ, Γ, q, Z, ∅), такой что Lε(P ) = L(G).
Метод: конструирование элементов автомата P по правилам теоремы 8.4.2.

Шаг 1. Положить Q = {q }.
Шаг 2. Положить Γ = N ∪ Σ.
Шаг 3. Определить δ следующим образом:

1) если A → α ∈ P , то δ (q, ε, A) ∋ {(q, α)}, для всех A ∈ N и α ∈ (N + Σ)∗ ;


2) δ (q, a, a) = {(q, ε)} для всех a ∈ Σ.

Шаг 4. Вернуть МП-автомат P = (Q, Σ, Γ, δ, q, S, ∅) в качестве результата.

Пример 8.4.1. Рассмотрим КС-грамматику G = ({S }, {a, b}, P, S ), за-


данную множеством P = { S → aSbb ∣ ε}. После применения алгорит-
ма 8.4.1 получим автомат P = ({q }, {a, b}, {a, b, S }, δ, q, S, ∅), где функ-
ция переходов δ определяется следующим образом:

δ (q, ε, S ) = {(q, aSbb), (q, ε)};


δ (q, a, a) = {(q, ε)};
δ (q, b, b) = {(q, ε)}.

Из теоремы 8.3.2 следует, что если у нас есть МПε-автомат, то


по нему всегда можно получить МП-автомат, распознающий тот же
язык. Без обосновывающей теоремы приведём алгоритм 8.4.2, кото-
8.4. Эквивалентность МП-автоматов и КС-грамматик 213

Алгоритм 8.4.2 Построение РМП-автомата по КС-грамматике.

Вход: КС-грамматика G = (N, Σ, P, S ).


Выход: РМП-автомат P = (Q, Σ, Γ, q, $, F ), такой что L(P ) = L(G).
Метод: преобразование правил грамматики в такты автомата.

Шаг 1. Положить Q = {q, qf }.


Шаг 2. Положить Γ = N ∪ Σ ∪ {$}.
Шаг 3. Положить F = {qf }.
Шаг 4. Определить δ следующим образом:

1) δ (q, a, ε) = {(q, a)} для всех a ∈ Σ;


2) если A → α ∈ P , то δ (q, ε, αR ) ∋ {(q, A)}, для всех A ∈ N и α ∈ (N + Σ)∗ ;
3) δ (q, ε, S $) = {(qf , ε)}.

Шаг 5. Вернуть МП-автомат P = (Q, Σ, Γ, δ, q, $, F ) в качестве результата.

рый строит РМП-автомат, моделирующий все правые выводы в за-


данной КС-грамматике.

Пример 8.4.2. Рассмотрим КС-грамматику G = ({S }, {a, b}, P, S ), за-


данную множеством P = { S → aSbb ∣ ε}. После применения алгорит-
ма 8.4.2 получим автомат P = ({q, qf }, {a, b}, {a, b, S, $}, δ, q, $, {qf }), где
функция переходов δ определяется следующим образом:

δ (q, a, ε) = {(q, a)}; δ (q, b, ε) = {(q, b)};


δ (q, ε, ε) = {(q, S )}; δ (q, ε, aSbb) = {(q, S )};
δ (q, ε, S $) = {(qf , ε)}. ∎
214 Глава 8. Автоматы с магазинной памятью

Покажем теперь, что язык, определяемый МП-автоматом,


контекстно-свободен.

Теорема 8.4.3. Пусть R = (Q, Σ, Γ, δ, q0 , Z0 , F ) — МП-автомат. Можно


построить такую КС-грамматику G, что L(G) = Lε (R). ◻

Доказательство. Начнем строить грамматику G = (N, Σ, P, S ).


Нетерминальные символы будем записывать в виде [qZr], где q, r ∈ Q
и Z ∈ Γ, т. е. определим множество нетерминалов равенством

N = {[qZr] ∣ q, r ∈ Q, Z ∈ Γ} ∪ {S }.

Множество продукций зададим следующими условиями:

1) если (r, X1 . . . Xk ) ∈ δ (q, a, Z ), где k ⩾ 1, то для каждой последова-


тельности s1 , s2 , . . . , sk состояний из Q отнесем к P все продукции
вида
[qZsk ] → a[rX1 s1 ][s1 X2 s2 ] . . . [sk−1 Xk sk ];

2) если (r, ε) ∈ δ (q, a, Z ), то отнесем к P продукцию [qZr] → a;

3) для каждого q ∈ Q отнесем к P продукцию S → [q0 Σ0 q ].

Индукцией по числу продукций и числу тактов доказывается


следующее вспомогательное утверждению: для любых q, r ∈ Q и Z ∈ Γ
[qZr] ⇒+ ω тогда и только тогда, когда (q, ω, Z ) ⊢+ (r, ε, ε). Из этого
утверждения следует, что S ⇒ [q0 Z0 q ] ⇒+ ω тогда и только тогда, ко-
гда (q0 , ω, Z0 ) ⊢+ (q, ε, ε) для q ∈ Q. Таким образом, Lε (R) = L(G).
8.4. Эквивалентность МП-автоматов и КС-грамматик 215

Алгоритм 8.4.3 Построение КС-грамматики по МП-автомату.

Вход: МП-автомат R = (Q, Σ, Γ, q, S, F ).


Выход: КС-грамматика G = (N, Σ, P, S ), такая что L(G) = Lε (R).
Метод: конструирование элементов грамматики G по правилам теоремы 8.4.2.

Шаг 1. Положить N = {[qZr] ∣ q, r ∈ Q, Z ∈ Γ} ∪ {S }.


Шаг 2. Положить P = ∅.
Шаг 3. Если δ (q, a, Z ) ∋ (r, X1 . . . Xk ), где k ⩾ 1, q, r ∈ Q, a ∈ Σ, Z, X1 . . . Xk ∈ Γ, то
включить в P все правила вида

[qZsk ] → a[rX1 s1 ][s1 X2 s2 ] . . . [sk−1 Xk sk ]

для каждой последовательности s1 , s2 , . . . , sk состояний из Q.


Шаг 4. Если δ (q, a, Z ) ∋ (r, ε), где q, r ∈ Q, a ∈ Σ, Z ∈ Γ, то включить в P правило
[qZr] → a.
Шаг 5. Включить в P правила S → [q0 Z0 q ] для каждого q ∈ Q.
Шаг 6. Вернуть КС-грамматику G = (N, Σ, P, S ) в качестве результата.

На базе теоремы 8.4.3 сформулируем алгоритм 8.4.3.

Пример 8.4.3. Рассмотрим МП-автомат

R = ({q0 , q1 , q2 }, {a, b}, {a, b, Z0 }, q0 , Z0 , {q0 }),

функция переходов δ которого определяется следующим образом:

δ (q0 , a, Z0 ) = {(q1 , aaZ0 )}; δ (q2 , b, a) = {(q2 , ε)};


δ (q1 , a, a) = {(q1 , aaa)}; δ (q1 , b, a) = {(q2 , ε)};
216 Глава 8. Автоматы с магазинной памятью

δ (q2 , ε, Z0 ) = {(q0 , ε)}.

После применения алгоритма 8.4.3 получим следующие элемен-


ты результирующей грамматики G = (N, {a, b}, P, S ).
Множество нетерминалов:

N = {[qZr] ∣ q, r ∈ {q0 , q1 , q2 }, Z ∈ {a, Z0 } ∪ {S }}.

Множество продукций P без бесполезных символов:

S → [q0 Z0 q0 ]; [q2 Z0 q0 ] → ε.
[q0 Z0 q0 ] → a[q1 aq2 ][q2 aq2 ][q2 Z0 q0 ]; [q1 aq2 ] → b;
[q1 aq2 ] → a[q1 aq2 ][q2 aq2 ][q2 aq2 ]; [q2 aq2 ] → b;

После переименования множество продукций P имеет следую-


щий вид:

S → aABC; A → aABB ∣ b; B → b; C → ε.

Упростим правила грамматики и получим


P = {S → aAb; A → aAbb ∣ b}.
В результате искомая грамматика имеет вид
G = ({S, A}, {a, b}, P, S ), у которой L(G) = {an b2n ∣ n ⩾ 1}. ∎
8.5. Детерминированный МП-автомат 217

8.5. Детерминированный МП-автомат

Выше отмечалось, что для каждой КС-грамматики G можно по-


строить МП-автомат, распознающий L(G) (теорема 8.4.2). Однако
построенный автомат был недетерминированный, а в приложениях
более удобны детерминированные МП-автоматы, которые в каждой
конфигурации могут сделать не более одного очередного такта.
Дадим точное определение: МП-автомат P = (Q, Σ, Γ, δ, q0 , Z0 , F )
называется детерминированным (сокращенно ДМП-автоматом), ес-
ли для каждых q ∈ Q и Σ ∈ Γ либо δ (q, a, Z ) содержит не более одного
элемента для каждого a ∈ Σ и (q, ε, Z ) = ∅, либо δ (q, a, Z ) = ∅ для всех
a ∈ Σ и δ (q, ε, Z ) содержит не более одного элемента. В силу этих двух
ограничений ДМП-автомат в любой конфигурации может выбрать
не более одного такта.
В теореме 3.2.1 было показано, что класс языков, определяемых
недетерминированными конечными автоматами, совпадает с клас-
сом языков, определяемых полностью определенными детермини-
рованными конечными автоматами. Но, к сожалению, ДМП-авто-
маты не так мощны по своей распознавательной способности, как
недетерминированные МП-автоматы, и существуют КС-языки, ко-
торые нельзя определить детерминированными МП-автоматами.
При этом для более сильного вычислительного формализма (ма-
шин Тьюринга) снова справедлива эквивалентность детерминиро-
ванной и недетерминированной версии.
218 Глава 8. Автоматы с магазинной памятью

ДМП-автоматные языки интересно соотносятся с уже извест-


ными классами языков. Укажем ещё два факта об этих отноше-
ниях, кроме упомянутого выше строгого включения в класс МП-
автоматных языков.

1) Хотя исключить недетерминизм без уменьшения вычислитель-


ной мощности в случае МП-автоматов не удаётся, можно изба-
виться от ε-переходов, не меняя класса распознаваемых языков.
Этот факт получается, если адаптировать доказательство тео-
ремы 8.4.2 к КС-грамматике, которая находится в нормальной
форме Грейбах. Подумайте, как реализовать эту идею.

2) ДМП-автоматные языки содержат в себе класс регулярных язы-


ков как собственное подмножество.

3) Все ДМП-автоматные языки не являются существенно неодно-


значными, то есть для них существуют КС-грамматики без неод-
нозначности. В то же время, существуют языки без неоднознач-
ности, которые не являются ДМП-автоматными. К последним
относится, например, язык палиндромов четной длины Lwwr .

8.6. Упражнения

Для каждого из следующих языков

1) {an bn cm dm ∣ n, m ∈ N},
8.6. Упражнения 219

2) {ai bj cj di ∣ i, j ∈ N},

3) {ai bj ck ∣ i, j, k ∈ N и i + j = k },

4) {x ∈ {a, b, c}∗ ∣ ∣x∣a + ∣x∣b = ∣x∣c }

построить МП-автомат:

а) распознающий L,

б) распознающий L опустошением магазина.

Напомним, что запись вида ∣w∣z (см. язык 4) означает количество


вхождений символа z в строку w.
СПИСОК ЛИТЕРАТУРЫ

[1] Ахо А., Лам М., Сети Р., Ульман Дж. Компиляторы: принципы,
технологии и инструментарий, 2-е изд. М.: Вильямс, 2008.

[2] Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и


компиляции. Т. 1. Синтаксический анализ. М.: Мир, 1978.

[3] Бауэр Ф. Л., Гооз Г. Информатика. М.: Мир, 1990.

[4] Белоусов А. И., Ткачёв С. Б. Дискретная математика. М.: МГТУ,


2010.

[5] Громкович Ю. Теоретическая информатика. Введение в теорию


автоматов, теорию вычислимости, теорию сложности, теорию
алгоритмов, рандомизацию, теорию связи и криптографию.
СПб: БХВ-Петербург, 2010.

[6] Саломаа А. Жемчужины теории формальных языков. М.: Мир,


1986.
Список литературы 221

[7] Хоар Ч. Взаимодействующие последовательные процессы. М.:


Мир, 1889.

[8] Хопкрофт Дж., Мотвани Р., Ульман Дж. Введение в теорию авто-
матов, языков и вычислений. — 2-е изд. М.: Вильямс, 2008.
ПРИЛОЖЕНИЕ A

АЛГОРИТМЫ ДЛЯ КОНТЕКСТНО-СВОБОДНЫХ


ГРАММАТИК

В этом приложении алгоритмы, рассмотренные в главах 6 и 7,


приведены в виде псевдокода, что может облегчить программиро-
вание, а иногда и понимание этих алгоритмов.
Некоторые обозначения, используемые при описании ал-
горитмов.

- A ← B — операция присваивания («A присвоить B »);

- A ↩ a — операция добавления элемента в множество («добавить


в множество A элемент a»);

- A ↩ B — операция добавления множества элементов во множе-


ство («добавить в множество A все элементы из B »);

-  — начало комментария, продолжающегося до конца строки.


223

Алгоритм A.1 Нахождение порождающих символов

Вход: КС-грамматика G = (Σ, N, P , S ∈ N ).


Выход: GenG (Σ) — множество порождающих в G символов.

1 GenG (Σ) ← Σ  Терминалы являются порождающими символами


 Ищем продукции, в правых частях которых только порождающие символы. . .
2 while ∃A → X1 . . . Xn ∈ P, n ⩾ 0, такое что ∀i Xi ∈ GenG (Σ)
do GenG (Σ) ↩ A  левые части таких продукций добавляются в GenG (Σ)

Замечание. (О многократном просмотре продукций в алгорит-


ме A.1.) В цикле на шаге 2 алгоритма A.1 одна и та же продукция
A → X1 . . . Xn может быть просмотрена несколько раз, причём если
на ранних итерациях она не удовлетворяла условию ∀i Xi ∈ GenG (Σ),
то на поздних, когда множество GenG (Σ) станет достаточно боль-
шим, положение дел может измениться (условие ∀i Xi ∈ GenG (Σ) вы-
полнится и A надо будет добавить в GenG (Σ)).
Аналогичное справедливо для просмотра продукций в алгорит-
ме A.2. ◻

Замечание (об операции удаления символа из грамматики).


Когда в алгоритме требуется удалить символ X из грамматики G,
необходимо не только исключить его из множества N или Σ, но и
удалить из P все продукции, в которых он участвует. ◻
224 Приложение A. Алгоритмы для контекстно-свободных грамматик

Алгоритм A.2 Нахождение достижимых символов

Вход: КС-грамматика G = (Σ, N, P , S ∈ N ).


Выход: ReachG — множество достижимых в G символов.

1 ReachG ← {S }  S достижим в G
 Ищем продукции, в левых частях которых стоит достижимый символ. . .
2 while ∃A → X1 . . . Xn ∈ P, такое что A ∈ ReachG
 . . . символы из правых частей таких продукций добавляются в ReachG :
do ReachG ↩ {Xi }ni=1

Алгоритм A.3 Удаление бесполезных символов

Вход: КС-грамматика G = (Σ, N, P , S ∈ N ).


Выход: КС-грамматика G′ = (Σ′ , N ′ , P ′ , S ∈ N ′ ), не содержащая бесполезных сим-
волов, такая что L(G′ ) = L(G), либо сигнал о том, что язык исходной грамматики
пуст и не существует эквивалентной G грамматики без бесполезных символов.

Шаг 1. Построить множество GenG (Σ), используя алгоритм A.1. Если S ∈/ GenG (Σ)
— завершение алгоритма, сообщение о пустоте языка исходной грамматики. Ина-
че удалить из G все символы, не вошедшие в GenG (Σ).
Шаг 2. Построить множество ReachG , используя алгоритм A.2. Удалить из G все
символы, не вошедшие в ReachG . Получившуюся грамматику обозначить G′ и по-
дать её на выход алгоритма.

Замечание. (О методе «устранения перегородок» в алгорит-


ме A.4, с. 225.) На шаге 2 алгоритма A.4 каждая продукция P про-
225

Алгоритм A.4 Удаление ε-правил

Вход: КС-грамматика G = (Σ, N, P , S ∈ N ).


Выход: КС-грамматика G′ = (Σ, N, P ′ , S ∈ N ), без ε-правил (продукций вида A → ε),
такая что L(G′ ) = L(G) ∖ {ε}.
Метод: «Устранение перегородок».

Шаг 1. Построить множество GenG (ε) ⊂ N всех порождающих ε нетерминалов, ис-


пользуя следующую процедуру:
1 for A → ε ∈ P
do GenG (ε) ↩ A
2 while ∃A → X1 . . . Xn ∈ P, где {Xi }ni=0 ⊂ GenG (ε)
do GenG (ε) ↩ A
Шаг 2. Выполнить следующие действия:
for A → α0 B1 α1 . . . Bn αn ∈ P, где ∀i Bi ∈ GenG (ε) ∧ αi ∈ ((N ∪ Σ) ∖ GenG (ε))∗
do P ↩ {α0 X1 α1 . . . Xn αn ∣ ∀i Xi = ε ∨ Xi = Bi }
Шаг 3. Удалить из P все ε-правила, обозначить получившееся множество правил
P ′ и подать на выход алгоритма грамматику G′ = (N, Σ, P ′ , S ).

сматривается ровно один раз. Понятно, что для подходящего n лю-


бая продукция может быть представлена в виде A → α0 B1 α1 . . . Bn αn с
указанными условиями для Bi и αi . Например, если в продукции нет
ε-порождающих символов, то это продукция вида A → α0 и для неё
нет необходимости добавлять новые продукции.
Пример. Продукция C → aDbD, где D ∈ GenG (ε), a, b ∈ Σ, это про-
дукция вида A → α0 B1 α1 B2 α2 , где A = C , α0 = a, B1 = B2 = D, α2 = ε,
и для неё нужно добавить три новых продукции. Укажем их, пояс-
226 Приложение A. Алгоритмы для контекстно-свободных грамматик

нив название метода «удаления перегородок». Можно считать, что


ε-порождающие символы Bi являются «перегородками» в продук-
ции A → α0 B1 α1 . . . Bn αn и новые продукции получаются из данной
при помощи устранения этих перегородок всеми возможными спо-
собами. Для продукции C → aDbD это: C → abD, A → aDb и A → ab.
Исходная продукция остаётся в множестве P. ◻

Алгоритм A.5 Удаление цепных продукций

Вход: КС-грамматика G = (Σ, N, P , S ∈ N ), не содержащая ε-правил.


Выход: КС-грамматика G′ = (Σ, N, P ′ , S ∈ N ), без цепных правил (продукций вида
A → B ), такая что L(G′ ) = L(G).

Шаг 1. Для каждого нетерминала A ∈ N построить множество циклически дости-


жимых из A нетерминалов C (A), используя процедуру:
1 C (A) ← {A}
2 while ∃D → E ∈ P, такая что D ∈ C (A)
do C (A) ↩ E
Шаг 2. Выполнить следующую процедуру:
for A ∈ N
do for B → α ∈ P
do if B ∈ C (A)
then P ↩ A → α
Шаг 3. Удалить из P все цепные правила, обозначить получившееся множество
правил P ′ и подать на выход алгоритма грамматику G′ = (N, Σ, P ′ , S ).
227

Замечание (о введении новых нетерминалов в алгоритме A.6).


Отметим, что на каждой итерации цикла шага 4 в алгоритме A.6
(с. 228), если есть необходимость ввести новые нетерминалы, то
они должны отличаться не только от тех, которые присутствовали
в грамматике до начала этого цикла, но и от тех, которые были
введены на предыдущих итерациях этого цикла. Таким образом,
одного комплекта букв {Ci } для выполнения цикла может не хва-
тить. Для борьбы с нехваткой букв можно вводить нетерминалы,
помеченные частями исходного слова B1 . . . Bn , которое «разбивает-
ся на слоги». Например, вместо набора {Ci }ni=−12 можно использовать
набор {⟨Bi+1 . . . Bn ⟩}ni=−12 , где для каждого i выражение ⟨Bi+1 . . . Bn ⟩
понимается как один новый нетерминал. Аналогично можно посту-
пать на шаге 3, добавляя для рассматриваемого терминала a новый
нетерминал ⟨a⟩, а не A′ . ◻

Замечание (о табличной форме алгоритма A.7, с. 229).


Алгоритм удобно выполнять, заполняя таблицу с Nij в ячейках.
Ячейки таблицы расположены в системе координат (i, s), в позиции
(i, s) находится множество Ni,i+s−1 . Подробно этот процесс описан в
разделе 7.2. ◻
228 Приложение A. Алгоритмы для контекстно-свободных грамматик

Алгоритм A.6 Приведение к нормальной форме Хомского

Вход: КС-грамматика G = (Σ, N, P , S ∈ N ), не содержащая ε-правил.


Выход: КС-грамматика G′ = (Σ′ , N ′ , P ′ , S ∈ N ) в НФХ, такая что L(G′ ) = L(G) ∖ {ε}
или сообщение о пустоте языка грамматики.
Метод: «Разбиение слов на слоги».

Шаг 1. Последовательно воспользоваться алгоритмами A.4 и A.5, полученную


грамматику обозначить G′′ = (N, Σ, P ′′ , S ).
Шаг 2. Применить к G′′ алгоритм A.3. Если получен ответ L(G′′ ) = ∅, остановить
алгоритм и подать на выход сигнал о пустоте языка исходной грамматики. Иначе
получена грамматика G′ = (N ′ , Σ′ , P ′ , S ).
Шаг 3. К G′ применить следующую процедуру:
for a ∈ Σ
do if ∃A → X1 . . . Xn ∈ P ′′ , такая что n > 1 ∧ ∃i Xi = a
then
1 добавить в N новый нетерминал A′
2 заменить a на A′ в продукциях с правой частью длиннее 1
3 P ′′ ↩ A′ → a
Шаг 4. К G′ применить следующую процедуру:
for A → B1 B2 . . . Bn ∈ P ′ , где n > 2, Bi ∈ N
do
1 добавить в N новые нетерминалы C1 , . . . Cn−2
2 P ′ ↩ {A → B1 C1 } ∪ {Ci → Bi+1 Ci+1 }ni=−13 ∪ {Cn−2 → Bn−1 Bn }
3 удалить A → B1 B2 . . . Bn из P ′
Подать G′ на выход алгоритма.
229

Алгоритм A.7 Решение проблемы принадлежности для КС-языков, CYK-


алгоритм

Вход: Грамматика G = (Σ, N, P , S ∈ N ) в НФХ, слово w = w1 . . . wn ∈ Σ∗ .


Выход: Истина, если w ∈ L(G), ложь в противном случае.
Метод: Последовательное определение нетерминалов, выводящих всевозмож-
ные подстроки w всё большей длины.

Шаг 1. Построить множества Nij , используя процедуру:


for i ← 1 to n
do Nii ← {A ∈ N ∣ A → wi ∈ P}  Подстроки w длины 1
for s ← 2 to n  Цикл по длине подстроки
do for i ← 1 to n − s + 1  Цикл по месту начала подстроки
j ← i + s − 1  Позиция конца подстроки с началом в wi длины s
Nij ← {A ∈ N ∣ A → BC ∈ P ; ∃k ∈ [i, j − 1]Z ∶ B ∈ Nik , C ∈ Nk+1j }
Шаг 2. Если S ∈ N1n , то подать на выход алгоритма «да», иначе — «нет».
ПРИЛОЖЕНИЕ B

ЗАДАНИЕ К КУРСОВОЙ РАБОТЕ

1. Для языка L, выбранного в соответствии с вариантом, выпол-


нить следующее задание:

(i) Построить ПЛ-грамматику G, порождающую L;

(ii) Доказать вложения L ⊆ L(G), L(G) ⊆ L;

(iii) Путем решения системы линейных уравнений с регуляр-


ными коэффициентами построить регулярное выражение,
описывающее L;

(iv) Построить НКА или e-НКА M N D , распознающий язык L,


предъявить его граф;

(v) Построить ДКА M D путем детерминизации M N D , предъ-


явить его граф;

(vi) Доказать, что L(M N D ) = L(M D ) = L;


231

(vii) Минимизировать полученный конечный автомат, распо-


знающий язык L, или доказать его минимальность;

(viii) Методом последовательного исключения состояний выпи-


сать регулярные выражения для L(M N D ), L(M D );

(ix) Постоить ДКА M D , распознающий дополнение L к языку L,


записать L в виде регулярного выражения;

(x) На произвольно выбранном языке программирования на-


писать программу, позволяющую распознать принадлеж-
ность вводимой строки языку L.

2. Для множества слов A над алфавитом Σ, заданных в соответ-


ствии с вариантом, выполнить следующее задание:

(i) Для каждого слова wi ∈ A построить НКА MiN D , распознаю-


щий наличие в произвольной строке s ∈ Σ∗ подстроки wi ;

(ii) Для каждого НКА MiN D построить соответствующий ДКА


MiD ;

(iii) На произвольно выбранном языке программирования на-


писать программу, позволяющую подсчитать количество
вхождений каждого слова из множества A во входную стро-
ку s ∈ Σ∗ (при этом программно реализовать хотя бы один
автомат MiN D и хотя бы один автомат MjD ).
232 Приложение B. Задание к курсовой работе

3. Для языков L1 , L2 , выбранных в соответствии с вариантом, вы-


полнить следующее задание:

(i) Вычислить регулярное выражение, определяющее язык


L1 ∩ L2 ;

(ii) Вычислить регулярное выражение, определяющее язык


L1 ∆L2 ;

(iii) Определить: совпадают ли языки L1 и L2 , является ли L1 до-


полнением L2 ;

(iv) Построить e-НКА, распознающий один из языков LR R


1 или L2 ;

(v) Вычислить регулярное выражение по построенному e-НКА;

(vi) Построить e-НКА, распознающий один из языков L1 L2 ,


L1 ∪ L2 или L∗1 ;

(vii) Детерминизировать один из построенных e-НКА;

(viii) На произвольно выбранном языке программирования


написать программу, реализующую какой-либо e-НКА и
какой-либо ДКА из этого пункта.
ПРИЛОЖЕНИЕ C

ВАРИАНТЫ ЗАДАНИЙ

Задание 1

1) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-


торых единицы встречаются только четное число раз, а пер-
вая сдвоенная пара нулей может появиться только после по-
явления двух единиц.

2) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в


которых единицы встречаются только нечетное число раз,
а после последней сдвоенной пары нулей может появиться
не более трех единиц.

3) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-


торых после второй сдвоенной пары нулей количество еди-
ниц четно.
234 Приложение C. Варианты заданий

4) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-


торых до второй сдвоенной пары нулей количество единиц
четно.

5) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-


торых, если в слове содержится три последовательные бук-
вы, то оно содержит хотя бы два нуля.

6) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-


торых число единиц делится на 2, а число нулей – на 3.

7) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, ко-


торые начинаются или оканчиваются (или и то и другое) по-
следовательностью 01.

8) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-


торых хотя бы на одной из последних трёх позиций стоит 1,
и не встречается более двух нулей подряд.

9) Язык над алфавитом Σ = {0, 1}, состоящий либо из повто-


ряющихся один или несколько раз фрагментов 01, либо по-
вторяющихся один или несколько раз фрагментов 010, либо
всех слов четной длины и содержащих хотя бы одно подсло-
во 00.

10) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых если встречается три подряд идущих нуля, то слово
235

имеет чётную длину, а если встречается две подряд идущие


единицы, то длина слова нечётная.

11) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в


которых если встречается хотя бы одна пара 01, то пара 10
должна встретиться не менее двух раз.

12) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых если слово содержит пару 10, то оно имеет четную
длину и должно обязательно заканчиваться двумя подряд
идущими единицами.

13) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых не встречаются подслова 101 и 110 одновременно.

14) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых четное число единиц может быть тогда и только то-
гда, когда слово содержит послово 101.

15) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, ко-
торые имеют четную длину тогда и только тогда, когда они
содержат подслово 011.

16) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в


которых количество единиц четно, а пара сдвоенных нулей
встречается не более трех раз.
236 Приложение C. Варианты заданий

17) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, со-
держащих не более трёх подряд идущих нулей, и количество
единиц в которых четно.

18) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в


которых после третьей слева единицы стоит четное число
групп вида 01.

19) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в


которых количество нулей четно, а первая сдвоенная пара
единиц появляется не раньше группы строенных нулей.

20) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, со-
держащих нечетное количество нулей и единиц, начинать-
ся и заканчиваться слова могут не более чем тремя подряд
идущими нулями.

21) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, не


содержащих двух смежных нулей, и в которых группа цифр
010 повторяется не более одного раза.

22) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, со-
держащих три смежные единицы, и в которых группа вида
101 содержится не более одного раза.

23) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых между двумя парами единиц может находиться не бо-
лее чем три подряд идущих нуля.
237

24) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых после группы 010 следует чётное количество подряд
идущих единиц.

25) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых перед тремя подряд идущими нулями находится чет-
ное количество единиц.

26) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, таких
что если слово начинается с нуля, то количество единиц в
слове четно, а если с единицы, то нечетно.

27) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых если встречается хотя бы одна группа из трех подряд
идущих нулей, то пара сдвоенных единиц должна появиться
не менее двух раз.

28) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в ко-
торых если слово содержит группу цифр 010, то оно имеет
нечетную длину.

29) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в


которых группа строенных нулей и строенных единиц не
встречаются одновременно.

30) Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, име-
ющих четную длину тогда и только тогда, когда они начина-
ются тремя нулями, а заканчиваются тремя единицами.
238 Приложение C. Варианты заданий

Задание 2

1) Σ = {0, 1, 2}, A = {01110, 1011, 11100, 010101}.

2) Σ = {0, 1, 2}, A = {110, 1110, 0000, 0111}.

3) Σ = {0, 1, 2}, A = {1011, 111, 0110, 10011}.

4) Σ = {a, b, c}, A = {bbab, ccac, bacb, baabc}.

5) Σ = {a, b, f }, A = {f aaf b, f f ba, bf ab, af f a}.

6) Σ = {1, 2, 3}, A = {2112, 1233, 1322, 131313}.

7) Σ = {4, 5, 6}, A = {5555, 4665, 666, 4455, 665}.

8) Σ = {9, 10, 11, 12}, A = {9101112, 101111, 121110, 121211}.

9) Σ = {0, 1, 2, 3, 4, 5}, A = {22231, 1213, 0001, 11101}.

10) Σ = {0, 1, 2, 3, 4, 5}, A = {000, 010, 221, 3334, 0110}.

11) Σ = {a, b, c, d, e}, A = {aaac, bbd, bbe, abbc}.

12) Σ = {a, b, c, d, e}, A = {aaaa, bbbba, bbaa, cccac}.

13) Σ = {x, y, v, w, z }, A = {xyz, xyzz, zzzw, xyyw}.

14) Σ = {0, 1, 2, 3, 4, 5}, A = {01112, 32544, 12124, 5551}.

15) Σ = {a, b, w, z }, A = {wwwz, bbbww, zzbz, wzwzw}.

16) Σ = {0, 1, 2}, A = {010100, 111001, 110, 1110}.

17) Σ = {0, 1, 2}, A = {001100, 111, 0101, 1000}.

18) Σ = {0, 1, 2}, A = {1011, 0000, 1111, 1011101}.


239

19) Σ = {0, 1, 2}, A = {011100, 11101, 1010, 111}.

20) Σ = {x, y, z }, A = {xxyy, xxxy, xyxyyy, xyxyyx}.

21) Σ = {x, y, z }, A = {xy, yxxy, yxyxxy, xyxxx}.

22) Σ = {x, y, z }, A = {xyx, xxy, yyyxxy, xyxyx}.

23) Σ = {3, 5, 0}, A = {03530, 0033, 30335, 0350}.

24) Σ = {9, 8, 7}, A = {987, 99787, 87799, 9777}.

25) Σ = {3, 5, 0}, A = {3330, 05033, 30330, 535}.

26) Σ = {x, a, 35}, A = {35aaxx, xx35ax, 35xa, 3535ax}.

27) Σ = {10, 23, 45, 96}, A = {101045, 45109623, 23102345, 1010}.

28) Σ = {0, 1, 2, 3, 4, 5}, A = {0112, 0033, 30121, 331}.

29) Σ = {0, 1, 2, 3, 4, 5}, A = {53150, 53555, 5510, 0001}.

30) Σ = {a, b, c, d, e}, A = {abaac, ccbac, ccc, abac}.

Задание 3

1) L1 = (10 + 1)∗ 11(0 + 1)∗ , L2 = (101)∗ 111(0 + 1)∗ .

2) L1 = (0 + 1)∗ 1∗ 01(11 + 0)∗ , L2 = 1∗ (0 + 1 + 11)∗ 0.

3) L1 = 11(01 + 10)∗ 001∗ , L2 = 11((10)∗ (01)∗ )∗ 0011∗ .

4) L1 = (00 + 11)∗ 10(10 + 01)∗ , L2 = (0 + 1)∗ 1.

5) L1 = (1 + 01)∗ (00 + 1)∗ , L2 = (0 + 10)∗ (11 + 0)∗ .


240 Приложение C. Варианты заданий

6) L1 = (111 + 01)∗ 1(00 + 11)∗ , L2 = 1∗ 0∗ .

7) L1 = (01 + 11)∗ (10 + 11)∗ , L2 = (10 + 11)∗ (01 + 11)∗ .

8) L1 = (a + bb)∗ bba∗ , L2 = a∗ (bb)∗ a∗ .

9) L1 = b∗ ab(ab + a)∗ , L2 = b∗ a∗ ab.

10) L1 = a∗ b∗ (a + b)(bb)∗ , L2 = a∗ (aa + b)∗ .

11) L1 = (b + ab)∗ (a + ab)b∗ , L2 = (ab)∗ b∗ .

12) L1 = (aba + bab)∗ , L2 = (ab + ba)∗ .

13) L1 = b(a + ba)∗ (ab)∗ , L2 = b(a + ba + ab)∗ .

14) L1 = (aa + bb)∗ ba(a + b)∗ , L2 = (aa)∗ (bb)∗ a∗ b∗ .

15) L1 = ((a + b)∗ + (ab + ba)∗ )∗ , L2 = (a + b + ab + ba)∗ .

16) L1 = (1 + 01)∗ 010(10 + 01)∗ , L2 = (10)∗ (0 + 10)10(1 + 0)∗ .

17) L1 = (0 + 1)∗ 010∗ 1(111 + 01)∗ , L2 = 0∗ (10 + 11)∗ 0∗ (1 + 0)∗ .

18) L1 = 01(0 + 1 + 10)∗ 01∗ 0, L2 = 011((11)∗ (10)∗ )∗ 1∗ 001∗ .

19) L1 = (00 + 11)∗ 01(101 + 01)∗ , L2 = (0 + 1)∗ 1∗ (0 + 1)∗ 0∗ 10∗ .

20) L1 = (11 + 00)∗ (101 + 0)∗ , L2 = (11 + 000)∗ (1 + 01)∗ .

21) L1 = (101 + 111)∗ 0(01 + 10)∗ 1, L2 = 1∗ 0∗ .

22) L1 = (1 + 011)∗ (01 + 11)∗ , L2 = (11 + 00)∗ (01 + 10)∗ .

23) L1 = (aa + bbb)∗ b∗ ab∗ , L2 = a∗ (bab)∗ b∗ .

24) L1 = b∗ bba∗ (ab + b)∗ , L2 = a∗ ba∗ ab.


241

25) L1 = a∗ b∗ (a + b + ab + ba)ab∗ , L2 = a∗ (bb + aa)∗ .

26) L1 = (a + ab)∗ b∗ (b + ba)a∗ , L2 = (a + b)b∗ (ab + bb)∗ .

27) L1 = (aba + b)∗ (ab + a)∗ , L2 = (abb + baa)∗ .

28) L1 = b(a + b)∗ (bb + aab)∗ , L2 = a(a + ab)(b + ab)∗ .

29) L1 = (aa + bb)∗ a∗ ab(a + ba)∗ , L2 = (aa)∗ a(a + b)∗ (bb)∗ .

30) L1 = (ab)∗ (a + b)(b + a)(a + bab)∗ , L2 = ((a + b)∗ + (aa + bb)∗ )∗ .


ПРИЛОЖЕНИЕ D

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЙ КУРСОВОЙ


РАБОТЫ

Задание 1

Язык над алфавитом Σ = {0, 1}, состоящий из всех слов, в кото-


рых хотя бы на одной из последних трех позиций стоит 1.

(i) Построим ПЛ-грамматику G, порождающую L. Вначале будем


выводить (возможно пустой) префикс слова, а затем последние
три символа, контролируя момент первого написания единицы.
G = ({S, P, T0F , T1F , T1T , T2F , T2T }, {0, 1}, P, S )

S Ð→ P P Ð→ 0P ∣ 1P ∣ T0F T2T Ð→ 0 ∣ 1
T1F Ð→ 0T2F ∣ 1T2T T1T Ð→ 0T2T ∣ 1T2T T2F Ð→ 1
T0F Ð→ 0T1F ∣ 1T1T
Задание 1 243

(ii) Покажем L ⊂ L(G):


Предоставим алгоритм вывода произвольного слова w ∈ L
в нашей грамматике. Разобьем слово на префикс и послед-
ние три символа w = pt, ∣t∣ = 3. Префикс выведем продукци-
ями P Ð→ 0P ∣1P . Пусть k — номер первой единицы в под-
слове t. Тогда первые k-1 символов слова t выводятся про-
дукциями вида Ti−1F Ð→ 0TiF (i ∈ {1, .., k − 1}), единицу вы-
ведем Tk−1F Ð→ 1TkT , конец слова допишем продукциями
Ti−1T Ð→ 0TiT ∣1TiT (i ∈ {k + 1, .., 3}). Таким образом мы можем
вывести любое слово из L в грамматике G ⇒ L ⊂ L(G).

Покажем L(G) ⊂ L:
Все слова, которые выводятся в грамматике G, можно раз-
бить на префикс и 3х-символьный суффикс.
∀w ∈ L(G), w = pt, ∣t∣ = 3, p ∈ {0, 1}∗ Суффикс же содержит
по крайней мере одну единицу, так как вывод завершает-
ся, либо продукцией T9F Ð→ 1 и тогда единственная еди-
ница в слове стоит в самом конце слова, либо T9T Ð→ 0∣1,
а нетерминалы вида TiT выводятся только после написания
первой единицы суффикса. Следовательно, все выводимые
слова это слова написанные буквами из {0, 1} такие, что в
последних трех символах стоит по меньшей мере одна еди-
ница.
244 Приложение D. Пример выполнения заданий курсовой работы

(iii) Решим систему линейных уравнений с регулярными коэффици-


ентами:

S=P (1.1)
P = 0P + 1P + T0F (1.2)
T0F = 0T1F + 1T1T (1.3)
T1F = 0T2F + 1T2T (1.4)
T1T = 0T2T + 1T2T (1.5)
T2F = 1 (1.6)
T2T = 0 + 1 (1.7)

Для уравнений с 1.7 по 1.2 совершим последовательную подста-


новку снизу вверх, проводя упрощения. Получим:

S=P (1.8)
P = (0 + 1)P + 1(0 + 1)2 + (0 + 1)1(0 + 1) + (0 + 1)2 1 (1.9)

Затем для 1.9 применим формулу A = αA + β ⇒ A = α∗ β и подста-


вим результат в 1.8:

S = (0 + 1)∗ (1(0 + 1)2 + (0 + 1)1(0 + 1) + (0 + 1)2 1)

(iv) Построим M N D (рис. D.1, с. 245).


(v) Детерминируем M N D воспользовавшись алгоритмом детерми-
низации конечных автоматов: на рис. D.2 (с. 245) проведена таб-
лица работы алгоритма, на рис. D.3 (с. 246) преведен граф пере-
ходов результирующего детерминированного автомата M D .
Задание 1 245

q0 0 q1F 0 q2F
1 1 1
0+1
q1T 1 + 0 q2T 1 + 0 q3T

Рис. D.1.

q′ q 0 1
q0′ → {q0 } {q0 , q1F } {q0 , q1T }
q1′ {q0 , q1F } {q0 , q1F , q2F } {q0 , q1T , q2T }
q2′ {q0 , q1T } {q0 , q1F , q2T } {q0 , q1T , q2T }
q3′ {q0 , q1F , q2F } {q0 , q1F , q2F , q3F } {q0 , q1T , q2T , q3T }
q4′ {q0 , q1F , q2T } {q0 , q1F , q2F , q3T } {q0 , q1T , q2T , q3T }
q5′ {q0 , q1T , q2T } {q0 , q1F , q2T , q3T } {q0 , q1T , q2T , q3T }
q6′ {q0 , q1F , q2F , q3F } {q0 , q1F , q2F , q3F } {q0 , q1T q2T , q3T }
q7′ {q0 , q1F , q2F , q3T } {q0 , q1F , q2F , q3F } {q0 , q1T , q2T , q3T }
q8′ {q0 , q1F , q2T , q3T } {q0 , q1F , q2F , q3T } {q0 , q1T , q2T , q3T }
q9′ {q0 , q1T , q2T , q3T } {q0 , q1F , q2T , q3T } {q0 , q1T , q2T , q3T }

Рис. D.2.

(vi) Покажем, что L(M N D ) ⊂ L: Рассмотрим произвольное слово


w ∈ L, ∣w∣ = k . Рассмотрим работу автомата с этим словом на вхо-
де. Первые k − 3 символа прочтутся переходами по петле 0 + 1
246 Приложение D. Пример выполнения заданий курсовой работы

0 0 0
q0′ q1′ q3′ q6′

1 1 0
0
q5′ q8′
1 0
q2′

0 1 1
0 1 1
q7′ 0
0
q4′ 1
1

q9′

Рис. D.3.

(конечно, будут клоны, которые будут переходить в состояния


q1F , q1T и дальше, но они будут безусловно умирать, так как им
на прочтение будет оставаться больше трех символов), затем,
оставшиеся три символа будут прочтены автоматом, а так как
это слово из L, т. е. содержит по меньшей мере одну единицу в
суффиксе длины 3, то мы непременно прочтем в этих трех сим-
Задание 1 247

волах единицу и остановимся в q3T .


Покажем, что L ⊂ L(M N D ): Рассмотрим пути на графе автома-
та, которые заканчиваются в финальном состоянии q3T . Они все
состоят из некоторого числа проходов по петле 0 + 1, после чего
следует последовательность из трех переходов, безусловно со-
держащих по меньшей мере одну единицу.
Таким образом доказано, что L(M N D ) = L.
Из того, что мы строили M D по M N D с помощью алгоритма де-
терминизации конечных автоматов для которого доказана эк-
вивалентность в смысле равенства распознаваемых языков сле-
дует, что L(M N D ) = L(M D ).

(vii) Для минимизации M D вначале построим множества неразли-


чимых состояний. Для этого на первой итерации образуем два
множества неразличимых пустым словом состояний: финаль-
ные и не финальные. После чего на каждой итерации будем про-
верять, что два состояния из одного и того же множества нераз-
личимы по каждой букве, т. е. переходят в одно и тоже мно-
жество из прошлой итерации. Если на некоторой итерации i
они становятся различимы, то разделяем множество на подмно-
жества неразличимых состояний словами длины i. Повторяем
этот процесс пока множества не перестанут разделятся. Для ми-
нимизации автомата отождествим все неразличимые вершины
графа:
248 Приложение D. Пример выполнения заданий курсовой работы

Итерация №1: {q0′ , q1′ , q2′ , q3′ , q4′ , q5′ , q6′ }; {q7′ , q8′ , q9′ };

Итерация №2: {q0′ , q1′ , q2′ }; {q3′ , q6′ }; {q4′ , q5′ }; {q7′ }; {q8′ , q9′ };

Итерация №3: {q0′ }; {q1′ }; {q2′ }; {q3′ , q6′ }; {q4′ }; {q5′ }; {q7′ }; {q8′ }; {q9′ };

Итерация №4: {q0′ }; {q1′ }; {q2′ }; {q3′ , q6′ }; {q4′ }; {q5′ }; {q7′ }; {q8′ }; {q9′ };

D , показан на рис. D.4 (с. 249).


Результат минимизации, Mmin

Для доказательства минимальности M N D воспользуемся следу-


ющими рассуждениями: для распознавания слов из L и нерас-
познавания слов из L нам необходимо читать префикс слова,
что выполняет петля из q0 по 0 + 1 и читать суффикс убеждаясь,
что он имеет длину, равную 3, и содержит как минимум одну
единицу. Для подсчета числа прочитанных символов из суффик-
са достаточно трех вершин, но, так как необходимо контроли-
ровать еще и факт прочтения единицы в суффиксе, число необ-
ходимых состояний удваивается за счет того, что на каждом из
трех этапов мы можем как уже прочесть единицу, так и нет. Но
так как состояние обозначающее, что мы прочли три символа
суффикса и не встретили единицу — тупиковая ветвь нашего ав-
томата, то её можно выбросить допустив смерть клона читаю-
щего ноль в состоянии «прочтено два символа и не встречена
единица». Таким образом у нас остается шесть состояний все из
которых необходимы для успешного функционирования авто-
мата и мы убедились, что M N D минимален.
Задание 1 249

0 0
q0′ q1′ q3′ 0

1 1
0
q5′ q8′
1
0
q2′

0 1
0 1 1
q7′ 0
0
q4′ 1
1

q9′

Рис. D.4.

(viii) Воспользуемся методом последовательного исключения состо-


яний для того, чтобы выписать регулярное выражения для ав-
томатов L(M N D ) и L(M D ).

Обработка автомата L(M N D ) максимально проста и последова-


тельно показана на рисунках D.5 (a)–(d) (с. 252).
250 Приложение D. Пример выполнения заданий курсовой работы

В итоге мы получаем регулярное выражение

L(M N D ) = (0 + 1)∗ ((1(1 + 0) + 01)(1 + 0) + 001) =


(0 + 1)∗ ((11 + 10 + 01)(1 + 0) + 001) =
(0 + 1)∗ (001 + 010 + 011 + 100 + 101 + 110 + 111).

Обработка автомата L(M D ) приводит к более длительному про-


цессу. Первые четыре шага показаны на рисунках D.6 (a)–(b)
(с. 253) и D.7 (a)–(b) (с. 254).
Далее, добавим новое состояние, которое сделаем финальным и
в которое пустим спонтанные переходы из текущих финальных.
Также текущие финальные сделаем нефинальными. Результат и
последующие шаги показаны на рисунках D.8 (a)–(b) (с. 255) и
D.9 (a)–(b) (с. 256). На данных рисунках использованы следую-
щие обозначения:

K1 = (01 + 11)0 + (001 + (01 + 11)1 + 101 + 0000∗ 1)1,


K2 = (01 + 11)0 + (001 + (01 + 11)1 + 101 + 0000∗ 1)1 + 100(1 + 00∗ 1)1∗ 0,
K3 = 001 + (01 + 11)1 + 101 + 0000∗ 1 + 100(e + (1 + 00∗ 1)1∗ ),
K4 = e + 11∗ + 0(e + (1 + 00∗ 1)1∗ ),
K5 = 001 + (01 + 11)1 + 101 + 0000∗ 1 + 100(e + (1 + 00∗ 1)1∗ )+
((01 + 11)0 + (001 + (01 + 11)1 + 101 + 0000∗ 1)1 + 100(1 + 00∗ 1)1∗ 0)⋅
(10 + 0(1 + 00∗ 1)1∗ 0)∗ (e + 11∗ + 0(e + (1 + 00∗ 1)1∗ )).
Задание 1 251

В результате мы получаем регулярное выражение

L(M D ) = 001 + (01 + 11)1 + 101 + 0000∗ 1 + 100(e + (1 + 00∗ 1)1∗ )+


((01 + 11)0 + (001 + (01 + 11)1 + 101 + 0000∗ 1)1 + 100(1 + 00∗ 1)1∗ 0)⋅
(10 + 0(1 + 00∗ 1)1∗ 0)∗ (e + 11∗ + 0(e + (1 + 00∗ 1)1∗ )).

(ix) Автомат M D приведен на рис. D.10.

0 0
q0′ q1′ q3′ 0

1 1
0
q5′ 0
1
q8′
q2′ 1
1 1
0
0 0
q7′
0 1
1
q4′ q9′ 1

Рис. D.10.

L = e + 0 + 1 + 00 + 01 + 10 + 11 + (0 + 1)∗ 000.
252 Приложение D. Пример выполнения заданий курсовой работы

q0 0 q1F 0 q2F

1 1 1
0+1

q1T 1+0 q2T 1+0 q3T

(a)

q0 0 q1F
1(
1+
01
0) 1
0+1

q2T 1+0 q3T

(b)
0+1

q0

001
1(
1+
0)
+

1+0
01

q2T q3T

(c)
0+1
(1(1 + 0) + 01)(1 + 0) + 001
q0 q3T

(d)

Рис. D.5.
Задание 1 253

0 0 0
q0′ q1′ q3′ q6′ 0

1 1
q5′
1 0
0
q2′ 1

1
1 q8′
0
0

1
q7′
0 1 0
1
q4′ q9′ 1

(a)
0
q0′ q3′ q6′
00
0
01
+
11

q5′
0
0
1
1

10
1 q8′
0
0
1

q7′
0 1
1
q4′ q9′ 1

(b)

Рис. D.6.
254 Приложение D. Пример выполнения заданий курсовой работы

q0′ q6′
000
0

(01
+ 11)
0
00 0
1 +(
10 01 1
+1
1)
1 q8′
0
0

1
q7′
0 1
1
q4′ q9′ 1

(a)
(01 + 11)0
q0′ q8′
00
1+
(0
1
+
11
)1
100

1
10
1+
00
00

0

1 + 00∗ 1
q7′ q9′

(b)

Рис. D.7.
Задание 1 255

(01 + 11)0
q0′ q8′
00
1+
(0
1+
11
)1
100

e
+

1
10
1+
00
00

0

1
1 + 00∗ 1 qf′
q7′ q9′
e

1
e
(a)
10

K1
q0′ q8′
0
1∗

001
+(
1)
00 ∗

01
+1
1)1
+

e+

+
(1
100

101
11

+

000
0 ∗1
0

q7′ qf′
e + (1 + 00∗ 1)1∗

(b)

Рис. D.8.
256 Приложение D. Пример выполнения заданий курсовой работы

10 + 0(1 + 00∗ 1)1∗ 0

K2
q0′ q8′
K3

K4

K5
qf′ q0′ qf′

(a) (b)

Рис. D.9.
Задание 2 257

Задание 2
Σ = {a, b, c}, A = {bbab, ccac, bacb, baabc}.

(i) Для каждого слова wi ∈ A построить НКА MiN D , распознающий


наличие в произвольной строке s ∈ Σ∗ подстроки wi .

a) НКА, распознающий наличие в произвольной строке s ∈ Σ∗


подстроки w1 = bbab:

M1N D = ({q0 , q1 , q2 , q3 , q4 , qf }, {a, b, c}, δ, q0 , {qf }),

функция δ представлена на рисунке ниже.

Вход
δ
a b c

{q0 } {q0 } {q1 } { q0 }


{q1 } {q0 } {q2 } { q0 }
{q2 } {q4 } {q3 } { q0 }
{q3 } {q4 } {q2 , q3 } {q0 }
{q4 } {q0 } {qf } { q0 }
{qf } {∅} {∅} {∅}
b) НКА, распознающий наличие в произвольной строке s ∈ Σ∗
подстроки w2 = ссaс:

M2N D = ({q0 , q1 , q2 , q3 , q4 , qf }, {a, b, c}, δ, q0 , {qf }),

функция δ представлена на рис. D.11a (с. 258).


258 Приложение D. Пример выполнения заданий курсовой работы

Вход Вход
δ δ
a b c a b c

{q0 } {q0 } {q0 } {q1 } {q0 } {q0 } {q1 } { q0 }


{q1 } {q0 } {q0 } {q2 } {q1 } {q3 } {q2 } { q0 }
{q2 } {q4 } {q0 } {q3 } {q2 } {q3 } {q1 , q2 } {q0 }
{q3 } {q4 } {q0 } {q2 , q3 } {q3 } {q0 } {q1 , q2 } {q4 }
{q4 } {q0 } {q0 } {qf } {q4 } {q0 } {qf } { q0 }
{qf } {∅} {∅} {∅} {qf } {∅} {∅} {∅}

(a) (b)

Рис. D.11.

c) НКА, распознающий наличие в произвольной строке s ∈ Σ∗


подстроки w3 = bacb:

M3N D = ({q0 , q1 , q2 , q3 , q4 , qf }, {a, b, c}, δ, q0 , {qf }),

функция δ представлена на рис. D.11b.


d) НКА распознающий наличие в произвольной строке s ∈ Σ∗
подстроки w4 = baabc:

M4N D = ({q0 , q1 , q2 , q3 , q4 , q5 , qf }, {a, b, c}, δ, q0 , {qf }),

функция δ представлена на рис. D.12a (с. 259).

(ii) Для каждого НКА MiN D построить соответствующий ДКА MiD .


Задание 2 259

Вход Вход
δ δ
a b c a b c

{q0 } {q0 } {q1 } { q0 } {q0 } {q0 } {q1 } {q0 }


{q1 } {q3 } {q2 } { q0 } {q1 } {q0 } {q2 } {q0 }
{q2 } {q3 } {q2 } { q0 } {q2 } {q4 } {q3 } {q0 }
{q3 } {q4 } {q1 , q2 } {q0 } {q3 } {q4 } {q5 } {q0 }
{q4 } {q0 } {q5 } { q0 } {q4 } {q0 } {qf } {q0 }
{q5 } {q3 } {q1 , q2 } {qf } {q5 } {q4 } {q5 } {q0 }
{qf } {∅} {∅} {∅} {qf } {∅} {∅} {∅}

(a) (b)

Рис. D.12.

a) Для НКА M1N D соответствующий ДКА:

M1D = ({q0 , q1 , q2 , q3 , q4 , q5 , qf }, {a, b, c}, δ, q0 , {qf }),

с учетом переобозначения {q2 , q3 } = {q5 }, см. рис. D.12b.

b) Для НКА M2N D соответствующий ДКА:

M2D = ({q0 , q1 , q2 , q3 , q4 , q5 , qf }, {a, b, c}, δ, q0 , {qf }),

с учетом переобозначения {q2 , q3 } = {q5 }, см. рис. D.13a


(с. 260).
260 Приложение D. Пример выполнения заданий курсовой работы

Вход Вход
δ δ
a b c a b c

{q0 } {q0 } {q0 } {q1 } {q0 } {q0 } {q1 } {q0 }


{q1 } {q0 } {q0 } {q2 } {q1 } {q3 } {q2 } {q0 }
{q2 } {q4 } {q0 } {q3 } {q2 } {q3 } {q5 } {q0 }
{q3 } {q4 } {q0 } {q5 } {q3 } {q0 } {q5 } {q4 }
{q4 } {q0 } {q0 } {qf } {q4 } {q0 } {qf } {q0 }
{q5 } {q4 } {q0 } {q5 } {q5 } {q3 } {q5 } {q0 }
{qf } {∅} {∅} {∅} {qf } {∅} {∅} {∅}

(a) (b)

Рис. D.13.

c) Для НКА M3N D соответствующий ДКА:

M3D = ({q0 , q1 , q2 , q3 , q4 , q5 , qf }, {a, b, c}, δ, q0 , {qf })

с учетом переобозначения {q1 , q2 } = {q5 }, см. рис. D.13b.

d) Для НКА M4N D соответствующий ДКА:

M4D = ({q0 , q1 , q2 , q3 , q4 , q5 , q6 , qf }, {a, b, c}, δ, q0 , {qf })

с учетом переобозначения {q1 , q2 } = {q6 }, см. рис. D.14


(с. 261).
Задание 2 261

Вход
δ
a b c

{q0 } {q0 } {q1 } {q0 }


{q1 } {q3 } {q2 } {q0 }
{q2 } {q3 } {q2 } {q0 }
{q3 } {q4 } {q6 } {q0 }
{q4 } {q0 } {q5 } {q0 }
{q5 } {q3 } {q6 } {qf }
{q6 } {q3 } {q2 } {q0 }
{qf } {∅} {∅} {∅}

Рис. D.14.
262 Приложение D. Пример выполнения заданий курсовой работы

Задание 3

L1 = (aa + bb)∗ a∗ ab(a + ba)∗ , L2 = (aa)∗ a(a + b)∗ (bb)∗

Перед началом решения задания проведём вспомогательные по-


строения.
Граф переходов НКА для L1 :

a a
a a
b
a b a
1 4 5 6 8
a
b a
b b

3 7

Граф переходов НКА для L2 :

a, b
a a
b
a b b
1 3 4 5 6
b
Задание 3 263

Вход
δ
a b
Вход
→ {1} {2}, {4} {3} δ
{2} {1} {∅} a b

{3} {∅} {1} → {1} {2}, {3} {∅}


{4} {4} {5} {2} { 1} {∅}
{5} { 6} {7} {3} { 3} {3}, {4}
{6} { 6} {8} {4} {∅} {5}
{7} { 6} {∅} {5} {∅} {6}
{8} { 6} {∅} {6} {∅} {5}

(a) (b)

Рис. D.15.

Функции переходов δ для L1 и L2 показаны в табличном виде на


рисунках D.16 и D.17 соответственно.

(i) Вычислить регулярное выражение, определяющее язык L1 ∩ L2 .

Результат непосредственного применения известного алгорит-


ма приводит к таблице и графу переходов показанных на рисун-
ках D.16 (с. 264). и D.17 (с. 265).

Состояния 84, 74, 54, 75, 14, 35, 16, 34, 15, 36 являются непродук-
тивными, поэтому их можно удалить — см. рис. D.18 (с. 266).
264 Приложение D. Пример выполнения заданий курсовой работы

Вход
δ
a b

→ {1, 1} {2, 2}, {2, 3}, {4, 2}, {4, 3} {∅}


{2, 2} {1, 1} {∅}
{2, 3} {1, 3} {∅}
{1, 3} {2, 3}, {4, 3} {3, 3}, {3, 4}
{3, 3} {∅} {1, 3}, {1, 4}
{3, 4} {∅} {1, 5}
{1, 4} {∅} {3, 5}
{1, 5} {∅} {3, 6}
{3, 5} {∅} {1, 6}
{3, 6} {∅} {1, 5}
{1, 6} {∅} {3, 5}
{4, 2} {4, 1} {∅}
{4, 3} {4, 3} {5, 3}, {5, 4}
{4, 1} {4, 2}, {4, 3} {∅}
{5, 3} {6, 3} {7, 3}, {7, 4}
{5, 4} {∅} {7, 5}
{6, 3} {6, 3} {8, 3}, {8, 4}
{7, 3} {6, 3} {∅}
{7, 4} {∅} {∅}
{7, 5} {∅} {∅}
{8, 3} {6, 3} {∅}
{8, 4} {∅} {∅}

Рис. D.16.
Задание 3 265

22

a a
a b b
a b b
11 23 a 13 33 14 35 16
b b
a
a b
a b
b
42 43 34 15 36
a b
b
a a
a
b
41 54 75 84
a b
b

a b
53 63 83

b b a a

74 73

Рис. D.17.
266 Приложение D. Пример выполнения заданий курсовой работы

22

a a
a b
a
11 23 a 13 33
b
a a
a
a
a b
42 43 b 53 63 83
a
a
a a b a
a
41 73

Рис. D.18.
Задание 3 267

Воспользуемся методом последовательного исключения состо-


яний. Пустим ε-переходы из всех допускающих состояний в но-
вое состояние qf . Все допускающие состояния сделаем недопус-
кающими, а новое состояние qf — допускающим. Результат при-
веден на рис. D.19.

22

a a
a b
a
11 23 a 13 33
b
a
a
a

42 43 qf
a a
b
a a ε
a ε
a b
41 53 63 83
a
b a

73

Рис. D.19.
268 Приложение D. Пример выполнения заданий курсовой работы

1) Исключим состояние 83:

22

a a
a b
a
11 23 a 13 33
b
a
a
a

42 43 qf
a a + ba
b
a a ε
a ε
a
41 53 63

b a

73

2) Исключим состояние 73:

22

a a
a b
a
11 23 a 13 33
b
a
a
a

42 43 qf
a
a a
b
ε a + ba
a ε
a + ba
41 53 63
Задание 3 269

3) Исключим состояние 22:


aa
a b
a
11 23 a 13 33
b
a
a
a

42 43 qf
a
a a
b
ε a + ba
a ε
a + ba
41 53 63

4) Исключим состояние 33:


aa
a
a
11 23 a 13 bb

a
a
a

42 43 qf
a
a a
b
ε a + ba
a ε
a + ba
41 53 63
270 Приложение D. Пример выполнения заданий курсовой работы

5) Исключим состояние 13:

aa a(bb)∗ a

a
11 23

a
a a(bb)∗ a

42 43 qf
a
a a
b
ε a + ba
a ε
a + ba
41 53 63

6) Исключим состояние 41:

aa a(bb)∗ a

a
11 23

a
a a(bb)∗ a

aa qf
aa 42 43

b
ε a + ba
a ε
a + ba
53 63
Задание 3 271

7) Исключим состояние 42:

aa a(bb)∗ a

a
11 23

a + a(aa)∗ aa a(bb)∗ a

43 qf

b
ε a + ba
a ε
a + ba
53 63

8) Исключим состояние 23:


aa

11

a + a(aa)∗ aa + a(a(bb)∗ a)∗ a(bb)∗ a

43 qf

b
ε a + ba
a ε
a + ba
53 63
272 Приложение D. Пример выполнения заданий курсовой работы

9) Исключим состояние 43:


aa

11

(a + a(aa)∗ aa + a(a(bb)∗ a)∗ a(bb)∗ a)a∗ b


a + ba
53 63 a + ba
ε
ε

qf

10) Исключим состояние 63:


(a + a(aa)∗ aa + a(a(bb)∗ a)∗ a(bb)∗ a)a∗ b

ε + (a + ba)(a + ba)∗ ε
11 53 qf

aa
11) Исключим состояние 53:
aa

(a + a(aa)∗ aa + a(a(bb)∗ a)∗ a(bb)∗ a)a∗ b(ε + (a + ba)(a + ba)∗ )


11 qf

Получаем:

Reg = (aa)∗ (a + a(aa)∗ aa + a(a(bb)∗ a)∗ a(bb)∗ a)⋅


a∗ b(ε + (a + ba)(a + ba)∗ ).
Задание 3 273

(ii) Вычислить регулярное выражение, определяющее язык L1 △ L2 .

Напомним, что L1 △ L2 = (L1 /L2 ) ∪ (L2 /L1 ) = (L1 ∩ L2 ) ∪ (L2 ∩ L1 ).


Результат непосредственного применения известных конструк-
ций приводит к графу и таблице переходов показанных на ри-
сунках D.20 и D.21 (с. 274).

22

a a
a b b
a b b
11 23 a 13 33 14 35 16
b b
a
a b
a b
b
42 43 34 15 36
a b
b
a a
a
b
41 54 75 84
a
b b

a b
53 63 83

b b a a

74 73

Рис. D.20.
274 Приложение D. Пример выполнения заданий курсовой работы

Вход
δ
a b

→ {1, 1} {2, 2}, {2, 3}, {4, 2}, {4, 3} {∅}


{2, 2} {1, 1} {∅}
{2, 3} {1, 3} {∅}
{1, 3} {2, 3}, {4, 3} {3, 3}, {3, 4}
{3, 3} {∅} {1, 3}, {1, 4}
{3, 4} {∅} {1, 5}
{1, 4} {∅} {3, 5}
{1, 5} {∅} {3, 6}
{3, 5} {∅} {1, 6}
{3, 6} {∅} {1, 5}
{1, 6} {∅} {3, 5}
{4, 2} {4, 1} {∅}
{4, 3} {4, 3} {5, 3}, {5, 4}
{4, 1} {4, 2}, {4, 3} {∅}
{5, 3} {6, 3} {7, 3}, {7, 4}
{5, 4} {∅} {7, 5}
{6, 3} {6, 3} {8, 3}, {8, 4}
{7, 3} {6, 3} {∅}
{7, 4} {∅} {∅}
{7, 5} {∅} {∅}
{8, 3} {6, 3} {∅}
{8, 4} {∅} {∅}

Рис. D.21.
Задание 3 275

Состояния 74, 84 являются непродуктивными, поэтому их мож-


но удалить — рис. D.22.

22

a a
a b b
a b b
11 23 a 13 33 14 35 16
b b
a
a b
a b
b b
42 a 43 54 34 15 36
a b
a b
a a
b
a
41 53 63 75
b
a
b
a
73 83

Рис. D.22.

Воспользуемся методом последовательного исключения состо-


яний. Пустим ε-переходы из всех допускающих состояний в но-
вое состояние qf . Все допускающие состояния сделаем недопус-
кающими, а новое состояние qf — допускающим. Результат при-
веден на рис. D.23 (с. 276).
276 Приложение D. Пример выполнения заданий курсовой работы

22 14 16
b
b
a a b b
a b
a
11 23 a 13 33 36 35
b
a
a b b b
ε
a
ε ε b
42 a 43 34 15
a ε ε
a a ε
b
b ε qf
41 54 75
b
ε

b ε
53 73
a ε
a
b
63 83
a
a

Рис. D.23.
Задание 3 277

1) Исключим состояния 22, 36 и 16:


aa bb
a b
a b b
11 23 a 13 33 14 35
b
a bb
a b ε
a a ε ε b
42 43 34 15
a ε ε
a a ε
b
b ε qf
41 54 75
b
ε
b
53 73 ε
a ε
a
b
63 83
a
a
278 Приложение D. Пример выполнения заданий курсовой работы

2) Исключим состояние 75:


aa bb
a b
a b b
11 23 a 13 33 14 35
b
a bb
a b ε
a ε ε
a b
42 43 34 15
a ε ε
a a ε
b
ε + bε qf
41 54
b ε
ε
b a b
53 73 63 83
a a
a
3) Исключим состояние 83:
aa bb
a b
a b b
11 23 a 13 33 14 35
b
a bb
a b ε
a ε ε
a b
42 43 34 15
a ε ε
a a ε
b
ε + bε qf
41 54
b ε

b a
53 73 63
a
a + ba
Задание 3 279

4) Исключим состояние 35:


aa
a b
a b
11 23 a 13 33 14
b bb
a
a b ε
a ε ε
a b
42 43 34 15
a ε
a a
b
ε b(bb)∗ ε
ε+b qf
41 54
b ε
b
b a
53 73 63
a
a + ba
5) Исключим состояние 41:
aa
a b
a b
11 23 a 13 33 14
b bb
a a
a b ε
a ε ε
aa b
aa 42 43 34 15
ε
b
ε b(bb)∗ ε
b ε+b qf
54
ε
b
b a
53 73 63

a
a + ba
280 Приложение D. Пример выполнения заданий курсовой работы

6) Исключим состояние 15:


aa
b
a
a b
11 23 a 13 33 14
a b
a
a b
a ε
aa ε ε
aa 42 43 34
ε
b(bb)∗ ε b(bb)∗
b
b ε+b qf
54
ε
b
b a
53 73 63

a
a + ba
7) Исключим состояние 34:
aa
a b
a b
11 23 a 13 33 14
a b
a a
a
ε
aa ε
aa 42 43 ε + bb(bb)∗
ε
b b(bb)∗
b ε+b q
54 f

ε
b
b a
53 73 63

a
a + ba
Задание 3 281

8) Исключим состояние 14:


aa
a b
a
11 23 a 13 33
a b
a a
a
ε + bb(bb)∗
aa ε
aa 42 43 ε + bb(bb)∗
ε
b
b ε+b q
54 f

ε
b
b a
53 73 63

a
a + ba
9) Исключим состояние 33:
aa bb
a
a
11 23 a 13
a a
a
aa
a ε ε + bb(bb)∗ + b(ε + bb(bb)∗ )
aa 42 43
ε
b
b ε+b qf
54
ε
b
b a
53 73 63

a
a + ba
282 Приложение D. Пример выполнения заданий курсовой работы

10) Исключим состояние 54:


aa bb
a
a a
11 23 13
a a ε ε + bb(bb)∗ + b(ε + bb(bb)∗ )
a a

aa ε + b(ε + b)
aa 42 43 qf

ε
b
b
b a
53 73 63

a
a + ba
11) Исключим состояние 73:
aa bb
a
a a
11 23 13
a a ε ε + bb(bb)∗ + b(ε + bb(bb)∗ )
a a

aa ε + b(ε + b)
aa 42 43 qf


b
b
53 63
a + ba

a + ba
Задание 3 283

12) Исключим состояние 63:


aa bb
a
a a
11 23 13
a a ε ε + bb(bb)∗ + b(ε + bb(bb)∗ )
a a

aa ε + b(ε + b)
aa 42 43 qf

53 b + (a + ba)(a + ba)∗ b

13) Исключим состояние 42:


aa bb
a
a a
11 23 13
a ε ε + bb(bb)∗ + b(ε + bb(bb)∗ )
a
a + a(aa)∗ aa
ε + b(ε + b)
43 qf

b b + (a + ba)(a + ba)∗ b

53
284 Приложение D. Пример выполнения заданий курсовой работы

14) Исключим состояние 13:


aa aa

a
11 23

ε + a(bb)∗ (ε + bb(bb)∗ + b(ε + bb(bb)∗ ))


aa
a + a(aa)∗ aa
ε + b(ε + b)
43 qf

a
b

b + (a + ba)(a + ba)∗ b
53

15) Исключим состояние 23:


a(aa)∗ (ε + a(bb)∗ (ε + bb(bb)∗ + b(ε + bb(bb)∗ )))

11 aa qf

ε + b(ε + b)

a + a(aa)∗ aa + a(aa)∗ aa b + (a + ba)(a + ba)∗ b

b
a 43 53
Задание 3 285

16) Исключим состояние 53:


K3 K2
11 qf 43

K1
aa a

K1 = a + a(aa)∗ aa + a(aa)∗ aa,


K2 = ε + b(ε + b) + b(b + (a + ba)(a + ba)∗ b),
K3 = a(aa)∗ (ε + a(bb)∗ (ε + bb(bb)∗ + b(ε + bb(bb)∗ ))).

17) Исключим состояние 43:

a(aa)∗ (ε + a(bb)∗ (ε + bb(bb)∗ + b(ε + bb(bb)∗ )))

11 aa qf

(a + a(aa)∗ aa + a(aa)∗ aa)a∗ (ε + b(ε + b) + b(b + (a + ba)(a + ba)∗ b))

Получаем

Reg = (aa)∗ (a(aa)∗ (ε + a(bb)∗ (ε + bb(bb)∗ + b(ε + bb(bb)∗ )))


+ (a + a(aa)∗ aa + +a(aa)∗ aa)a∗ (ε + b(ε + b) + b(b + (a + ba)(a + ba)∗ b))).

(iii) Определить: совпадают ли языки L1 и L2 , является ли L1 допол-


нением L2 .
286 Приложение D. Пример выполнения заданий курсовой работы

1) Убедимся, что L1 не совпадает с L2 , взяв в качестве контрпри-


мера слово w = bbaba. Очевидно, w ∈ L1 и w ∉ L2 . Делаем вывод,
что L1 ≠ L2 .

2) Допустим, L1 = L2 . Приведем контрпример. Слово aaaab ∈ L1 ,

но при этом aaaab ∈ L2 . L1 ∪ L2 ≠ ∅, что противоречит определе-


нию дополнения языка.

(iv) Построить ε-НКА, распознающий один из языков LR R


1 или L2 .

НКА, распознающий язык L2 имеет вид :

a, b
a a
b
a b b
1 3 4 5 6
b

Следуя алгоритму, преобразуем его к ε-НКА, распознающему


язык LR
2:

1) Меняем направления дуг.

2) Начальное состояние автомата делаем единственным конеч-


ным.

3) Создаём новое начальное состояние qs с ε-переходами во все


исходные допускающие состояния.
Задание 3 287

M = ({qs , 1, 2, 3, 4, 5, 6}, {a, b}, δ, qs , {1})

2 qs

ε
a a ε
b
1 a 3 4 5 6
b b
b
a, b

(v) Вычислить регулярное выражение по построенному ε-НКА.

Воспользуемся методом исключения состояний:

1) Исключим состояние 6:

2 qs

ε
a a ε

1 a 3 4 5 bb
b b

a, b
288 Приложение D. Пример выполнения заданий курсовой работы

2) Исключим состояние 4:

2 qs

ε
a a ε

1 a 3 5 bb
bb

a, b

3) Исключим состояние 2:

qs

aa ε
ε

1 a 3 5 bb
bb

a, b

4) Исключим состояние 5:
a, b aa

ε + ε(bb)∗ bb a
qs 3 1
Задание 3 289

5) Исключим состояние 3:
aa

(ε + (bb)∗ bb)(a + b)∗ a


qs 1

Получаем: Reg = (ε + (bb)∗ bb)(a + b)∗ a(aa)∗ .


(vi) Построить ε-НКА, для одного из языков L1 L2 , L1 ∪ L2 или L∗1 .
На рис. D.25 (с. 290) показан ε-НКА, распознающий язык L∗1 .
(vii) Детерминизировать один из построенных ε-НКА.
См. рис. D.24.

Вход
δ Вход
a b ε
δ
{qs } {∅} {∅} {3}, {5} a b

{1} { 2} {∅} {∅} {qs , 3, 5} {1, 3} {3, 4, 6}


{2} { 1} {∅} {∅} {1, 3} {1, 2, 3} {3}
{3} {1}, {3} {3} {∅} {3, 4, 6} {1, 3} {3, 5}
{4} {∅} {3} {∅} {1, 2, 3} {1, 2, 3} {3}
{5} {∅} {4}, {6} {∅} {3} {1, 3} { 3}
{6} {∅} {5} {∅} {3, 5} {1, 3} {3, 4, 6}

(a) ε-НКА для языка LR


2 (b) Детерминизация

Рис. D.24.
290 Приложение D. Пример выполнения заданий курсовой работы

ε
ε

ε ε ε a ε a ε ε
30 0 1 2 4 6 8 10 11
ε ε
ε
b ε b
3 5 7 9 12
ε

13
ε a ε

14
ε

15
ε ε ε

16
a

17
ε

18

b
a ε b
27 26 24 22 19
ε ε ε
ε ε ε a ε ε
31 29 28 25 23 21 20

Рис. D.25.
Задание 3 291

Введем обозначения:

{qs , 3, 5} = A, {1, 3} = B, {3, 4, 6} = C,


{1, 2, 3} = D, {3} = E, {3, 5} = F.

Построим граф переходов:


b
a a
A B C
a
b a a b b

b
a D E F

Вам также может понравиться