Опубликован: 26.09.2006 | Уровень: специалист | Доступ: свободно
Лекция 13:

Формальные языки

Для регулярного выражения P\cdot S, где P и S — регулярные выражения, можно построить задающий автомат \Re = (Q, A, q_0, F, \varphi) следующим образом. Пусть автомат \Re_1 = (Q_1, A, q_1, F_1,
\varphi_1) задает L(P), а автомат \Re_2 = (Q_2, A, q_2, F_2,
\varphi_2) задает L(S). Не уменьшая общности, опять считаем, что F_1 =
\{f_1\} и F_2 = \{f_2\} — одноэлементные и что q_1 \ne
f_1, q_2 \ne f_2. Положим Q = Q_1 \cup Q_2 и поясним построение автомата \Re на языке диаграмм. Финальное состояние автомата \Re_1 соединим дугой со стартовым состоянием автомата \Re_2 и пометим ее символом \varepsilon. В качестве q_0 возьмем стартовое состояние автомата \Re_1, а в качестве финального состояния f возьмем финальное состояние f_2 автомата \Re_2.

Для регулярного выражения P^\ast, где P — регулярное выражение, можно построить задающий автомат \Re_\t{new} = (Q, A, q_0,
\{f_0\}, \varphi) следующим образом. Пусть автомат \Re_1 = (Q_1, A, q_1, \{f_1\}, \varphi_1) задает L(P). Опять не уменьшая общности, считаем, что F_1 = \{f_1\} — одноэлементное и что q_1 \ne f_1. Добавляем к множеству Q_1 два новых состояния — q_0 и f_0. Соединяем \varepsilon -переходами пары состояний (q_0, q_1), (f_1, f_0), (q_0,
f_0) и (f_1, q_1).

В завершение заметим, что изложенные приемы, очевидно, позволяют по любому регулярному выражению R построить недетерминированный автомат \Re с \varepsilon -переходами, с одним стартовым и одним финальным состоянием, причем стартовое состояние отлично от финального, и при этом такой, что L(R) = L(\Re).

Таким образом, задача синтеза решена.

Избавление от \varepsilon -переходов. Покажем, как по недетерминированному автомату \Re = (Q, A, q_0, F, \varphi) с \varepsilon -переходами построить недетерминированный автомат \Re_1 = (Q, A, q_0, F_1, \varphi_1 ) без \varepsilon -переходов, такой, что L(\Re_1) = L(\Re). Назовем \varepsilon -путем путь в диаграмме автомата \Re, возможно пустой, порождающий пустое слово. Обозначим через \lm(q) множество состояний, достижимых из q с помощью некоторого \varepsilon -пути.

Положим F_1 = \{q\,|\,\t{существует \varepsilon-путь из}\
q\ \t{в}\ F\}. Переходную функцию \varphi_1 построим следующим образом

\eq*{
\varphi_{1}(q,a)=\bigcup_{q^{1} \in \lambda (q)}\varphi (q^{1},a).
}
Заметим, что в полученном автомате множество финальных состояний может быть не одноэлементным.

Детерминизация.Покажем, как по недетерминированному автомату \Re = (Q, A, q_0, F, \varphi) без \varepsilon -переходов построить детерминированный автомат \Re_1 = (Q_1, A, q_1, F_1, \varphi_1), такой, что L(\Re_1) = L(\Re). Положим Q_1 = 2^Q, q_1 = \{q_0\}, F_1= \{q\,|\,(q \subseteq Q) \& (q \cap F \ne
\varnothing)\}, а \varphi_1\colon Q_1 \x A \to Q_1 определим следующим образом:

\eq*{
(\forall q\in Q_{1})(\forall a\in A)
\varphi_{1} (q,a)=\bigcup_{s\in q}\varphi(s,a).
}
Нетрудно видеть, что построенный таким образом автомат \Re_1 удовлетворяет условию L(\Re_1) = L(\Re).

Анализ. Для завершения доказательства теоремы покажем, как по заданному детерминированному конечному автомату ( построить регулярное выражение \Re, такое, что L(R) = L(\Re). Именно это и называют задачей анализа. Правда, метод, который мы используем, можно применить и к недетерминированным автоматам. Метод заключается в том, что мы сводим задачу к решению стандартной системы уравнений. Итак, рассмотрим автомат \Re = (Q, A, q_0, F, \varphi).

Пусть Q = \{q_0, q_1\dts q_n\}, A = \{a_1, a_2\dts
a_m\}. Введем переменные X(q_0), X(q_1)\dts X(q_n). Переменную X(q_i) для каждого i = 0, 1\dts n будем интерпретировать как множество слов, которые можно прочитать, начиная от состояния q_i и заканчивая в финальном состоянии, тогда X(q_i) должна удовлетворять уравнению

\eq*{
X(q_i) = a_1 \cdot X(\varphi(q_i, a_1)) + a_2\cdot X(\varphi(q_i, a_2))
+ \ldots + a_m \cdot X(\varphi(q_i, a_m)) + \bt_i,
}
где \beta_i = \lm, если q_i \in F, \beta_i =
\varnothing, если q_i \not \in F. Решив систему, берем в качестве ответа значение переменной X(q_0).

Задача. Построить регулярное выражение в алфавите \{a, b\}, задающее язык, порождаемый автоматом \Re = (Q, A, q_0, F,
\varphi), где Q = \{q_0, q_1, q_2, q_3\}, A = \{a, b\}, F = \{q_3\} и переходная функция \varphi задана таблицей

a b
q_0^{} q_3^{} q_1^{}
q_1^{} q_3^{} q_2^{}
q_2^{} q_2^{} q_3^{}
q_3^{} q_1^{} q_3^{}

Рис. 13.2.

Решение. Запишем систему уравнений

\eqa*{
X_0 & = a X_3 + b X_1,\\
X_1 & = a\cdot X_3 + b \cdot X_2,\\
X_2 & = a \cdot X_2 + b \cdot X_3,\\
X_3 & = a \cdot X_1 + b \cdot X_3 + \lm.
}
Заметим, что при записи системы мы упростили обозначения переменных, используя индексы.

Из четвертого уравнения получаем X_3 = b^\ast (a\cdot X_1+\lm). Подставляя полученное выражение во все остальные уравнения, получим систему из трех уравнений:

\eqa*{
X_0 & = a\cdot b^\ast (a \cdot X_1 + \lm) + b \cdot X_1,\\*
X_1 & = a\cdot b^\ast (a \cdot X_1 + \lm) + b \cdot X_2,\\*
X_2 & = a\cdot X_2 + b\cdot b^\ast (a\cdot X_1 + \lm).
}
Перепишем ее в стандартном виде:
\eqa*{
X_0 & = (a\cdot b^\ast \cdot a + b) X_1+ a\cdot b^\ast,\\
X_1 & = a\cdot b^\ast \cdot a\cdot X_1 + b\cdot X_2 + a\cdot b^\ast,\\
X_2 & = b \cdot b^\ast \cdot a \cdot X_1 + a\cdot X_2 + b\cdot b^\ast.
}
Из третьего уравнения получаем X_2 = a^\ast(b \cdot b^\ast \cdot a
\cdot X_1 + b\cdot b^\ast) и подставляем в остальные уравнения:
\eqa*{
X_0 & = (a\cdot b^\ast \cdot a + b) \cdot X_1 + a \cdot b^\ast,\\
X_1 & = a \cdot b^\ast \cdot a \cdot X_1 + b \cdot a^\ast \cdot
(b \cdot b^\ast \cdot a \cdot X_1 + b \cdot b^\ast) +
a\cdot b^\ast.
}

Преобразуем второе уравнение к стандартному виду

\eq*{
X_1= (a \cdot b^\ast \cdot a + b \cdot a^\ast \cdot b \cdot b^\ast \cdot a)
\cdot X_1 + b \cdot a^\ast \cdot b\cdot b^\ast + a \cdot b^\ast
}

и получаем из него

\eq*{
X_1 = (a \cdot b^\ast \cdot a + b \cdot a^\ast \cdot b \cdot b^\ast
\cdot a)^\ast (b \cdot a^\ast \cdot b \cdot b^\ast + a \cdot b^\ast).
}

Наконец, получаем ответ

\eq*{
X_0 = (a\cdot b^\ast \cdot a + b)(a \cdot b^\ast a + b \cdot a^\ast \cdot
b \cdot b^\ast \cdot a)^\ast (b \cdot a^\ast \cdot b\cdot b^\ast
+ a \cdot b^\ast) + a \cdot b^\ast.
}
Антон Сиротинкин
Антон Сиротинкин

на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно...