Регулярные языки
[73/19%]Ниже приведены диаграммы состояний двух ДКА, и . Ответьте на следующие вопросы для каждой из этих машин.
Что является начальным состоянием?
Что является множеством допускающих состояний?
Через какую последовательность состояний проходит машина при входной строке aabb?
Допускает ли машина строку aabb?
Допускает ли машина строку ?
Приведите формальное описание машин и , изображённых в упражнении 1.1.
Формальное описание ДКА — это , где задаётся следующей таблицей. Приведите диаграмму состояний этой машины.
| u | d | |
|---|---|---|
Каждый из следующих языков является пересечением двух более простых языков. В каждом пункте постройте ДКА для более простых языков, а затем объедините их с помощью конструкции, обсуждаемой в сноске 3 (стр. 46), чтобы получить диаграмму состояний ДКА для заданного языка. Во всех пунктах .
Каждый из следующих языков является дополнением более простого языка. В каждом пункте постройте ДКА для более простого языка, а затем, используя его, приведите диаграмму состояний ДКА для заданного языка. Во всех пунктах .
Приведите диаграммы состояний ДКА, распознающих следующие языки. Во всех пунктах алфавит равен .
Пустое множество
Все строки, кроме пустой строки
Приведите диаграммы состояний НКА с указанным числом состояний, распознающих каждый из следующих языков. Во всех пунктах алфавит равен .
Язык с тремя состояниями
Язык из упражнения 1.6c с пятью состояниями
Язык из упражнения 1.61 с шестью состояниями
Язык с двумя состояниями
Язык с тремя состояниями
Язык с тремя состояниями
Язык с одним состоянием
Язык 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 о замкнутости класса регулярных языков относительно операции звезды. [^fn1] Пусть распознаёт . Построим следующим образом. Предполагается, что распознаёт .
Состояния — это состояния .
Начальное состояние совпадает с начальным состоянием .
. Допускающие состояния — это старые допускающие состояния плюс начальное состояние.
Определим так, чтобы для любых и ,
(Подсказка: изобразите эту конструкцию графически, как на рисунке 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 показывает, что нельзя накачать. Таким образом, мы приходим к противоречию. Значит, не регулярен.
Для произвольной строки обращением , обозначаемым , называется строка , записанная в обратном порядке, . Для произвольного языка положим . Покажите, что если регулярен, то и регулярен.
Пусть
содержит все столбцы высотой 3, состоящие из нулей и единиц. Строка символов из задаёт три строки нулей и единиц. Будем считать каждую строку двоичным числом и положим
Например,
Покажите, что регулярен. (Подсказка: работать с проще. Вы можете использовать результат, утверждаемый в задаче 1.31.)
Пусть
Здесь содержит все столбцы высотой два, состоящие из нулей и единиц. Строка символов из задаёт две строки нулей и единиц. Будем считать каждую строку двоичным числом и положим
Например, , а . Покажите, что регулярен. (Вы можете использовать результат, утверждаемый в задаче 1.31.)
Пусть — то же, что и в задаче 1.33. Будем считать каждую строку двоичным числом и положим
Например, , а . Покажите, что регулярен.
Пусть — то же, что и в задаче 1.33. Будем считать верхнюю и нижнюю строки строками из нулей и единиц, и положим
Задача 1.33: содержит все столбцы из нулей и единиц высоты два,
Строка символов из задаёт две строки из нулей и единиц. Покажите, что не является регулярным.
Пусть . Покажите, что для каждого язык регулярен.
Пусть . Покажите, что для каждого язык регулярен.
all-NFA — это пятёрка , которая допускает , если каждое возможное состояние, в котором может оказаться после чтения входной строки , является состоянием из . Заметим, что, в отличие от него, обычный НКА допускает строку, если хотя бы одно из этих возможных состояний является допускающим. Докажите, что all-NFA распознают класс регулярных языков.
Конструкция из теоремы 1.54 показывает, что каждый ОНКА (обобщённый НКА, GNFA) эквивалентен ОНКА всего с двумя состояниями. Мы можем показать, что для ДКА имеет место противоположное явление. Докажите, что для каждого существует язык , который распознаётся ДКА с состояниями, но не распознаётся ни одним ДКА с состояниями.
Напомним, что строка является префиксом строки , если существует строка такая, что , и что является собственным префиксом , если, кроме того, . В каждом из следующих пунктов определяется операция над языком . Покажите, что класс регулярных языков замкнут относительно этой операции.
.
.
Для языков и назовём идеальным перемешиванием (perfect shuffle) и язык
Покажите, что класс регулярных языков замкнут относительно операции идеального перемешивания.
Для языков и назовём перемешиванием (shuffle) и язык
Покажите, что класс регулярных языков замкнут относительно операции перемешивания.
Пусть — произвольный язык. Определим как язык, содержащий все строки, которые можно получить, удалив один символ из некоторой строки языка . Таким образом, . Покажите, что класс регулярных языков замкнут относительно операции DROP-OUT. Приведите как доказательство «на картинке», так и более формальное доказательство с помощью построения, как в теореме 1.47.
Пусть и — языки над алфавитом . Определим . Покажите, что класс регулярных языков замкнут относительно операции .
- Пусть . Покажите, что если регулярен, а — произвольный язык, то регулярен.
Докажите, что следующие языки не являются регулярными. Вы можете использовать лемму о накачке и замкнутость класса регулярных языков относительно объединения, пересечения и дополнения.
[^fn1]
Пусть и . Докажите, что не является регулярным.
Пусть и . Так, , поскольку 101 содержит одно вхождение 01 и одно вхождение 10, а , поскольку 1010 содержит два вхождения 10 и одно вхождение 01. Покажите, что — регулярный язык.
Пусть . Покажите, что — регулярный язык.
Пусть . Покажите, что не является регулярным языком.
Изучите неформальное определение автомата-преобразователя (FST), данное в упражнении 1.24. Докажите, что ни один FST не может выдавать для каждой входной строки , если входной и выходной алфавиты равны .
Упражнение 1.24: Автомат-преобразователь с конечным числом состояний (FST) — это тип детерминированного конечного автомата, выход которого является строкой, а не просто допуском или отклонением. Каждый переход FST помечен двумя символами: один обозначает входной символ для этого перехода, а другой — выходной символ, причём эти два символа записываются через слэш, /, разделяющий их. Некоторые переходы могут иметь несколько пар вход-выход. Когда FST вычисляет на входной строке , он берёт входные символы по одному и, начиная с начального состояния, следует переходам, сопоставляя входные метки с последовательностью символов . Каждый раз, проходя по переходу, он выводит соответствующий выходной символ.
Пусть и — строки, а — произвольный язык. Будем говорить, что и различимы языком , если существует строка , такая что ровно одна из строк и принадлежит ; в противном случае, то есть если для каждой строки выполнено , как только , будем говорить, что и неразличимы языком . Если и неразличимы языком , будем писать . Покажите, что является отношением эквивалентности.
Теорема Майхилла-Нероуда. Обратитесь к задаче 1.51. Пусть — язык, а — множество строк. Будем говорить, что попарно различимо языком , если каждые две различные строки из различимы языком . Назовём индексом языка максимальное число элементов в множестве, попарно различимом языком . Индекс языка может быть конечным или бесконечным.
Покажите, что если распознаётся ДКА с состояниями, то индекс не превышает .
Покажите, что если индекс равен конечному числу , то распознаётся ДКА с состояниями.
Сделайте вывод, что регулярен тогда и только тогда, когда его индекс конечен. Более того, его индекс равен числу состояний наименьшего ДКА, распознающего его.
Пусть и
Покажите, что не является регулярным.
Рассмотрим язык .
Покажите, что не является регулярным.
Покажите, что ведёт себя как регулярный язык в лемме о накачке. Иными словами, укажите длину накачки и покажите, что удовлетворяет трём условиям леммы о накачке для этого значения .
Объясните, почему пункты (a) и (b) не противоречат лемме о накачке.
Лемма о накачке утверждает, что у каждого регулярного языка есть длина накачки , такая что любую строку языка длины не менее можно накачать. Если — длина накачки для языка , то и любая длина также является длиной накачки. Минимальной длиной накачки для называется наименьшее , являющееся длиной накачки для . Например, если , минимальная длина накачки равна 2. Причина в том, что строка принадлежит и имеет длину 1, но её нельзя накачать; однако любая строка из длины 2 или более содержит 1 и потому может быть накачана, если разбить её так, что , а — остаток. Для каждого из следующих языков укажите минимальную длину накачки и обоснуйте свой ответ.
0001*
(01)*
1011
- Если — множество натуральных чисел, а — натуральное число, большее 1, положим
Здесь мы не допускаем ведущих нулей в представлении числа. Например, и . Приведите пример множества , для которого регулярен, а не регулярен. Докажите, что ваш пример работает.
- Если — произвольный язык, пусть — множество всех первых половин строк из , то есть
Покажите, что если регулярен, то и регулярен.
- Если — произвольный язык, пусть — множество всех строк из с удалённой средней третью, то есть
Покажите, что если регулярен, то не обязательно регулярен.
- Пусть — ДКА, а — некоторое состояние , называемое его «домом». Синхронизирующей последовательностью для и называется строка , для которой при каждом . (Здесь мы расширили на строки, так что равно состоянию, в котором окажется , если начать в состоянии и прочитать вход .) Будем говорить, что синхронизируем, если для него существует синхронизирующая последовательность для некоторого состояния . Докажите, что если — синхронизируемый ДКА с состояниями, то у него есть синхронизирующая последовательность длины не более . Можете ли вы улучшить эту оценку?
Пусть . Для каждого пусть — язык, состоящий из всех строк, содержащих a ровно на -м месте от правого конца. Таким образом, . Опишите НКА с состояниями, распознающий , как в виде диаграммы состояний, так и в виде формального описания.
Рассмотрим языки , определённые в задаче 1.60. Докажите, что при каждом ни один ДКА не может распознавать , имея менее состояний.
Задача 1.60: Пусть . Для каждого пусть — язык, состоящий из всех строк, содержащих символ a ровно на -м месте от правого конца. Таким образом, .
Пусть . Для каждого пусть — язык, состоящий из всех строк, содержащих хотя бы одну a среди последних символов. Таким образом, . Опишите ДКА не более чем с состояниями, распознающий , как в виде диаграммы состояний, так и в виде формального описания.
Пусть — бесконечный регулярный язык. Докажите, что можно разбить на два бесконечных непересекающихся регулярных подмножества.
Пусть и — два языка. Будем писать , если и содержит бесконечно много строк, не принадлежащих . Покажите, что если и — два регулярных языка, для которых , то можно найти регулярный язык , для которого .
Пусть — НКА с состояниями, распознающий некоторый язык .
Покажите, что если непуст, то содержит некоторую строку длины не более .
Приведя пример, покажите, что пункт (a), вообще говоря, неверен, если заменить оба вхождения на .
Покажите, что если непусто, то содержит некоторую строку длины не более .
Покажите, что оценка из пункта (c) почти точна; то есть для каждого предъявите НКА, распознающий язык , для которого непусто, а кратчайшие строки в имеют длину, экспоненциальную по . Постарайтесь подойти к оценке из пункта (c) как можно ближе.
- Докажите, что для каждого существует язык , для которого
распознаётся НКА с состояниями, и
если для регулярных языков , то хотя бы для одного из требуется ДКА с экспоненциально большим числом состояний.
Гомоморфизмом называется функция , отображающая один алфавит в строки над другим алфавитом. Мы можем распространить на строки, определив , где и каждое . Далее мы распространим на языки, определив для произвольного языка .
Приведя формальное построение, покажите, что класс регулярных языков замкнут относительно гомоморфизма. Иными словами, по ДКА , распознающему , и гомоморфизму постройте конечный автомат , распознающий . Рассмотрим построенную вами машину . Является ли она ДКА в любом случае?
Приведя пример, покажите, что класс нерегулярных языков не замкнут относительно гомоморфизма.
- Назовём вращательным замыканием языка множество .
Покажите, что для любого языка выполнено .
Покажите, что класс регулярных языков замкнут относительно операции вращательного замыкания.
- В традиционном способе снятия колоды игральных карт колода произвольно делится на две части, которые меняются местами перед тем, как колода складывается заново. В более сложном варианте снятия, называемом снятием Скарна, колода делится на три части, и при сборке средняя часть кладётся первой. Возьмём снятие Скарна за основу для операции над языками. Для языка положим .
Предъявите язык , для которого .
Покажите, что класс регулярных языков замкнут относительно операции CUT.
Пусть . Пусть .
Покажите, что при каждом ни один ДКА не может распознавать , имея менее состояний.
Опишите значительно меньший НКА для — дополнения .
Определим операцию avoids («избегает») для языков и как avoids . Докажите, что класс регулярных языков замкнут относительно операции avoids.
Пусть .
Пусть . Покажите, что регулярен.
Пусть . Покажите, что не является регулярным.
Пусть и — ДКА, имеющие и состояний соответственно, и пусть .
Покажите, что если , то содержит некоторую строку , для которой .
Покажите, что если , то найдётся строка , не принадлежащая , для которой .
Пусть . Пусть . Покажите, что является КС-языком.