Альтернативное доказательство теоремы Клини (через систему уравнений в регулярных выражениях) — различия между версиями
Zernov (обсуждение | вклад) (→Источники информации) |
Zernov (обсуждение | вклад) (→Пример) |
||
Строка 20: | Строка 20: | ||
== Пример == | == Пример == | ||
− | [[ | + | [[Файл:at_least_one_zero.png|right]] |
− | Найдем регулярное выражение для языка двоичных представлений чисел | + | Найдем регулярное выражение для языка двоичных представлений чисел, в которых есть хотя бы один ноль |
<tex> | <tex> | ||
\begin{cases} | \begin{cases} | ||
− | + | L_1 = 1L_1\\ | |
− | + | L_2 = 0L_1 + 0L_2 + 1L_2 + \varepsilon | |
− | |||
\end{cases} | \end{cases} | ||
</tex> | </tex> | ||
− | + | Найдем <tex> L_1 </tex>: | |
− | <tex> | + | <tex>L_1 = 1L_1</tex>. |
− | Так как <tex> \varepsilon \notin | + | Так как <tex> \varepsilon \notin 1 </tex>, то <tex>L_1 = 1^*</tex>. |
− | + | Выразим <tex> L_2 </tex> через <tex> L_1 </tex>: | |
− | <tex> | + | <tex>L_2 = 0L_1 + 0L_2 + 1L_2 + \varepsilon</tex> |
− | + | Откуда <tex>L_2 = 01^* (0 + 1)^*</tex>. | |
+ | |||
+ | Теперь найдем регулярное выражение для этого же автомата с помощью теоремы Клини (обычный вариант). | ||
+ | Для начала построим таблицу, согласно [[Теорема_Клини_(совпадение_классов_автоматных_и_регулярных_языков) | теореме]] по шагам: | ||
+ | |||
+ | {| border="1" class="wikitable" style="width: 500px; height: 100px; float: left;" | ||
+ | !style="background:#41aef0"|Выражение | ||
+ | !style="background:#41aef0"|Значения | ||
+ | |- | ||
+ | | | ||
+ | | | ||
+ | |||
+ | |} | ||
+ | <div style="clear:both;"></div> | ||
== См. также == | == См. также == |
Версия 21:14, 3 января 2017
Альтернативное доказательство
Теорема: |
Класс автоматных языков является подмножеством регулярных. |
Доказательство: |
Рассмотрим автоматный язык и ДКА для него. Для доказательства теоремы достаточно построить регулярное выражение, порождающее язык .Пусть наш автомат состоит из состояний, и состояние — стартовое. Также пусть — язык, состоящий из слов, которые приводят из состояния в терминальное.Заметим, что для всех и таких, что . Действительно, если по слову из состояния мы можем попасть в терминальное состояние, а между состояниями и есть переход по символу , то слово принадлежит языку . Также, если , то есть если состояние является терминальным, то добавим в объединение для .Мы получили систему из регулярных выражений с неизвестными, причем ( — коэффициент перед -й переменной в -м уравнении) для всех и , так как в автомате нет -переходов, а следовательно, система имеет единственное решение. Также заметим, что содержит все слова, по которым из стартового состояния можно дойти до терминального, но тогда . В итоге мы построили систему уравнений в регулярных выражениях, решив которую, мы получим регулярное выражение, порождающее язык . |
Отметим, что длина построенного таким образом регулярного выражения обычно заметно короче, чем если бы мы строили его по теореме Клини.
Пример
Найдем регулярное выражение для языка двоичных представлений чисел, в которых есть хотя бы один ноль
Найдем
:.
Так как
, то .Выразим
через :
Откуда
.Теперь найдем регулярное выражение для этого же автомата с помощью теоремы Клини (обычный вариант). Для начала построим таблицу, согласно теореме по шагам:
Выражение | Значения |
---|---|