Изменения

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

Автоматы с eps-переходами. Eps-замыкание

2796 байт добавлено, 00:09, 31 января 2017
м
ё
{{В разработке}}
[[Категория: Теория формальных языков]]
==Автомат Автоматы с eps<tex dpi = "155">\varepsilon</tex>-переходами==Рассмотрим Конечный автомат с <tex>\varepsilon</tex>-переходами {{---}} конечный автомат, в котором есть возможность совершать переходы осуществляются по строкам<tex>\varepsilon</tex>. Это переходы вида {{Определение|definition='''<tex>\varepsilon<p,\alpha\beta/tex>\vdash-НКА''' или '''НКА с <q,tex>\beta>varepsilon</tex>, где -переходами''' (англ. ''<tex>\alpha,\betavarepsilon</tex> -moves'') {{--- строки. В случае, когда }} набор <tex>A={\langle\Sigma,Q,s,T,\alpha=delta\varepsilonrangle}</tex>, такой автомат называется '''автоматом с где все компоненты имеют тот же смысл, что и для [[Недетерминированные конечные автоматы|НКА]], за исключением <tex>\delta : Q\times (\Sigma\cup\{\varepsilon\}) \to 2^Q</tex>-переходами.'''}} ==Эквивалентность автоматов с переходами по строкам и НКА. Eps<tex dpi = "155">\varepsilon</tex>-замыкание.==Будем называть два автомата '''эквивалентными''', если они задают один и тот же язык.<br>Рассмотрим автомат, в котором переходы осуществляются по строкам. Это переходы вида <tex>\langle p,\alpha\beta\rangle\vdash\langle q,\beta\rangle</tex>, где <tex>\alpha,\beta</tex> {{---}} строки.{{УтверждениеТеорема
|id=th1
|statement=
|proof=
Рассмотрим два случая:
* <tex>\left | \alpha \right | \ge geqslant 1</tex>*:Заменим переходы по таким строкам на последовательности переходов по символам. А именно, пусть <tex>\alpha=a_1a_2...\ldots a_n</tex>, где <tex>a_1,a_2,...\ldots ,a_n</tex> {{--- }} символы. Заменим переход <tex><\langle p,\alpha\beta>\rangle\vdash<\langle q,\beta>\rangle</tex> на переходы <tex>{<\langle p,\alpha\beta>\rangle\vdash<\langle t_1, a_1^{-1}\alpha\beta>\rangle},{<\langle t_1,a_1^{-1}\alpha\beta>\rangle\vdash<\langle t_2,(a_1a_2)^{-1}\alpha\beta>\rangle},...\ldots ,{<\langle t_{n-1}, a_n>\beta\rangle\vdash<\langle q, \beta>\rangle}.</tex>
* <tex>\left | \alpha \right | = 0 \Rightarrow \alpha = \varepsilon</tex>
*:Рассматриваем '''автомат <tex>A</tex> с <tex>\varepsilon</tex>-переходами.''' Для доказательства его эквивалентности НКА посторим построим его <tex>\varepsilon</tex>-замыкание.
*:{{Определение
|definition=
'''<tex>\varepsilon</tex>-замыкание ''' (англ. ''<tex>\varepsilon</tex>-closure'') {{--- }} построение по автомату с <tex>\varepsilon</tex>-переходами эквивалентного ему автомата без <tex>\varepsilon</tex>-переходов.
}}
Ход построения <tex>\varepsilon</tex>-замыкания:
#Транзитивное замыкание
#:Пусть <tex>B</tex> {{- подгаф --}} подграф <tex>A</tex>, в котором есть только <tex>\varepsilon</tex>-переходы. Сделаем транзитивное замыкание графа <tex>B</tex>. Таким образом, получим из автомата <tex>A</tex> новый автомат <tex>A_1</tex>, который допускает тот же язык. Заметим, что если <tex>A_1</tex> допускает слово <tex>x</tex>, то он допускает <tex>x</tex>, не совершая двух <tex>\varepsilon</tex>-переходов подряд.
#Добавление допускающих состояний
#:Пусть в <tex>A_1</tex> есть <tex>\varepsilon</tex>-переход из состояния <tex>u</tex> в состояние <tex>v</tex>, причем <tex>v</tex> {{--- }} допускающее. Тогда, если текущее состояние <tex>u</tex> и строка закончилась, то ее её можно допустить. Во всех таких случаях сделаем <tex>u</tex> допускающим. Получим автомат <tex>A_2</tex>, обладающий тем же свойством, что и <tex>A_1</tex>, а также не совершающий <tex>\varepsilon</tex>-переходов в качестве последнего перехода.#Добавление реберрёбер#:Во всех случаях, когда <tex>{\delta(u,\varepsilon)=v}, {\delta(v,c)=w}</tex> , добавим переход <tex>\delta(u,vc)=cw</tex>. Заметим, что если полученный автомат <tex>A_3</tex> допускает <tex>x</tex>, то он допускает <tex>x</tex> , не совершая <tex>\varepsilon</tex>-переходов.
#Устранение <tex>\varepsilon</tex>-переходов
#:Из предыдущего замечания следует, что если теперь устранить <tex>\varepsilon</tex>-переходы, то допускаемый язык не изменится. Уберем из <tex>A_3</tex> все <tex>\varepsilon</tex>-переходы.
Получили НКА без <tex>\varepsilon</tex>-переходов , эквивалентный исходному автомату.
}}
 ==Совпадение множеств языков, допускаемых eps<tex dpi = "155">\varepsilon</tex>-НКА и ДКА==
{{Утверждение
|id=th2
|statement=
Множество языков, допускаемых автоматами с <tex>\varepsilon</tex>-переходами, совпадает с множеством языков, допускаемых [[Детерминированные_конечные_автоматы|детерминированными конечными автоматами]].
|proof=[[Построение_по_НКА_эквивалентного_ДКА,_алгоритм_Томпсона|<tex> \mathcal{L}(</tex>ДКА<tex>) = \mathcal{L}(</tex>НКА<tex>)</tex>]]. По только что доказанной теореме, <tex> \mathcal{L}(</tex>НКА<tex>) = \mathcal{L}(</tex><tex>\varepsilon</tex>-НКА<tex>)</tex>. Значит, <tex> \mathcal{L}(</tex>ДКА<tex>) = \mathcal{L}(</tex><tex>\varepsilon</tex>-НКА<tex>)</tex>.
}}
 
== Применение ==
В некоторых случаях НКА с <tex>\varepsilon</tex>-переходами строятся проще, чем просто НКА и тем более ДКА для тех же языков. Доказанная выше эквивалентность <tex> \mathcal{L}(</tex>ДКА<tex>)</tex>,<tex>\mathcal{L}(</tex>НКА<tex>)</tex> и <tex>\mathcal{L}(</tex><tex>\varepsilon</tex>-НКА<tex>)</tex> позволяет нам при помощи алгоритма <tex>\varepsilon</tex>-замыкания легко приводить одно к другому и далее к третьему. Также свойства, доказанные выше, являются важной составляющей доказательства [[Теорема Клини (совпадение классов автоматных и регулярных языков)| теоремы Клини]].
 
==См. также==
*[[Недетерминированные конечные автоматы]]
*[[Теорема Клини (совпадение классов автоматных и регулярных языков)]]
 
==Источники информации==
*[http://en.wikipedia.org/wiki/Nondeterministic_finite_automaton Wikipedia — Nondeterministic finite automaton]
*[http://en.wikipedia.org/wiki/Nondeterministic_finite_automaton_with_%CE%B5-moves Wikipedia — Nondeterministic finite automaton with epsilon-moves]
 
[[Категория: Теория формальных языков]]
[[Категория: Автоматы и регулярные языки]]

Навигация