МП-автоматы, допуск по пустому стеку и по допускающему состоянию, эквивалентность — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Допустимость по заключительному состоянию)
м (rollbackEdits.php mass rollback)
 
(не показано 14 промежуточных версий 8 участников)
Строка 1: Строка 1:
 
== Допуск по заключительному состоянию ==
 
== Допуск по заключительному состоянию ==
 +
{{Определение
 +
|definition= Пусть <tex>\mathcal{P}=\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}, T\rangle</tex> {{---}} [[Автоматы с магазинной памятью|МП-автомат]]. Тогда языком, допускаемым автоматом <tex>\mathcal{P}</tex> по '''заключительному состоянию''', является <tex>\mathcal {L(P)}=\{w\mid(s, w, Z_{0})\vdash^{*}(q, \varepsilon, \alpha)\} </tex> для некоторого состояния <tex>q\in T</tex> и произвольной магазинной цепочки <tex>\alpha</tex>. Начиная с стартовой вершины <tex>s</tex> и с <tex>w</tex> на входе, автомат <tex>\mathcal {P}</tex> прочитывает слово <tex>w</tex> и достигает допускающего состояния. Содержимое магазина в этот момент не имеет значения.
 +
}}
  
<font face="Times" size="3">
+
== Допуск по пустому магазину ==
 
+
{{Определение
*'''Определение: '''Пусть <tex>\mathcal{P}=\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}, T\rangle</tex> - МП-автомат. Тогда <tex>\mathcal {L(P)}</tex> языком, допускаемым автоматом <tex>\mathcal{P}</tex> по заключительному состоянию, является <tex>\mathcal {L(P)}=\{w\mid(s, w, Z_{0})\vdash^{*}(q, \varepsilon, \alpha)\} </tex> для некоторого состояния <tex>q\in T</tex> и произвольной магазинной цепочки <tex>\alpha</tex>. Начиная с стартовой вершины <tex>s</tex> и с <tex>w</tex> на входе, автомат <tex>\mathcal {P}</tex> прочитывает слово <tex>w</tex> и достигает допускающего состояния. Содержимое магазина в этот момент не имеет значения.
+
|definition= Для МП-автомата <tex>\mathcal{P}=\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}\rangle</tex> определим множество допускаемых по '''пустому магазину''' слов как <tex>\mathcal {N(P)}=\{w\mid(s, w, Z_{0})\vdash^{*}(q, \varepsilon, \varepsilon)\} </tex>, где <tex>q</tex> {{---}} произвольное состояние. Таким образом, автомат <tex>\mathcal{P}</tex> прочитывает слово <tex>w</tex>, полностью опустошив свой магазин. Множество заключительных состояний <tex>T</tex> не имеет значения.   
</font>
+
}}
 
 
== Допустимость по пустому магазину ==
 
 
 
<font face="Times" size="3">
 
*'''Определение: '''Для МП-автомата <tex>\mathcal{P}=(Q, \Sigma, \Gamma, \delta, s, Z_{0})</tex> определим множество допускающих слов как <tex>\mathcal {N(P)}=\{w\mid(s, w, Z_{0})\vdash^{*}(q, \varepsilon, \varepsilon)\} </tex>, где <tex>q</tex> - произвольное состояние. Таким образом автомат <tex>\mathcal{P}</tex> прочитывает слово <tex>w</tex>, полностью опустошив свой магазин. Множество заключительных состояний <tex>T</tex> не имеет значение.   
 
</font>
 
  
 
== Эквивалентность автоматов ==
 
== Эквивалентность автоматов ==
 
+
{{Теорема
<font face="Times" size="3">
+
|statement= Классы языков, допускаемых МП-автоматами по заключительному состоянию и по пустому магазину (стеку), совпадают.
*'''Теорема: '''Классы языков, допускаемых МП-автоматами по заключительному состоянию и по пустому магазину (стеку), совпадают.
+
|proof= <tex>\Rightarrow</tex> <br>
*'''Доказательство:'''<tex>\Rightarrow</tex> Исходя из МП-автомата <tex>\mathcal{P}_{T}</tex>, допускающего язык <tex>L</tex> по заключительному состоянию, построим другой МП-автомат <tex>\mathcal{P_{N}}</tex>, который допускает язык <tex>L</tex> по пустому стеку.
+
Исходя из МП-автомата <tex>\mathcal{P}_{T}</tex>, допускающего язык <tex>L</tex> по заключительному состоянию, построим другой МП-автомат <tex>\mathcal{P_{N}}</tex>, который допускает язык <tex>L</tex> по пустому стеку.
[[Файл:EqualStackAutomata.png|left]]  
+
[[Файл:EqualStackAutomata.png|400px|right]]  
  
 
'''1.''' Добавим переходы по <tex>\varepsilon</tex> из каждого допускающего состояния автомата <tex>\mathcal{P}_{T}</tex> в новое состояние <tex>p</tex>, которое отвечает за очистку стека. Находясь в состоянии <tex>p</tex>, автомат <tex>\mathcal{P_{N}}</tex> опустошает свой магазин и ничего не прочитывает на входе. Таким образом, как только исходный автомат <tex>\mathcal{P}_{T}</tex> приходит в допускающее состояние, прочитав слово <tex>w</tex>, <tex>\mathcal{P_{N}}</tex> опустошает свой магазин, также прочитав слово <tex>w</tex>.
 
'''1.''' Добавим переходы по <tex>\varepsilon</tex> из каждого допускающего состояния автомата <tex>\mathcal{P}_{T}</tex> в новое состояние <tex>p</tex>, которое отвечает за очистку стека. Находясь в состоянии <tex>p</tex>, автомат <tex>\mathcal{P_{N}}</tex> опустошает свой магазин и ничего не прочитывает на входе. Таким образом, как только исходный автомат <tex>\mathcal{P}_{T}</tex> приходит в допускающее состояние, прочитав слово <tex>w</tex>, <tex>\mathcal{P_{N}}</tex> опустошает свой магазин, также прочитав слово <tex>w</tex>.
Строка 23: Строка 20:
 
'''2.''' Во избежание случая, когда <tex>\mathcal{P}_{T}</tex> может опустошить свой магазин без допуска, <tex>\mathcal{P_{N}}</tex> использует свой маркер дна <tex>Z_{1}</tex>. Добавление нового стартового состояния <tex>s</tex> позволяет затолкнуть маркер <tex>Z_{0}</tex> автомата <tex>\mathcal{P}_{T}</tex> в магазин и перейти в стартовое состояние <tex>\mathcal{P}_{T}</tex>.
 
'''2.''' Во избежание случая, когда <tex>\mathcal{P}_{T}</tex> может опустошить свой магазин без допуска, <tex>\mathcal{P_{N}}</tex> использует свой маркер дна <tex>Z_{1}</tex>. Добавление нового стартового состояния <tex>s</tex> позволяет затолкнуть маркер <tex>Z_{0}</tex> автомата <tex>\mathcal{P}_{T}</tex> в магазин и перейти в стартовое состояние <tex>\mathcal{P}_{T}</tex>.
  
'''3.''' Каждый переход <tex>\mathcal{P}_{T}</tex> есть и у автомата <tex>\mathcal{P_{N}}</tex>, символ <tex>Z_{1}</tex> хранится в магазине под всеми символами из <tex>\Gamma</tex> и является символом, по которому нет переходов в <tex>\mathcal{P}_{T}</tex>. Тогда <tex>\mathcal{P_{N}}</tex> может совершить следующие действия: <tex>(s, w, Z_{1})\vdash (s_{0}, w, Z_{0} Z_{1})\vdash^{*} (q, \varepsilon, \alpha Z_{1})\vdash^{*} (p, \varepsilon,\varepsilon) </tex>, что означает <tex>\mathcal{P_{N}}</tex> допускает слово <tex>w</tex> по пустому магазину.  
+
'''3.''' Каждый переход <tex>\mathcal{P}_{T}</tex> есть и у автомата <tex>\mathcal{P_{N}}</tex>, символ <tex>Z_{1}</tex> хранится в магазине под всеми символами из <tex>\Gamma</tex> и является символом, по которому нет переходов в <tex>\mathcal{P}_{T}</tex>. Тогда <tex>\mathcal{P_{N}}</tex> может совершить следующие действия: <tex>(s, w, Z_{1})\vdash (s_{0}, w, Z_{0} Z_{1})\vdash^{*} (q, \varepsilon, \alpha Z_{1})\vdash^{*} (p, \varepsilon,\varepsilon) </tex>, что означает <tex>\mathcal{P_{N}}</tex> допускает слово <tex>w</tex> по пустому магазину.  
           
+
         
 +
<tex>\Leftarrow</tex> <br>
 +
Исходя из МП-автомата <tex>\mathcal{P}_{N}</tex>, допускающего язык <tex>L</tex> по пустому стеку, построим МП-автомат <tex>\mathcal{P_{T}}</tex>, допускающий <tex>L</tex> по заключительному состоянию.
 +
[[Файл:EqualAllowAutomataPict.png|400px|right]]
  
 +
'''1.''' Добавим новый символ <tex>Z_1</tex>, не принадлежащий <tex>\Gamma</tex>, который будем маркером дна магазина нового автомата, позволяющий узнать, когда <tex>\mathcal{P_{N}}</tex> опустошает свой магазин. Если построенный автомат <tex>\mathcal{P}_{T}</tex> видит на вершине стека свой маркер, то он знает, что <tex>\mathcal{P_{N}}</tex> опустошает свой магазин на этом же входе.
  
 +
'''2.''' Добавим новое допускающее состояние <tex>p</tex>, в которое автомат переходит, как только обнаруживает, что <tex>\mathcal{P_{N}}</tex> опустошил свой магазин. Таким образом допущенное слово по пустому стеку, будет допускаться и по заключительному состоянию, используя <tex>\varepsilon</tex> переходы в новое состояние.
  
 +
'''3.''' Каждый переход <tex>\mathcal{P_{N}}</tex> есть и у автомата <tex>\mathcal{P}_{T}</tex>. Тогда, согласно введенным начальному и заключительному состоянию, автомат <tex>\mathcal{P}_{T}</tex> может совершить следующие действия: <tex>(s, w, Z_{1})\vdash (s_{0}, w, Z_{0} Z_{1})\vdash^{*} (q, \varepsilon, Z_{1})\vdash (p, \varepsilon,Z_{1}) </tex>, что означает <tex>\mathcal{P}_{T}</tex> допускает слово <tex>w</tex> по заключительному состоянию <tex>p</tex>. }}
  
</font>
+
== См. также ==
<font face="Times" size="3">
+
*[[Автоматы с магазинной памятью | Автоматы с магазинной памятью]]
*'''Доказательство:'''<tex>\Leftarrow</tex> Исходя из МП-автомата <tex>\mathcal{P}_{T}</tex>, допускающего язык <tex>L</tex> по пустому стеку, построим МП-автомат <tex>\mathcal{P_{N}}</tex>, допускающий <tex>L</tex> по заключительному состоянию.
+
*[[Совпадение_множества_языков_МП-автоматов_и_контекстно-свободных_языков | Совпадение множества языков МП-автоматов и контекстно-свободных языков]]
[[Файл:EqualAllowAutomataPict.png|left]]
+
*[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора | Контекстно-свободные грамматики]]
 
 
'''1.''' Добавим новый символ <tex>Z_1</tex>, не принадлежащий <tex>\Gamma</tex>, который будем маркером дна магазина нового автомата, позволяющий узнать, когда <tex>\mathcal{P_{N}}</tex> опустошает свой магазин. Если построенный автомат <tex>\mathcal{P}_{T}</tex> видит на вершине стека свой маркер, то он знает, что <tex>\mathcal{P_{N}}</tex> опустошает свой магазин на этом же входе.
 
 
 
'''2.''' Добавим новое допускающее состояние <tex>p</tex>, в которое автомат переходит, как только обнаруживает, что <tex>\mathcal{P_{N}}</tex> опустошил свой магазин. Таким образом допущенное слово по пустому стеку, будет допускаться и по заключительному состоянию, используя <tex>\varepsilon</tex> переходы в новое состояние.
 
  
'''3.''' Каждый переход <tex>\mathcal{P_{N}}</tex> есть и у автомата <tex>\mathcal{P}_{T}</tex>. Тогда, согласно введенным начальному и заключительному состоянию, автомат <tex>\mathcal{P}_{T}</tex> может совершить следующие действия: <tex>(s, w, Z_{1})\vdash (s_{0}, w, Z_{0} Z_{1})\vdash^{*} (q, \varepsilon, Z_{1})\vdash (p, \varepsilon,Z_{1}) </tex>, что означает <tex>\mathcal{P}_{T}</tex> допускает слово <tex>w</tex> по заключительному состоянию <tex>p</tex>.   
+
== Источники информации ==
+
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2008. — 528 с. : ISBN 978-5-8459-1347-0 (рус.)
  
</font>
+
[[Категория: Теория формальных языков]]
 +
[[Категория: Контекстно-свободные грамматики]]
 +
[[Категория: МП-автоматы]]

Текущая версия на 19:18, 4 сентября 2022

Допуск по заключительному состоянию

Определение:
Пусть [math]\mathcal{P}=\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}, T\rangle[/math]МП-автомат. Тогда языком, допускаемым автоматом [math]\mathcal{P}[/math] по заключительному состоянию, является [math]\mathcal {L(P)}=\{w\mid(s, w, Z_{0})\vdash^{*}(q, \varepsilon, \alpha)\} [/math] для некоторого состояния [math]q\in T[/math] и произвольной магазинной цепочки [math]\alpha[/math]. Начиная с стартовой вершины [math]s[/math] и с [math]w[/math] на входе, автомат [math]\mathcal {P}[/math] прочитывает слово [math]w[/math] и достигает допускающего состояния. Содержимое магазина в этот момент не имеет значения.


Допуск по пустому магазину

Определение:
Для МП-автомата [math]\mathcal{P}=\langle Q, \Sigma, \Gamma, \delta, s, Z_{0}\rangle[/math] определим множество допускаемых по пустому магазину слов как [math]\mathcal {N(P)}=\{w\mid(s, w, Z_{0})\vdash^{*}(q, \varepsilon, \varepsilon)\} [/math], где [math]q[/math] — произвольное состояние. Таким образом, автомат [math]\mathcal{P}[/math] прочитывает слово [math]w[/math], полностью опустошив свой магазин. Множество заключительных состояний [math]T[/math] не имеет значения.


Эквивалентность автоматов

Теорема:
Классы языков, допускаемых МП-автоматами по заключительному состоянию и по пустому магазину (стеку), совпадают.
Доказательство:
[math]\triangleright[/math]

[math]\Rightarrow[/math]
Исходя из МП-автомата [math]\mathcal{P}_{T}[/math], допускающего язык [math]L[/math] по заключительному состоянию, построим другой МП-автомат [math]\mathcal{P_{N}}[/math], который допускает язык [math]L[/math] по пустому стеку.

EqualStackAutomata.png

1. Добавим переходы по [math]\varepsilon[/math] из каждого допускающего состояния автомата [math]\mathcal{P}_{T}[/math] в новое состояние [math]p[/math], которое отвечает за очистку стека. Находясь в состоянии [math]p[/math], автомат [math]\mathcal{P_{N}}[/math] опустошает свой магазин и ничего не прочитывает на входе. Таким образом, как только исходный автомат [math]\mathcal{P}_{T}[/math] приходит в допускающее состояние, прочитав слово [math]w[/math], [math]\mathcal{P_{N}}[/math] опустошает свой магазин, также прочитав слово [math]w[/math].

2. Во избежание случая, когда [math]\mathcal{P}_{T}[/math] может опустошить свой магазин без допуска, [math]\mathcal{P_{N}}[/math] использует свой маркер дна [math]Z_{1}[/math]. Добавление нового стартового состояния [math]s[/math] позволяет затолкнуть маркер [math]Z_{0}[/math] автомата [math]\mathcal{P}_{T}[/math] в магазин и перейти в стартовое состояние [math]\mathcal{P}_{T}[/math].

3. Каждый переход [math]\mathcal{P}_{T}[/math] есть и у автомата [math]\mathcal{P_{N}}[/math], символ [math]Z_{1}[/math] хранится в магазине под всеми символами из [math]\Gamma[/math] и является символом, по которому нет переходов в [math]\mathcal{P}_{T}[/math]. Тогда [math]\mathcal{P_{N}}[/math] может совершить следующие действия: [math](s, w, Z_{1})\vdash (s_{0}, w, Z_{0} Z_{1})\vdash^{*} (q, \varepsilon, \alpha Z_{1})\vdash^{*} (p, \varepsilon,\varepsilon) [/math], что означает [math]\mathcal{P_{N}}[/math] допускает слово [math]w[/math] по пустому магазину.

[math]\Leftarrow[/math]
Исходя из МП-автомата [math]\mathcal{P}_{N}[/math], допускающего язык [math]L[/math] по пустому стеку, построим МП-автомат [math]\mathcal{P_{T}}[/math], допускающий [math]L[/math] по заключительному состоянию.

EqualAllowAutomataPict.png

1. Добавим новый символ [math]Z_1[/math], не принадлежащий [math]\Gamma[/math], который будем маркером дна магазина нового автомата, позволяющий узнать, когда [math]\mathcal{P_{N}}[/math] опустошает свой магазин. Если построенный автомат [math]\mathcal{P}_{T}[/math] видит на вершине стека свой маркер, то он знает, что [math]\mathcal{P_{N}}[/math] опустошает свой магазин на этом же входе.

2. Добавим новое допускающее состояние [math]p[/math], в которое автомат переходит, как только обнаруживает, что [math]\mathcal{P_{N}}[/math] опустошил свой магазин. Таким образом допущенное слово по пустому стеку, будет допускаться и по заключительному состоянию, используя [math]\varepsilon[/math] переходы в новое состояние.

3. Каждый переход [math]\mathcal{P_{N}}[/math] есть и у автомата [math]\mathcal{P}_{T}[/math]. Тогда, согласно введенным начальному и заключительному состоянию, автомат [math]\mathcal{P}_{T}[/math] может совершить следующие действия: [math](s, w, Z_{1})\vdash (s_{0}, w, Z_{0} Z_{1})\vdash^{*} (q, \varepsilon, Z_{1})\vdash (p, \varepsilon,Z_{1}) [/math], что означает [math]\mathcal{P}_{T}[/math] допускает слово [math]w[/math] по заключительному состоянию [math]p[/math].
[math]\triangleleft[/math]

См. также

Источники информации

  • Хопкрофт Д., Мотвани Р., Ульман Д.Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2008. — 528 с. : ISBN 978-5-8459-1347-0 (рус.)