Лемма о разрастании для КС-грамматик — различия между версиями
Строка 13: | Строка 13: | ||
*Рассмотрим нетерминал <tex>A</tex>, содержащийся в поддереве выбранного нетерминала. Тогда <tex>x</tex> - строка терминалов которая выводится из рассмотренного нетерминала в данном дереве разбора. <tex>A \Rightarrow^{*} x</tex>. | *Рассмотрим нетерминал <tex>A</tex>, содержащийся в поддереве выбранного нетерминала. Тогда <tex>x</tex> - строка терминалов которая выводится из рассмотренного нетерминала в данном дереве разбора. <tex>A \Rightarrow^{*} x</tex>. | ||
− | *Рассмотрим выбранный нетерминал <tex>A</tex>. Пусть <tex>t</tex> - строка терминальных символов, которая выводится из рассмотренного нетерминала в данном дереве разбора. Тогда <tex>A \Rightarrow^{*}\alpha A \beta \Rightarrow^{*} t</tex>, где <tex>\alpha,\beta</tex> - строки, которые могут содержать как терминалы, так и нетерминалы. При этом, как минимум одна из строк <tex>\alpha,\beta</tex> не пуста, так как грамматика языка записана в НФХ. Пусть <tex>v,y</tex> - строки, которые выводятся из <tex>\alpha,\beta</tex> соответственно, в данном дереве разбора. Так как хотя бы одна из строк <tex>\alpha,\beta</tex> не пуста, то <tex>vy\neq \varepsilon</tex>. Тогда <tex>t = vxy</tex>. Получаем <tex>A \Rightarrow^{*} vAy \Rightarrow^{*} vxy</tex>. | + | *Рассмотрим выбранный нетерминал <tex>A</tex>. Пусть <tex>t</tex> - строка терминальных символов, которая выводится из рассмотренного нетерминала в данном дереве разбора. Тогда <tex>A \Rightarrow^{*}\alpha A \beta \Rightarrow^{*} t</tex>, где <tex>\alpha,\beta</tex> - строки, состоящие из терминалов, которые могут содержать как терминалы, так и нетерминалы. При этом, как минимум одна из строк <tex>\alpha,\beta</tex> не пуста, так как грамматика языка записана в НФХ. Пусть <tex>v,y</tex> - строки, состоящие из терминалов, которые выводятся из <tex>\alpha,\beta</tex> соответственно, в данном дереве разбора. Так как хотя бы одна из строк <tex>\alpha,\beta</tex> не пуста, то <tex>vy\neq \varepsilon</tex>. Тогда <tex>t = vxy</tex>. Получаем <tex>A \Rightarrow^{*} vAy \Rightarrow^{*} vxy</tex>. |
* | * | ||
Версия 22:56, 23 января 2012
Лемма (о разрастании КС-грамматик): |
Пусть контекстно-свободный язык над алфавитом , тогда существует такое , что для любого слова длины не меньше найдутся слова , для которых верно: и . — |
Доказательство: |
Грамматика любого контекстно-свободного языка может быть записана в нормальной форме Хомского (НФХ). Пусть — количество нетерминалов в грамматике языка , записанной в НФХ.
Выберем . Построим дерево разбора произвольного слова длиной больше, чем . Высотой дерева разбора назовем максимальное число нетерминальных символов на пути от корня дерева к листу. Так как грамматика языка записана в НФХ, то у любого нетерминала в дереве могут быть, либо два потомка нетерминала, либо один потомок терминал. Поэтому высота дерева разбора слова не меньше .Количество нетерминалов в нем не меньше, чем , следовательно, найдется такой нетерминал , который встречается на этом пути дважды. Значит, в дереве разбора найдется нетерминал , в поддереве которого содержится нетерминал . Выберем нетерминал , у которого в поддереве содержится такой же нетерминал и длина пути до корня максимальна среди всех нетерминалов, содержащих в поддереве такой же нетерминал.Найдем слова .
рассмотрим путь от предпоследнего повторения нетерминала Таким образом, до последнего его вхождения в дерево. Если из вершины был сделан переход в левое поддерево, то строка, выведенная из правого поддерева, будет частью . Аналогично из левых поддеревьев получаем . Так как грамматика записана в НФХ, то либо , либо не будет пустой строкой, то есть условие выполнено. . |