Skip to content

Commit aa946bd

Browse files
committed
[WIP] Регулярные языки. Порешал конфликты.
1 parent c6d9a26 commit aa946bd

File tree

2 files changed

+206
-13
lines changed

2 files changed

+206
-13
lines changed

tex/FormalLanguageConstrainedReachabilityLectureNotes.bib

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1996,6 +1996,7 @@ @inproceedings{10.1145/2949689.2949711
19961996
}
19971997

19981998
@article{chomsky1958finite,
1999+
<<<<<<< HEAD
19992000
title = {Finite state languages},
20002001
author = {Chomsky, Noam and Miller, George A},
20012002
journal = {Information and control},
@@ -2005,3 +2006,16 @@ @article{chomsky1958finite
20052006
year = {1958},
20062007
publisher = {Elsevier}
20072008
}
2009+
=======
2010+
title={Finite state languages},
2011+
author={Chomsky, Noam and Miller, George A},
2012+
journal={Information and control},
2013+
volume={1},
2014+
number={2},
2015+
pages={91--112},
2016+
year={1958},
2017+
publisher={Elsevier}
2018+
}
2019+
2020+
@article{OWENS_REPPY_TURON_2009, title={Regular-expression derivatives re-examined}, volume={19}, DOI={10.1017/S0956796808007090}, number={2}, journal={Journal of Functional Programming}, author={OWENS, SCOTT and REPPY, JOHN and TURON, AARON}, year={2009}, pages={173–190}} <div></div>
2021+
>>>>>>> 2d5d859 ([WIP] Регулярные языки)

tex/RegularLanguages.tex

Lines changed: 192 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ \section{Регулярные выражения}
6363
Регулярное выражение $a$ задаёт регулярное множество $\{a\}$ и, соответственно, язык из единственного слова $a$.
6464
\end{example}
6565

66+
6667
\begin{example}
6768
Регулярное выражение $ab$ задаёт регулярное множество $\{ab\}$ и, соответственно, язык из единственного слова $ab$.
6869
\end{example}
@@ -72,7 +73,6 @@ \section{Регулярные выражения}
7273
Регулярное выражение $a^*$ задаёт регулярное множество $$R = \bigcup_{i=0}^{\infty}{a^i} = \{\varepsilon, a, aa, aaa, \ldots \}$$ и, соответственно, бесконечный язык, содержащий для любого неотрицательного целого $n$ цепочку из символов $a$ длины $n$.
7374
\end{example}
7475

75-
7676
\begin{example}
7777
$a^*b$
7878
\end{example}
@@ -117,18 +117,52 @@ \section{Конечные автоматы}
117117
Будем говорить, что автомат $M = \langle Q, Q_S, Q_F, \delta, \Sigma \rangle$ может перейти из конфигурации $c_1 = (q_1, w_1)$ в конфигурацию $c_2 = (q_2, w_2)$, если
118118
\[c_2 \in \{(q_2,w_2) \mid w_1 = aw_2, (q_1,a, q_2) \in \delta\} \cup \{(q_2,w_1) \mid (q_1, \varepsilon, q_2) \in \delta\}.\]
119119
Обозначать этот факт будем как $c_1 \to c_2$.
120+
Также будем считать, что на множестве конфигураций задано отношение перехода $(\to):(Q \times \Sigma^*)\times(Q \times \Sigma^*)$.
121+
122+
\end{definition}
123+
124+
\begin{definition}
125+
Транзитивное замыкание отношения перехода на конфигурациях будем обозначать следующим образом: $$ c_1 \to^* c_2. $$
126+
Альтернативно, в случае если $c_1 \to^* c_2$, будем говорить, что конфигурация $c_2$ \textit{достижима} из конфигурации $c_1$.
120127
\end{definition}
121128

122-
\marginnote{TODO: Без идей что тут написано, но жирная стрелочка для перехода выглядит естественнее}
123-
$$С_2 = \{(q_2,w_2) \mid w_1 = aw_2, (q_1,a, q_2) \in \delta\} \cup \{(q_2,w_1) \mid (q_1, \varepsilon, q_2) \in \delta\}.$$
124-
$$ c_1 \Rightarrow C_2 $$
129+
Для удобства работы с недетерминированными автоматами расширим это отношение на множество конфигураций.
130+
131+
\begin{definition}
132+
Будем говорить, что автомат может перейти из множества конфигураций $C_1$ в множество конфигураций $C_2$, если
133+
$$C_2 = \bigcup_{c_1 \in C_1} \{c_2 \mid c_1 \to c_2 \}.$$
134+
135+
Обозначать этот факт будем как $C_1 \Rightarrow C_2 $.
136+
\end{definition}
125137

138+
\begin{definition}
139+
Транзитивное замыкание отношения перехода на множествах конфигураций будем обозначать следующим образом: $$ C_1 \Rightarrow^* C_2. $$
140+
\end{definition}
126141

127-
Стартовая конфигурация.
142+
Для описания работы автомата $M = \langle Q, Q_S, Q_F, \delta, \Sigma \rangle$ нам понадобятся следующие выделенные типы конфигураций.
143+
\begin{itemize}
144+
\item Стартовая конфигурация $c_s = (q_s,w)$, $q_s \in Q_S$, $w$ --- цепочка, которая подаётся на вход автомату.
145+
Для недетерминированного автомата естественно задать множество стартовых конфигурация $C_S = \bigcup_{q_s \in Q_S} (q_s,w)$.
146+
\item Финальная (принимающая) конфигурация $c_f = (q_f,\varepsilon)$, $q_f \in Q_F$.
147+
\end{itemize}
128148

129-
Финальная конфигурация.
149+
Таким образом, работу автомата можно описать как последовательность переходов между множествами конфигураций.
150+
Работа начинается с множества стартовых конфигураций и завершается в следующих двух случаях.
151+
\begin{enumerate}
152+
\item Очередное множество конфигураций содержит финальную конфигурацию:
153+
$$c_f \in C_S \text{ или } C_S \Rightarrow^* C_i, c_f \in C_i.$$ В этом случае говорят, что автомат \textit{принимает} входную строку.
154+
\item Очередное множество конфигураций пусто:
155+
$$C_0 = C_S \Rightarrow^* C_i \Rightarrow^* \varnothing, \text{ для любого } i: c_f \notin C_i.$$
156+
В этом случае говорят, что автомат \textit{не принимает} или \textit{отвергает} входную строку.
157+
\end{enumerate}
158+
159+
\begin{definition}
160+
Язык задаваемый автоматом $$\{w \mid \}$$
161+
\end{definition}
130162

131-
Ошибочная конфигурация.
163+
Так как конфигурация полностью описывает состояние процесса вычислений, то не надо обрабатывать одну и ту же конфигурацию несколько раз.
164+
Это поможет при написании реального интерпретатора.
165+
Будем отслеживать уже посещённые (обработанные) конфигурации\footnote{Техника, аналогичная той, что применяется в обходах графов (обход в ширину, обход в глубину) для того, чтобы избежать повторного посещения вершин и, как следствие, зацикливания обхода. Более того, она типична для алгоритмов с рабочим множеством.}.
132166

133167
\begin{example}
134168
Пример интерпретации конечного автомата.
@@ -141,12 +175,15 @@ \section{Конечные автоматы}
141175
\item $Q$~--- конечное множество состояний;
142176
\item $q_S \in Q$~--- стартовое состояние;
143177
\item $Q_F \subseteq Q$~--- множество финальных состояний;
144-
\item $\delta \subseteq Q \times \Sigma \times Q$~--- функция переходов;
178+
\item $\delta \subseteq Q \times \Sigma \times Q$~--- функция переходов\footnote{Частично определённая.};
145179
\item $\Sigma$~--- конечный алфавит.
146180
\end{itemize}
147181
\end{definition}
148182

149-
Заметим, что функцию переходов можно представить разными способами в зависимости от того, как именно представлена функция переходов: список троек, матрица, граф.
183+
Отличие --- функция переходов. Нет переходов по $\varepsilon$ и из любого состояния не более одного перехода по символу.
184+
Ещё стартовое состояние одно.
185+
186+
Заметим, что функцию переходов можно представить разными способами В зависимости от того, как именно представлена функция переходов: список троек, матрица, граф.
150187

151188
\begin{example}
152189
Пример КА.
@@ -159,14 +196,156 @@ \section{Конечные автоматы}
159196
Пример интерпретации конечного автомата.
160197
\end{example}
161198

162-
Построение КА по регулярному выражению и регулярному выражению по КА. На производных.
199+
\section{Производные для регулярных языков}
200+
201+
Предложены в~\cite{Brzozowski1964}
202+
203+
По мотивам~\cite{OWENS_REPPY_TURON_2009}
163204

164-
Построение регулярного выражения по КА.
205+
\begin{itemize}
206+
\item $\partial_t(\varepsilon) = \varnothing$
207+
\item $\partial_t(\varnothing) = \varnothing$
208+
\item $\partial_t(x) = $
209+
\item $\partial_t(R_1 \cdot R_2) = \partial_t(R_1) \cdot (R_2) \mid $
210+
\item $\partial_t(R_1 \mid R_2) = \partial_t(R_1) \mid \partial_t(R_2) $
211+
\item $\partial_t(R^*) = $\footnote{Интересное упражнение --- показать это, расписав по определению звезду Клини.}
212+
\end{itemize}
213+
214+
Проверка на пустоту (часто isNull).
215+
216+
\begin{itemize}
217+
\item $IsNull(\varepsilon) = false$
218+
\item $\partial_t(\varnothing) = \varnothing$
219+
\item $\partial_t(x) = $
220+
\item $\partial_t(R_1 \cdot R_2) = \partial_t(R_1) \cdot (R_2) \mid $
221+
\item $\partial_t(R_1 \mid R_2) = \partial_t(R_1) \mid \partial_t(R_2) $
222+
\item $\partial_t(R^*) = $\footnote{Интересное упражнение --- показать это, расписав по определению звезду Клини.}
223+
\end{itemize}
224+
225+
Проверка пустоты регулярного языка\footnote{!!!!}
165226

166-
Алгоритмы: проверка пустоты ...
227+
228+
\section{Построение конечного автомата по регулярному выражению}
229+
230+
На производных.
167231

168232
Примеры.
169233

234+
\section{Построение регулярного выражения по конечному автомату}
235+
236+
Регулярное выражение будем строить по недетерминированному автомату специального вида: потребуем, чтобы у него было ровно одно стартовое состояние и ровно одно финальное\footnote{Любой автомат легко привести к такому виду: добавить состояния и $\varepsilon$-переходы}.
237+
238+
Будем в цикле выполнять последовательно две операции.
239+
Первая: объединение параллельных рёбер.
240+
Вторая: устранение вершины $v$. За один шаг можем устранить любую кроме стартовой или финальной.
241+
Цикл повторяется до тех пор, пока в автомате не останется ровно два состояния: стартовое и финальное.
242+
243+
До объединения параллельных рёбер
244+
\begin{tikzpicture}
245+
246+
\node[state] (q_0) {$q_i$};
247+
\node[state] (q_1) [right of = q_0] {$q_j$};
248+
\path[->]
249+
(q_0) edge[bend left, above] node {$R_1$} (q_1)
250+
(q_0) edge[bend right, below] node {$R_2$} (q_1)
251+
;
252+
\end{tikzpicture}
253+
254+
После объединения параллельных рёбер.
255+
256+
\begin{tikzpicture}
257+
258+
\node[state] (q_0) {$q_i$};
259+
\node[state] (q_1) [right of = q_0] {$q_j$};
260+
\path[->]
261+
(q_0) edge[above] node {$R_1 \mid R_2$} (q_1)
262+
;
263+
\end{tikzpicture}
264+
265+
266+
\begin{tikzpicture}
267+
268+
\begin{scope}[node distance=10mm and 10mm]
269+
\node[state] (p_0) {$p_0$};
270+
\node[text width=0.3cm] (p_1) [below of = p_0] {$\vdots$};
271+
\node[state] (p_2) [below of = p_1] {$p_i$};
272+
\node[text width=0.3cm] (p_3) [below of = p_2] {$\vdots$};
273+
\end{scope}
274+
275+
\node[state] (v_0) [right of = p_2] {$v$};
276+
277+
\begin{scope}[node distance=10mm and 10mm]
278+
\node[state] (q_2) [right of = v_0] {$q_j$};
279+
\node[text width=0.3cm] (q_1) [above of = q_2] {$\vdots$};
280+
\node[state] (q_0) [above of = q_1] {$q_0$};
281+
\node[text width=0.3cm] (q_3) [below of = q_2] {$\vdots$};
282+
\end{scope}
283+
284+
\path[->]
285+
(p_0) edge[above] node {$R_{p_0}$} (v_0)
286+
(p_2) edge[below] node {$R_{p_i}$} (v_0)
287+
(v_0) edge[right] node {$R_{q_0}$} (q_0)
288+
(v_0) edge[above] node {$R_{q_j}$} (q_2)
289+
(v_0) edge[loop above, above] node {$R_v$} (v_0);
290+
\end{tikzpicture}
291+
292+
293+
\begin{tikzpicture}
294+
295+
\begin{scope}[node distance=10mm and 10mm]
296+
\node[state] (p_0) {$p_0$};
297+
\node[text width=0.3cm] (p_1) [below of = p_0] {$\vdots$};
298+
\node[state] (p_2) [below of = p_1] {$p_i$};
299+
\node[text width=0.3cm] (p_3) [below of = p_2] {$\vdots$};
300+
\end{scope}
301+
302+
\node[text width=0.3cm] (v_0) [right of = p_2] {};
303+
304+
\begin{scope}[node distance=10mm and 40mm]
305+
\node[state] (q_2) [right of = v_0] {$q_j$};
306+
\node[text width=0.3cm] (q_1) [above of = q_2] {$\vdots$};
307+
\node[state] (q_0) [above of = q_1] {$q_0$};
308+
\node[text width=0.3cm] (q_3) [below of = q_2] {$\vdots$};
309+
\end{scope}
310+
311+
\path[->]
312+
(p_0) edge[bend left, above] node {$R_{p_0} R_v^* R_{q_0}$} (q_0)
313+
(p_0) edge[bend left, left] node {$R_{p_0} R_v^* R_{q_j}$} (q_2)
314+
(p_2) edge[bend right, left] node {$R_{p_i} R_v^* R_{q_0}$} (q_0)
315+
(p_2) edge[bend right, below] node {$R_{p_0} R_v^* R_{q_0}$} (q_2);
316+
\end{tikzpicture}
317+
318+
$p_i v q_j$
319+
320+
$p_i \xrightarrow{R_{p_i}} v$
321+
$v \xrightarrow{R_{q_j}} q_i$
322+
$v \xrightarrow{R_v} v$
323+
$p_i \xrightarrow{R_{p_i} \cdot R_v^* \cdot R_{q_j}} q_j$
324+
325+
По финальному автомату с двумя состояниями построим регулярное выражение, которое би будет ответом.
326+
327+
\begin{tikzpicture}
328+
\node[isosceles triangle,
329+
isosceles triangle apex angle=60,
330+
draw=none,fill=none,
331+
minimum size=2cm] (T60) at (3,0){};
332+
333+
\node[state, initial] (q_0) {$0$};
334+
\node[state, accepting] (q_1) [right of = q_0] {$1$};
335+
\path[->]
336+
(q_0) edge[bend left, above] node {$R_2$} (q_1)
337+
(q_1) edge[bend left, below] node {$R_4$} (q_0)
338+
(q_1) edge[loop right, right] node {$R_3$} (q_1)
339+
(q_0) edge[loop above, above] node {$R_1$} (q_0);
340+
\end{tikzpicture}
341+
342+
$R_1^* \cdot (R_2 \cdot R_3^* \cdot R_4 \cdot R_1^*)^* \cdot R_2 \cdot R_3^*$
343+
344+
345+
346+
Примеры.
347+
348+
170349

171350
\section{Лево(право)линейные грамматики}
172351

@@ -249,7 +428,7 @@ \section{Лемма о накачке}
249428
\end{figure}
250429

251430

252-
\section{Замкнутость регулярных языков относительно операций}
431+
\section{Замкнутость регулярных языков относительно теоретико-множественных операций}
253432

254433
\begin{theorem}
255434
Регулярные языки замкнуты относительно перечисленных ниже операций.

0 commit comments

Comments
 (0)