Доказательство нерегулярности языков: лемма о разрастании
Лемма о разрастании (лемма о накачке, англ. pumping lemma) — лемма, позволяющая во многих случаях проверить, является ли данный язык регулярным.
Содержание
Лемма о разрастании[править]
Лемма (о разрастании, о накачке): |
Пусть регулярный язык над алфавитом , тогда существует такое , что для любого слова длины не меньше найдутся слова , для которых верно: и . — |
Доказательство: |
Пусть — регулярный язык над алфавитом . Поскольку регулярный язык является автоматным, то найдётся автомат , допускающий язык . Пусть — размер автомата. Докажем, что удовлетворяет условию леммы.
|
Замечание. Условие леммы не является достаточным для регулярности языка. (См. пример)
Лемма о разрастании в общем виде[править]
Лемма (о разрастании, о накачке в общем виде): |
Если язык является регулярным, то существует число такое что для любого слова из языка , где может быть записано в форме ,
где слова , и такие, что , и принадлежит языку для любого целого числа . |
Доказательство: |
Исходя из формулировки леммы в общем виде, стандартная версия леммы, которая описана выше, является особым случаем, в котором строки Доказательство леммы в общем виде аналогично доказательству стандартной версии леммы, с тем отличием, что строки и пусты. и теперь могут быть как не пусты, так и пусты. |
Замечание. Поскольку лемма в общем виде накладывает более жесткие требования на язык, то она может быть использована для доказательства нерегулярности многих других языков, таких как
.Использование леммы для доказательства нерегулярности языков[править]
Для доказательства нерегулярности языка часто удобно использовать отрицание леммы о разрастании. Пусть
— язык над алфавитом . Если для любого натурального найдётся такое слово из данного языка, что его длина будет не меньше и при любом разбиении на три слова такие, что непустое и длина не больше , существует такое , что , то язык нерегулярный.Рассмотрим такой подход на примере языка правильных скобочных последовательностей. Для фиксированного
предъявляем слово . Пусть как-то разбили на . Так как , то , где . Для любого такого разбиения берём и получаем , что не является правильной скобочной последовательностью. Значит, язык правильных скобочных последовательностей нерегулярен.Пример нерегулярного языка, для которого выполняется лемма о разрастании[править]
Пример языка, удовлетворяющего стандартной версии леммы[править]
Рассмотрим следующий язык:
Докажем, что он нерегулярный. Для этого рассмотрим вспомогательный язык
и докажем его нерегулярность. Воспользуемся предложенным в предыдущем пункте подходом. Для фиксированного выберем слово . Заметим, что при любом разбиении на слово не пусто (по условию леммы) и содержит только символы и (согласно выбранному слову и условию из леммы ). Это означает, что при слово либо не содержит символа , либо количество символов меньше . В обоих случаях полученное слово не принадлежит языку. Значит язык нерегулярный.Предположим, что язык
регулярный. Заметим, что . В силу того, что пересечение регулярных языков регулярно, имеем в правой части равенства регулярный язык. При этом в левой части стоит язык, нерегулярность которого была доказана ранее. Значит наше предположение неверно, и язык нерегулярный.Докажем, что язык удовлетворяет лемме о разрастании. Выберем в лемме
. Это означает, что длина рассматриваемых слов не меньше (иными словами ). Для каждого случая значений выберем соответствующие слова и из леммы. Легко проверить, что в каждом из приведенных ниже случаев условие леммы выполняется:- . Слово имеет вид . Выберем .
- . Слово имеет вид . Выберем .
- . Слово имеет вид . Выберем .
- . Слово имеет вид . Выберем .
- . Слово имеет вид . Выберем .
Таким образом, язык
удовлетворяет второй части леммы и при этом является нерегулярным, что доказывает тот факт, что лемма о разрастании не является достаточным для регулярности языка.Пример языка, удовлетворяющего лемме в общем виде[править]
Рассмотрим другой пример.
из символов слова является символом
Докажем, что он нерегулярный. Предположим, что некоторая строка языка
имеет длину . Поскольку в алфавите всего четыре символа, то как минимум два символа из пяти в этой строке будут одинаковыми, и они разделены максимум тремя символами:- Если дубликаты разделены нулями или единицами, накачаем один из двух остальных символов в строке, которые не повлияют на подстроку, которая содержит дубликаты.
- Если дубликаты разделены двойками или тройками, накачаем символа, разделяющих их. Накачка также уменьшает или увеличивает результат во время создания подстроки размера , которая содержит продублированных символа.
Второе условие языка
обеспечивает, что — нерегулярный, то есть в нем бесконечное число строк, которые принадлежат , но не могут быть получены путям разрастания некоторой меньшей строки в .См. также[править]
Источники информации[править]
- Wikipedia — Pumping lemma for regular languages
- Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 144. — ISBN 5-8459-0261-4