You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: tex/RegularLanguages.tex
+58-5Lines changed: 58 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -72,19 +72,44 @@ \section{Конечные автоматы}
72
72
73
73
\section{Лево(право)линейные грамматики}
74
74
75
+
Наложив некоторые ограничения на внешний вид правил грамматики можно получить грамматики, задающие регулярные языки.
76
+
75
77
\begin{definition}
76
-
Лево(право)линенйная грамматика. Правила вида !!!
78
+
Грамматика $G=\langle\Sigma, N, P, S \rangle$ называется леволиненйной, если все её правила имеют вид $$N_i \to\alpha w $$, где $N_i \in N, \alpha\in\{\varepsilon\}\cup N, w \in\Sigma ^*$.
77
79
\end{definition}
78
80
79
-
Построение грамматики по автомату.
81
+
\begin{definition}
82
+
Грамматика $G=\langle\Sigma, N, P, S \rangle$ называется праволиненйной, если все её правила имеют вид $$N_i \to w \alpha$$, где $N_i \in N, \alpha\in\{\varepsilon\}\cup N, w \in\Sigma ^*$.
83
+
\end{definition}
84
+
85
+
86
+
87
+
Ноам Хомский и Джордж Миллер в работе~\cite{chomsky1958finite} показали, что лево(право)линейные грамматики задают регулярные языки.
88
+
Приведём процедуры построения автомата по грамматике и наоборот, грамматики по автомату.
89
+
90
+
Пусть дан конечный автомат $M = \langle\Sigma, Q, q_s, Q_f, \delta\rangle$. По нему можно построить праволинейную грамматику $G=\langle\Sigma, N, S, P \rangle$, где
Аналогичным образом строится автомат по праволинейной грамматике.
98
+
Упростить процедуру можно если заранее привести правила к виду $N_i \to tN_j$, где $t\in\Sigma$, добавив необходимое количество новых нетерминалов:
99
+
правило вида $N_i \to twN_k$ преобразуется в два правила
100
+
\begin{align*}
101
+
N_i& \to tN_l\\
102
+
N_l& \to wN_k \\
103
+
\end{align*}
104
+
, после чего аналогично преобразуется правило для $N_l$.
80
105
81
106
Пример построения грамматики по автомату.
82
107
83
108
Автомат по грамматике.
84
109
85
110
\section{Лемма о накачке}
86
111
87
-
Лемма о накачке для регулярных языков.
112
+
Лемма о накачке для регулярных языков позволяет проверить, что заданный язык не является регулярным.
88
113
89
114
\begin{lemma}
90
115
Пусть $L$ --- регулярный язык над алфавитом $\Sigma$, тогда существует такое $n$, что для любого слова $\omega\in L$, $|\omega| \geq n$ найдутся слова $x,y,z\in\Sigma^*$, для которых верно: $xyz = \omega, y\neq\varepsilon,|xy|\leq n$ и для любого $k \geq0$$xy^kz \in L$.
@@ -97,13 +122,41 @@ \section{Лемма о накачке}
97
122
\item Возьмём в качестве $n$ количество состояний в автомате.
98
123
\item Легко заметить, что для любой цепочки $w \in L, |w| > n$ путь в автомате, соответствующий принятию данной цепочки, будет содержать хотя бы один цикл.
99
124
Действительно, в ориентированном графе с $n$ вершинами (а именно таким является автомат по построению) максимальная длина пути без повторных посещений вершин (соответственно, без циклов) не больше $n$.
100
-
\item Выберем любой цикл. Он будет задавать искомые цепочки $x, y$ и $z$ так, как представлено на рисунке~\ref{!!!}
125
+
\item Выберем любой цикл. Он будет задавать искомые цепочки $x, y$ и $z$ так, как представлено на рисунке~\ref{fig:reg_lang_pumping_lemma}.
126
+
Заметим, что вход в цикл и выход из него могут не совпадать, что даёт несколько вариантов разбиения пути на части, и на рисунке представлен лишь один из возможных.
101
127
\end{enumerate}
102
128
129
+
\begin{figure}
130
+
\begin{center}
131
+
\begin{tikzpicture}[->]
132
+
\node[state, initial] (q1) {$q_1$};
133
+
\node[state, right of=q1] (q2) {$q_2$};
134
+
\node[state, accepting, right of=q2] (q3) {$q_3$};
135
+
\node[state, above of=q2] (q4) {$q_4$};
136
+
\draw (q1) edge[above, snake it] node{} (q2)
137
+
(q2) edge[bend right, snake it, side by side={red}{blue}] node{} (q4)
\caption{Иллюстрация идеи доказательства леммы о накачке для регулярных языков: любой путь в графе, длина которого достаточно большая, может быть разбит на три части из леммы ($x$--- красный подпуть, $y$ --- синий, $z$ --- зелёный), а многократный проход по циклу $y$ позволяет ``накачать'' слово}
145
+
\label{fig:reg_lang_pumping_lemma}
146
+
\end{figure}
147
+
103
148
104
149
\section{Замкнутость регулярных языков относительно операций}
105
150
106
-
Доказательство замкнутости относительно операций. Алгоритмы для соответствующих операций.
151
+
\begin{theorem}
152
+
Регулярные языки замкнуты относительно перечисленных ниже операций.
153
+
\begin{enumerate}
154
+
\item Пересечение
155
+
\item Дополнение
156
+
\item Обращение
157
+
\item Разность
158
+
\end{enumerate}
159
+
\end{theorem}
107
160
108
161
Линейная алгебра для работы с регулярными языками: пересечение, замыкание.
0 commit comments