Исследуйте формальную связь между регулярными выражениями и конечными автоматами: докажите эквивалентность классов регулярных языков, постройте недетерминированный конечный автомат для регулярного выражения (a|b)*abb и выполните детерминизацию

20 Ноя в 08:43
8 +8
0
Ответы
1
Кратко о формальной связи (теорема) и доказательство в двух направлениях.
Теорема. Класс регулярных выражений совпадает с классом языков, распознаваемых конечными автоматами (ДКА/НКА).
Доказательство (набросок).
1) Регулярное выражение ⇒ НКА (конструкция Томпсона).
- Базовые случаи: для символа aaa строим НКА с двумя состояниями и переходом по aaa; для пустой строки ε\varepsilonε — НКА с одним старт/приёмным состоянием; для пустого языка — НКА без приёмных состояний.
- Операции: объединение r∣sr|srs, конкатенация rsrsrs и звезда r∗r^*r реализуются стандартными схемами с ε\varepsilonε-переходами (Томпсон). Каждое регулярное выражение порождает конечный НКА.
Следствие: любой язык, задаваемый регулярным выражением, распознаётся некоторым НКА.
2) Конечный автомат ⇒ регулярное выражение (методы: исключение состояний или лемма Ардена).
- Для ДКА/НКА можно поэтапно исключать состояния и записывать соответствующие регулярные выражения для путей между остающимися состояниями; в конце получаем регулярное выражение, равное языку автомата.
- Альтернативно, через систему уравнений для регулярных языков и применение леммы Ардена можно вывести регулярное выражение.
Следствие: любой язык, распознаваемый конечным автоматом, задаётся некоторым регулярным выражением.
Итого: классы совпадают.
Пример: построим НКА для регулярного выражения (a∣b)∗abb(a|b)^*abb(ab)abb и выполним детерминизацию.
1) НКА (простая нерекурсивная конструкция, эквивалентная Томпсону).
Определим НКА N=(Q,Σ,δ,q0,F)N=(Q,\Sigma,\delta,q_0,F)N=(Q,Σ,δ,q0 ,F), где
Q={q0,q1,q2,q3},Σ={a,b},F={q3}.Q=\{q_0,q_1,q_2,q_3\},\qquad \Sigma=\{a,b\},\qquad F=\{q_3\}.Q={q0 ,q1 ,q2 ,q3 },Σ={a,b},F={q3 }. Переходы заданы нефункционально (множества):
δ(q0,a)={q0,q1},δ(q0,b)={q0},δ(q1,b)={q2},δ(q2,b)={q3}, \begin{aligned}
\delta(q_0,a)&=\{q_0,q_1\},\\
\delta(q_0,b)&=\{q_0\},\\
\delta(q_1,b)&=\{q_2\},\\
\delta(q_2,b)&=\{q_3\},
\end{aligned}
δ(q0 ,a)δ(q0 ,b)δ(q1 ,b)δ(q2 ,b) ={q0 ,q1 },={q0 },={q2 },={q3 },
и все остальные δ(q,x)=∅\delta(q,x)=\varnothingδ(q,x)=. Начальное состояние q0q_0q0 .
Комментарий: из q0q_0q0 по aaa автомата может либо «начать» распознавание суффикса abbabbabb (переход в q1q_1q1 ), либо оставаться в q0q_0q0 (символ принадлежит (a∣b)∗(a|b)^*(ab)). Это НКА без ε\varepsilonε-переходов.
2) Детерминизация (алгоритм подмножеств).
Начальное состояние ДКА — замыкание по ε\varepsilonε множества {q0}\{q_0\}{q0 }, здесь нет ε\varepsilonε-переходов, значит стартовый набор
S0={q0}.S_0=\{q_0\}.S0 ={q0 }. Выполним итеративно переходы множества:
δD({q0},a)=δ(q0,a)={q0,q1}=S1,δD({q0},b)=δ(q0,b)={q0}=S0. \begin{aligned}
\delta_D(\{q_0\},a)&=\delta(q_0,a)=\{q_0,q_1\}=S_1,\\
\delta_D(\{q_0\},b)&=\delta(q_0,b)=\{q_0\}=S_0.
\end{aligned}
δD ({q0 },a)δD ({q0 },b) =δ(q0 ,a)={q0 ,q1 }=S1 ,=δ(q0 ,b)={q0 }=S0 .
Далее для S1={q0,q1}S_1=\{q_0,q_1\}S1 ={q0 ,q1 }:
δD(S1,a)=δ(q0,a)∪δ(q1,a)={q0,q1}=S1,δD(S1,b)=δ(q0,b)∪δ(q1,b)={q0,q2}=S2. \begin{aligned}
\delta_D(S_1,a)&=\delta(q_0,a)\cup\delta(q_1,a)=\{q_0,q_1\}=S_1,\\
\delta_D(S_1,b)&=\delta(q_0,b)\cup\delta(q_1,b)=\{q_0,q_2\}=S_2.
\end{aligned}
δD (S1 ,a)δD (S1 ,b) =δ(q0 ,a)δ(q1 ,a)={q0 ,q1 }=S1 ,=δ(q0 ,b)δ(q1 ,b)={q0 ,q2 }=S2 .
Для S2={q0,q2}S_2=\{q_0,q_2\}S2 ={q0 ,q2 }:
δD(S2,a)=δ(q0,a)∪δ(q2,a)={q0,q1}=S1,δD(S2,b)=δ(q0,b)∪δ(q2,b)={q0,q3}=S3. \begin{aligned}
\delta_D(S_2,a)&=\delta(q_0,a)\cup\delta(q_2,a)=\{q_0,q_1\}=S_1,\\
\delta_D(S_2,b)&=\delta(q_0,b)\cup\delta(q_2,b)=\{q_0,q_3\}=S_3.
\end{aligned}
δD (S2 ,a)δD (S2 ,b) =δ(q0 ,a)δ(q2 ,a)={q0 ,q1 }=S1 ,=δ(q0 ,b)δ(q2 ,b)={q0 ,q3 }=S3 .
Для S3={q0,q3}S_3=\{q_0,q_3\}S3 ={q0 ,q3 }:
δD(S3,a)=δ(q0,a)∪δ(q3,a)={q0,q1}=S1,δD(S3,b)=δ(q0,b)∪δ(q3,b)={q0}=S0. \begin{aligned}
\delta_D(S_3,a)&=\delta(q_0,a)\cup\delta(q_3,a)=\{q_0,q_1\}=S_1,\\
\delta_D(S_3,b)&=\delta(q_0,b)\cup\delta(q_3,b)=\{q_0\}=S_0.
\end{aligned}
δD (S3 ,a)δD (S3 ,b) =δ(q0 ,a)δ(q3 ,a)={q0 ,q1 }=S1 ,=δ(q0 ,b)δ(q3 ,b)={q0 }=S0 .
Новых состояний после S0,S1,S2,S3S_0,S_1,S_2,S_3S0 ,S1 ,S2 ,S3 не появляется. Приёмные состояния ДКА — те множества, которые содержат q3q_3q3 , т.е. единственное из полученных это S3S_3S3 .
Итоговый ДКА D=(QD,Σ,δD,S0,FD)D=(Q_D,\Sigma,\delta_D,S_0,F_D)D=(QD ,Σ,δD ,S0 ,FD ):
QD={S0,S1,S2,S3}={{q0},{q0,q1},{q0,q2},{q0,q3}}, Q_D=\{S_0,S_1,S_2,S_3\}=\{\{q_0\},\{q_0,q_1\},\{q_0,q_2\},\{q_0,q_3\}\},
QD ={S0 ,S1 ,S2 ,S3 }={{q0 },{q0 ,q1 },{q0 ,q2 },{q0 ,q3 }},
старт S0={q0}S_0=\{q_0\}S0 ={q0 }, приёмные FD={S3}F_D=\{S_3\}FD ={S3 }, переходы как выше:
δD(S0,a)=S1,δD(S0,b)=S0,δD(S1,a)=S1,δD(S1,b)=S2,δD(S2,a)=S1,δD(S2,b)=S3,δD(S3,a)=S1,δD(S3,b)=S0. \begin{aligned}
\delta_D(S_0,a)&=S_1,&\delta_D(S_0,b)&=S_0,\\
\delta_D(S_1,a)&=S_1,&\delta_D(S_1,b)&=S_2,\\
\delta_D(S_2,a)&=S_1,&\delta_D(S_2,b)&=S_3,\\
\delta_D(S_3,a)&=S_1,&\delta_D(S_3,b)&=S_0.
\end{aligned}
δD (S0 ,a)δD (S1 ,a)δD (S2 ,a)δD (S3 ,a) =S1 ,=S1 ,=S1 ,=S1 , δD (S0 ,b)δD (S1 ,b)δD (S2 ,b)δD (S3 ,b) =S0 ,=S2 ,=S3 ,=S0 .

Краткое замечание: получившийся ДКА эквивалентен известному минимальному автомату для языка «строки над {a,b}\{a,b\}{a,b}, оканчивающиеся на подстроку abbabbabb» и имеет четыре состояния, соответствующие совпадению с суффиксами ε,a,ab,abb\varepsilon, a, ab, abbε,a,ab,abb.
Если нужно, могу дать диаграммы автоматов или вывести регулярное выражение назад из полученного ДКА.
20 Ноя в 09:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир