- •Курс лекций
- •Оглавление
- •Лекция 1 Языки и грамматики Языки
- •ГГрамматики
- •Лекция 2 Конечные автоматы Автоматы
- •Детерминированные конечные автоматы (распознаватели)
- •Языки и детерминированные конечные автоматы
- •Лекция 3 Конечные автоматы Недетерминированные конечные автоматы (распознаватели)
- •Эквивалентность дка и нка
- •Лекция 4 Конечные автоматы Минимизация конечных автоматов
- •Лекция 5 Регулярные выражения и регулярные грамматики
- •Регулярные выражения
- •Связь между регулярными выражениями и автоматными языками
- •Лекция 6 Регулярные выражения и регулярные грамматики Регулярные грамматики
- •Лекция 7 Свойства регулярных языков
- •Замкнутость класса регулярных языков
- •Алгоритмические проблемы регулярных языков
- •Лемма о расширении регулярных языков
- •Лекция 8 Контекстно-свободные языки
- •Контекстно-свободные грамматики
- •Лекция 9 Контекстно-свободные языки
- •Грамматический разбор
- •Неоднозначность грамматик и языков
- •Лекция 10 Преобразования кс‑грамматик и нормальные формы
- •Методы преобразования грамматик
- •Лекция 11 Преобразования кс‑грамматик и нормальные формы
- •Нормальные формы кс-грамматик
- •Лекция 12 Магазинные автоматы Магазинные автоматы
- •Недетерминированные магазинные автоматы
- •Лекция 13 Магазинные автоматы Магазинные автоматы и кс-языки
- •Лекция 14 Магазинные автоматы Детерминированные магазинные автоматы и детерминированные кс-языки
- •Лекция 15 Свойства контекстно-свободных языков
- •Лемма о расширении
- •Свойства замкнутости класса контекстно-свободных языков
- •Лекция 16 Свойства контекстно-свободных языков Некоторые алгоритмические проблемы для кс-языков
- •Предметный указатель
- •Формальные языки и грамматики Курс лекций
Лемма о расширении регулярных языков
следующий результат, известный как Лемма о расширении регулярных языков (Pumping Lemma) основан на том простом замечании, что в диаграмме переходов с n вершинами любой путь длины, большей или равной n, должен содержать цикл, т.е. повторяющуюся вершину.
Теорема 7.10.
Пусть L – бесконечный регулярный язык. Тогда существует целое число m > 0 такое, что для любой строки L, длина которой m, возможно представление
= ,
где 0 и m, такое, что для любого i = 0, 1, 2, ... строка
i = i
также принадлежит L.
Доказательство.
Если язык L регулярный, тогда существует ДКА M, который распознает его. Пусть
q0, q1, ..., qn
– множество всех состояний автомата M. Возьмем любую строку L такую, что
= k m = n+1.
Так как по предположению L бесконечен, то такая достаточно длинная строка всегда найдется. Рассмотрим все те состояния автомата M, через которые он проходит, когда прочитывает строку ; пусть это будут состояния
q0, qi, qj, ..., qf.
Так как эта последовательность имеет k + 1 вершину и
k + 1 > n + 1,
то, как минимум, одна вершина должна повториться, по крайней мере, на n-м шаге. Таким образом, последовательность должна иметь следующий вид:
q0, qi, qj, ..., qr, ..., qr, ..., qf .
причем, очевидно, можно считать, что последовательность q0, qi, qj, ..., qr ,…, qr уже не содержит других повторяющихся элементов, кроме последнего qr .
Но тогда должны существовать подстроки , , строки такие, что
*(q0, ) = qr,
*(qr, ) = qr,
*(qr, ) = qf,
причем n+1 = m и 1. Отсюда непосредственно получаем, что
*(q0, ) = qf,
а также
*(q0, 2) = qf,
*(q0, 3) = qf,
и так далее, что и завершает доказательство.
Заметим, что Лемма о расширении применима только к бесконечным языкам, так как любая достаточно длинная строка языка сразу порождает бесконечное множество строк этого же языка.
Впрочем, это не является недостатком, так как все конечные языки заведомо регулярны, а Лемма о расширении главным образом применяется для доказательства того, что какой-то данный язык не является регулярным. Это доказательство всегда проводится по принципу "от противного", чтобы затем получить противоречие. Но, как и любое другое необходимое условие, Лемма о расширении не может использоваться для доказательства регулярности какого-то языка.
Пример 7.11.
Показать, используя Лемму о расширении, что язык
L = {an bn n 0}
не является регулярным.
Допустим противное, т.е. что язык L – регулярный. Тогда для L справедлива Лемма о расширении, а значит, и должно существовать такое m, что если = n > m, где L, то можно представить в виде .
Для строки возможны три случая:
1) = аk,
2) = bt
3) = akbt.
В каждом из этих случаев мы получаем:
1) i = an - k (ak)i bn,
2) i = an (bt)i bn - t,
3) i = an - k (akbt)i bn - t.
Полагая i = 2, убеждаемся, что ни в одном из случаев 2 не принадлежит L, что противоречит утверждению Леммы о расширении. Следовательно, наше первоначальное предположение о регулярности языка L неверно, т.е. язык {anbn n 0} не является регулярным.
Пример 7.12.
Показать, что язык
L = {anbm n m, n 0, m 0}
не является регулярным.
Можно и здесь попытаться прямо использовать Лемму о расширении, но мы дадим более изящное решение, опирающееся на предыдущий пример. Допустим, что L – регулярный язык. Тогда регулярным должен быть и язык
L1 = L(a* b*).
Но L1 = {an bn n 0} и, как уже было показано, не является регулярным. Следовательно, и L не может быть регулярным.