Автоматы с eps-переходами. Eps-замыкание — различия между версиями
м (→Эквивалентность автоматов с переходами по строкам и НКА. Eps-замыкание) |
м (rollbackEdits.php mass rollback) |
||
(не показано 18 промежуточных версий 7 участников) | |||
Строка 1: | Строка 1: | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
− | ==Автоматы с | + | ==Автоматы с <tex dpi = "155">\varepsilon</tex>-переходами== |
Конечный автомат с <tex>\varepsilon</tex>-переходами {{---}} конечный автомат, в котором есть возможность совершать переходы по <tex>\varepsilon</tex>. | Конечный автомат с <tex>\varepsilon</tex>-переходами {{---}} конечный автомат, в котором есть возможность совершать переходы по <tex>\varepsilon</tex>. | ||
{{Определение | {{Определение | ||
− | |definition=<tex>\varepsilon</tex>-НКА <tex> | + | |definition='''<tex>\varepsilon</tex>-НКА''' или '''НКА с <tex>\varepsilon</tex>-переходами''' (англ. ''<tex>\varepsilon</tex>-moves'') {{---}} набор <tex>A={\langle\Sigma,Q,s,T,\delta\rangle}</tex>, где все компоненты имеют тот же смысл, что и для [[Недетерминированные конечные автоматы|НКА]], за исключением <tex>\delta : Q\times (\Sigma\cup\{\varepsilon\}) \to 2^Q</tex>. |
}} | }} | ||
− | ==Эквивалентность автоматов с переходами по строкам и НКА. | + | ==Эквивалентность автоматов с переходами по строкам и НКА. <tex dpi = "155">\varepsilon</tex>-замыкание== |
+ | Будем называть два автомата '''эквивалентными''', если они задают один и тот же язык.<br> | ||
Рассмотрим автомат, в котором переходы осуществляются по строкам. Это переходы вида <tex>\langle p,\alpha\beta\rangle\vdash\langle q,\beta\rangle</tex>, где <tex>\alpha,\beta</tex> {{---}} строки. | Рассмотрим автомат, в котором переходы осуществляются по строкам. Это переходы вида <tex>\langle p,\alpha\beta\rangle\vdash\langle q,\beta\rangle</tex>, где <tex>\alpha,\beta</tex> {{---}} строки. | ||
{{Теорема | {{Теорема | ||
Строка 14: | Строка 15: | ||
|proof= | |proof= | ||
Рассмотрим два случая: | Рассмотрим два случая: | ||
− | * <tex>\left | \alpha \right | \ | + | * <tex>\left | \alpha \right | \geqslant 1</tex> |
− | *:Заменим переходы по таким строкам на последовательности переходов по символам. А именно, пусть <tex>\alpha=a_1a_2 | + | *:Заменим переходы по таким строкам на последовательности переходов по символам. А именно, пусть <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>\left | \alpha \right | = 0 \Rightarrow \alpha = \varepsilon</tex> | ||
− | *:Рассматриваем '''автомат <tex>A</tex> с <tex>\varepsilon</tex>-переходами.''' Для доказательства его эквивалентности НКА | + | *:Рассматриваем '''автомат <tex>A</tex> с <tex>\varepsilon</tex>-переходами.''' Для доказательства его эквивалентности НКА построим его <tex>\varepsilon</tex>-замыкание. |
*:{{Определение | *:{{Определение | ||
|definition= | |definition= | ||
− | '''<tex>\varepsilon</tex>-замыкание''' ( | + | '''<tex>\varepsilon</tex>-замыкание''' (англ. ''<tex>\varepsilon</tex>-closure'') {{---}} построение по автомату с <tex>\varepsilon</tex>-переходами эквивалентного ему автомата без <tex>\varepsilon</tex>-переходов. |
}} | }} | ||
Ход построения <tex>\varepsilon</tex>-замыкания: | Ход построения <tex>\varepsilon</tex>-замыкания: | ||
Строка 26: | Строка 27: | ||
#:Пусть <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>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>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,c)=w</tex>. Заметим, что если полученный автомат <tex>A_3</tex> допускает <tex>x</tex>, то он допускает <tex>x</tex> не совершая <tex>\varepsilon</tex>-переходов. | + | #:Во всех случаях, когда <tex>{\delta(u,\varepsilon)=v}, {\delta(v,c)=w}</tex>, добавим переход <tex>\delta(u,c)=w</tex>. Заметим, что если полученный автомат <tex>A_3</tex> допускает <tex>x</tex>, то он допускает <tex>x</tex>, не совершая <tex>\varepsilon</tex>-переходов. |
#Устранение <tex>\varepsilon</tex>-переходов | #Устранение <tex>\varepsilon</tex>-переходов | ||
#:Из предыдущего замечания следует, что если теперь устранить <tex>\varepsilon</tex>-переходы, то допускаемый язык не изменится. Уберем из <tex>A_3</tex> все <tex>\varepsilon</tex>-переходы. | #:Из предыдущего замечания следует, что если теперь устранить <tex>\varepsilon</tex>-переходы, то допускаемый язык не изменится. Уберем из <tex>A_3</tex> все <tex>\varepsilon</tex>-переходы. | ||
− | Получили НКА без <tex>\varepsilon</tex>-переходов эквивалентный исходному автомату. | + | Получили НКА без <tex>\varepsilon</tex>-переходов, эквивалентный исходному автомату. |
}} | }} | ||
− | ==Совпадение множеств языков, допускаемых | + | ==Совпадение множеств языков, допускаемых <tex dpi = "155">\varepsilon</tex>-НКА и ДКА== |
{{Утверждение | {{Утверждение | ||
|id=th2 | |id=th2 | ||
|statement= | |statement= | ||
Множество языков, допускаемых автоматами с <tex>\varepsilon</tex>-переходами, совпадает с множеством языков, допускаемых [[Детерминированные_конечные_автоматы|детерминированными конечными автоматами]]. | Множество языков, допускаемых автоматами с <tex>\varepsilon</tex>-переходами, совпадает с множеством языков, допускаемых [[Детерминированные_конечные_автоматы|детерминированными конечными автоматами]]. | ||
− | |proof=[[Построение_по_НКА_эквивалентного_ДКА,_алгоритм_Томпсона|L(ДКА) = L(НКА)]]. По только что доказанной теореме, L(НКА) = L(<tex>\varepsilon</tex>-НКА). Значит, L(ДКА) = L(<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] | ||
+ | |||
+ | [[Категория: Теория формальных языков]] | ||
+ | [[Категория: Автоматы и регулярные языки]] |
Текущая версия на 19:05, 4 сентября 2022
Содержание
Автоматы с -переходами
Конечный автомат с
-переходами — конечный автомат, в котором есть возможность совершать переходы по .Определение: |
НКА, за исключением . | -НКА или НКА с -переходами (англ. -moves) — набор , где все компоненты имеют тот же смысл, что и для
Эквивалентность автоматов с переходами по строкам и НКА. -замыкание
Будем называть два автомата эквивалентными, если они задают один и тот же язык.
Рассмотрим автомат, в котором переходы осуществляются по строкам. Это переходы вида , где — строки.
Теорема: | ||
Автоматы с переходами по строкам эквивалентны недетерминированным конечным автоматам. | ||
Доказательство: | ||
Рассмотрим два случая:
Ход построения -замыкания:
| ||
Совпадение множеств языков, допускаемых -НКА и ДКА
Утверждение: |
Множество языков, допускаемых автоматами с детерминированными конечными автоматами. -переходами, совпадает с множеством языков, допускаемых |
. По только что доказанной теореме, ДКА НКА НКА -НКА . Значит, ДКА -НКА . |
Применение
В некоторых случаях НКА с теоремы Клини.
-переходами строятся проще, чем просто НКА и тем более ДКА для тех же языков. Доказанная выше эквивалентность ДКА , НКА и -НКА позволяет нам при помощи алгоритма -замыкания легко приводить одно к другому и далее к третьему. Также свойства, доказанные выше, являются важной составляющей доказательстваСм. также
- Недетерминированные конечные автоматы
- Теорема Клини (совпадение классов автоматных и регулярных языков)