Упражнения
[30/60%]ᴬ Ниже приведены диаграммы состояний двух ДКА, и . Ответьте на следующие вопросы для каждой из этих машин.
Что является начальным состоянием?
Что является множеством допускающих состояний?
Через какую последовательность состояний проходит машина при входной строке aabb?
Допускает ли машина строку aabb?
Допускает ли машина строку ?
ᴬ Приведите формальное описание машин и , изображённых в упражнении 1.1.
Формальное описание ДКА — это , где задаётся следующей таблицей. Приведите диаграмму состояний этой машины.
| u | d | |
|---|---|---|
Каждый из следующих языков является пересечением двух более простых языков. В каждом пункте постройте ДКА для более простых языков, а затем объедините их с помощью конструкции, обсуждаемой в сноске 3 (стр. 46), чтобы получить диаграмму состояний ДКА для заданного языка. Во всех пунктах .
ᴬ
ᴬ
Каждый из следующих языков является дополнением более простого языка. В каждом пункте постройте ДКА для более простого языка, а затем, используя его, приведите диаграмму состояний ДКА для заданного языка. Во всех пунктах .
ᴬ
ᴬ
Приведите диаграммы состояний ДКА, распознающих следующие языки. Во всех пунктах алфавит равен .
Пустое множество
Все строки, кроме пустой строки
Приведите диаграммы состояний НКА с указанным числом состояний, распознающих каждый из следующих языков. Во всех пунктах алфавит равен .
ᴬ Язык с тремя состояниями
Язык из упражнения 1.6c с пятью состояниями
Язык из упражнения 1.6l с шестью состояниями
Язык с двумя состояниями
Язык с тремя состояниями
ᴬ Язык с тремя состояниями
Язык с одним состоянием
Язык 0* с одним состоянием
Используя конструкцию из доказательства теоремы 1.45, приведите диаграммы состояний НКА, распознающих объединение языков, описанных в
упражнениях 1.6a и 1.6b.
упражнениях 1.6c и 1.6f.
Используя конструкцию из доказательства теоремы 1.47, приведите диаграммы состояний НКА, распознающих конкатенацию языков, описанных в
упражнениях 1.6g и 1.6i.
упражнениях 1.6b и 1.6m.
Используя конструкцию из доказательства теоремы 1.49, приведите диаграммы состояний НКА, распознающих звезду языков, описанных в
упражнении 1.6b.
упражнении 1.6j.
упражнении 1.6m.
ᴬ Докажите, что любой НКА можно преобразовать в эквивалентный ему НКА с единственным допускающим состоянием.
Пусть . Приведите ДКА с пятью состояниями, распознающий , и регулярное выражение, порождающее . (Подсказка: опишите более простым способом.)
Пусть — язык всех строк над , не содержащих пары единиц, разделённых нечётным числом символов. Приведите диаграмму состояний ДКА с пятью состояниями, распознающего . (Возможно, будет полезно сначала найти НКА с 4 состояниями для дополнения .)
Покажите, что если — ДКА, распознающий язык , то при взаимной замене допускающих и недопускающих состояний в получается новый ДКА, распознающий дополнение . Сделайте вывод, что класс регулярных языков замкнут относительно операции дополнения.
Приведя пример, покажите, что если — НКА, распознающий язык , то при взаимной замене допускающих и недопускающих состояний в не обязательно получается новый НКА, распознающий дополнение . Замкнут ли класс языков, распознаваемых НКА, относительно операции дополнения? Обоснуйте свой ответ.
Приведите контрпример, показывающий, что следующая конструкция не доказывает теорему 1.49 о замкнутости класса регулярных языков относительно операции звезды. 1 Пусть распознаёт . Построим следующим образом. Предполагается, что распознаёт .
Footnotes
-
Иными словами, вы должны предъявить конечный автомат , для которого построенный автомат не распознаёт звезду языка . ↩
Состояния — это состояния .
Начальное состояние совпадает с начальным состоянием .
. Допускающие состояния — это старые допускающие состояния плюс начальное состояние.
Определим так, чтобы для любых и ,
(Подсказка: изобразите эту конструкцию графически, как на рисунке 1.50.)
Используя конструкцию из теоремы 1.39, преобразуйте следующие два недетерминированных конечных автомата в эквивалентные им детерминированные конечные автоматы.
Постройте НКА, распознающий язык .
Преобразуйте этот НКА в эквивалентный ДКА. Приведите только ту часть ДКА, которая достижима из начального состояния.
Приведите регулярные выражения, порождающие следующие языки (ср. упражнение 1.6). Во всех пунктах алфавит равен .
Пустое множество
Все строки, кроме пустой строки
(((00)*(11))
a(ba)*b
Используя процедуру, описанную в лемме 1.60, преобразуйте следующие конечные автоматы в регулярные выражения.
В некоторых языках программирования комментарии располагаются между разделителями вида / и /. Пусть — язык всех корректно оформленных строк-комментариев с такими разделителями. Элемент должен начинаться с / и заканчиваться на /, но не должен содержать / внутри себя. Для простоты будем считать, что алфавит для — это .
Постройте ДКА, распознающий .
Приведите регулярное выражение, порождающее .
ᴬ Пусть — произвольный язык над алфавитом . Докажите, что тогда и только тогда, когда .
Конечный автомат-преобразователь (finite state transducer, FST) — это разновидность детерминированного конечного автомата, выходом которого является строка, а не просто допуск или отказ. Ниже приведены диаграммы состояний автоматов-преобразователей и .
Каждый переход FST помечен двумя символами: один задаёт входной символ для этого перехода, а другой — выходной символ. Эти два символа записываются через косую черту, /, разделяющую их. В переход из в имеет входной символ 2 и выходной символ 1. У некоторых переходов может быть несколько пар вход-выход, как, например, у перехода из из в себя. Когда FST работает на входной строке , он считывает входные символы один за другим и, начиная с начального состояния, следует по переходам, сопоставляя входные метки с последовательностью символов . Каждый раз, проходя по переходу, автомат выдаёт соответствующий выходной символ. Например, на входе 2212011 машина проходит последовательность состояний и выдаёт на выходе 1111000. На входе abbb автомат выдаёт на выходе 1011. Укажите последовательность состояний и результат работы для каждого из следующих пунктов.
на входе 011
на входе 211
на входе 121
на входе 0202
на входе b
на входе bbab
на входе bbbbbb
на входе
Изучите неформальное определение автомата-преобразователя (FST), данное в упражнении 1.24. Дайте формальное определение этой модели по образцу определения 1.5 (стр. 35). Считайте, что у FST есть входной алфавит и выходной алфавит , но нет множества допускающих состояний. Включите в определение формальное описание вычисления FST. (Подсказка: FST — это пятёрка. Его функция переходов имеет вид .)
Упражнение 1.24: Автомат-преобразователь с конечным числом состояний (FST) — это тип детерминированного конечного автомата, выход которого является строкой, а не просто допуском или отклонением. Каждый переход FST помечен двумя символами: один обозначает входной символ для этого перехода, а другой — выходной символ, причём эти два символа записываются через слэш, /, разделяющий их. Некоторые переходы могут иметь несколько пар вход-выход. Когда FST вычисляет на входной строке , он берёт входные символы по одному и, начиная с начального состояния, следует переходам, сопоставляя входные метки с последовательностью символов . Каждый раз, проходя по переходу, он выводит соответствующий выходной символ.
Используя решение, полученное в упражнении 1.25, приведите формальное описание машин и , изображённых в упражнении 1.24.
Изучите неформальное определение автомата-преобразователя (FST), данное в упражнении 1.24. Приведите диаграмму состояний FST со следующим поведением. Его входной и выходной алфавиты — . Его выходная строка совпадает с входной строкой на чётных позициях, но инвертирована на нечётных позициях. Например, на входе 0000111 он должен выдавать 1010010.
Упражнение 1.24: Автомат-преобразователь с конечным числом состояний (FST) — это тип детерминированного конечного автомата, выход которого является строкой, а не просто допуском или отклонением. Каждый переход FST помечен двумя символами: один обозначает входной символ для этого перехода, а другой — выходной символ, причём эти два символа записываются через слэш, /, разделяющий их. Некоторые переходы могут иметь несколько пар вход-выход. Когда FST вычисляет на входной строке , он берёт входные символы по одному и, начиная с начального состояния, следует переходам, сопоставляя входные метки с последовательностью символов . Каждый раз, проходя по переходу, он выводит соответствующий выходной символ.
Преобразуйте следующие регулярные выражения в НКА, используя процедуру из теоремы 1.54. Во всех пунктах .
Используя лемму о накачке, покажите, что следующие языки не являются регулярными.
ᴬ
ᴬ (Здесь означает строку из букв a.)
Опишите ошибку в следующем «доказательстве» того, что не является регулярным языком. (Ошибка обязательно есть, поскольку регулярен.) Доказательство ведётся от противного. Предположим, что регулярен. Пусть — длина накачки для , задаваемая леммой о накачке. Возьмём в качестве строку . Мы знаем, что принадлежит , но пример 1.73 показывает, что нельзя накачать. Таким образом, мы приходим к противоречию. Значит, не регулярен.