Лемма о разрастании для КС-грамматик — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 8: Строка 8:
 
Выберем <tex>n=2^{m+1}</tex>. Построим дерево разбора произвольного слова <tex>\omega</tex> длиной больше, чем <tex>n</tex>.  Высотой дерева разбора назовем максимальное число нетерминальных символов на пути от корня дерева к листу. Так как грамматика языка <tex>L</tex> записана в НФХ, то у любого нетерминала в дереве могут быть, либо два потомка нетерминала, либо один потомок терминал. Поэтому  высота дерева разбора слова <tex>\omega</tex> не меньше <tex>m+1</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>A</tex>, который раскрывается в дереве разбора на этом пути дважды. Если таких путей и, следовательно, нетерминалов несколько, то выберем нетерминал максимальной глубины, у которого в поддереве содержится такой же нетерминал. Тогда в качестве <tex>x</tex> выберем кратчайшую строку из терминалов, которая выводится из <tex>A</tex>. Далее рассмотрим путь от предпоследнего повторения нетерминала <tex> A</tex> до последнего его вхождения в дерево. Если из вершины был сделан переход в левое поддерево, то строка, выведенная из правого поддерева, будет частью <tex>y</tex>. Аналогично из левых поддеревьев получаем <tex>v</tex>. Так как грамматика записана в НФХ, то либо <tex>v</tex>, либо <tex>y</tex> не будет пустой строкой, то есть условие <tex>|vy|>0</tex> выполнено.
+
Рассмотрим самый длинный путь от вершины дерева разбора до листа. Количество нетерминалов в нем не меньше, чем <tex>m+1</tex>, следовательно, найдется такой нетерминал <tex>B</tex>, который встречается на этом пути дважды. Значит, в дереве разбора найдется нетерминал <tex>B</tex>, в поддереве которого содержится нетерминал <tex>B</tex>. Выберем нетерминал <tex>A</tex>, у которого в поддереве содержится такой же нетерминал и длина пути до корня максимальна среди нетерминалов, содержащих в поддереве такой же нетерминал.
 +
Далее рассмотрим путь от предпоследнего повторения нетерминала <tex> A</tex> до последнего его вхождения в дерево. Если из вершины был сделан переход в левое поддерево, то строка, выведенная из правого поддерева, будет частью <tex>y</tex>. Аналогично из левых поддеревьев получаем <tex>v</tex>. Так как грамматика записана в НФХ, то либо <tex>v</tex>, либо <tex>y</tex> не будет пустой строкой, то есть условие <tex>|vy|>0</tex> выполнено.
 
Таким образом, <tex>S \Rightarrow^{*} uAz \Rightarrow^{*} uvAyz \Rightarrow^{*} uvvAyyz \Rightarrow^{*} uv^{k}Ay^{k}z \Rightarrow^{*} uv^{k}xy^{k}z</tex>.
 
Таким образом, <tex>S \Rightarrow^{*} uAz \Rightarrow^{*} uvAyz \Rightarrow^{*} uvvAyyz \Rightarrow^{*} uv^{k}Ay^{k}z \Rightarrow^{*} uv^{k}xy^{k}z</tex>.
 
}}
 
}}

Версия 21:52, 23 января 2012

Лемма (о разрастании КС-грамматик):
Пусть [math]L[/math]контекстно-свободный язык над алфавитом [math]\Sigma[/math], тогда существует такое [math]n[/math], что для любого слова [math] \omega \in L[/math] длины не меньше [math]n[/math] найдутся слова [math] u,v,x,y,z \in \Sigma^*[/math], для которых верно: [math]uvxyz=\omega, vy\neq \varepsilon, |vxy|\leqslant n[/math] и [math]\forall k \geqslant 0~uv^{k}xy^{k}z\in L[/math].
Доказательство:
[math]\triangleright[/math]
CS lemma conspect.PNG
Грамматика любого контекстно-свободного языка может быть записана в нормальной форме Хомского (НФХ). Пусть [math]m[/math] — количество нетерминалов в грамматике языка [math]L[/math], записанной в НФХ.

Выберем [math]n=2^{m+1}[/math]. Построим дерево разбора произвольного слова [math]\omega[/math] длиной больше, чем [math]n[/math]. Высотой дерева разбора назовем максимальное число нетерминальных символов на пути от корня дерева к листу. Так как грамматика языка [math]L[/math] записана в НФХ, то у любого нетерминала в дереве могут быть, либо два потомка нетерминала, либо один потомок терминал. Поэтому высота дерева разбора слова [math]\omega[/math] не меньше [math]m+1[/math].

Рассмотрим самый длинный путь от вершины дерева разбора до листа. Количество нетерминалов в нем не меньше, чем [math]m+1[/math], следовательно, найдется такой нетерминал [math]B[/math], который встречается на этом пути дважды. Значит, в дереве разбора найдется нетерминал [math]B[/math], в поддереве которого содержится нетерминал [math]B[/math]. Выберем нетерминал [math]A[/math], у которого в поддереве содержится такой же нетерминал и длина пути до корня максимальна среди нетерминалов, содержащих в поддереве такой же нетерминал. Далее рассмотрим путь от предпоследнего повторения нетерминала [math] A[/math] до последнего его вхождения в дерево. Если из вершины был сделан переход в левое поддерево, то строка, выведенная из правого поддерева, будет частью [math]y[/math]. Аналогично из левых поддеревьев получаем [math]v[/math]. Так как грамматика записана в НФХ, то либо [math]v[/math], либо [math]y[/math] не будет пустой строкой, то есть условие [math]|vy|\gt 0[/math] выполнено.

Таким образом, [math]S \Rightarrow^{*} uAz \Rightarrow^{*} uvAyz \Rightarrow^{*} uvvAyyz \Rightarrow^{*} uv^{k}Ay^{k}z \Rightarrow^{*} uv^{k}xy^{k}z[/math].
[math]\triangleleft[/math]