Изменения

Перейти к: навигация, поиск
м
rollbackEdits.php mass rollback
'''Лемма о разрастании''' (лемма о накачке, англ. ''pumping lemma'') — лемма, позволяющая во многих случаях проверить, является ли данный язык [[КатегорияРегулярные языки: Теория формальных два определения и их эквивалентность|регулярным]].== Лемма о разрастании == {{Лемма|id= ==lemma==|about=о разрастании, о накачке|statement=Пусть <tex>L</tex> — [[Регулярные языки: два определения и их эквивалентность|регулярный язык]] над алфавитом <tex>\Sigma</tex>, тогда существует такое <tex>n</tex>, что для любого слова <tex> \omega \in L</tex> длины не меньше <tex>n</tex> найдутся слова <tex> x,y,z \in \Sigma^*</tex>, для которых верно: <tex>xyz=\omega, y\neq \varepsilon, |xy|\leqslant n</tex> и <tex>\forall k \geqslant 0~xy^{k}z\in L</tex>.|proof=[[Файл:Consp_lemma.png||left|240px|]] Пусть <tex>L</tex> — регулярный язык над алфавитом <tex>\Sigma</tex>. Поскольку [[Теорема Клини (совпадение классов автоматных и регулярных языков)|регулярный язык является автоматным]], то найдётся автомат <tex>A</tex>, допускающий язык <tex>L</tex>. Пусть <tex>n</tex> — размер автомата. Докажем, что <tex>n</tex> удовлетворяет условию леммы.<br/>Возьмём произвольное слово <tex>\omega</tex> длины не меньше <tex>n</tex> из языка <tex>L</tex>. Рассмотрим переходы в автомате <tex>\langle s,\omega\rangle \vdash\langle u_1, \omega[0]^{-1}\omega\rangle\vdash\dots\vdash\langle u_{l},\varepsilon\rangle, \: l\geqslant n</tex>. Так как <tex>l</tex> не меньше количества состояний в автомате <tex>n</tex>, то в переходах будет совпадение. Пусть <tex>u_i</tex> и <tex>u_j</tex> — первое совпадение. Тогда, повторяя участок слова <tex>\omega</tex>, который отвечает за переход от <tex>u_i</tex> к <tex>u_j</tex>, получаем слово, допускаемое автоматом. То есть, если верно <tex>\langle s, xyz\rangle \vdash^*\langle u_i, yz\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \varepsilon\rangle</tex>, то тогда верно <tex>\langle s, xy^kz\rangle \vdash^*\langle u_i, y^kz\rangle\vdash^*\langle u_j, y^{k-1}z\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \varepsilon\rangle</tex>. Тогда автомат <tex>A</tex> допускает слово <tex>xy^kz</tex>, следовательно <tex>xy^kz</tex> принадлежит регулярному языку <tex>L</tex>.<br />Наконец, поскольку <tex>u_i</tex> и <tex>u_j</tex> — первое совпадение, среди состояний <tex>s, u_1, \ldots, u_i, \ldots, u_{j-1}</tex> нет повторяющихся. Значит, выполняется требование <tex>|xy| \leqslant n</tex>.}}'''Замечание.''' Условие леммы не является достаточным для регулярности языка. ''(См. [[#Пример нерегулярного языка, для которого выполняется лемма о разрастании|пример]])'' == Лемма о разрастании в общем виде ==
{{Лемма
|id= ==lemma==|about=О о разрастании, о накачке в общем виде
|statement=
Пусть Если язык <tex>L</tex> - регулярный язык над алфавитом является регулярным, то существует число <tex>n \Sigmageqslant 1</tex>, тогда существует такое что для любого слова <tex>nuwv</tex>, такой что для любого слова из языка <tex> \omega \in L</tex>, длины не меньше где <tex> |w| \geqslant n </tex> найдутся может быть записано в форме <tex>uwv = uxyzv</tex>,где слова <tex> x</tex>,<tex>y,</tex> и <tex>z \in \Sigma^*</tex>такие, для которых верно что <tex>xyz=\omega, y\neq \varepsilon, |xy|\leqslant n</tex>, <tex>|y| \geqslant 1</tex> и <tex>xyuxy^{k}z\in izv</tex> принадлежит языку <tex>L</tex> для всех любого целого числа <tex> k i \geqslant 0</tex>.
|proof=
Пусть <tex>L</tex> - регулярный язык над алфавитом <tex>\Sigma</tex>, тогда найдётся автомат <tex>A</tex>, допускающий язык <tex>L</tex>. Обозначим размер автомата <tex>A</tex>, как <tex>n</tex>. В языке <tex>L</tex> найдётся слово <tex>\omega</tex> длины не меньше <tex>n</tex>. Рассмотрим переходы Исходя из формулировки леммы в автомате <tex>\langle sобщем виде,\omega\rangle \vdash\langle u_1стандартная версия леммы, \omega[0]^{-1}\omega\rangle\vdash\dots\vdash\langle u_{l}которая описана выше,\epsilon\rangleявляется особым случаем, \: l\geqslant n</tex>. Так как <tex>l</tex> не меньше количества состояний в автомате котором строки <tex>n</tex>, то в переходах будет совпадение. Пусть <tex>u_iu</tex> и <tex>u_jv</tex> - первое совпадениепусты. Тогда Доказательство леммы в нашем слове <tex>\omega</tex> можно размножить кусокобщем виде аналогично доказательству стандартной версии леммы, который отвечает за переходс тем отличием, от состояния что строки <tex>u_iu</tex> к состоянию и <tex>u_jv</tex>. То есть если верно <tex>\langle sтеперь могут быть как не пусты, xyz\rangle \vdash^*\langle u_i, yz\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \varepsilon\rangle</tex>, то тогда верно <tex>\langle s, xy^kz\rangle \vdash^*\langle u_i, y^kz\rangle\vdash^*\langle u_j, y^{k-1}z\rangle\vdash^*\langle u_j, z\rangle\vdash^*\langle u_l, \varepsilon\rangle</tex>. Тогда автомат <tex>A</tex> допускает слово <tex>xy^kz</tex>, следовательно <tex>xy^kz</tex> принадлежит регулярному языку <tex>L</tex>так и пусты.
"Картинка"
}}
'''Замечание.''' Поскольку лемма в общем виде накладывает более жесткие требования на язык, то она может быть использована для доказательства нерегулярности многих других языков, таких как <tex> L =\{ a^mb^nc^n : m \geqslant 1 , n \geqslant 1 \}</tex>.
== Использование леммы для доказательства нерегулярности языков ==
'''Доказательство Для доказательства нерегулярности языка'''часто удобно использовать отрицание леммы о разрастании. Пусть <tex>L</tex> — язык над алфавитом <tex>\Sigma</tex>. Если для любого натурального <tex>n</tex> найдётся такое слово <tex>\omega</tex> из данного языка, что его длина будет не меньше <tex> n</tex> и при любом разбиении на три слова <tex>x,y,z</tex> такие, что <tex>y</tex> непустое и длина <tex>xy</tex> не больше <tex>n</tex>, существует такое <tex>k</tex>, что <tex>xy^kz \notin L</tex>, то язык <tex>L</tex> нерегулярный.
Чаще используется отрицание леммы для доказательства нерегулярности Рассмотрим такой подход на примере языкаправильных скобочных последовательностей. Пусть Для фиксированного <tex>Ln</tex> - язык над алфавитом предъявляем слово <tex>\Sigmaomega=(^n)^n</tex>. Если для любого натурального <tex>n</tex> найдётся такое слово Пусть <tex>\omega</tex> из данного языка, что его длина будет не меньше <tex> n</tex> и при любом разбиении как-то разбили на три слова <tex>x,y,z</tex> такие, что . Так как <tex> : y|xy|\neq \varepsilonleqslant n</tex>, длина то <tex>xyy=(^b</tex> не больше , где <tex>nb > 0</tex>, есть . Для любого такого разбиения берём <tex>k=2</tex> такое, что и получаем <tex>xy^kz \overline\in L=(^{n+b})^n</tex>, то что не является правильной скобочной последовательностью. Значит, язык <tex>L</tex> - не регулярныйправильных скобочных последовательностей нерегулярен.
== Пример нерегулярного языка, для которого выполняется лемма о разрастании==
===Пример языка, удовлетворяющего стандартной версии леммы===
Рассмотрим следующий язык: <tex>L= \{ a^{i}b^{j}c^{k} \mid i \ne 1, j \geqslant 0, k \geqslant 0\} \cup \{ ab^{i}c^{i} \mid i \geqslant 1\}</tex>
'''Пример 1Докажем, что он нерегулярный.'''Для этого рассмотрим вспомогательный язык <tex>L' Язык правильных скобочных последовательностей не регулярен= \{ ab^{i}c^{i} \mid i \geqslant 1\}</tex> и докажем его нерегулярность. Воспользуемся предложенным в предыдущем пункте подходом. Пусть дан какой-то Для фиксированного <tex>n</tex> для него предъявляем выберем слово <tex>\omega=(ab^n)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>yk =(0 </tex> слово <tex>xy^bkz</tex>, где либо не содержит символа <tex>ba </tex> больше нуля. Для любого такого разбиения берём , либо количество символов <tex>k=2b</tex> и получаем меньше <tex>xy^kz=(^{n+b})^n</tex>, что . В обоих случаях полученное слово не является правильной скобочной последовательностьюпринадлежит языку. Значит язык правильных скобочных последовательностей не регулярный язык<tex> L' </tex> нерегулярный.
'''Пример 2''' Язык Предположим, что язык <tex>0^a1^aL </tex>Для регулярный. Заметим, что <tex>L' = L \forall n</tex> мы берём <tex>cap \omega=0{ab^n1{*}c^n{*}\} </tex>. Так как <tex>|xy|\leqslant n</tex> В силу того, что пересечение регулярных языков регулярно, имеем в правой части равенства регулярный язык. При этом в левой части стоит язык, то <tex>y=0^b</tex>нерегулярность которого была доказана ранее. Берём <tex>k=2</tex> Значит наше предположение неверно, и получаем язык <tex>xy^kz=0^{n+b}1^nL </tex>, что не является элементом нашего языка, значит наш язык не регуляреннерегулярный.
'''Докажем, что язык удовлетворяет лемме о разрастании.''' Выберем в лемме <tex> n = 2 </tex>. Это означает, что длина рассматриваемых слов не меньше <tex> 2 </tex> (иными словами <tex> i + j + k \geqslant 2 \,</tex>). Для каждого случая значений <tex> i, j, k </tex> выберем соответствующие слова <tex> x, y </tex> и <tex> z </tex> из леммы. Легко проверить, что в каждом из приведенных ниже случаев условие леммы выполняется:
# <tex> i = 0, j = 0, k \geqslant 2 </tex>. Слово имеет вид <tex>\omega=c^k</tex>. Выберем <tex> x = \varepsilon, y = c, z = c^{k-1}</tex>.
# <tex> i = 0, j \geqslant 1, k \geqslant 0 </tex>. Слово имеет вид <tex>\omega=b^jc^k</tex>. Выберем <tex> x = \varepsilon, y = b, z = b^{j-1}c^k</tex>.
# <tex> i = 1, j \geqslant 1, j = k </tex>. Слово имеет вид <tex>\omega=ab^jc^j</tex>. Выберем <tex> x = \varepsilon, y = a, z = b^jc^j</tex>.
# <tex> i = 2, j \geqslant 1, k \geqslant 1 </tex>. Слово имеет вид <tex>\omega=aab^jc^k</tex>. Выберем <tex> x = \varepsilon, y = aa, z = b^jc^k</tex>.
# <tex> i \geqslant 3, j \geqslant 1, k \geqslant 1 </tex>. Слово имеет вид <tex>\omega=aaaa^{i-3}b^jc^k</tex>. Выберем <tex> x = \varepsilon, y = a, z = aaa^{i-3}b^jc^k</tex>.
'''Интерпретация булевых формул с кванторами как игр для двух игроковТаким образом''', язык <tex> L </tex> удовлетворяет второй части леммы и при этом является нерегулярным, что доказывает тот факт, что лемма о разрастании '''не'''является достаточным для регулярности языка.
===Пример языка, удовлетворяющего лемме в общем виде===Рассмотрим формулу другой пример.  <tex>L_1 = \{ uvwxy \exists x_1 mid u, y \forall x_2 in \exists x_3 { 0,1 ,2,3 \dots Q x_n = }^* \Psi(x_1wedge v,w,x \dots in \{ 0,1,2,x_n3 \} \wedge ( v = w \vee v = x \vee x =w)\}</tex> <tex>L_2 = \{ w \mid w \in \{ 0, где 1 ,2,3 \}^* \wedge</tex> <tex>\dfrac{1}{7}</tex> из символов слова <tex>Qw</tex> - квантор зависящий от чётности является символом <tex>3 \} </tex> <tex>nL = L_1 \cup L_2</tex> '''Докажем, что он нерегулярный. Теперь возьмём двух игроков и первый будет ставить ''' Предположим, что некоторая строка языка <tex>L</tex> имеет длину <tex>xn=5</tex> с нечётными номерами, а второй с чётными. Если Поскольку в итоге получается истинаалфавите всего четыре символа, то побеждает первый игроккак минимум два символа из пяти в этой строке будут одинаковыми, если получается ложьи они разделены максимум тремя символами::Если дубликаты разделены нулями или единицами, то выигрывает второйнакачаем один из двух остальных символов в строке, которые не повлияют на подстроку, которая содержит дубликаты. :Если дубликаты разделены двойками или тройками, накачаем <tex>\Psi2</tex> истиннасимвола, то побеждает второй игрокразделяющих их. Накачка также уменьшает или увеличивает результат во время создания подстроки размера <tex>3</tex>, в противном случае побеждает первый (при правильных ходах)которая содержит <tex>2</tex> продублированных символа. Пусть Второе условие языка <tex>\PsiL</tex> истиннообеспечивает, тогда отделим первый квантор. что <tex>\exists x_1\Phi(x1)L</tex>— нерегулярный, тогда по предположению то есть такой в нем бесконечное число строк, которые принадлежат <tex>x_1L</tex>, что но не могут быть получены путям разрастания некоторой меньшей строки в <tex>\Phi(x_1)L</tex> будет истинно. Верно и  == См. также ==* [[Лемма о разрастании для любого КС-грамматик]]* [[Булевые формулы с предположением кванторами как игры для лжидвух игроков]] == Источники информации ==* [http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages Wikipedia — Pumping lemma for regular languages]* Хопкрофт Д., Мотвани Р. В итоге получаем, верное утверждениеУльман Д.— Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 144. — ISBN 5-8459-0261-4 [[Категория: Теория формальных языков]][[Категория: Автоматы и регулярные языки]][[Категория: Свойства конечных автоматов]]
1632
правки

Навигация