Изменения

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

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

337 байт убрано, 19:56, 6 января 2015
м
{{В разработке}}
==Теоремы==
{{Теорема
|id=t0
|about=0
|statement=Для каждой грамматики <tex>G = (V, T, P, S)</tex> и <tex>w</tex> из <tex>T*</tex> цепочка <tex>w</tex> имеет два разных дерева разбора тогда и только тогда, когда <tex>w</tex> имеет два разных левых порождения из <tex>S</tex>.
|proof=
(Необходимость) Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве теоремы (5.14). В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.
(Достаточность) Хотя мы предварительно не описали непосредственное построение дерева разбора по левому порождению, идея его проста. Начнем построение дерева с корня, отмеченного стартовым символом. Рассмотрим порождение пошагово. На каждом шаге заменяется переменная, и эта переменная будет соответствовать построенному крайнему слева узлу дерева, не имеющему сыновей, но отмеченному этой переменной. По продукции, использованной на этом шаге левого порождения, определим, какие сы- новья должны быть у этого узла. Если существуют два разных порождения, то на первом шаге, где они различаются, построенные узлы получат разные списки сыновей, что гарантирует различие деревьев разбора.
}}
 
 
{{Теорема
|id=t1
|about=1|statement=Если <tex>L=N(PS)</tex> для некоторого [[Детерминированные автоматы с магазинной памятью|ДМП -автомата ]] <tex>PS</tex>, то <tex>L</tex> имеет однозначную [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|КС-грамматику]]
|proof=
Утверждаем, что конструкция [[Совпадение множества языков МП-автоматов и контекстно-свободных языков#th2|теоремы]] порождает однозначную [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|КС-грамматику ]] <tex>G\Gamma</tex>, когда [[Автоматы с магазинной памятью|МП-автомат]], к которому она применяется, детерминирован. Вначале вспомним (см. [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора#t2|теорему 5.29)]], говорящую, что для однозначности грамматики <tex>G\Gamma</tex> достаточно показать, что она имеет уникальные левые порождения.
Предположим, <tex>PS</tex> допускает <tex>w</tex> по пустому магазину. Тогда он делает это с помощью одной-единственной последовательности переходов, поскольку он детерминирован и не может работать после опустошения магазина. Зная эту последовательность переходов, мы можем однозначно определить выбор каждой продукции в левом порождении <tex>w</tex> в <tex>G\Gamma</tex>. Правило автомата <tex>PS</tex>, на основании которого применяется продукция, всегда одно. Но правило, скажем, <tex>\delta(q, a, X) = \{(r, Y_1Y_2...\dots Y_k)\}</tex>, может порождать много продукций грамматики <tex>G\Gamma</tex>, с различными состояниями в позициях, отражающих состояния <tex>PS</tex> после удаления каждого из <tex>Y_1</tex>, <tex>Y_2</tex>, ...<tex>\dots</tex>, <tex>Y_k</tex>. Однако, поскольку <tex>PS</tex> детерминирован, осуществляется только одна из этих последовательностей переходов, поэтому только одна из этих продукций в действительности ведет к порождению <tex>w</tex>.
}}
{{Теорема
|id=t2
|about=2|statement=Если <tex>L=L(PS)</tex> для некоторого [[Детерминированные автоматы с магазинной памятью|ДМП-автомата ]] <tex>PS</tex>, то <tex>L</tex> имеет однозначную [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|КС-грамматику]]
|proof=
Пусть <tex>\$</tex> будет “концевым маркером”, отсутствующим в цепочках языка <tex>L</tex>, и пусть <tex>L` = L\$</tex>. Таким образом, цепочки языка <tex>L`</tex> представляют собой цепочки из <tex>L</tex>, к которым дописан символ <tex>\$</tex>. Тогда <tex>L`</tex> имеет префиксное свойство, и <tex>L` = N(PS`)</tex> для некоторого ДМП-автомата <tex>PS`</tex>. По [[#t1|теореме 1]] существует однозначная грамматика <tex>G\Gamma`</tex>, порождающая язык <tex>N(PS`)</tex>, т.е. <tex>L`</tex>.
Теперь по [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|грамматике ]] <tex>G\Gamma`</tex> построим <tex>G\Gamma</tex>, для которой <tex>L(G\Gamma) = L</tex>. Для этого нужно лишь избавиться от маркера <tex>\$</tex> в цепочках. Будем рассматривать <tex>\$</tex> как переменную грамматики <tex>G\Gamma</tex> и введем продукцию <tex>\$ \rightarrow \epsilon</tex>; остальные продукции <tex>G\Gamma</tex> и <tex>G\Gamma`</tex> одинаковы. Поскольку <tex>L(G\Gamma`) = L`</tex>, получаем, что <tex>L(G\Gamma) = L</tex>.
Утверждаем, что <tex>G\Gamma</tex> однозначна. Действительно, левые порождения в <tex>G\Gamma</tex> совпадают с левыми порождениями в <tex>G\Gamma`</tex>, за исключением последнего шага в <tex>G\Gamma</tex> — изменения <tex>\$</tex> на <tex>\epsilon</tex>. Таким образом, если бы терминальная цепочка <tex>w</tex> имела два левых порождения в <tex>G\Gamma</tex>, то <tex>w\$</tex> имела бы два порождения в <tex>G\Gamma`</tex>. Поскольку <tex>G\Gamma`</tex> однозначна, <tex>G\Gamma</tex> также однозначна.
}}
 
==См. также==
* [[Детерминированные автоматы с магазинной памятью, допуск по пустому стеку]]
* [[Несовпадение класса языков, распознаваемых ДМП автоматами и произвольными МП автоматами]]
* [[Существенно неоднозначные языки]]
* [[Формальные грамматики]]
==Источники информации==
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2008. — 528 с. : ISBN 978-5-8459-1347-0 (рус.)
[[Категория: Теория формальных языков]]
[[Категория: Контекстно-свободные грамматики]]
299
правок

Навигация