Совпадение множества языков МП-автоматов и контекстно-свободных языков — различия между версиями
Bochkarev (обсуждение | вклад) (→Корректность построения) |
|||
Строка 1: | Строка 1: | ||
− | Далее будут приведены конструкции для построения МП-автомата по заданной КС-грамматике, и наоборот. Также будет приведена теорема об эквивалентности языков. | + | Далее будут приведены конструкции для построения МП-автомата по заданной КС-грамматике, и наоборот. Также будет приведена теорема об эквивалентности языков, задаваемых ими. |
=== Построение МП-автомата по заданной КС-грамматике === | === Построение МП-автомата по заданной КС-грамматике === | ||
Пусть <tex> G=(V,T,Q,S) </tex> — КС-грамматика. Построим МП-автомат <tex> P=(\{q\},T,V \cup T, \delta ,q,S) </tex>, который допускает <tex> L(G) </tex> по пустому магазину. Функция переходов <tex> \delta </tex> будет определена по следующим правилам: | Пусть <tex> G=(V,T,Q,S) </tex> — КС-грамматика. Построим МП-автомат <tex> P=(\{q\},T,V \cup T, \delta ,q,S) </tex>, который допускает <tex> L(G) </tex> по пустому магазину. Функция переходов <tex> \delta </tex> будет определена по следующим правилам: | ||
− | *1. <tex> \delta(q,\ | + | *1. <tex> \delta(q,\varepsilon,A)=\{(q,\beta )| A \rightarrow \beta</tex> — продукция <tex> G \} </tex> для каждой переменной <tex> A </tex>. |
− | *2. <tex> \delta(q,a,a)=\{(q,\ | + | *2. <tex> \delta(q,a,a)=\{(q,\varepsilon)\} </tex> для каждого терминала <tex> a </tex>. |
==== Пример ==== | ==== Пример ==== | ||
Преобразуем грамматику выражений в МП-автомат. Пусть дана грамматика: | Преобразуем грамматику выражений в МП-автомат. Пусть дана грамматика: | ||
− | *<tex> I \rightarrow a|b|I1|I0|Ia|Ib </tex> | + | *<tex> I \rightarrow a|b|I1|I0|Ia|Ib </tex>, |
− | *<tex> E \rightarrow I|E*E|E+E|(E) </tex> | + | *<tex> E \rightarrow I|E*E|E+E|(E) </tex>. |
− | Множеством входных символов является <tex> \{a,b,1,0,(,),+,*\} </tex>. Эти символы | + | Множеством входных символов является <tex> \{a,b,1,0,(,),+,*\} </tex>. Эти символы вместе с переменными <tex> I,E </tex> образуют магазинный алфавит. Функция переходов определена следующим образом: |
− | *a) <tex> \delta(q,\ | + | *a) <tex> \delta(q,\varepsilon,I)={(q,a), (q,b), (q,Ia), (q,Ib), (q,I0), (q,I1)};</tex> |
− | *b) <tex> \delta(q,\ | + | *b) <tex> \delta(q,\varepsilon,E)={(q,I), (q,E+E), (q,E*E), (q,(E))};</tex> |
− | *c) <tex> \delta(q,a,a)=\{(q,\ | + | *c) <tex> \delta(q,a,a)=\{(q,\varepsilon)\}</tex>; <tex> \delta(q,b,b)=\{(q,\varepsilon)\}</tex>;...<tex> \delta(q,*,*)=\{(q,\varepsilon)\}</tex>. Если входной символ совпадает с вершиной стека, то вершина удаляется. |
− | Пункты '''a,b''' образованы по первому правилу построения функции переходов, пункт '''c''' по второму | + | Пункты '''a,b''' образованы по первому правилу построения функции переходов, а пункт '''c''' по второму. |
==== Корректность построения ==== | ==== Корректность построения ==== | ||
Строка 19: | Строка 19: | ||
<tex> S = \gamma_1 \Rightarrow \gamma_2 \Rightarrow ... \Rightarrow \gamma_n=w</tex>. | <tex> S = \gamma_1 \Rightarrow \gamma_2 \Rightarrow ... \Rightarrow \gamma_n=w</tex>. | ||
Покажем индукцией по <tex> i </tex>, что <tex> (q,w,S)\vdash^*(q,y_i,\alpha_i)</tex>: | Покажем индукцией по <tex> i </tex>, что <tex> (q,w,S)\vdash^*(q,y_i,\alpha_i)</tex>: | ||
− | *База. Очевидно, что <tex> (q,w,S)\vdash^*(q,w,S) </tex> | + | *База. Очевидно, что <tex> (q,w,S)\vdash^*(q,w,S) </tex>. |
*Переход. Предположим, что <tex> (q,w,S)\vdash^*(q,w_i,\alpha_i) </tex>. Заметим, что шаг порождения <tex> y_i \Rightarrow y_{i+1}</tex> включает замену некоторой переменной <tex> A </tex> ее продукцией <tex> \beta </tex>. Правило 1 построения МП-автомата позволяет на заменить <tex> A </tex> на вершине стека на цепочку <tex> \beta </tex>, а правило 2 позволяет затем сравнить любые терминалы на вершине со входными символами. В результате достигается МО <tex> (q,y_{i+1},\alpha_{i+1}) </tex>. | *Переход. Предположим, что <tex> (q,w,S)\vdash^*(q,w_i,\alpha_i) </tex>. Заметим, что шаг порождения <tex> y_i \Rightarrow y_{i+1}</tex> включает замену некоторой переменной <tex> A </tex> ее продукцией <tex> \beta </tex>. Правило 1 построения МП-автомата позволяет на заменить <tex> A </tex> на вершине стека на цепочку <tex> \beta </tex>, а правило 2 позволяет затем сравнить любые терминалы на вершине со входными символами. В результате достигается МО <tex> (q,y_{i+1},\alpha_{i+1}) </tex>. | ||
− | *Также заметим, что <tex> \alpha_n = \ | + | *Также заметим, что <tex> \alpha_n = \varepsilon</tex>. Таким образом <tex> (q,w,S)\vdash^*(q,\varepsilon,\varepsilon) </tex>, т.е допускает <tex> P </tex> по пустому стеку. |
{{Утверждение | {{Утверждение | ||
|about=1 | |about=1 | ||
Строка 33: | Строка 33: | ||
Следует отметить, что удаление <tex> X </tex> может являться результатом множества переходов.<br> | Следует отметить, что удаление <tex> X </tex> может являться результатом множества переходов.<br> | ||
Пусть <tex> P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0)</tex> — МП-автомат. Построим <tex> G=(V,\Sigma,R,S)</tex>, где <tex> V </tex> состоит из: | Пусть <tex> P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0)</tex> — МП-автомат. Построим <tex> G=(V,\Sigma,R,S)</tex>, где <tex> V </tex> состоит из: | ||
− | *1 Специальный стартовый символ <tex> S </tex> | + | *1 Специальный стартовый символ <tex> S </tex>, |
*2 Все символы вида <tex> [pXq]</tex>, где <tex> p </tex> и <tex> q </tex> — состояния из <tex> Q </tex>, а <tex> X </tex> — магазинный символ из <tex> \Gamma </tex>. | *2 Все символы вида <tex> [pXq]</tex>, где <tex> p </tex> и <tex> q </tex> — состояния из <tex> Q </tex>, а <tex> X </tex> — магазинный символ из <tex> \Gamma </tex>. | ||
Грамматика <tex> G </tex> имеет следующие продукции: | Грамматика <tex> G </tex> имеет следующие продукции: | ||
− | *a) продукции <tex> S \rightarrow [q_0Z_0p] </tex> для всех <tex> p </tex>, таким образом <tex> (q,w,Z_0)\vdash^* (q,\ | + | *a) продукции <tex> S \rightarrow [q_0Z_0p] </tex> для всех <tex> p </tex>, таким образом <tex> (q,w,Z_0)\vdash^* (q,\varepsilon,\varepsilon)</tex> |
*b) пусть <tex> \delta(q,a,X) </tex> содержит <tex> (r,Y_1Y_2...Y_k)</tex>. Тогда для всех списков состояний <tex> r_1,r_2,...,r_k</tex> в грамматике <tex> G </tex> есть продукция <tex> [qXr_k]\rightarrow a[r Y_1 r_1][r_1 Y_1 r_2]...[r_{k-1} Y_k r_k]</tex>. | *b) пусть <tex> \delta(q,a,X) </tex> содержит <tex> (r,Y_1Y_2...Y_k)</tex>. Тогда для всех списков состояний <tex> r_1,r_2,...,r_k</tex> в грамматике <tex> G </tex> есть продукция <tex> [qXr_k]\rightarrow a[r Y_1 r_1][r_1 Y_1 r_2]...[r_{k-1} Y_k r_k]</tex>. | ||
==== Пример ==== | ==== Пример ==== | ||
Пусть у нас имеется <tex> P=(\{q\},\{i,e\},\{Z\},\delta,q,Z)</tex>, функция <tex> \delta </tex> задана следующим образом: | Пусть у нас имеется <tex> P=(\{q\},\{i,e\},\{Z\},\delta,q,Z)</tex>, функция <tex> \delta </tex> задана следующим образом: | ||
− | *<tex> \delta(q,i,Z)=\{(q,ZZ)\}</tex> | + | *<tex> \delta(q,i,Z)=\{(q,ZZ)\}</tex>, |
− | *<tex> \delta(q,e,Z)=\{(q,\ | + | *<tex> \delta(q,e,Z)=\{(q,\varepsilon)\}</tex>. |
Так как <tex> P </tex> имеет один магазинный символ и одно состояние, то грамматика строится просто. У нас будет всего две переменные: | Так как <tex> P </tex> имеет один магазинный символ и одно состояние, то грамматика строится просто. У нас будет всего две переменные: | ||
*a) <tex> S </tex> — стартовый символ. | *a) <tex> S </tex> — стартовый символ. | ||
Строка 48: | Строка 48: | ||
*1. Единственной продукцией для <tex> S </tex> является <tex> S \rightarrow [qZq] </tex>. Но если бы у автомата было <tex> n </tex> состояний, то тут бы имелось и <tex> n </tex> продукций. | *1. Единственной продукцией для <tex> S </tex> является <tex> S \rightarrow [qZq] </tex>. Но если бы у автомата было <tex> n </tex> состояний, то тут бы имелось и <tex> n </tex> продукций. | ||
*2. Из того факта, что <tex> \delta(q,i,Z) </tex> содержит <tex> (q,ZZ)</tex>, получаем продукцию <tex> [qZq] \rightarrow i[qZq][qZq] </tex>. Если бы у автомата было '''n''' состояний, то такое правило порождало бы <tex> n^2 </tex> продукций. | *2. Из того факта, что <tex> \delta(q,i,Z) </tex> содержит <tex> (q,ZZ)</tex>, получаем продукцию <tex> [qZq] \rightarrow i[qZq][qZq] </tex>. Если бы у автомата было '''n''' состояний, то такое правило порождало бы <tex> n^2 </tex> продукций. | ||
− | *3. Из <tex> \delta(q,e,Z)=\{(q,\ | + | *3. Из <tex> \delta(q,e,Z)=\{(q,\varepsilon)\} </tex> получаем продукцию <tex> [qZq] \rightarrow \varepsilon </tex> |
Для удобства тройку <tex> [qZq] </tex> можно заменить символом <tex> A </tex>, в таком случае грамматика состоит из следующих продукций: | Для удобства тройку <tex> [qZq] </tex> можно заменить символом <tex> A </tex>, в таком случае грамматика состоит из следующих продукций: | ||
* <tex> S \rightarrow A</tex> | * <tex> S \rightarrow A</tex> | ||
− | * <tex> A \rightarrow iAA | \ | + | * <tex> A \rightarrow iAA | \varepsilon</tex> |
− | В действительности можно заметить, что <tex>S</tex> и <tex>A</tex> порождают одни и те же цепочки, поэтому их можно обозначить одинаково, итого: <tex> G=(\{S\},\{i,e\},\{S \rightarrow iSS| \ | + | В действительности можно заметить, что <tex>S</tex> и <tex>A</tex> порождают одни и те же цепочки, поэтому их можно обозначить одинаково, итого: <tex> G=(\{S\},\{i,e\},\{S \rightarrow iSS| \varepsilon\},S)</tex> |
==== Корректность построения ==== | ==== Корректность построения ==== | ||
− | Докажем, что если <tex> (q,w,X) \vdash^* (p,\ | + | Докажем, что если <tex> (q,w,X) \vdash^* (p,\varepsilon,\varepsilon)</tex>, то <tex> [qXp] \Rightarrow^* w </tex>. |
− | *База. Пара <tex> (p,\ | + | *База. Пара <tex> (p,\varepsilon) </tex> должна быть в <tex> \delta(q,w,X) </tex> и <tex> w </tex> есть одиночный символ, или <tex>\varepsilon</tex>. Из построения <tex> G </tex> следует, что <tex> [qXp] \rightarrow w </tex> является продукцией, поэтому <tex> [qXp] \Rightarrow w </tex>. |
− | *Переход. Предположим, что последовательность <tex> (q,w,X) \vdash^* (p,\ | + | *Переход. Предположим, что последовательность <tex> (q,w,X) \vdash^* (p,\varepsilon,\varepsilon)</tex> состоит из <tex> n </tex> переходов, и <tex> n>1 </tex>. Первый переход должен иметь вид: |
− | <tex> (q,w,Z) \vdash (r_0,X,Y_1Y_2...Y_k) \vdash^* (p,\ | + | <tex> (q,w,Z) \vdash (r_0,X,Y_1Y_2...Y_k) \vdash^* (p,\varepsilon,\varepsilon) </tex>, где <tex> w=aX </tex> для некоторого <tex> a </tex>, которое является либо символом из <tex> \Gamma </tex>, либо <tex> \varepsilon </tex>. По построению <tex> G </tex> существует продукция <tex> [qXr_k] \rightarrow a[r_0 Y_1 r_1][r_1 Y_2 r_2]...[r_{k-1} Y_k r_k] </tex>, где <tex> r_i</tex> — состояния из <tex> Q </tex>, и <tex> r_k = p </tex>. Пусть <tex> X=w_1 w_2 ... w_k </tex>, где <tex> w_i </tex> — входная цепочка, которая прочитывается до удаления <tex> Y_i </tex> из стека, тогда <tex> (r_{i-1},w_i, Y_i) \vdash^* (r_i, \varepsilon, \varepsilon)</tex>. По скольку ни одна из этих последовательностей переходов не содержит более, чем <tex> n </tex> переходов, к ним можно применить предположение индукции <tex> [r_{i-1}Y_ir_i] \Rightarrow^* w_i</tex>. Соберем эти порождения вместе: <br> |
<tex> [qXr_k] \Rightarrow a[r_0Y_1r_1][r_1Y_1r_2]...[r_{k-1}Y_kr_k] \Rightarrow^* aw_1[r_1Y_1r_2]...[r_{k-1}Y_kr_k] \Rightarrow^* aw_1w_2[r_2Y_3r_3]...[r_{k-1}Y_kr_k] \Rightarrow^*... \Rightarrow^* aw_1w_2...w_k = w</tex>. | <tex> [qXr_k] \Rightarrow a[r_0Y_1r_1][r_1Y_1r_2]...[r_{k-1}Y_kr_k] \Rightarrow^* aw_1[r_1Y_1r_2]...[r_{k-1}Y_kr_k] \Rightarrow^* aw_1w_2[r_2Y_3r_3]...[r_{k-1}Y_kr_k] \Rightarrow^*... \Rightarrow^* aw_1w_2...w_k = w</tex>. | ||
{{Утверждение | {{Утверждение | ||
|about=2 | |about=2 | ||
− | |statement= Если КС-грамматика <tex> G </tex> построена по МП-автомату <tex> P </tex>, с использованием указанной выше конструкции, то <tex> N(P) \subseteq L(G) </tex> | + | |statement= Если КС-грамматика <tex> G </tex> построена по МП-автомату <tex> P </tex>, с использованием указанной выше конструкции, то <tex> N(P) \subseteq L(G) </tex>. |
|proof= Выше доказана корректность построения КС-грамматики по МП-автомату. Значит языки допускаемые МП-автоматами являются подмножеством языков, заданных КС-грамматикой. | |proof= Выше доказана корректность построения КС-грамматики по МП-автомату. Значит языки допускаемые МП-автоматами являются подмножеством языков, заданных КС-грамматикой. | ||
}} | }} |
Версия 07:30, 11 января 2012
Далее будут приведены конструкции для построения МП-автомата по заданной КС-грамматике, и наоборот. Также будет приведена теорема об эквивалентности языков, задаваемых ими.
Содержание
Построение МП-автомата по заданной КС-грамматике
Пусть
— КС-грамматика. Построим МП-автомат , который допускает по пустому магазину. Функция переходов будет определена по следующим правилам:- 1. — продукция для каждой переменной .
- 2. для каждого терминала .
Пример
Преобразуем грамматику выражений в МП-автомат. Пусть дана грамматика:
- ,
- .
Множеством входных символов является
. Эти символы вместе с переменными образуют магазинный алфавит. Функция переходов определена следующим образом:- a)
- b)
- c) ; ;... . Если входной символ совпадает с вершиной стека, то вершина удаляется.
Пункты a,b образованы по первому правилу построения функции переходов, а пункт c по второму.
Корректность построения
Пусть
, тогда имеет следующее левое порождение: . Покажем индукцией по , что :- База. Очевидно, что .
- Переход. Предположим, что . Заметим, что шаг порождения включает замену некоторой переменной ее продукцией . Правило 1 построения МП-автомата позволяет на заменить на вершине стека на цепочку , а правило 2 позволяет затем сравнить любые терминалы на вершине со входными символами. В результате достигается МО .
- Также заметим, что . Таким образом , т.е допускает по пустому стеку.
Утверждение (1): |
Если МП-автомат построен по грамматике , с использованием указанной выше конструкции, то |
Выше доказана корректность построения МП-автомата по любой КС-грамматике. Значит множество языков КС-грамматик является подмножеством языков, допускаемых МП-автоматами. |
Построение КС-грамматики по МП-автомату
Наша конструкция эквивалентной грамматики использует переменные вида:
Следует отметить, что удаление может являться результатом множества переходов.
Пусть — МП-автомат. Построим , где состоит из:
- 1 Специальный стартовый символ ,
- 2 Все символы вида , где и — состояния из , а — магазинный символ из .
Грамматика
имеет следующие продукции:- a) продукции для всех , таким образом
- b) пусть содержит . Тогда для всех списков состояний в грамматике есть продукция .
Пример
Пусть у нас имеется
, функция задана следующим образом:- ,
- .
Так как
имеет один магазинный символ и одно состояние, то грамматика строится просто. У нас будет всего две переменные:- a) — стартовый символ.
- b) — единственная тройка, которую можно собрать из наших состояний и магазинных символов.
Также грамматика имеет следующие продукции:
- 1. Единственной продукцией для является . Но если бы у автомата было состояний, то тут бы имелось и продукций.
- 2. Из того факта, что содержит , получаем продукцию . Если бы у автомата было n состояний, то такое правило порождало бы продукций.
- 3. Из получаем продукцию
Для удобства тройку
можно заменить символом , в таком случае грамматика состоит из следующих продукций:В действительности можно заметить, что
и порождают одни и те же цепочки, поэтому их можно обозначить одинаково, итого:Корректность построения
Докажем, что если
, то .- База. Пара должна быть в и есть одиночный символ, или . Из построения следует, что является продукцией, поэтому .
- Переход. Предположим, что последовательность состоит из переходов, и . Первый переход должен иметь вид:
.
Утверждение (2): |
Если КС-грамматика построена по МП-автомату , с использованием указанной выше конструкции, то . |
Выше доказана корректность построения КС-грамматики по МП-автомату. Значит языки допускаемые МП-автоматами являются подмножеством языков, заданных КС-грамматикой. |
Эквивалентность языков МП-автоматов и КС-языков
Теорема (Об эквивалентности языков МП-автоматов и КС-языков): |
Множество языков, допускаемых МП-автоматами совпадает с множеством языков, задаваемых с помощью контекстно-свободных грамматик. |
Доказательство: |
Из утверждения 1 следует, что | , в свою очередь из утверждения 2 следует, что . Отсюда .
Литература
- Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман. Введение в теорию автоматов, языков и вычислений.