Автоматы с eps-переходами. Eps-замыкание — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 11: Строка 11:
 
* <tex>\left | \alpha \right | \ge 1</tex>
 
* <tex>\left | \alpha \right | \ge 1</tex>
 
* <tex>\left | \alpha \right | = 0 \Rightarrow \alpha = \varepsilon</tex>
 
* <tex>\left | \alpha \right | = 0 \Rightarrow \alpha = \varepsilon</tex>
Рассматриваем '''автомат А с <tex>\varepsilon</tex>-переходами.''' Для доказательства его эквивалентности НКА посторим его <tex>\varepsilon</tex>-замыкание.
+
*:Рассматриваем '''автомат <tex>A</tex> с <tex>\varepsilon</tex>-переходами.''' Для доказательства его эквивалентности НКА посторим его <tex>\varepsilon</tex>-замыкание.
{{Определение
+
*:{{Определение
 
|definition=
 
|definition=
 
<tex>\varepsilon</tex>-замыкание (<tex>\varepsilon</tex>-closure) --- построение по автомату с <tex>\varepsilon</tex>-переходами эквивалентного ему автомата без <tex>\varepsilon</tex>-переходов.
 
<tex>\varepsilon</tex>-замыкание (<tex>\varepsilon</tex>-closure) --- построение по автомату с <tex>\varepsilon</tex>-переходами эквивалентного ему автомата без <tex>\varepsilon</tex>-переходов.
Строка 18: Строка 18:
 
Ход построения <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>\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,v)=c</tex>. Заметим, что если полученный автомат <tex>A_3</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>\varepsilon</tex>-переходами, совпадает с множеством языков, допускаемых ДКА.

Версия 00:24, 4 октября 2010

Эта статья находится в разработке!

Рассмотрим автомат, переходы в котором осуществляются по строкам.

Теорема (О эквивалентности автоматов с переходами по строкам и НКА):
Автоматы с переходами по строкам эквивалентны недетерминированным автоматам.
Доказательство:
[math]\triangleright[/math]

Рассмотрим два случая:

  • [math]\left | \alpha \right | \ge 1[/math]
  • [math]\left | \alpha \right | = 0 \Rightarrow \alpha = \varepsilon[/math]
    Рассматриваем автомат [math]A[/math] с [math]\varepsilon[/math]-переходами. Для доказательства его эквивалентности НКА посторим его [math]\varepsilon[/math]-замыкание.
Определение:
[math]\varepsilon[/math]-замыкание ([math]\varepsilon[/math]-closure) --- построение по автомату с [math]\varepsilon[/math]-переходами эквивалентного ему автомата без [math]\varepsilon[/math]-переходов.

Ход построения [math]\varepsilon[/math]-замыкания:

  1. Транзитивное замыкание
    Пусть [math]B[/math] - подгаф [math]A[/math], в котором есть только [math]\varepsilon[/math]-переходы. Сделаем транзитивное замыкание графа [math]B[/math]. Таким образом, получим из автомата [math]A[/math] новый автомат [math]A_1[/math], который допускает тот же язык. Заметим, что если [math]A_1[/math] допускает слово [math]x[/math], то он допускает его, не совершая двух [math]\varepsilon[/math]-переходов подряд.
  2. Добавление допускающих состояний
    Пусть в [math]A_1[/math] есть [math]\varepsilon[/math]-переход из состояния [math]u[/math] в состояние [math]v[/math], причем [math]v[/math] - допускающее. Тогда, если текущее состояние [math]u[/math] и строка закончилась, то ее можно допустить. Во всех таких случаях сделаем [math]u[/math] допускающим. Получим автомат [math]A_2[/math], обладающий тем же свойством, что и [math]A_1[/math], а также не совершающий [math]\varepsilon[/math]-переходов в качестве последнего перехода.
  3. Добавление ребер
    Во всех случаях, когда [math]\delta(u,\varepsilon)=v,\delta(v,c)=w[/math] добавим переход [math]\delta(u,v)=c[/math]. Заметим, что если полученный автомат [math]A_3[/math] допускает [math]x[/math], то он допускает его не совершая [math]\varepsilon[/math]-переходов.
  4. Устранение [math]\varepsilon[/math]-переходов
    Из предыдущего замечания следует, что если теперь устранить [math]\varepsilon[/math]-переходы, то допускаемый язык не изменится. Уберем из [math]A_3[/math] все [math]\varepsilon[/math]-переходы. Получим НКА эквивалентный исходному автомату.
[math]\triangleleft[/math]

Следствие: множество языков, допускаемых автоматами с [math]\varepsilon[/math]-переходами, совпадает с множеством языков, допускаемых ДКА.