Альтернативное доказательство теоремы Клини (через систему уравнений в регулярных выражениях) — различия между версиями
Warrior (обсуждение | вклад) м |
Warrior (обсуждение | вклад) м (→Пример) |
||
Строка 23: | Строка 23: | ||
<tex> | <tex> | ||
\begin{cases} | \begin{cases} | ||
− | L_0 = 0L_0+1L_1+\ | + | L_0 = 0L_0+1L_1+\varepsilon \\ |
L_1 = 1L_0+0L_2 \\ | L_1 = 1L_0+0L_2 \\ | ||
L_2 = 0L_1+1L_2 | L_2 = 0L_1+1L_2 | ||
Строка 33: | Строка 33: | ||
<tex>L_2 = (00 + 1)L_2+01L_1</tex>. | <tex>L_2 = (00 + 1)L_2+01L_1</tex>. | ||
− | Так как <tex> \ | + | Так как <tex> \varepsilon \notin (00 + 1) </tex>, то <tex>L_2 = (00+1)^*01L_0</tex>. |
Подставим <tex>L_2</tex> во второе уравнение, а потом получившееся выражение подставим в первое, чтобы найти <tex>L_0</tex>: | Подставим <tex>L_2</tex> во второе уравнение, а потом получившееся выражение подставим в первое, чтобы найти <tex>L_0</tex>: | ||
− | <tex>L_0 = 0L_0 + 11L_0 + 10(00+1)^*01L_0 + \ | + | <tex>L_0 = 0L_0 + 11L_0 + 10(00+1)^*01L_0 + \varepsilon </tex>. |
− | Решив уравнение, получим что <tex>(0 + 11 + 10(00+1)^*01)^*</tex> {{---}} регулярное выражение, порождающее искомый язык. Отметим, что длина итогового регулярного выражения заметно короче, чем если бы мы строили его классическим способом. | + | Решив уравнение, получим что <tex>(0 + 11 + 10(00+1)^*01)^*</tex> {{---}} регулярное выражение, порождающее искомый язык. Отметим, что длина итогового регулярного выражения заметно короче, чем если бы мы строили его классическим способом. |
== См. также == | == См. также == |
Версия 16:25, 26 октября 2013
Альтернативное доказательство
Теорема: |
Класс автоматных языков является подмножеством регулярных. |
Доказательство: |
Рассмотрим автоматный язык и ДКА для него. Для доказательства теоремы достаточно построить регулярное выражение, порождающее язык .Пусть наш автомат состоит из состояний, и состояние — стартовое. Также пусть — язык, состоящий из слов, которые приводят из состояния в терминальное.Заметим, что для всех и таких, что . Действительно, если по слову из состояния мы можем попасть в терминальное состояние, а между состояниями и есть переход по символу , то слово принаджелит языку . Также, если , то есть, если стартовое состояние является и терминальным тоже, то добавим в сумму для и .Мы получили систему из регулярных выражений с неизвестными, причем для всех и , так как в автомате нет -переходов, а, следовательно, система имеет единственное решение. Также заметим, что содержит все слова, по которым из стартового состояния можно дойти до терминального, но тогда . В итоге мы построили систему уравнений в регулярных выражениях, решив которую, мы получим регулярное выражение, порождающее язык . |
Пример
Найдем регулярное выражение для языка двоичных представлений чисел кратных трем.
Выразим
:.
Так как
, то .Подставим
во второе уравнение, а потом получившееся выражение подставим в первое, чтобы найти :.
Решив уравнение, получим что
— регулярное выражение, порождающее искомый язык. Отметим, что длина итогового регулярного выражения заметно короче, чем если бы мы строили его классическим способом.