Изменения

Перейти к: навигация, поиск

Лемма о разрастании для КС-грамматик

9015 байт добавлено, 23:00, 6 ноября 2016
м
опечатка
__FORCETOC__
== Лемма о разрастании для КС-грамматик ==
 
{{Лемма
|id= ==lemma==
|about=о разрастании КС-грамматик
|statement=
Пусть <tex>L</tex> — [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободный язык]] над алфавитом <tex>\Sigma</tex>, тогда существует такое <tex>n</tex>, что для любого слова <tex> \omega \in L</tex> длины не меньше <tex>n</tex> найдутся слова <tex> u,v,x,y,z \in \Sigma^*</tex>, для которых верно: <tex>uvxyz=\omega, vy\neq \varepsilon, |vxy|\leqslant n</tex> и <tex>\forall k \geqslant 0~uv^{k}xy^{k}z\in L</tex>.
|proof=
[[Файл:CS_lemma_conspect.PNG||left|240px|]] Пусть <tex>L</tex> — Грамматика любого контекстно-свободный язык над алфавитом <tex>\Sigma</tex>. Тогда его грамматика свободного языка может быть записана в [[Нормальная форма Хомского|нормальной форме Хомского (НФХ)]]. Пусть <tex>m</tex> — количество нетерминалов в полученной грамматике.языка <tex>L<br/tex> , записанной в НФХ.Выберем <tex>n=2^{m+1}</tex>. Построим дерево разбора произвольного слова <tex>\omega</tex> длиной больше, чем <tex>n</tex>. Высотой дерева разбора назовем максимальное число нетерминальных символов на пути от корня дерева к листу. Так как из одного грамматика языка <tex>L</tex> записана в НФХ, то у любого нетерминала выводится в дереве могут быть, либо два потомка нетерминала, либо терминальный символ, то дерево один потомок терминал. Поэтому высота дерева разбора слова <tex>\omega</tex> будет бинарным, причем его высота не меньше <tex>m+1</tex>. Рассмотрим самый длинный  Выберем путь от вершины, соответствующей стартовому нетерминалу,до листакорня дерева к листу максимальной длины. В Количество нетерминалов в нем будет не менее меньше, чем <tex>m+1</tex> узлов, соответствующих нетерминалам. Следовательноследовательно, по принципу Дерихле найдется такой нетерминал <tex>AB</tex>, который раскрывается в дереве разбора дважды встречается на этом пути дважды. Если таких путей и Значит, следовательнов дереве разбора найдется нетерминал <tex>B</tex>, нетерминалов нескольков поддереве которого содержится нетерминал <tex>B</tex>. Выберем такой нетерминал <tex>A</tex>, то выберем чтобы в его поддереве содержался такой же нетерминал максимальной глубиныи длина пути от него до корня была максимальна среди всех нетерминалов, у которого содержащих в поддереве содержится такой же нетерминал. Найдем слова <tex> u,v,x,y,z </tex>. *Рассмотрим нетерминал <tex>A</tex>, содержащийся в поддереве выбранного нетерминала. Тогда в качестве <tex>x</tex> выберем кратчайшую строку из {{---}} строка терминалов, которая выводится выведена из рассмотренного нетерминала в данном дереве разбора. Тогда <tex>A\Rightarrow^{*} x</tex>. Далее рассмотрим путь от предпоследнего повторения нетерминала *Рассмотрим выбранный ранее нетерминал <tex> A</tex> до последнего его вхождения . Пусть <tex>t</tex> {{---}} строка терминальных символов, которая выведена из рассмотренного нетерминала в дереводанном дереве разбора. Если из вершины был сделан переход Тогда, так как выбранный нетерминал <tex>A</tex> содержит в левое поддеревосвоем поддереве такой же нетерминал, то строка<tex>A \Rightarrow^{*}\alpha A \beta \Rightarrow^{*} t</tex>, выведенная из правого поддерева будет частью где <tex>y\alpha,\beta</tex>- строки, которые могут содержать как терминалы, так и нетерминалы. Аналогично При этом как минимум одна из левых поддеревьев получаем строк <tex>v\alpha,\beta</tex>. Так не пуста, так как грамматика языка записана в НФХ. Пусть <tex>v</tex> и <tex>y</tex> - строки, то либо состоящие из терминалов, которые выведены соответственно из <tex>\alpha</tex> и <tex>v\beta</tex>, либо в данном дереве разбора. Тогда <tex>t = vxy</tex>. Так как хотя бы одна из строк <tex>y\alpha,\beta</tex> не будет пустой строкойпуста, то есть условие <tex>vy\neq \varepsilon</tex>. Получаем <tex>A \Rightarrow^{*} vAy \Rightarrow^{*} vxy</tex>.*Рассмотрим стартовый нетерминал <tex>S</tex>. Из <tex>S</tex> выведена строка <tex>\omega</tex>. При этом <tex>S \Rightarrow^{*} \alpha A \beta \Rightarrow^{*} \omega </tex>, где <tex>A</tex> {{---}} выбранный ранее нетерминал. Из <tex>A</tex> в данном дереве разбора выведена строка <tex>vxy</tex>. Пусть <tex>u</tex> и <tex>z</tex> {{---}} строки, состоящие из терминалов, которые выведены соответственно из <tex>\alpha</tex> и <tex>\beta</tex> в данном дереве разбора. Тогда <tex>S \Rightarrow^{*} uAz \Rightarrow^{*} uvAyz \Rightarrow^{*} \omega</tex>. Покажем, что <tex>|vxy| \leqslant n</tex>. Допустим, что <tex>|vyvxy|>0n</tex>. Тогда высота поддерева с корнем в вершине, соответствующей выбранному <tex>A</tex>, не меньше <tex>m+2</tex>. Рассмотрим поддерево вершины, в котором содержится нетерминал <tex>A</tex>. Тогда высота этого поддерева не меньше <tex>m+1</tex>. Рассмотрим путь максимальной длины от корня этого поддерева к листу. В нем содержится не менее <tex>m+1</tex> выполненонетерминалов, причем не содержится стартовый нетерминал.Следовательно, на этом пути найдутся два одинаковых нетерминала, что противоречит условию наибольшей удаленности от корня выбранного ранее нетерминала <tex>A</tex>. Получили противоречие. Поэтому <tex>|vxy|\leqslant n<br/tex> .Таким образом, в рамках нашей грамматики мы можем построить цепочку вывода: <tex>S \Rightarrow^{*} uAz \Rightarrow^{*} uvAyz \Rightarrow^{*} uvvAyyz \Rightarrow^{*} uv^{k}Ay^{k}z \Rightarrow^{*} uv^{k}xy^{k}z</tex> .
}}
 
'''Замечание.''' Условие леммы не является достаточным для контекстно-свободности языка. Но, в силу необходимости условия, данная лемма часто используется для доказательства неконтекстно-свободности языков.
 
== Пример доказательства неконтекстно-свободности языка с использованием леммы ==
 
Рассмотрим язык <tex>0^{n}1^{n}2^{n}</tex>. Покажем, что он не является контекстно-свободным.
 
Для фиксированного <tex>n</tex> рассмотрим слово <tex>\omega=0^n 1^n 2^n</tex>. Пусть <tex>\omega</tex> разбили на <tex>u, v, x, y, z</tex> произвольным образом. Так как <tex>|vxy|\leqslant n</tex>, то в слове <tex>vxy</tex> не содержится либо ни одного символа <tex>0</tex>, либо ни одного символа <tex>2</tex>. Для любого такого разбиения выбираем <tex>k=2</tex> и получаем, что количество символов <tex>1</tex> изменилось, а количество либо <tex>0</tex>, либо <tex>2</tex> осталось тем же. Очевидно, что такое слово не принадлежит рассмотренному языку. Значит, язык <tex>0^{n}1^{n}2^{n}</tex> не является контекстно-свободным по лемме о разрастании для КС-грамматик.
 
== Пример не КС-языка, для которого выполняется лемма ==
 
Рассмотрю язык <tex>L=\{a^{n}b^{n}c^{i}\mid i \neq n\}</tex>.
 
'''Докажем, что он не контекстно-свободный'''. Для этого воспользуемся [[Лемма_Огдена|леммой Огдена]]. Для фиксированного <tex>n</tex> рассмотрим слово <tex>\omega=a^n b^n c^{n!+n}</tex>. Пометим все символы <tex>a</tex> и <tex>b</tex>. Пусть <tex>\omega</tex> разбили на <tex>u, v, x, y, z</tex>, так что <tex>x</tex> содержит выделенную позицию; <tex>u</tex> и <tex>v</tex> содержат выделенные позиции и <tex>vxy</tex> содержат не более <tex>n</tex> выделенных позиций. Тогда очевидно, что <tex>vy</tex> должно содержать одинаковое число символов <tex>a</tex> и <tex>b</tex>, иначе выбираем <tex>k=0</tex> и тогда количество символов <tex>a</tex> и <tex>b</tex> станет разным. Пусть символов <tex>a</tex> в <tex>vy</tex> будет <tex>t</tex>. Так же очевидно, что <tex>vy</tex> не содержит символов <tex>c</tex>, так как <tex>vxy</tex> содержат не более <tex>n</tex> выделенных позиций, но <tex>v</tex> точно содержит символ <tex>a</tex>. Тогда выберем <tex>k=\dfrac{n!}{t}+1</tex> и получим слово <tex>a^{n!+n}b^{n!+n}c^{n!+n}</tex>, которое не принадлежит рассмотренному языку. Значит <tex>a^{n}b^{n}c^{i}</tex> не является контекстно-свободным.
 
'''Докажем, что язык удовлетворяет лемме о разрастании'''. Выберем <tex>n=5</tex>. Это значит, что длина рассматриваемых слов не меньше <tex>3</tex>. Рассмотрим случаи:
# <tex>c^i</tex>
#:Выберем <tex>u=c^{i-1}</tex>, <tex>v=c</tex>, <tex>x=y=z=\varepsilon</tex>.
# <tex>a^jb^j</tex>
#:Выберем <tex>u=a^{j-1}</tex>, <tex>v=a</tex>, <tex>x=\varepsilon</tex>, <tex>y=b</tex>, <tex>z=b^{j-1}</tex>.
# <tex>a^jb^jc^i</tex>, где <tex>i < j-1</tex>
#:Выберем <tex>u=a^{j-1}</tex>, <tex>v=a</tex>, <tex>x=\varepsilon</tex>, <tex>y=b</tex>, <tex>z=b^{j-1}c^i</tex>.
# <tex>a^jb^jc^{j-1}</tex>
#:Выберем <tex>u=a^{j-2}</tex>, <tex>v=aa</tex>, <tex>x=\varepsilon</tex>, <tex>y=bb</tex>, <tex>z=b^{j-2}c^i</tex>.
# <tex>a^jb^jc^{j+1}</tex>
#:Выберем <tex>u=a^{j-2}</tex>, <tex>v=aa</tex>, <tex>x=\varepsilon</tex>, <tex>y=bb</tex>, <tex>z=b^{j-2}c^i</tex>.
# <tex>a^jb^jc^i</tex>, где <tex>i>j+1</tex>
#:Выберем <tex>u=a^jb^jc^{i-1}</tex>, <tex>v=c</tex>, <tex>x=y=z=\varepsilon</tex>.
 
Таким образом язык <tex>L</tex> '''не''' контекстно-свободный, но удовлетворяет второй части леммы.
 
== См. также ==
* [[Лемма_Огдена|Лемма Огдена]]
 
== Источники ==
 
* Хопкрофт Д., Мотвани Р., Ульман Д. {{---}} Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. {{---}} Москва, Издательский дом «Вильямс», 2002. {{---}} 528 с. : ISBN 5-8459-0261-4 (рус.)
 
[[Категория: Теория формальных языков]]
[[Категория: Контекстно-свободные грамматики]]
[[Категория: Опровержение контекстно-свободности языка]]
129
правок

Навигация