Skip to content

Commit d722304

Browse files
committed
[WIP] Раздел по регулярным языкам.
1 parent c9153e4 commit d722304

File tree

1 file changed

+106
-14
lines changed

1 file changed

+106
-14
lines changed

tex/RegularLanguages.tex

Lines changed: 106 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
\chapter{Регулярные языки}
22

33

4-
Регулярные языки --- иерархии, связанные с конечные автоматы, взаимные конвертации, основные свойства регулярных языков, такие как замкнутость относительно различных операций.
4+
В данном разделе мы обсудим регулярные языки --- класс, лежащий на самом нижнем уровне иерархии Хомского.
5+
Будут рассмотрены основные способы задания таких языков: \textit{регулярные выражения}, \textit{конечные автоматы}, \textit{лево(право)линейные грамматики}.
6+
Обсудим основные свойства регулярных языков, такие как замкнутость относительно различных операций, а также различные свойства соответствующих автоматов и грамматик.
57

68

79
\section{Регулярные выражения}
810

11+
Регулярные выражения --- один из классических способов задать регулярный язык\footnote{Замечание для программистов. Важно понимать, что речь идёт о формальной конструкции, а не о том, что называется регулярными выражениями в различных языках программирования или библиотеках, где под названием <<регулярные выражения>> могут скрываться конструкции, существенно более выразительные, чем обсуждаемые здесь.}.
12+
Основывается этот способ на предложении синтаксиса для описания \textit{регулярных множеств}\footnote{Помним, что язык --- это множество слов.}.
13+
914
\begin{definition}
1015
Регулярное множество (над алфавитом $\Sigma$) это:
1116
\begin{itemize}
@@ -18,34 +23,120 @@ \section{Регулярные выражения}
1823
\end{itemize}
1924
\end{definition}
2025

26+
Для того, чтобы описывать такие множества, удобно пользоваться \textit{регулярными выражениями}.
2127

2228
\begin{definition}
23-
Регулярное выражение.
29+
Регулярное выражение (над алфавитом $\Sigma$) это:
2430
\begin{itemize}
31+
\item $\varnothing$
2532
\item $\varepsilon$
26-
\item $t$
27-
\item $R_1 \mid R_2$
28-
\item $R_1 \cdot R_2$
29-
\item $R^*$
33+
\item $t$, $t \in \Sigma$
34+
\item $R_1 \mid R_2$, где $R_1$ и $R_2$ --- регулярные выражения
35+
\item $R_1 \cdot R_2$, где $R_1$ и $R_2$ --- регулярные выражения
36+
\item $R^*$, где $R$ --- регулярное выражение
37+
\item $(R)$, где $R$ --- регулярное выражение
3038
\end{itemize}
3139
\end{definition}
3240

41+
Отметим несколько важных с прикладной точки зрения моментов.
42+
Во-первых, часто используется расширенный синтаксис, в который добавляются конструкции не увеличивающие выразительную силу, но упрощающие запись.
43+
Например, встречаются следующие расширения\footnote{Существуют и другие, однако их мы не будем использовать и, соответственно, рассматривать. Читатель может вспомнить, что называется регулярными выражениями в его любимом языке программирования и попробовать самостоятельно выразить имеющиеся там конструкции через базовые.}.
44+
\begin{itemize}
45+
\item $R? = R \mid \varepsilon$, где $R$ --- регулярное выражение.
46+
\item $R^+ = R \cdot R^*$, где $R$ --- регулярное выражение.
47+
\end{itemize}
48+
49+
Во-вторых, конструкции $\varnothing$ и $\varepsilon$ используются крайне редко, особенно в случае расширенного синтаксиса, так как часто выражение, эквивалентное использующему данные конструкции, часто более компактно записывается с использованием расширенного синтаксиса.
50+
В-третьих, оператор конкатенации часто опускается\footnote{Как и знак умножения во многих математических записях.}.
51+
52+
Рассмотрим несколько примеров регулярных выражений.
53+
\begin{example}
54+
Регулярное выражение $a$ задаёт регулярное множество $\{a\}$ и, соответственно, язык из единственного слова $a$.
55+
\end{example}
56+
57+
\begin{example}
58+
Регулярное выражение $ab$ задаёт регулярное множество $\{ab\}$ и, соответственно, язык из единственного слова $ab$.
59+
\end{example}
60+
61+
62+
\begin{example}
63+
Регулярное выражение $a^*$ задаёт регулярное множество $$R = \bigcup_{i=0}^{\infty}{a^i} = \{\varepsilon, a, aa, aaa, \ldots \}$$ и, соответственно, бесконечный язык, содержащий для любого неотрицательного целого $n$ цепочку из символов $a$ длины $n$.
64+
\end{example}
65+
66+
67+
\begin{example}
68+
$a^*b$
69+
\end{example}
70+
71+
\begin{example}
72+
$(a\mid b)^*$
73+
\end{example}
74+
75+
\begin{example}
76+
$(ab)^*c?$
77+
\end{example}
78+
3379
\section{Конечные автоматы}
3480

35-
\begin{definition}\label{def:FiniteAutomata}
36-
\textit{Конечный автомат} --- это пятёрка $M = \langle Q, q_S, Q_F, \delta, \Sigma \rangle$, где
81+
\textit{Конечный автомат} --- вычислительная машина, которая имеет конечный набор состояний и может совершать переходы между ними, читая входные данные.
82+
Важно отметить, что ни какой дополнительной памяти классический конечный автомат не имеет\footnote{Существуют автоматы с константной памятью, регистрами} и не производит дополнительных действий\footnote{Автоматы с записью на ленту, и т.д.}.
83+
84+
\begin{definition}\label{def:NondeterminicticFiniteAutomata}
85+
\textit{Недетерминированный конечный автомат, НКА} --- это пятёрка $M = \langle Q, Q_S, Q_F, \delta, \Sigma \rangle$, где
86+
\begin{itemize}
87+
\item $Q$ --- конечное множество состояний
88+
\item $Q_S \in Q$ --- множество стартовых состояний
89+
\item $Q_F \subseteq Q$ --- множество финальных состояний
90+
\item $\delta \subseteq Q \times (\Sigma \cup \varepsilon) \times 2^Q$ --- функция переходов, а $\varepsilon \notin \Sigma$
91+
\item $\Sigma$ --- конечный алфавит
92+
\end{itemize}
93+
\end{definition}
94+
95+
Так как нас интересуют конечные автоматы в контексте языков, то будем говорить, что на ленте автомата записано какое-то слово (или строка).
96+
Иными словами, будем говорить, что автомат принимает на вход слово или строку.
97+
98+
99+
Процесс вычислений, проделываемых конечным автоматом, удобно описывать в терминах переходов между \textit{конфигурациями}.
100+
101+
\begin{definition}
102+
Конфигурация $c$ конечного автомата $M = \langle Q, Q_S, Q_F, \delta, \Sigma \rangle$ --- это пара $(q,w)$, где $q\in Q$ --- это текущее состояние автомата, а $w \in \Sigma^*$ --- непросмотренная часть входной строки.
103+
\end{definition}
104+
105+
\begin{definition}
106+
Будем говорить, что автомат $M = \langle Q, Q_S, Q_F, \delta, \Sigma \rangle$ может перейти из конфигурации $c_1 = (q_1,w_1)$ в конфигурацию $c_2 = (q_2,w_2)$, если
107+
108+
$$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\}.$$
109+
110+
Обозначать этот факт будем как $c_1 \to c_2$.
111+
\end{definition}
112+
113+
$$С_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\}.$$
114+
$$ c_1 \Rightarrow C_2 $$
115+
116+
Стартовая конфигурация.
117+
118+
Финальная конфигурация.
119+
120+
Ошибочная конфигурация.
121+
122+
\begin{example}
123+
Пример интерпретации конечного автомата.
124+
\end{example}
125+
126+
127+
\begin{definition}\label{def:DeterminicticFiniteAutomata}
128+
\textit{Детерминированный конечный автомат (ДКА, Deterministic Finite Automata, DFA)} --- это пятёрка $M = \langle Q, q_S, Q_F, \delta, \Sigma \rangle$, где
37129
\begin{itemize}
38130
\item $Q$ --- конечное множество состояний
39131
\item $q_S \in Q$ --- стартовое состояние
40132
\item $Q_F \subseteq Q$ --- множество финальных состояний
41-
\item $\delta \subseteq Q \times (\Sigma \cup \varepsilon) \times Q$ --- функция переходов, а $\varepsilon \notin \Sigma$
133+
\item $\delta \subseteq Q \times \Sigma \times Q$ --- функция переходов
42134
\item $\Sigma$ --- конечный алфавит
43135
\end{itemize}
44136
\end{definition}
45137

46-
Заметим, что определение~\ref{def:FiniteAutomata}
47138

48-
В зависимости от того, как именно представлена функция переходов: список троек, матрица, граф.
139+
Заметим, что функцию переходов можно представить разными способами В зависимости от того, как именно представлена функция переходов: список троек, матрица, граф.
49140

50141
\begin{example}
51142
Пример КА.
@@ -55,16 +146,15 @@ \section{Конечные автоматы}
55146
\end{example}
56147

57148

58-
\begin{definition}
59-
Конфигурация, переход между конфигурациями.
60-
\end{definition}
61149

62150
\begin{example}
63151
Пример интерпретации конечного автомата.
64152
\end{example}
65153

66154
Построение КА по регулярному выражению и регулярному выражению по КА. На производных.
67155

156+
Построение регулярного выражения по КА.
157+
68158
Алгоритмы: проверка пустоты ...
69159

70160
Примеры.
@@ -162,6 +252,8 @@ \section{Замкнутость регулярных языков относит
162252

163253
Построение пересечения через тензорное произведение автоматов.
164254

255+
Идея доказательства, что мы построили именно пересечение.
256+
165257
Пересечение через синхронный обход в ширину.
166258

167259
%\section{Вопросы и задачи}

0 commit comments

Comments
 (0)