Доказательство нерегулярности языков: лемма о разрастании — различия между версиями
Gr1n (обсуждение | вклад) (→Литература) |
Gr1n (обсуждение | вклад) (→Пример нерегулярного языка, для которого выполняется лемма о разрастании) |
||
Строка 21: | Строка 21: | ||
== Пример нерегулярного языка, для которого выполняется лемма о разрастании== | == Пример нерегулярного языка, для которого выполняется лемма о разрастании== | ||
− | Рассмотрим следующий язык: <tex>L= \{ a^{i}b^{j}c^{k} \mid i \ge | + | Рассмотрим следующий язык: <tex>L= \{ a^{i}b^{j}c^{k} \mid i \ge 2, j \ge 1, k \ge 1\} \cup \{ ab^{i}c^{i} \mid i \ge 1\}</tex> |
− | '''Докажем, что он нерегулярный.''' Для этого рассмотрим вспомогательный язык <tex>L'= \{ ab^{ | + | '''Докажем, что он нерегулярный.''' Для этого рассмотрим вспомогательный язык <tex>L'= \{ ab^{i}c^{i} \mid i \ge 1\}</tex> и докажем его нерегулярность. Воспользуемся предложенным в предыдущем пункте подходом. Для фиксированного <tex>n</tex> выберем слово <tex>\omega=ab^nc^n</tex>. Заметим, что при любом разбиении <tex>\omega</tex> на <tex>x, y, z</tex> слово <tex> y </tex> не пусто (по условию леммы) и содержит только символы <tex> a </tex> и <tex> b </tex> (согласно выбранному слову и условию из леммы <tex>|xy|\leqslant n</tex>). Это означает, что при <tex> k = 0 </tex> слово <tex>xy^kz</tex> либо не содержит символа <tex> a </tex>, либо количество символов <tex> b</tex> меньше <tex> n </tex>. В обоих случаях полученное слово не принадлежит языку. Значит язык <tex> L' </tex> нерегулярный. |
− | Предположим, что язык <tex> L </tex> регулярный. Заметим, что <tex>L' = L \cap | + | Предположим, что язык <tex> L </tex> регулярный. Заметим, что <tex>L' = L \cap \{ab^{*}c^{*}\} </tex>. В силу того, что пересечение регулярных языков регулярно, имеем в правой части равенства регулярный язык. При этом в левой части стоит язык, нерегулярность которого была доказана ранее. Значит наше предположение неверно, и язык <tex> L </tex> нерегулярный. |
'''Докажем, что язык удовлетворяет лемме о разрастании.''' Выберем в лемме <tex> n = 2 </tex>. Это означает, что длина рассматриваемых слов не меньше <tex> 2 </tex> (иными словами <tex> i + j + k \ge 2 </tex>). Для каждого случая значений <tex> i, j, k </tex> выберем соответствующие слова <tex> x, y </tex> и <tex> z </tex> из леммы. Легко проверить, что в каждом из приведенных ниже случаев условие леммы выполняется: | '''Докажем, что язык удовлетворяет лемме о разрастании.''' Выберем в лемме <tex> n = 2 </tex>. Это означает, что длина рассматриваемых слов не меньше <tex> 2 </tex> (иными словами <tex> i + j + k \ge 2 </tex>). Для каждого случая значений <tex> i, j, k </tex> выберем соответствующие слова <tex> x, y </tex> и <tex> z </tex> из леммы. Легко проверить, что в каждом из приведенных ниже случаев условие леммы выполняется: |
Версия 17:05, 12 декабря 2013
Лемма о разрастании[1](Pumping lemma) — лемма, позволяющая во многих случаях проверить, является ли данный язык регулярным.
Лемма о разрастании
Содержание
Лемма (о разрастании, о накачке): |
Пусть регулярный язык над алфавитом , тогда существует такое , что для любого слова длины не меньше найдутся слова , для которых верно: и . — |
Доказательство: |
Пусть — регулярный язык над алфавитом . Поскольку регулярный язык является автоматным, то найдётся автомат , допускающий язык . Пусть — размер автомата. Докажем, что удовлетворяет условию леммы.
|
Замечание. Условие леммы не является достаточным для регулярности языка. (См. пример)
Использование леммы для доказательства нерегулярности языков
Для доказательства нерегулярности языка часто удобно использовать отрицание леммы о разрастании. Пусть
— язык над алфавитом . Если для любого натурального найдётся такое слово из данного языка, что его длина будет не меньше и при любом разбиении на три слова такие, что непустое и длина не больше , существует такое , что , то язык нерегулярный.Рассмотрим такой подход на примере языка правильных скобочных последовательностей. Для фиксированного
предъявляем слово . Пусть как-то разбили на . Так как , то , где . Для любого такого разбиения берём и получаем , что не является правильной скобочной последовательностью. Значит, язык правильных скобочных последовательностей нерегулярен.Пример нерегулярного языка, для которого выполняется лемма о разрастании
Рассмотрим следующий язык:
Докажем, что он нерегулярный. Для этого рассмотрим вспомогательный язык
и докажем его нерегулярность. Воспользуемся предложенным в предыдущем пункте подходом. Для фиксированного выберем слово . Заметим, что при любом разбиении на слово не пусто (по условию леммы) и содержит только символы и (согласно выбранному слову и условию из леммы ). Это означает, что при слово либо не содержит символа , либо количество символов меньше . В обоих случаях полученное слово не принадлежит языку. Значит язык нерегулярный.Предположим, что язык
регулярный. Заметим, что . В силу того, что пересечение регулярных языков регулярно, имеем в правой части равенства регулярный язык. При этом в левой части стоит язык, нерегулярность которого была доказана ранее. Значит наше предположение неверно, и язык нерегулярный.Докажем, что язык удовлетворяет лемме о разрастании. Выберем в лемме
. Это означает, что длина рассматриваемых слов не меньше (иными словами ). Для каждого случая значений выберем соответствующие слова и из леммы. Легко проверить, что в каждом из приведенных ниже случаев условие леммы выполняется:- . Слово имеет вид . Выберем .
- . Слово имеет вид . Выберем .
- . Слово имеет вид . Выберем .
Таким образом, язык
удовлетворяет второй части леммы и при этом является нерегулярным, что доказывает тот факт, что лемма о разрастании не является достаточным для регулярности языка.См. также
- Лемма о разрастании для КС-грамматик
- Интерпретация булевых формул с кванторами как игр для двух игроков
Примечания
- ↑ Лемму также часто называют леммой о накачке.
Источники
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 144. — ISBN 5-8459-0261-4
- Wikipedia — Pumping lemma for regular languages