Редактирование: Теорема Клини (совпадение классов автоматных и регулярных языков)

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

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 7: Строка 7:
 
[[Файл:concat.png|200px|thumb|right|Автомат для конкатенации двух регулярных языков]]
 
[[Файл:concat.png|200px|thumb|right|Автомат для конкатенации двух регулярных языков]]
 
[[Файл:Klenee.png|200px|thumb|right|Автомат для замыкания Клини регулярного языка]]
 
[[Файл:Klenee.png|200px|thumb|right|Автомат для замыкания Клини регулярного языка]]
 
+
1. <tex>\mathrm{REG} \subseteq \mathrm{AUT}</tex>.
*<tex>\mathrm{REG} \subseteq \mathrm{AUT}</tex>.
 
  
 
Для доказательства будем строить автоматы, допускающие регулярные языки (см. картинки справа). При этом будем использовать индукцию по номеру поколения регулярного языка.
 
Для доказательства будем строить автоматы, допускающие регулярные языки (см. картинки справа). При этом будем использовать индукцию по номеру поколения регулярного языка.
  
'''База'''
+
'''База.''' <tex>n = 0</tex>.
:<tex>n = 0</tex>.
+
Для этого достаточно построить автоматы для трех языков:
:Для этого достаточно построить автоматы для трех языков:
+
*<tex>L = \varnothing</tex>,
:#<tex>L = \varnothing</tex>,
+
*<tex>L = \left\{\varepsilon \right\}</tex>,
:#<tex>L = \left\{\varepsilon \right\}</tex>,
+
*<tex>L = \left\{c \right\}</tex>.
:#<tex>L = \left\{c \right\}</tex>.
 
  
'''Индукционный переход'''  
+
'''Индукционный переход'''. Умеем строить автоматы для языков <tex>n</tex>-ого поколения. Будем строить для <tex>n + 1</tex>.
:Умеем строить автоматы для языков <tex>n</tex>-ого поколения. Будем строить для <tex>n + 1</tex>.
+
Для этого достаточно научиться строить автоматы для следующих языков (<tex>L, M \in \mathrm{R_n}</tex>):  
:Для этого достаточно научиться строить автоматы для следующих языков (<tex>L, M \in \mathrm{R_n}</tex>):  
+
*<tex>L^\prime = L \cup M</tex>,
:#<tex>L^\prime = L \cup M</tex>,
+
*<tex>L^\prime = LM</tex>,
:#<tex>L^\prime = LM</tex>,
+
*<tex>L^\prime = L^*</tex>.
:#<tex>L^\prime = L^*</tex>.
 
 
Заметим, что по предположению индукции автоматы для <tex>L, M</tex> могут быть построены.
 
Заметим, что по предположению индукции автоматы для <tex>L, M</tex> могут быть построены.
  
'''Итого''', мы можем по регулярному выражению построить автомат, допускающий тот же язык.
+
Итого, мы можем по регулярному выражению построить автомат, допускающий тот же язык.
  
<br>
+
2. <tex>\mathrm{AUT} \subseteq \mathrm{REG}</tex>.
*<tex>\mathrm{AUT} \subseteq \mathrm{REG}</tex>.
 
  
 
Для доказательства будем строить регулярное выражение, допускающее язык, заданный каким-то автоматом. Пусть задан автомат <tex>A</tex> с набором состояний <tex>Q = \left\{1, 2, \dots n \right\}</tex>.  
 
Для доказательства будем строить регулярное выражение, допускающее язык, заданный каким-то автоматом. Пусть задан автомат <tex>A</tex> с набором состояний <tex>Q = \left\{1, 2, \dots n \right\}</tex>.  
Строка 36: Строка 32:
 
Определим регулярные выражения, задающие следующие множества слов:
 
Определим регулярные выражения, задающие следующие множества слов:
  
:<tex>\xi_{ijk} = \left\{ s \mid \langle i,s \rangle  \vdash^* \langle j, \varepsilon \rangle \right\} </tex>, причем в качестве промежуточных вершин выступают только такие, у которых номер не более <tex>k</tex>.
+
<tex>\xi_{ijk} = \left\{ s \mid \langle i,s \rangle  \vdash^* \langle j, \varepsilon \rangle \right\} </tex>, причем в качестве промежуточных вершин выступают только такие, у которых номер не более <tex>k</tex>.
<br>
+
 
 
Построим эти регулярные выражения:
 
Построим эти регулярные выражения:
#<tex>\xi_{ii0} = (c_1 \mid \dots \mid c_l)^*</tex> , где <tex>c_1, c_2, \dots c_l</tex> символы, по которым есть переход из состояния <tex>i</tex> в него же самого.
+
*<tex>\xi_{ii0} = (c_1 \mid \dots \mid c_l)^*</tex> , где <tex>c_1, c_2, \dots c_l</tex> символы, по которым есть переход из состояния <tex>i</tex> в него же самого.
#<tex>\xi_{ij0} = c_1 \mid \dots \mid c_l</tex>, где <tex>c_1, c_2, \dots c_l</tex> символы, по которым есть переход из состояния <tex>i</tex> в состояние <tex>j</tex>.
+
*<tex>\xi_{ij0} = c_1 \mid \dots \mid c_l</tex>, где <tex>c_1, c_2, \dots c_l</tex> символы, по которым есть переход из состояния <tex>i</tex> в состояние <tex>j</tex>.
#<tex>\xi_{iik} = (\xi_{ii{k-1}} \mid \xi_{ik{k-1}} (\xi_{kk{k-1}})^* \xi_{ki{k-1}} )^*</tex>.  
+
*<tex>\xi_{iik} = (\xi_{ii{k-1}} \mid \xi_{ik{k-1}} (\xi_{kk{k-1}})^* \xi_{ki{k-1}} )^*</tex>.  
#<tex>\xi_{ijk} = \xi_{ij{k-1}} \mid \xi_{ik{k-1}} (\xi_{kk{k-1}})^* \xi_{kj{k-1}}</tex>.
+
*<tex>\xi_{ijk} = \xi_{ij{k-1}} \mid \xi_{ik{k-1}} (\xi_{kk{k-1}})^* \xi_{kj{k-1}}</tex>.
<br>
+
 
 
Теперь нетрудно задать регулярное выражение для всего языка:
 
Теперь нетрудно задать регулярное выражение для всего языка:
  
:<tex>\varphi = \xi_{s{t_1}n} \mid \xi_{s{t_2}n} \mid \dots \mid \xi_{s{t_r}n}</tex>, где <tex>s</tex> — стартовое состояние, а <tex>t_1, t_2, \dots t_r</tex> — терминальные состояния исходного автомата.
+
<tex>\varphi = \xi_{s{t_1}n} \mid \xi_{s{t_2}n} \mid \dots \mid \xi_{s{t_r}n}</tex>, где <tex>s</tex> — стартовое состояние, а <tex>t_1, t_2, \dots t_r</tex> — терминальные состояния исходного автомата.
  
'''Таким образом''', мы построили по автомату регулярное выражение, допускающее тот же самый язык.
+
Таким образом, мы построили по автомату регулярное выражение, допускающее тот же самый язык.
 
}}
 
}}
  
== См. также ==
 
* [[Регулярные языки: два определения и их эквивалентность]]
 
* [[Детерминированные конечные автоматы]]
 
 
== Источники информации==
 
* [https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D0%BB%D0%B8%D0%BD%D0%B8 Википедия {{---}} Теорема Клини]
 
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 61.— ISBN 5-8459-0261-4
 
  
  
 
[[Категория: Теория формальных языков]]
 
[[Категория: Теория формальных языков]]
 
[[Категория: Автоматы и регулярные языки]]
 
[[Категория: Автоматы и регулярные языки]]

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблоны, используемые на этой странице: