- •Глава 10 Регулярные языки
- •Алгоритм преобразования регулярной грамматики к автоматному виду
- •Пример преобразования регулярной грамматики к автоматному виду
- •Детерминированные и недетерминированные конечные автоматы
- •Преобразование конечного автомата к детерминированному виду
- •Минимизация конечных автоматов
- •Регулярные выражения. Свойства регулярных выражений
- •Уравнения с регулярными коэффициентами
- •Связь регулярных выражений и регулярных грамматик
- •Построение леволинейной грамматики для языка, заданного регулярным выражением
- •Построение регулярного выражения для языка, заданного леволинейной грамматикой
- •Связь регулярных выражений и конечных автоматов
- •Построение конечного автомата для языка, заданного регулярным выражением
- •Связь регулярных грамматик и конечных автоматов
- •Построение конечного автомата на основе леволинейной грамматики
- •Построение леволинейной грамматики на основе конечного автомата
- •Пример построения конечного автомата на основе заданной грамматики
- •Лемма о разрастании для регулярных языков
Лемма о разрастании для регулярных языков
Иногда бывает необходимо доказать, является или нет некоторый язык регулярным. Конечно, можно пойти путем поиска определения для цепочек заданного языка через один из рассмотренных выше способов (регулярные грамматики, конечные автоматы и регулярные выражения). Если для этого языка хотя бы один из способов будет определен, следовательно, язык является регулярным (и на основании одного найденного способа определения языка можно найти остальные). Но если не удается построить определение языка ни одним из этих способов, то остается неизвестным: то ли язык не является регулярным, то ли просто не удалось найти определение для него.
Однако существует простой метод проверки, является или нет заданный язык регулярным. Этот метод основан на проверке так называемой леммы о разрастании языка. Доказано, что если для некоторого заданного языка выполняется лемма о разрастании регулярного языка, то этот язык является регулярным; если же лемма не выполняется, то и язык регулярным не является [6, т. 1].
Лемма о разрастании для регулярных языков формулируется следующим образом: если дан регулярный язык и достаточно длинная цепочка символов, принадлежащая этому языку, то в этой цепочке можно найти непустую подцепочку, которую можно повторить сколь угодно много раз, и все полученные таким способом новые цепочки будут принадлежать тому же регулярному языку2.
Возможны и другие способы представления регулярных множеств, а для них разрешимость указанных проблем будет уже не очевидна.
Если найденную подцепочку повторять несколько раз, то исходная цепочка как бы «разрастается» — отсюда и название «лемма о разрастании языков».
Формально эту лемму можно записать так: если дан язык L, то 3 константа β > О, такая, что если aeL и |а|>β, то цепочку а можно записать в виде a = δβs, где О < |β| < β, и тогда a' = Sβ'S, a'eL Vi > 0.
Используя лемму о разрастании регулярных языков, докажем, что язык L = {anbn | n > 0} не является регулярным.
Предположим, что этот язык регулярный, тогда для него должна выполняться лемма о разрастании. Возьмем некоторую цепочку этого языка a = anbn и запишем ее в виде a - δβе. Если βеа* или Peb0+, то тогда для i = 0 цепочка δβ°ε = δs не принадлежит языку L, что противоречит условиям леммы; если же βеа+b+, тогда для i = 2 цепочка δβ2е = 5рре не принадлежит языку L. Таким образом, язык L не может быть регулярным языком.
Контрольные вопросы и задачи
Вопросы
1. В чем заключается отличие автоматных грамматик от других регулярных грамматик? Всякая ли регулярная грамматика является автоматной? Всякая ли регулярная грамматика может быть преобразована к автоматному виду?
2. Если язык, заданный регулярной грамматикой, содержит пустую цепочку, то может ли он быть задан автоматной грамматикой?
3. Можно ли граф переходов конечного автомата использовать для однозначного определения данного автомата (и если нет — то почему)?
4. Всегда ли недетерминированный КА может быть преобразован к детерминированному виду (если нет — то в каких случаях)?
5. Какое максимальное количество состояний может содержать детерминированный КА после преобразования из недетерминированного КА? Всегда ли это количество состояний можно сократить?
6. Являются ли регулярными множествами следующие множества: О множество целых натуральных чисел; О множество вещественных чисел; О множество всех слов русского языка;
О множество всех возможных строковых констант в языке Pascal; О множество иррациональных чисел; О множество всех возможных вещественных констант языка С?
7. На основании свойств регулярных выражений докажите следующие тождества для произвольных регулярных выражений а, р, у и 5:
8. Используя свойства регулярных множеств, проверьте, являются ли истинными следующие тождества для произвольных регулярных выражений а и р:
9. Почему возможны две формы записи уравнений с регулярными коэффициентами? Как они соотносятся с двумя классами регулярных грамматик?
10. Можно ли для языка, заданного леволинейной грамматикой, построить праволинейную грамматику, задающую эквивалентный язык?
11. Всякая ли регулярная грамматика является однозначной? Если нет, то приведите пример неоднозначной регулярной грамматики.
12. Можно ли для двух леволинейных грамматик доказать, что они задают один и тот же язык? Можно ли выполнить то же самое доказательство для леволинейной и праволинейной грамматик?
Задачи
1. Определите, какие из перечисленных ниже грамматик являются регулярными, леволинейными, праволинейными, автоматными:
2. Докажите (любым способом), что грамматики G3, G4 и G5 из задачи № 1 задают один и тот же язык.
3. Преобразуйте к автоматному виду грамматики G3 и G4 из задачи № 1.
4. Постройте КА на основании грамматик G4 или G5 из задачи № 1. Преобразуйте построенный автомат к детерминированному виду.
5. Задан КА: M({H.I.S.E.F.G}. {b.d}, δ. Н, {S}). δ(H.b) = {I.S}. δ(H,d) = {Е}, δ(1.Ь) - {I.S}. δ(1,d) - {I.S}, δ(E.b) = {E.F}, δ(E,d) = {E.F}, S(F.b) = {E}. δ(F,d) = {E}, δ(G,b) = {F.S}, δ(G,d) = {S}; минимизируйте его и постройте эквивалентный ДКА.
6. Задан KA:M({S,R,Z}. {а.Ь}, δ. S, {Z}). δ(S.a) = {S.R}. δ(R.b) = {R}. δ(R.a) = {Z}. Преобразуйте его к детерминированному виду и минимизируйте полученный КА.
7. Постройте и решите систему уравнений с регулярными коэффициентами для грамматики G4 из задачи № 1. Какой язык задает эта грамматика?
8. Докажите, что уравнение с регулярными коэффициентами X = аХ + (3 имеет решение X = а*(β + у), где у обозначает произвольное множество, в том случае, когда множество, обозначенное выражением а, содержит пустую цепочку. (Указание: поскольку множество, обозначенное выражением а, содержит пустую цепочку, то выражение а можно представить в виде а = δ + λ, при этом а* = δ*.)
9. Решите систему уравнений с регулярными коэффициентами над алфавитом
10. Постройте регулярную грамматику, которая бы описывала язык строк, целочисленных констант и строковых констант языка Pascal. Постройте и решите систему уравнений с регулярными коэффициентами на основе этой грамматики.
11. С помощью леммы о разрастании для регулярных языков докажите, что язык l1 = {an,bn | n > 2} не является регулярным, а язык L2 - {anbm | n > 1, m > 2} — является регулярным.
