Как найти язык автомата

Indeed, there is an elegant way to compute this.

The process of finding the language accepted by an automaton $A = (Q,Sigma, delta, q_0, F)$ involves solving a system of equations over the monoid $(Sigma, circ, epsilon)$ with $epsilon$ denoting the empty word of the alphabet.

Denote as $Xi_i$ the language recognized by the automaton $(Q, Sigma, delta, q_i, F)$ and $Q= left{q_0,..,q_n right}$.
That is, create for each state of the initial automaton a new automaton with an initial state $q_i$, for $i=0,1,..,n$. Now denote $L_{ij}$ the language consisting of all the letters on the diagram of $A$ that start from $q_i$ and end at $q_j$. So from there there is the system

$$Xi_i = bigcup L_{ij} Xi_j cup Mi$$

where $M_i = emptyset$ if state $i$ is not final, ${epsilon}$ otherwise.

So to find the language of the automaton $A$ we got to solve the above system of equations and find $Xi_0$ under the operations defined by the monoid.

To solve this system we can use the following lemma:

Lemma: Let $L.M subset Sigma^*$ languages. The smallest language satisfying the equation
$$Z = LZ cup M$$ is $L^* M$.

For example consider the automaton:

$A = (left{q_0,q_1,q_2right},left{a,b right},delta, q_0,left{q_2 right})$ with the state diagram of $delta$ as follows

enter image description here

The system of equations is

$$begin{cases}
Xi_0 = a Xi_0 cup b Xi_1
\ Xi_1 = bXi_0 cup a Xi_2
\ Xi_2 = (a cup b) Xi_0 cup left{epsilon right}
end{cases} $$

With substitution we obtain

$$begin{cases}
Xi_0 = a Xi_0 cup b Xi_1
\ Xi_1 = b Xi_0 cup a ((a cup b) Xi_0 cup left{epsilon right})
end{cases} $$

$$begin{cases}
Xi_0 = a Xi_0 cup b Xi_1
\ Xi_1 = b cup a ((a cup b)) Xi_0 cup a)
end{cases} $$

Substituting to the first equation we get

$$
Xi_0 = a Xi_0 cup b ((b cup a ((a cup b)) Xi_0 cup a)
$$

$$
Xi_0 = a cup (b^2 cup b a^2 cup b a b) Xi_0 cup ba
$$

Finally, applying our lemma

$$
Xi_0 = (a cup b^2 cup b a^2 cup b a b)^* ba
$$

Thus the language accepted by the automaton is

$$L(A) = (a cup b^2 cup b a^2 cup b a b)^* ba $$ as one can validate easily.

May 22 2006, 00:25

Categories:

  • IT
  • История
  • Наука
  • Cancel

Седьмой семинар

Тема: Регулярные языки и конечные автоматы (продолжение).

Для получения регулярного языка, допускаемого конечным автоматом, в общем случае
необходимо решить систему уравнений в полукольце языков (аналогично решалась задача поиска
кратчайших расстояний в графе):
$ mathcal{L} (2^{V^*}, cup, cdot, varnothing,{lambda})$. Не трудно убедиться, что это идемпотентное полукольцо с итерацией, в
котором мы можем решать уравнение вида
$ x = a x + b$ (см. выше). Чтобы получить систему
уравнений, необходимо построить матрицу переходов для графа конечного автомата.

Рассмотрим пример, в котором регулярный язык без составления конечного
автомата и системы уравнений достаточно сложно. Рассмотрим алфавит $ {0, 1}$, необходимо
получить регулярное выражения для языка, содержащего только чётное число единиц и чётное
число нулей. Попытки придумать регулярное выражение «в лоб» (например,
$ ((00)^* +(11)^*)^*$) дадут только частные случаи. Построим конечный автомат, допускающий цепочки
такого языка: очевидно, что возможно только четыре состояния: «чётное число нулей и
единиц», «чётное число нулей, нечётное — единиц», «нечётное число нулей и единиц» и
«нечётное число нулей и чётное число единиц», автомат со всеми возможными переходами
показан на рисунке 0.

Рисунок 0:
Конечный автомат, допускающий цепочки с чётным числом нулей и единиц

includegraphics[width=8cm]{fa_example3.eps}

Каждому состоянию $ q_i$ конечного автомата ставится в соответствие переменная
$ x_i$. Значение этой переменной суть есть регулярное выражение, задающее все слова,
которые допускаются кончным автоматом, старующем из данного состояния. Очевидно, что язык,
допускаемый конечным автоматом получается сложением переменных всех стартовых состояний.

Каждой строке матрицы соответствует одно уравнение, при этом всем уравнениям,
соответствующим конечным состояниям автомата, необходимо прибавить $ lambda$.

В нашем примере получается следующая система уравнений, которая имеет решение:

Таким образом, регулярное выражение для языка, допускаемого автоматом, равно:

.

Детерминизация конечных автоматов

Выше уже было сказано о том, что при работе конечного автомата возможны «конфликтные
ситуации», когда существует два правила с одинаковой левой частью или
$ lambda$-переходы — в этом случае необходимо «знать заранее», какой путь следует
выбрать, чтобы цепочка всё же была прочитана. Такой подход очень неудобен в реализации,
поэтому воникает задача детерминизации конечного автомата, т.е. приведение его к
такому виду, что «конфликтныйе ситуации не возможны», а язык, допускаемый автоматом, не
изменяется.

Существует формальный алгоритм детерминизации автомата, который состоит из двух шагов:

  • удаление $ lambda$-переходов;
  • собственно детерминизация.

Для данного автомата
$ M = (V, Q, q_0, F, delta)$, автомат без $ lambda$-переходов будет
иметь вид:

Рассмотрим пример: на рисунке 1 показаны автоматы с
$ lambda$-переходами и без — при этом они допускают один и тот же язык.

Рисунок 1:
Удаление $ lambda$-переходов

includegraphics[width=12cm]{fa_example4.eps}

Детерминизация производится построением новых вершин и переходов. При этом в качестве
вершин графа автомата могут теперь выступать не отдельные состояния изначального
автомата, анаборы состояний, например
$ { q_0, q_2, q_3}$.

В качестве нового исходного состояния принимается состояние $ {q_0}$. Далее для всех
букв алфавита стоятся новые вершины, в которые можно попасть из данной вершины. Для нашего
примера все новые состояния и переходы будут выглядеть так:

Новыми конечными вершинами являются все вершины, содержащие в себе хоть одну из конечных
вершин исходного автомата: $ {q_4}$,
$ {q_1, q_4}$,
$ {q_2, q_4}$,
$ {q_2, q_3,q_4}$.

Новые вершины можно переименовать. Граф детерменизированного автомата показан на рисунке
2.

Рисунок 2:
Детерминизированный автомат

includegraphics[width=10cm]{fa_example4d.eps}

Существует теорема, согласно которой для каждого автомата может быть построен
эквивалентный (допускающий тот же язык) автомат. Это позволяет для любого регулярного
языка построить детерминизированный автомат.

Из этой теоремы есть интересное следствие — с помощью детерменизированного автомата
можно получать автоматы не досускающие заданную цепочку. Для этого необходимо в
детерминизированном автомате, допускающем данную цепочку, взять в качестве конечных вершин
дополнение относительно всех вершин:
$ F' = Q setminus F$.

Рассмотрим пример — необходимо получить автомат (в алфавите $ {a, b}$), не допускающий
идущих подряд букв $ a b$. На рисунке 3 показан исходный
автомат, допускающий все слова, содержащие подряд $ a b$, затем тот же автомат, но
детерминизированный. Третьим показан автомат, не досускающий цепочки, содержащие подряд $ a b$. В данном случае две правые вершины в последнем автомате можно объединить как
неверные состояния, в том смысле, что попав туда, автомат заведомо не прочитает
заданную цепочку.

Рисунок 3:
Детерминизация и дополнение конечного автомата

includegraphics[width=10cm]{fa_example5.eps}

Аннотация: В данной лекции рассматриваются два наиболее распространенных способа конечного задания формального языка: грамматики и автоматы. Рассматриваются конечные автоматы, соответствующие в иерархии Хомского праволинейным грамматикам, определяются понятия конечного автомата, недетерминированного конечного автомата и распознаваемого конечным автоматом языка. Приведены практические примеры и упражнения для закрепления материала

Два наиболее распространенных способа конечного задания
формального языка — это грамматики и автоматы.
Автоматами в данном контексте называют математические модели
некоторых вычислительных устройств.
В этой лекции рассматриваются конечные автоматы,
соответствующие в иерархии Хомского
праволинейным грамматикам.
Более сильные вычислительные модели
будут определены позже,
в лекциях
«10»
,
«14»

и
«15»
.
Термин «автоматный язык» закреплен за языками,
распознаваемыми именно конечными автоматами,
а не какими-либо более
широкими семействами автоматов
(например, автоматами с магазинной памятью или
линейно ограниченными автоматами).

В разделе 2.1 определяются понятия
конечного автомата
(для ясности такой автомат можно называть
недетерминированным конечным автоматом)
и
распознаваемого конечным автоматом языка.
В следующем разделе дается другое,
но эквивалентное первому определение
языка, распознаваемого конечным автоматом.
Оно не является необходимым для дальнейшего изложения,
но именно это определение поддается обобщению
на случаи автоматов других типов.

В разделе 2.3 доказывается, что
тот же класс автоматных языков можно получить, используя
лишь конечные автоматы специального вида
(они читают на каждом такте ровно один символ
и имеют ровно одно начальное состояние).
Во многих учебниках конечными автоматами
называют именно такие автоматы.

Целую серию классических результатов теории формальных языков
составляют теоремы о точном соответствии некоторых классов
грамматик некоторым классам автоматов.
Первая теорема из этой серии, утверждающая, что
праволинейные грамматики порождают в точности автоматные языки,
доказывается в разделе 2.4.

Другая серия результатов связана с возможностью
сузить некоторый класс грамматик, не изменив при этом
класс порождаемых ими языков.
Обычно в таком случае грамматики из меньшего класса
называются грамматиками в нормальной форме.
В разделе 2.5*
формулируется результат такого типа
для праволинейных грамматик.
Сама эта теорема не представляет большого интереса,
но аналогичные результаты,
доказываемые позже для контекстно-свободных грамматик,
используются во многих доказательствах и алгоритмах.

Не все конечные автоматы подходят для конструирования
распознающих устройств, пригодных для практических приложений,
так как в общем случае конечный автомат не дает точного
указания, как поступать на очередном шаге,
а разрешает продолжать вычислительный процесс несколькими способами.
Этого недостатка нет у детерминированных конечных автоматов
(частного случая недетерминированных конечных автоматов),
определенных в разделе 2.6.
В разделе 2.7 доказывается, что
каждый автоматный язык
задается некоторым детерминированным конечным автоматом.

2.1. Недетерминированные конечные автоматы

Определение 2.1.1. Конечный автомат
(finite automaton, finite-state machine) —
это пятерка M = langle Q , Sigma , Delta , I , F rangle,
где Sigma
конечный входной алфавит
(или просто алфавит ) данного конечного автомата, langle Q и Delta — конечные множества,

Delta subseteq Q times Sigma ^* times Q ,

I subseteq Q, F subseteq Q.
Элементы Q
называются состояниями
(state),
элементы Iначальными
(initial) состояниями,
элементы Fзаключительными
или допускающими
(final, accepting) состояниями.
Если langle p , x , q rangle in Delta,
то langle p , x , q rangle
называется переходом
(transition) из p в q,
а слово xметкой
(label) этого перехода.

Пример 2.1.2.
Пусть Q = {1,2}, Sigma = { a , b }, I = {1}, F = {2},

Delta = {
langle 1 , aaa , 1 rangle ,
langle 1 , ab , 2 rangle ,
langle 1 , b , 2 rangle ,
langle 2 , varepsilon , 1 rangle
} .

Тогда langle Q , Sigma , Delta , I , F rangle
конечный автомат.

Замечание 2.1.3.
Конечные автоматы можно изображать в виде диаграмм состояний
(state diagram) (иногда их называют диаграммами переходов
(transition diagram)).
На диаграмме каждое состояние обозначается кружком,
а переход — стрелкой.
Стрелка из p в q,
помеченная словом x,
показывает, что langle p , x , q rangle
является переходом данного конечного автомата.
Каждое начальное состояние распознается
по ведущей в него короткой стрелке.
Каждое допускающее состояние отмечается на диаграмме
двойным кружком.

Пример 2.1.4.
На диаграмме изображен конечный автомат из примера 2.1.2.

objectwidth={5mm} objectheight={5mm} letobjectstyle=scriptstyle
xymatrix {
  *=[o][F-]{1}
 ar @`{+/l16mm/} [] ^{}
 rloop{0,1} ^{aaa}
 ar `ur_r{+/u7mm/}`r_dr{[0,2]}^{ab} "1,3"  
 ar  "1,3"  ^{b}
&
& *=[o][F=]{2}
 ar `dl_l{+/d7mm/}`l_ul{[0,-2]}^{varepsilon} "1,1"  
}

Замечание 2.1.5.
Если в конечном автомате имеются
несколько переходов с общим началом и общим концом,
то такие переходы называются параллельными.
Иногда на диаграмме состояний конечного автомата
параллельные переходы изображают одной стрелкой.
При этом метки переходов перечисляют через запятую.

Пример 2.1.6.
На диаграмме снова изображен
конечный автомат из примера 2.1.2.

objectwidth={5mm} objectheight={5mm} letobjectstyle=scriptstyle
xymatrix {
  *=[o][F-]{1}
 ar @`{+/l16mm/} [] ^{}
 rloop{0,1} ^{aaa}
 ar  "1,3" <1mm> ^{ab,b}
& 
& *=[o][F=]{2}
 ar  "1,1" <1mm> ^{varepsilon}
}

Определение 2.1.7. Путь
(path) конечного автомата — это кортеж langle q_0 , e_1 , q_1 , e_2 , ldots , q_n rangle,
где n geqslant 0
и e_i = langle q_{i-1} , w_i , q_i rangle in Delta
для каждого i.
При этом q0начало пути qnконец пути nдлина пути w1…wnметка пути.

Замечание 2.1.8.
Для любого состояния q in Q
существует путь langle q rangle.
Его метка — varepsilon,
начало и конец совпадают.

Определение 2.1.9.
Путь называется успешным
если его начало принадлежит I,
а конец принадлежит F.

Пример 2.1.10.
Рассмотрим конечный автомат из примера 2.1.2.
Путь langle
1 ,
langle 1 , b , 2 rangle ,
2 ,
langle 2 , varepsilon , 1 rangle ,
1 ,
langle 1 , aaa , 1 rangle ,
1 ,
langle 1 , b , 2 rangle ,
2
rangle
является успешным.
Его метка — baaab.
Длина этого пути — 4.

Определение 2.1.11.
Слово w допускается
(is accepted, is recognized)
конечным автоматом M,
если оно является меткой некоторого успешного пути.

Определение 2.1.12.
Язык, распознаваемый
конечным автоматом M, —
это язык L(M), состоящий из меток всех успешных путей
(то есть из всех допускаемых данным автоматом слов).
Будем также говорить, что автомат M распознает
(recognizes, accepts)
язык L(M).

Замечание 2.1.13.
Если I cap F neq varnothing,
то язык, распознаваемый конечным автоматом langle Q , Sigma , Delta , I , F rangle,
содержит varepsilon.

Пример 2.1.14.
Пусть M = langle Q , Sigma , Delta , I , F rangle,
где Q = {1,2}, Sigma = { a , b }, I = {1}, F = {1,2},

Delta = {
langle 1 , a , 2 rangle ,
langle 2 , b , 1 rangle
} .

objectwidth={5mm} objectheight={5mm} letobjectstyle=scriptstyle
xymatrix {
  *=[o][F=]{1}
 ar @`{+/l16mm/} [] ^{}
 ar  "1,2" <0.6mm> ^{a}
& *=[o][F=]{2}
 ar  "1,1" <0.6mm> ^{b}
}

Тогда

L ( M ) = { (ab)^n mid n geqslant 0 } cup { (ab)^n a mid n geqslant 0 } .

Определение 2.1.15.
Два конечных автомата эквивалентны,
если они распознают один и тот же язык.

Определение 2.1.16.
Язык L называется автоматным
(finite-state language),
если существует конечный автомат, распознающий этот язык.

Замечание 2.1.17.
Обычно в учебниках используется более узкое определение
недетерминированного конечного автомата, но это не меняет
класса автоматных языков (см. лемму 2.3.3.).

Пример 2.1.18.
Рассмотрим однобуквенный алфавит Sigma = { a }.
При любых фиксированных k in mathbb{N}
и m in mathbb{N}
язык { a^{ k + m n } mid n in mathbb{N} }
является автоматным.

Замечание 2.1.19.
Каждый конечный язык является автоматным.

Определение 2.1.20.
Состояние q достижимо
(reachable)
из состояния p,
если существует путь, началом которого является p,
а концом — q.

Лемма 2.1.21. Каждый автоматный язык распознается некоторым конечным автоматом,
в котором каждое состояние достижимо из некоторого начального состояния
и из каждого состояния достижимо хотя бы одно заключительное состояние
.

Пример 2.1.22.
Рассмотрим конечный автомат langle Q , Sigma , Delta , I , F rangle,
где Q = {1,2,3,4}, Sigma = { a , b , c , d }, I = {1,2,4}, F = {1,3,4},

Delta = {
langle 1 , a , 2 rangle ,
langle 1 , b , 4 rangle ,
langle 3 , c , 4 rangle ,
langle 4 , d , 1 rangle
} .

objectwidth={5mm} objectheight={5mm} letobjectstyle=scriptstyle
xymatrix {
  %
& *=[o][F=]{1}
 ar @`{+/l16mm/} [] ^{}
 ar  "2,1"  _{a}
 ar  "2,2" <0.6mm> ^{b}
& *=[o][F=]{3}
 ar  "2,2"  ^{c}
\
  *=[o][F-]{2}
 ar @`{+/l16mm/} [] ^{}
& *=[o][F=]{4}
 ar @`{+/l16mm/} [] ^{}
 ar  "1,2" <0.6mm> ^{d}
& 
}

Удалим те состояния
(и содержащие их переходы),
которые не удовлетворяют требованиям леммы 2.1.21.
Получается эквивалентный конечный автомат langle Q' , Sigma , Delta' , I' , F' rangle,
где Q’ = {1,4}, I’ = {1,4}, F’ = {1,4},

Delta' = {
langle 1 , b , 4 rangle ,
langle 4 , d , 1 rangle
} .

objectwidth={5mm} objectheight={5mm} letobjectstyle=scriptstyle
xymatrix {
  *=[o][F=]{1}
 ar @`{+/l16mm/} [] ^{}
 ar  "2,1" <0.6mm> ^{b}
\
  *=[o][F=]{4}
 ar @`{+/l16mm/} [] ^{}
 ar  "1,1" <0.6mm> ^{d}
}

Замечание 2.1.23
Естественным обобщением конечного автомата
является конечный преобразователь
(finite-state transducer),
позволяющий на каждом такте отправить несколько символов
в дополнительный «выходной» поток.
В некоторых книгах конечными автоматами
называют именно такие устройства (с выходным потоком).

В данном пособии конечные преобразователи
рассматриваться не будут.

Упражнение 2.1.24. Найти конечный автомат, распознающий язык { u c v mid u in {a,b}^* , v in {a,b}^* }

Упражнение 2.1.25. Найти конечный автомат, распознающий язык { w in {a,b,c}^* mid | w |_c neq 1 }

Упражнение 2.1.26. Найти конечный автомат, распознающий язык {a,b}^* - ({ a^n mid n geqslant 0 } cup { b^n mid n geqslant 0 })

Упражнение 2.1.27. Найти конечный автомат, распознающий язык { a u b mid u in {a,b}^* } cup
 { b u a mid u in {a,b}^* }

Упражнение 2.1.28. Найти конечный автомат, распознающий язык { w in {a,b}^* mid | w |_a geqslant 3 }

Упражнение 2.1.28. Найти конечный автомат, распознающий язык { w in {a,b}^+ mid f(w)  vdots  4 },
где f( varepsilon ) rightleftharpoons 0, f( x a ) rightleftharpoons 1 - f( x )
и f( x b ) rightleftharpoons -1 - f( x )
для любого x in {a,b}^*

Детерминизация конечных автоматов

Для дальнейшего изучения свойств конечных автоматов и, в частности, для решения задачи синтеза важное значение имеет следующая теорема.

Теорема 7.7 (теорема о детерминизации). Для любого конечного автомата может быть построен эквивалентный ему детерминированный конечный автомат.

Для того чтобы доказать теорему, нужно, во-первых, описать алгоритм построения детерминированного конечного автомата по исходному; во-вторых, обосновать этот алгоритм, строго доказав, что он действительно дает конечный автомат, который является детерминированным и эквивалентным исходному. Здесь мы приведем только сам алгоритм построения детерминированного автомата.

Преобразование произвольного конечного автомата к эквивалентному детерминированному осуществляется в два этапа: сначала удаляются дуги с меткой lambda, затем проводится собственно детерминизация.

1. Удаление λ-переходов (дуг с меткой lambda).

Чтобы перейти от исходного конечного автомата M=(V,Q,q_0,F,delta) к эквивалентному конечному автомату M'=(V,Q',q_0,F',delta') без λ-переходов, достаточно в исходном графе M проделать следующие преобразования.

а. Все состояния, кроме начального, в которые заходят только дуги с меткой lambda, удаляются; тем самым определяется множество Q' конечного автомата M'. Понятно, что Q'subseteq Q. При этом полагаем, что начальное состояние остается прежним.

Множество дуг конечного автомата и их меток

б. Множество дуг конечного автомата M' и их меток (тем самым и функция переходов M') определяется так: для любых двух состояний p,rin Q',~ pto_{a}r имеет место тогда и только тогда, когда ain V, а в графе M имеет место одно из двух: либо существует дуга из p в r, метка которой содержит символ a, либо существует такое состояние q, что pRightarrow_{lambda}^{+}q и qto_{a}r. При этом вершина q, вообще говоря, может и не принадлежать множеству Q', т.е. она может и исчезнуть при переходе к автомату M' (рис. 7.11). Если же qin Q', то, естественно, в M' сохранится дуга (q,r) и символ a будет одним из символов, принадлежащих метке этой дуги (рис. 7.12).

Множество заключительных состояний конечного автомата

Таким образом, в M' сохраняются все дуги M, метки которых отличны от lambda и которые соединяют пару (вершин) состояний из множества Q' (не удаляемых согласно п. а). Кроме этого, для любой тройки состояний p,q,r (не обязательно различных!), такой, что p,rin Q' и существует путь ненулевой длины из p в q, метка которого равна lambda (т.е. путь по λ-переходам), а из q в r ведет дуга, метка которой содержит символ a входного алфавита, в M' строится дуга из p в r, метка которой содержит символ a (см. рис. 7.11).

в. Множество заключительных состояний F' конечного автомата M' содержит все состояния qin Q', т.е. состояния конечного автомата M, не удаляемые согласно п. а, для которых имеет место qRightarrow_{lambda}^{ast}q_f для некоторого q_fin F (т.е. либо состояние q само является заключительным состоянием конечного автомата M, либо из него ведет путь ненулевой длины по дугам с меткой lambda в одно из заключительных состояний конечного автомата M) (рис. 7.13).

2. Собственно детерминизация.

Пусть M=(Q,V,q_0,F,delta) — конечный автомат без λ-переходов. Построим эквивалентный M детерминированный конечный автомат M_1.

Этот конечный автомат определяется таким образом, что его множество состояний есть множество всех подмножеств множества состояний конечного автомата M. Это значит, что каждое отдельное состояние конечного автомата M_1 определено как некоторое подмножество множества состояний конечного автомата M. При этом начальным состоянием нового конечного автомата (т.е. M_1) является одноэлементное подмножество, содержащее начальное состояние старого конечного автомата (т.е. M), а заключительными состояниями нового конечного автомата являются все такие подмножества Q, которые содержат хотя бы одну заключительную вершину исходного конечного автомата M.

Впредь, допуская некоторую вольность речи, мы будем иногда называть состояния конечного автомата M_1 состояниями-множествами. Важно, однако, четко усвоить, что каждое такое состояние-множество есть отдельное состояние нового конечного автомата, но никак не множество его состояний. В то же время для исходного («старого») конечного автомата M это именно множество его состояний. Образно говоря, каждое подмножество состояний старого конечного автомата «свертывается» в одно состояние нового конечного автомата*.

*Формально следовало бы определить множество Q_1 как множество, находящееся во взаимно однозначном соответствии с множеством 2^Q, но нам все-таки удобнее считать, что Q_1 совпадает с 2^Q, — ведь множеством состояний конечного автомата может быть любое непустое конечное множество.

Функция переходов нового конечного автомата определена так, что из состояния-множества S по входному символу а конечный автомат M_1 переходит в состояние-множество, представляющее собой объединение всех множеств состояний старого конечного автомата, в которые этот старый конечный автомат переходит по символу а из каждого состояния множества S. Таким образом, конечный автомат M_1 является детерминированным по построению.

Приведенное выше словесное описание можно перевести в формулы следующим образом: строим конечный автомат M_1 так, что

M_1=(Q_1,V,{q_0},F_1,delta_1), где

begin{cases}Q_1=2^Q,quad F_1={Tcolon, Tcap Fnevarnothing,~Tin2^Q},\ (forall Ssubseteq Q)(forall ain V)Bigl(delta_1(S,a)= bigcuplimits_{qin S}delta(q,a)Bigr). end{cases}

(7.8)

Обратим внимание на то, что среди состояний нового конечного автомата есть состояние varnothing, причем, согласно (7.8), delta_1(varnothing,a)=varnothing для любого входного символа a. Это значит, что, попав в такое состояние, конечный автомат M_1 уже его не покинет. Вообще же любое состояние q конечного автомата, такое, что для любого входного символа a имеем delta(q,a)=q, называют поглощающим состоянием конечного автомата. Таким образом, состояние varnothing детерминированного конечного автомата M_1 является поглощающим. Полезно заметить также, что delta_1(S,a)=varnothing тогда и только тогда, когда для каждого qin S (состояния старого конечного автомата из множества состояний S) delta(q,a)=varnothing, т.е. в графе M из каждого такого состояния q не выходит ни одна дуга, помеченная символом a.

Можно доказать, что полученный по такому алгоритму конечный автомат эквивалентен исходному.


Пример 7.9. Детерминизируем конечный автомат, изображенный на рис. 7.14.

Эквивалентный конечный автомат без λ-переходов изображен на рис. 7.15. Заметим, что вершина q_2 исчезает, так как в нее заходят только «пустые» дуги.

Конечный и эквивалентный конечный автоматы

Чтобы детерминизировать полученный автомат, совершенно не обязательно выписывать все его 2^3=8 состояний, среди которых многие могут оказаться не достижимыми из начального состояния {q_0}. Чтобы получить достижимые из {q_0} состояния, и только их, воспользуемся так называемым методом вытягивания.

Этот метод в общем случае можно описать так.

В исходном конечном автомате (без пустых дуг) определяем все множества состояний, достижимых из начального, т.е. для каждого входного символа a находим множество delta(q_0,a). Каждое такое множество в новом автомате является состоянием, непосредственно достижимым из начального.

Для каждого из определенных состояний-множеств S и каждого входного символа a находим множество textstyle{mathop{bigcuplimits_{qin S} delta(q,a)}limits^{phantom{A}^{.}}}. Все полученные на этом шаге состояния будут состояниями нового (детерминированного) автомата, достижимыми из начальной вершины по пути длины 2. Описанную процедуру повторяем до тех пор, пока не перестанут появляться новые состояния-множества (включая пустое!). Можно показать, что при этом получаются все такие состояния конечного автомата M_1, которые достижимы из начального состояния {q_0}.

Граф для языка

Для конечного автомата на рис. 7.15 имеем:

begin{aligned}& delta_1({q_0},a)={q_1};qquad  delta_1({q_0},b)={q_1,q_3};\ & delta_1({q_1},a)={q_1};qquad  delta_1({q_1},b)={q_1};\ & delta_1({q_1,q_3},a)= delta(q_1,a)cup delta(q_3,a)= {q_1}cup{q_1}={q_1};\ & delta_1({q_1,q_3},b)= delta(q_1,b)cup delta(q_3,b)= {q_1}cup{q_1}={q_1}. end{aligned}

Так как новых состояний-множеств больше не появилось, процедура «вытягивания» на этом заканчивается, и мы получаем граф, изображенный на рис. 7.16.


Дополнение регулярного языка

Одним из важных теоретических следствий теоремы о детерминизации является следующая теорема.

Теорема 7.8. Дополнение регулярного языка есть регулярный язык.

Пусть L — регулярный язык в алфавите V. Тогда дополнение языка L (как множества слов) есть язык overline{L}=V^{ast}setminus L.

Согласно теореме 7.7, для регулярного языка L может быть построен детерминированный конечный автомат M, допускающий L. Поскольку в детерминированном автомате из каждой вершины по каждому входному символу определен переход в точности в одну вершину, то, какова бы ни была цепочка x в алфавите V, для нее найдется единственный путь в M, начинающийся в начальном состоянии, на котором читается цепочка x. Ясно, что цепочка x допускается автоматом M, то есть xin L(M), тогда и только тогда, когда последнее состояние указанного пути является заключительным. Отсюда следует, что цепочка xnotin L(M) тогда и только тогда, когда последнее состояние указанного пути не заключительное. Но нам как раз и нужен конечный автомат M', который допускает цепочку x тогда и только тогда, когда ее не допускает исходный конечный автомат M. Следовательно, превращая каждое заключительное состояние M в не заключительное и наоборот, получим детерминированный автомат, допускающий дополнение языка L.

Доказанная теорема позволяет строить конечный автомат, не допускающий определенное множество цепочек, следующим методом: строим сначала автомат, допускающий данное множество цепочек, затем детерминизируем его и переходим к автомату для дополнения так, как это указано в доказательстве теоремы 7.8.


Пример 7.10. а. Построим конечный автомат, допускающий все цепочки в алфавите {0;1}, кроме цепочки 101.

Сначала построим конечный автомат, допускающий единственную цепочку 101. Этот автомат приведен на рис. 7.17.

Конечный автомат, допускающий единственную цепочку 101

Этот автомат квазидетерминированный, но не детерминированный, так как он не полностью определен. Проведем его детерминизацию и получим детерминированный эквивалентный конечный автомат, изображенный на рис. 7.18.

Детерминированный эквивалентный конечный автомат

И наконец, переходя к дополнению (и переименовывая состояния), получим автомат, изображенный на рис. 7.19.

Обратим внимание, что в полученном автомате все вершины, кроме вершины s_3, являются заключительными.

Заметим также, что переход к дополнению, о котором идет речь в доказательстве теоремы 7.8, может быть проведен только в детерминированном автомате. Если бы мы поменяли ролями заключительные и незаключительные вершины в автомате, изображенном на рис. 7.17, то получили бы автомат, допускающий язык {lambda,1,10}, который не является — как нетрудно сообразить — множеством всех цепочек, отличных от цепочки 101.

Отметим также, что конечный автомат на рис. 7.19 допускает все цепочки, содержащие вхождение цепочки 101, но не совпадающие с самой этой цепочкой. Вот, например, путь, несущий цепочку 1011: s_0,s_1,s_2,s_3,t.

б. Построим конечный автомат, допускающий все цепочки в алфавите {0;1}, кроме тех, которые содержат вхождение цепочки 101. Рассмотрим язык L, каждая цепочка которого содержит вхождение цепочки 101. Его можно задать так:

L=(0+1)^{ast}101(0+1)^{ast}.

Нам нужно построить автомат для дополнения языка L.

Непосредственно по регулярному выражению в этом случае легко построить конечный автомат, допускающий язык L (рис. 7.20).

Конечный автомат, допускающий язык L

Затем методом «вытягивания» проведем детерминизацию. Результат детерминизации представлен на рис. 7.21.

Детерминизация конечного автомата, допускающего язык L

Для полного решения задачи осталось только на рис. 7.21 поменять ролями заключительные и не заключительные вершины (рис. 7.22).

Изменение вершин в конечном автомате, допускающего язык L

в. Обсудим идею построения конечного автомата, допускающего те и только те цепочки в алфавите {0;1}, которые не начинаются цепочкой 01 и не заканчиваются цепочкой 11 (т.е. не разрешаются цепочки вида 01x и цепочки вида y11, каковы бы ни были цепочки x,yin{0;1}).

В этом случае дополнением языка, для которого нужно построить конечный автомат, является множество всех таких цепочек нулей и единиц, которые начинаются цепочкой 01 или заканчиваются цепочкой 11. Допускающий это множество цепочек автомат строится как автомат для объединения 01(0+1)^{ast}+(0+1)^{ast}11 тем способом, который изложен при доказательстве теоремы Клини (см. теорему 7.6).


Из свойства замкнутости класса регулярных языков относительно дополнения (см. теорему 7.8) немедленно вытекает замкнутость этого класса относительно пересечения, теоретико-множественной и симметрической разности.

Следствие 7.3. Для любых двух регулярных языков L_1 и L_2 справедливы следующие утверждения:

1) пересечение L_1cap L_2 регулярно;
2) разность L_1setminus L_2 регулярна;
3) симметрическая разность L_1vartriangle L_2 регулярна.

Справедливость утверждений вытекает из тождеств:

begin{aligned} &{scriptstyle{mathsf{1)}}}quad L_1cap L_2= overline{overline{L_1} cupoverline{L_2}},;\[2pt] &{scriptstyle{mathsf{2)}}}quad L_1setminus L_2= L_1cap overline{L_2},;\[2pt] &{scriptstyle{mathsf{3)}}}quad L_1,triangle,L_2 = (L_1cup L_2)setminus (L_1cap L_2).end{aligned}

Во-первых, полученные результаты позволяют утверждать, что класс регулярных языков относительно операций объединения, пересечения и дополнения является булевой алгеброй, в которой единицей служит универсальный язык, а нулем — пустой язык. Во-вторых, эти алгебраические свойства семейства регулярных языков позволяют решить важную проблему распознавания эквивалентности двух произвольных конечных автоматов.

Согласно определению 7.10, конечные автоматы эквивалентны, если допускаемые ими языки совпадают. Поэтому, чтобы убедиться в эквивалентности автоматов M_1 и M_2, достаточно доказать, что симметрическая разность языков L(M_1) и L(M_2) пуста. Для этого, в свою очередь, достаточно построить автомат, допускающий эту разность, и убедиться в том, что допускаемый им язык пуст. В общем случае проблему распознавания того, что язык конечного автомата пуст, называют проблемой пустоты для конечного автомата. Чтобы решить эту проблему, достаточно найти множество заключительных состояний автомата, достижимых из начального состояния. Так как конечный автомат — это ориентированный граф, то решить такую проблему можно, например, с помощью, поиска в ширину. Язык, допускаемый конечным автоматом, пуст тогда и только тогда, когда множество заключительных состояний, достижимых из начального состояния, пусто. Практически эквивалентность конечных автоматов предпочтительнее распознавать, используя алгоритм минимизации, но сейчас нам важно подчеркнуть, что принципиальная возможность решить проблему эквивалентности вытекает из теоремы 7.7 и ее алгебраических следствий.

Математический форум (помощь с решением задач, обсуждение вопросов по математике).

Кнопка "Поделиться"

Если заметили ошибку, опечатку или есть предложения, напишите в комментариях.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти гпс 600
  • Как найти проекцию чисел
  • Как найти ординату точки вектора
  • Как найти драйвера на видеокамеру
  • Как найти причину расхода масла в двигателе

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии