Изменения

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

ДМП-автоматы и неоднознчность

4607 байт убрано, 01:25, 5 января 2015
Теоремы
{{В разработке}}
==Теоремы==
{{Теорема
|id=t01
|about=5.14
|statement=Пусть <tex>G = (V, T, P, S)</tex> — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным <tex>A</tex>, и кроной <tex>w</tex>, где <tex>w \in T^{*}</tex>. Тогда в грамматике <tex>G</tex> существует левое порождение <tex>A \Rightarrow^{*}_{lm} w</tex>
|proof=
Используем индукцию по высоте дерева.
 
'''Базис.''' Базисом является высота <tex>1</tex>, наименьшая из возможных для дерева разбора с терминальной кроной. Дерево должно выглядеть, как на рис. 5.8, с корнем, отмеченным <tex>A</tex>, и сыновьями, образующими цепочку <tex>w</tex>. Поскольку это дерево является деревом разбора, <tex>A \rightarrow w</tex> должно быть продукцией. Таким образом, <tex>A \Rightarrow_{lm} w</tex> есть одношаговое левое порождение <tex>w</tex> из <tex>A</tex>.
 
'''Индукция.''' Если высота дерева равна <tex>n</tex>, где <tex>n > 1</tex>, то оно должно иметь вид, как на рис. 5.9. Таким образом, существует корень с отметкой <tex>A</tex> и сыновьями, отмеченными слева направо <tex>X_1X_2...X_k</tex>. Символы <tex>X</tex> могут быть как терминалами, так и переменными.
# Если <tex>X_i</tex> — терминал, то определим <tex>w_i</tex> как цепочку, состоящую из одного <tex>X_i</tex>.
# Если <tex>X_i</tex> — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим <tex>w_i</tex>. Заметим, что в этом случае высота поддерева меньше <tex>n</tex>, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение <tex>X_i \Rightarrow^{*}_{lm} wi</tex>.
 
Заметим, что <tex>w = w_1w_2...w_k</tex>.
Построим левое порождение цепочки <tex>w</tex> следующим образом. Начнем с шага <tex>A \Rightarrow_{lm} X_1X_2...X_k</tex>. Затем для <tex>i = 1, 2, ..., k</tex> покажем, что имеет место следующее порождение.
 
<tex>A \Rightarrow^{*}_{lm} w_1w_2...w_iX_{i+1}X_{i+2}...X_k</tex>
 
Данное доказательство использует в действительности еще одну индукцию, на этот раз по <tex>i</tex>. Для базиса <tex>i = 0</tex> мы уже знаем, что <tex>A \Rightarrow_{lm} X_1X_2...X_k</tex>. Для индукции предположим, что существует следующее порождение.
 
<tex>A \Rightarrow^{*}_{lm} w_1w_2...w_{i–1}X_iX_{i+1}...X_k</tex>
 
# Если <tex>X_i</tex> — терминал, то не делаем ничего, но в дальнейшем рассматриваем <tex>X_i</tex> как терминальную цепочку <tex>w_i</tex>. Таким образом, приходим к существованию следующего порождения.<br><tex>A \Rightarrow^{*}_{lm} w_1w_2...w_iX_{i+1}X_{i+2}...X_k</tex><br>
# Если <tex>X_i</tex> является переменной, то продолжаем порождением <tex>w_i</tex> из <tex>X_i</tex> в контексте уже
построенного порождения. Таким образом, если этим порождением является
 
<tex>X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2... \Rightarrow_{lm} w_i</tex>,
 
то продолжаем следующими порождениями.
 
<tex>w_1w_2...w_{i–1}X_iX_{i+1}...X_k \Rightarrow_{lm}</tex>
 
<tex>w_1w_2...w_{i–1}\alpha_1X_{i+1}...X_k \Rightarrow_{lm}</tex>
 
<tex>w_1w_2...w_{i–1}\alpha_2X_{i+1}...X_k \Rightarrow_{lm}</tex>
 
<tex>...</tex>
 
<tex>w_1w_2...w_iX_{i+1}X_{i+2}...X_k</tex>
 
Результатом является порождение <tex>A \Rightarrow^{*}_{lm} w_1w_2...w_iX_{i+1}X_{i+2}...X_k</tex>.
 
Когда <tex>i = k</tex>, результат представляет собой левое порождение <tex>w</tex> из <tex>A</tex>.
}}
 
{{Теорема
|id=t0
|statement=Если <tex>L=N(P)</tex> для некоторого ДМП автомата <tex>P</tex>, то <tex>L</tex> имеет однозначную КС-грамматику
|proof=
Утверждаем, что конструкция [[Совпадение множества языков МП-автоматов и контекстно-свободных языков#th2|теоремы]] порождает однозначную КС-грамматику <tex>G</tex>, когда МП-автомат, к которому она применяется, детерминирован. Вначале вспомним (см. [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора#t1|теорему 5.29)]], говорящую, что для однозначности грамматики <tex>G</tex> достаточно показать, что она имеет уникальные левые порождения.
Предположим, <tex>P</tex> допускает <tex>w</tex> по пустому магазину. Тогда он делает это с помощью одной-единственной последовательности переходов, поскольку он детерминирован и не может работать после опустошения магазина. Зная эту последовательность переходов, мы можем однозначно определить выбор каждой продукции в левом порождении <tex>w</tex> в <tex>G</tex>. Правило автомата <tex>P</tex>, на основании которого применяется продукция, всегда одно. Но правило, скажем, <tex>\delta(q, a, X) = \{(r, Y_1Y_2...Y_k)\}</tex>, может порождать много продукций грамматики <tex>G</tex>, с различными состояниями в позициях, отражающих состояния <tex>P</tex> после удаления каждого из <tex>Y_1</tex>, <tex>Y_2</tex>, ..., <tex>Y_k</tex>. Однако, поскольку <tex>P</tex> детерминирован, осуществляется только одна из этих последовательностей переходов, поэтому только одна из этих продукций в действительности ведет к порождению <tex>w</tex>.
299
правок

Навигация