Совпадение множества языков МП-автоматов и контекстно-свободных языков — различия между версиями
Gromak (обсуждение | вклад) |
Gromak (обсуждение | вклад) |
||
| Строка 30: | Строка 30: | ||
==== Пример ==== | ==== Пример ==== | ||
Преобразуем КС-грамматику слов над алфавитом <tex>\{0, 1\}</tex>, в которых поровну нулей и единиц, в МП-автомат. Пусть дана грамматика: | Преобразуем КС-грамматику слов над алфавитом <tex>\{0, 1\}</tex>, в которых поровну нулей и единиц, в МП-автомат. Пусть дана грамматика: | ||
| − | *<tex> S \rightarrow 0S1 </tex>; | + | * <tex> S \rightarrow 0S1 </tex>; |
| − | *<tex> S \rightarrow 1S0 </tex>; | + | * <tex> S \rightarrow 1S0 </tex>; |
| − | *<tex> S \rightarrow \varepsilon </tex>. | + | * <tex> S \rightarrow \varepsilon </tex>. |
Множеством терминалов является <tex>\Sigma = \{0, 1\}</tex>, а нетерминалов {{---}} <tex>N = \{S\}</tex>. Таким образом, стековый алфавит состоит из <tex>0, 1, S</tex>. Функция переходов <tex>\delta</tex> определена следующим образом: | Множеством терминалов является <tex>\Sigma = \{0, 1\}</tex>, а нетерминалов {{---}} <tex>N = \{S\}</tex>. Таким образом, стековый алфавит состоит из <tex>0, 1, S</tex>. Функция переходов <tex>\delta</tex> определена следующим образом: | ||
| − | + | * <tex>\delta(q, \varepsilon, S) = \{(q, 0S1), (q, 1S0), (q, \varepsilon)\}</tex> (в соответствии с первым пунктом построения <tex>\delta</tex>); | |
| − | + | * <tex> \delta(q, 0, 0)= \{(q, \varepsilon)\}</tex>; <tex> \delta(q, 1, 1)= \{(q, \varepsilon)\}</tex> (в соответствии со вторым пунктом построения <tex>\delta</tex>). | |
Получившийся автомат: | Получившийся автомат: | ||
| Строка 87: | Строка 87: | ||
==== Пример ==== | ==== Пример ==== | ||
| − | Пусть у нас имеется <tex> | + | Пусть у нас имеется МП-автомат <tex>A = \langle \{i,e\}, \{Z\}, \{q\}, q, Z, \delta \rangle</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,\varepsilon)\}</tex>. | + | *<tex>\delta(q, e, Z) = \{(q, \varepsilon)\}</tex>. |
| − | |||
| − | + | [[Файл:Example2.png]] | |
| − | + | Так как стековый алфавит <tex>A</tex> содержит лишь один символ и одно состояние, то в построенной грамматике будет лишь 2 нетерминала: | |
| − | Также грамматика имеет следующие | + | * <tex>S</tex> — стартовый нетерминал. |
| − | * Единственной продукцией для <tex> S </tex> является <tex> S \rightarrow [qZq] </tex>. Но если бы у автомата было <tex> n </tex> состояний, то тут бы имелось и <tex> n </tex> продукций. | + | |
| − | * Из того факта, что <tex> \delta(q,i,Z) </tex> содержит <tex> (q,ZZ)</tex>, получаем | + | * <tex>[qZq]</tex> — единственная тройка, которую можно собрать из состояний автомата и символов стекового алфавита. |
| − | * Из <tex> \delta(q,e,Z)=\{(q,\varepsilon)\} </tex> получаем | + | |
| − | Для удобства тройку <tex> [qZq] </tex> можно заменить символом <tex> A </tex>, в таком случае | + | Также грамматика имеет следующие правила вывода: |
| − | * <tex> S \rightarrow A</tex> | + | * Единственной продукцией для <tex>S</tex> является <tex>S \rightarrow [qZq]</tex>. Но если бы у автомата было <tex>n</tex> состояний, то тут бы имелось и <tex>n</tex> продукций. |
| − | * <tex> A \rightarrow iAA | + | * Из того факта, что <tex>\delta(q, i, Z)</tex> содержит <tex>(q, ZZ)</tex>, получаем правило вывода <tex>[qZq] \rightarrow i[qZq][qZq]</tex>. Если бы у автомата было <tex>n</tex> состояний, то такой переход порождал бы <tex>n^2</tex> продукций. |
| − | + | * Из <tex>\delta(q,e,Z)=\{(q,\varepsilon)\}</tex> получаем правило вывода <tex>[qZq] \rightarrow e</tex> | |
| + | Для удобства тройку <tex>[qZq]</tex> можно заменить символом <tex>A</tex>, в таком случае правила вывода в грамматике будут следующие: | ||
| + | * <tex>S \rightarrow A</tex>; | ||
| + | * <tex>A \rightarrow iAA</tex>; | ||
| + | * <tex>A \rightarrow e</tex>. | ||
| + | Упростим грамматику, заменив <tex>A</tex> на <tex>S</tex> (очевидно, она не поменяется), и получим в результате <tex>\Gamma = \langle\{i,e\}, \{S\}, S, \{S \rightarrow iSS | e\}\rangle</tex> | ||
Версия 22:10, 1 декабря 2013
Содержание
Построение МП-автомата по заданной КС-грамматике
| Теорема: |
Класс контекстно-свободных языков () является подмножеством класса языков, задаваемых автоматами с магазинной памятью (), то есть по любой КС-грамматике можно построить МП-автомат, задающий тот же язык, что и исходная грамматика. |
| Доказательство: |
|
Пусть дана КС-грамматика . Поскольку классы языков, допускаемых МП-автоматами по допускающему состоянию и по пустому стеку, совпадают, достаточно построить автомат с допуском по пустому стеку. Построим автомат из одного состояния с входным алфавитом , стековым алфавитом , маркером дна и функцией перехода , определённой ниже. Формально , где задаётся следующим образом: 1) для каждого правила вывода определим ; 2) для каждого терминала определим . Покажем, что язык, допускаемый автоматом , совпадает с языком грамматики , то есть что :
|
Пример
Преобразуем КС-грамматику слов над алфавитом , в которых поровну нулей и единиц, в МП-автомат. Пусть дана грамматика:
- ;
- ;
- .
Множеством терминалов является , а нетерминалов — . Таким образом, стековый алфавит состоит из . Функция переходов определена следующим образом:
- (в соответствии с первым пунктом построения );
- ; (в соответствии со вторым пунктом построения ).
Построение КС-грамматики по МП-автомату
| Теорема: |
Класс языков, задаваемых автоматами с магазинной памятью (), является подмножеством класса контекстно-свободных языков (), то есть по любому МП-автомату можно построить КС-грамматику, задающую тот же язык, что и допускаемый автоматом. |
| Доказательство: |
|
Пусть дан МП-автомат с допуском по пустому стеку . Как отмечалось ранее, предположение о допуске по пустому стеку не умаляет общности. Построим эквивалентную ему КС-грамматику . В качестве нетерминалов будем использовать конструкции вида (где , ), которая неформально означает, что в процессе изменения состояния автомата от до символ окончательно удаляется из стека. Также введём стартовый нетерминал . Таким образом, . Правила вывода построим следующим образом: 1) для каждого состояния добавим правило ; 2) для каждого перехода сделаем следующее: для всех упорядоченных списков состояний добавим правило , если , и , если . Нетерминал , должен выводить только те строки , которые переводят автомат из состояния в . Формально это можно записать следующим образом: . Докажем это утверждение:
|
Пример
Пусть у нас имеется МП-автомат , функция задана следующим образом:
- ,
- .
Так как стековый алфавит содержит лишь один символ и одно состояние, то в построенной грамматике будет лишь 2 нетерминала:
- — стартовый нетерминал.
- — единственная тройка, которую можно собрать из состояний автомата и символов стекового алфавита.
Также грамматика имеет следующие правила вывода:
- Единственной продукцией для является . Но если бы у автомата было состояний, то тут бы имелось и продукций.
- Из того факта, что содержит , получаем правило вывода . Если бы у автомата было состояний, то такой переход порождал бы продукций.
- Из получаем правило вывода
Для удобства тройку можно заменить символом , в таком случае правила вывода в грамматике будут следующие:
- ;
- ;
- .
Упростим грамматику, заменив на (очевидно, она не поменяется), и получим в результате
Эквивалентность языков МП-автоматов и КС-языков
| Теорема (об эквивалентности языков МП-автоматов и КС-языков): |
Множество языков, допускаемых МП-автоматами, совпадает с множеством контекстно-свободных языков. |
| Доказательство: |
| Первая теорема гласит, что , а вторая — что . Таким образом, . |
Замечания
| Утверждение: |
Для любого МП-автомата с допуском по пустому стеку существует эквивалентный МП-автомат с одним состоянием. |
| Построим КС-грамматику по данному автомату, затем по полученной грамматике построим МП-автомат, как указано выше. Заметим, что этот автомат будет иметь одно состояние, что и требовалось доказать. |
| Утверждение: |
Для любого МП-автомата с допуском по пустому стеку существует эквивалентный МП-автомат, в любом переходе которого на стек кладётся не больше двух символов. |
| Построим КС-грамматику по данному автомату и приведём её к нормальной форме Хомского. Затем по полученной грамматике построим МП-автомат, как указано выше. Заметим, что в нормальной форме Хомского правые части всех правил имеют длину не больше двух, поэтому в любом переходе в полученном автомате на стек кладётся не больше двух символов. |
| Утверждение: |
Для любого МП-автомата существует эквивалентный МП-автомат с допуском по пустому стеку без -переходов. |
| Построим КС-грамматику по данному автомату, затем по полученной грамматике построим МП-автомат, как указано выше. Заметим, что этот автомат не будет иметь -переходов, что и требовалось доказать. |
Литература
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 251.


