Альтернативное доказательство теоремы Клини (через систему уравнений в регулярных выражениях) — различия между версиями
Zernov (обсуждение | вклад) (→Источники информации) |
Zernov (обсуждение | вклад) (→Пример) |
||
Строка 45: | Строка 45: | ||
Для начала построим таблицу, согласно [[Теорема_Клини_(совпадение_классов_автоматных_и_регулярных_языков) | теореме]] по шагам: | Для начала построим таблицу, согласно [[Теорема_Клини_(совпадение_классов_автоматных_и_регулярных_языков) | теореме]] по шагам: | ||
− | {| border="1" class="wikitable" style="width: | + | {| border="1" class="wikitable" style="width: 250px; height: 250px; float: left;" |
!style="background:#41aef0"|Выражение | !style="background:#41aef0"|Выражение | ||
!style="background:#41aef0"|Значения | !style="background:#41aef0"|Значения | ||
|- | |- | ||
− | | | + | |<tex>R_{11}^{(0)}</tex> |
− | | | + | |<tex>\varepsilon + 1</tex> |
+ | |- | ||
+ | |<tex>R_{12}^{(0)}</tex> | ||
+ | |<tex>0</tex> | ||
+ | |- | ||
+ | |<tex>R_{21}^{(0)}</tex> | ||
+ | |<tex>\varnothing</tex> | ||
+ | |- | ||
+ | |<tex>R_{22}^{(0)}</tex> | ||
+ | |<tex>(\varepsilon + 0 + 1)</tex> | ||
+ | |} | ||
+ | <div style="clear:both;"></div> | ||
+ | |||
+ | Например, в выражении <tex>R_{11}^{(0)}</tex> присутствует член <tex>\varepsilon</tex>, потому что и начальным, и конечным является состояние <tex>1</tex>. Это выражение включает также <tex>1</tex>, поскольку существует путь | ||
+ | из состояния <tex>1</tex> в состояние <tex>1</tex> по входу <tex>1</tex>. Выражение <tex>R_{12}^{(0)}</tex> равно <tex>0</tex>, потому что есть дуга с | ||
+ | меткой <tex>0</tex>, ведущая из состояния <tex>1</tex> в состояние <tex>2</tex>. Здесь нет члена <tex>\varepsilon</tex>, поскольку начальное | ||
+ | и конечное состояния различаются. И, наконец, <tex>R_{21}^{(0)} = \varnothing</tex>, так как нет путей, ведущих из | ||
+ | состояния <tex>2</tex> в состояние <tex>1</tex>. | ||
+ | Теперь применим индукцию для построения более сложных выражений. | ||
+ | |||
+ | Правило для вычисления выражения <tex>R_{ij}^{(1)}</tex> представляет собой пример общего правила из части теоремы Клини: | ||
+ | <tex>R_{ij}^{(1)} = R_{ij}^{(0)} + R_{i1}^{(0)} (R_{11}^{(0)})^* R_{1j}^{(0)}</tex> | ||
+ | |||
+ | {| border="1" class="wikitable" style="width: 300px; height: 250px; float: left;" | ||
+ | !style="background:#41aef0"|Выражение | ||
+ | !style="background:#41aef0"|Прямая подстановка | ||
+ | !style="background:#41aef0"|Упрощенное выражение | ||
+ | |- | ||
+ | |<tex>R_{11}^{(1)}</tex> | ||
+ | |<tex>\varepsilon + 1 + (\varepsilon + 1)(\varepsilon + 1)^*(\varepsilon + 1)</tex> | ||
+ | |<tex>1^*</tex> | ||
+ | |- | ||
+ | |<tex>R_{12}^{(1)}</tex> | ||
+ | |<tex>0 + (\varepsilon + 1)(\varepsilon + 1)^*0</tex> | ||
+ | |<tex>1^*0</tex> | ||
+ | |- | ||
+ | |<tex>R_{21}^{(1)}</tex> | ||
+ | |<tex>\varnothing + \varnothing(\varepsilon + 1)^*(\varepsilon + 1)</tex> | ||
+ | |<tex>\varnothing</tex> | ||
+ | |- | ||
+ | |<tex>R_{22}^{(1)}</tex> | ||
+ | |<tex>\varepsilon + 0 + 1 + \varnothing(\varepsilon + 1)^*0</tex> | ||
+ | |<tex>(\varepsilon + 0 + 1)</tex> | ||
|} | |} | ||
<div style="clear:both;"></div> | <div style="clear:both;"></div> | ||
+ | |||
+ | И, наконец, последний шаг индукции | ||
+ | |||
+ | {| border="1" class="wikitable" style="width: 300px; height: 250px; float: left;" | ||
+ | !style="background:#41aef0"|Выражение | ||
+ | !style="background:#41aef0"|Упрощенное выражение (после подстановки) | ||
+ | |- | ||
+ | |<tex>R_{11}^{(1)}</tex> | ||
+ | |<tex>1^*</tex> | ||
+ | |- | ||
+ | |<tex>R_{12}^{(1)}</tex> | ||
+ | |<tex>1^*0(0 + 1)^*</tex> | ||
+ | |- | ||
+ | |<tex>R_{21}^{(1)}</tex> | ||
+ | |<tex>\varnothing</tex> | ||
+ | |- | ||
+ | |<tex>R_{22}^{(1)}</tex> | ||
+ | |<tex>(0 + 1)^*</tex> | ||
+ | |} | ||
+ | <div style="clear:both;"></div> | ||
+ | |||
+ | Окончательное регулярное выражение, эквивалентное автомату, строится путем объединения всех тех выражений, для которых первое состояние | ||
+ | является начальным, а второе {{---}} заключительным. В нашем примере <tex>1</tex> {{---}} начальное состояние, а <tex>2</tex> {{---}} заключительное, поэтому нам нужно лишь выражение <tex>R_{12}^{(1)}</tex>, равное <tex>1^*0(0 + 1)^*</tex> | ||
== См. также == | == См. также == |
Версия 21:39, 3 января 2017
Альтернативное доказательство
Теорема: |
Класс автоматных языков является подмножеством регулярных. |
Доказательство: |
Рассмотрим автоматный язык и ДКА для него. Для доказательства теоремы достаточно построить регулярное выражение, порождающее язык .Пусть наш автомат состоит из состояний, и состояние — стартовое. Также пусть — язык, состоящий из слов, которые приводят из состояния в терминальное.Заметим, что для всех и таких, что . Действительно, если по слову из состояния мы можем попасть в терминальное состояние, а между состояниями и есть переход по символу , то слово принадлежит языку . Также, если , то есть если состояние является терминальным, то добавим в объединение для .Мы получили систему из регулярных выражений с неизвестными, причем ( — коэффициент перед -й переменной в -м уравнении) для всех и , так как в автомате нет -переходов, а следовательно, система имеет единственное решение. Также заметим, что содержит все слова, по которым из стартового состояния можно дойти до терминального, но тогда . В итоге мы построили систему уравнений в регулярных выражениях, решив которую, мы получим регулярное выражение, порождающее язык . |
Отметим, что длина построенного таким образом регулярного выражения обычно заметно короче, чем если бы мы строили его по теореме Клини.
Пример
Найдем регулярное выражение для языка двоичных представлений чисел, в которых есть хотя бы один ноль
Найдем
:.
Так как
, то .Выразим
через :
Откуда
.Теперь найдем регулярное выражение для этого же автомата с помощью теоремы Клини (обычный вариант). Для начала построим таблицу, согласно теореме по шагам:
Выражение | Значения |
---|---|
Например, в выражении
присутствует член , потому что и начальным, и конечным является состояние . Это выражение включает также , поскольку существует путь из состояния в состояние по входу . Выражение равно , потому что есть дуга с меткой , ведущая из состояния в состояние . Здесь нет члена , поскольку начальное и конечное состояния различаются. И, наконец, , так как нет путей, ведущих из состояния в состояние . Теперь применим индукцию для построения более сложных выражений.Правило для вычисления выражения
представляет собой пример общего правила из части теоремы Клини:
Выражение | Прямая подстановка | Упрощенное выражение |
---|---|---|
И, наконец, последний шаг индукции
Выражение | Упрощенное выражение (после подстановки) |
---|---|
Окончательное регулярное выражение, эквивалентное автомату, строится путем объединения всех тех выражений, для которых первое состояние является начальным, а второе — заключительным. В нашем примере
— начальное состояние, а — заключительное, поэтому нам нужно лишь выражение , равноеСм. также
Источники информации
- Mathhelpplanet — Теорема Клини
- Deepak D’Souza — Regular Expressions
- Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.: Издательский дом «Вильямс», 2008. — С. 112 — ISBN 978-5-8459-1347-0