Skip to content

Commit 26bf528

Browse files
committed
Определения в теории формальных языков выделены в отдельный раздел.
1 parent 974c728 commit 26bf528

3 files changed

Lines changed: 84 additions & 79 deletions

File tree

book_structure.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171

7272
> Базовые понятия: алфавит, слово, язык, операции над языками, производные, распознаватели и генераторы, иерархия классов языков.
7373
74+
- ✅ Раздел "Основные определения" — `00_BasicDefinitions.tex`
7475
- ✅ Раздел "Теоретико-множественные операции над языками" — `01_SetOperations.tex`
7576
- ✅ Раздел "Производные" — `02_Derivatives.tex`
7677
- ✅ Раздел "Распознаватели" — `03_Recognizers.tex`
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
\section{Основные определения}
2+
\label{sec:FLT_BasicDefinitions}
3+
\tikzsetfigurename{FLT_BasicDefs_}
4+
5+
\begin{definition}[Алфавит]
6+
\emph{Алфавит}~--- это конечное множество.
7+
Элементы этого множества будем называть \emph{символами}.
8+
\end{definition}
9+
10+
\begin{example}
11+
Примеры алфавитов.
12+
\begin{itemize}
13+
\item Латинский алфавит $\Sigma = \{a, b, c, \dots, z\}$.
14+
\item Кириллический алфавит $\Sigma = \{\text{а, б, в, \dots, я}\}$.
15+
\item Алфавит натуральных чисел в шестнадцатеричной записи
16+
\[\Sigma = \{0, 1, 2, 3, 4, 5, 6, 7 ,8, 9, A, B, C, D, E, F\}.\]
17+
\end{itemize}
18+
\end{example}
19+
20+
Традиционное обозначение для алфавита~--- $\Sigma$.
21+
Также мы будем использовать различные прописные буквы латинского алфавита.
22+
Для обозначения символов алфавита будем использовать строчные буквы латинского алфавита: $a, b, \dots, x, y, z$.
23+
24+
Будем считать, что над алфавитом $\Sigma$ всегда определена операция конкатенации $\cdot: \Sigma^* \times \Sigma^* \to \Sigma^*$.
25+
Здесь $\Sigma^*$~--- \fixit{замыкание множества !!!!}{Вроде само замыкание опредлелено. Если нет, добавить определение в теорию множеств. Тут использовать.}~\ref{def:set_closure}
26+
При записи выражений символ точки (обозначение операции конкатенации) часто будем опускать: $a \cdot b = ab$.
27+
28+
\begin{definition}[Слово]
29+
\emph{Слово} над алфавитом $\Sigma$~--- это конечная конкатенация символов алфавита $\Sigma$: $\omega = a_0 \cdot a_1 \cdot \dots \cdot a_m$, где $\omega$~--- слово, а $a_i \in \Sigma$ для любого $i$.
30+
Для обозначения пустого слова (слова, содержащего ноль символов) будем использовать специальный символ $\varepsilon, \varepsilon \notin \Sigma$.
31+
\end{definition}
32+
33+
\begin{definition}[Длина слова]
34+
Пусть $\omega = a_0 \cdot a_1 \cdot \dots \cdot a_m$~--- слово над алфавитом $\Sigma$.
35+
Будем называть $m + 1$ \emph{длиной слова} и обозначать как $|\omega|$.
36+
Длина пустого слова равна нулю.
37+
\end{definition}
38+
39+
\begin{definition}[Количество вхождений символа]
40+
Пусть $\omega$~--- слово над алфавитом $\Sigma$. Пусть $t \in \Sigma$~--- некоторый символ из алфавита.
41+
Тогда будем обозначать количество вхождений символа $t$ в слове $\omega$ как $|\omega|_t$.
42+
\end{definition}
43+
44+
\begin{definition}[Язык]
45+
\emph{Язык} над алфавитом $\Sigma$~--- это множество слов над алфавитом $\Sigma$: $L_{\Sigma} \subseteq \Sigma^{*}$.
46+
\end{definition}
47+
48+
Иначе говоря, любой язык над алфавитом $\Sigma$ является подмножеством универсального множества $\Sigma^*$~--- множества всех слов над алфавитом $\Sigma$.
49+
50+
\begin{example}
51+
Примеры языков.
52+
53+
\begin{itemize}
54+
\item Язык целых чисел в двоичной записи
55+
\[\{0, 1, 10, 11, 100, 101, \dots\}.\]
56+
\item Язык всех правильных скобочных последовательностей\mytodo{ sidenote. Он же язык Дика. Ссыдка на языки Дика.}
57+
\[\{(), (()), ()(), (())(), \dots\}.\]
58+
\end{itemize}
59+
\end{example}
60+
61+
62+
63+
\mytodo{Добавить ссылки на работы в sidenote-ы ниже.}
64+
Заметим, что язык не обязан быть конечным множеством, в то время как алфавит в нашей области всегда конечен%
65+
\sidenote{Существуют ситуации, когда возникают бесконечные алфавиты.}
66+
и изучаем мы конечные слова%
67+
\sidenote{
68+
Существуют ситуации, когда возникают бесконечные слова.
69+
Например работы по обработке потоков.
70+
}.
71+
72+
Можно выделить следующие основные \emph{способы задания языков}.
73+
\begin{itemize}
74+
\item Перечислить все элементы.
75+
Такой способ работает только для конечных языков.
76+
Перечислить бесконечное множество за конечное время не получится.
77+
\item Задать генератор~--- процедуру, которая на каждый свой вызов возвращает очередное слово языка.
78+
\item Задать распознаватель~--- процедуру, которая по данному слову может определить, принадлежит оно заданному языку или нет.
79+
\end{itemize}
80+
81+
Стоит отметить, что существуют и другие способы задания.
82+
Например, язык может определяться как решение некоторого \emph{языкового уравнения}~\sidecite{Leiss1999}.

tex/part_02_Foundations/chapter_04_FormalLanguageTheoryIntro/main.tex

Lines changed: 1 addition & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -13,85 +13,7 @@ \chapter{Общие сведения теории формальных язык
1313
Примерами \enquote{нестроковых} языков могут послужить языки деревьев~\cite{tata2007} или языки графов~\cite{EHRIG1992557, Courcelle2009}.
1414
}
1515

16-
\begin{definition}[Алфавит]
17-
\emph{Алфавит}~--- это конечное множество.
18-
Элементы этого множества будем называть \emph{символами}.
19-
\end{definition}
20-
21-
\begin{example}
22-
Примеры алфавитов.
23-
\begin{itemize}
24-
\item Латинский алфавит $\Sigma = \{a, b, c, \dots, z\}$.
25-
\item Кириллический алфавит $\Sigma = \{\text{а, б, в, \dots, я}\}$.
26-
\item Алфавит натуральных чисел в шестнадцатеричной записи
27-
\[\Sigma = \{0, 1, 2, 3, 4, 5, 6, 7 ,8, 9, A, B, C, D, E, F\}.\]
28-
\end{itemize}
29-
\end{example}
30-
31-
Традиционное обозначение для алфавита~--- $\Sigma$.
32-
Также мы будем использовать различные прописные буквы латинского алфавита.
33-
Для обозначения символов алфавита будем использовать строчные буквы латинского алфавита: $a, b, \dots, x, y, z$.
34-
35-
Будем считать, что над алфавитом $\Sigma$ всегда определена операция конкатенации $\cdot: \Sigma^* \times \Sigma^* \to \Sigma^*$.
36-
Здесь $\Sigma^*$~--- \fixit{замыкание множества !!!!}{Вроде само замыкание опредлелено. Если нет, добавить определение в теорию множеств. Тут использовать.}~\ref{def:set_closure}
37-
При записи выражений символ точки (обозначение операции конкатенации) часто будем опускать: $a \cdot b = ab$.
38-
39-
\begin{definition}[Слово]
40-
\emph{Слово} над алфавитом $\Sigma$~--- это конечная конкатенация символов алфавита $\Sigma$: $\omega = a_0 \cdot a_1 \cdot \dots \cdot a_m$, где $\omega$~--- слово, а $a_i \in \Sigma$ для любого $i$.
41-
Для обозначения пустого слова (слова, содержащего ноль символов) будем использовать специальный символ $\varepsilon, \varepsilon \notin \Sigma$.
42-
\end{definition}
43-
44-
\begin{definition}[Длина слова]
45-
Пусть $\omega = a_0 \cdot a_1 \cdot \dots \cdot a_m$~--- слово над алфавитом $\Sigma$.
46-
Будем называть $m + 1$ \emph{длиной слова} и обозначать как $|\omega|$.
47-
Длина пустого слова равна нулю.
48-
\end{definition}
49-
50-
\begin{definition}[Количество вхождений символа]
51-
Пусть $\omega$~--- слово над алфавитом $\Sigma$. Пусть $t \in \Sigma$~--- некоторый символ из алфавита.
52-
Тогда будем обозначать количество вхождений символа $t$ в слове $\omega$ как $|\omega|_t$.
53-
\end{definition}
54-
55-
\begin{definition}[Язык]
56-
\emph{Язык} над алфавитом $\Sigma$~--- это множество слов над алфавитом $\Sigma$: $L_{\Sigma} \subseteq \Sigma^{*}$.
57-
\end{definition}
58-
59-
Иначе говоря, любой язык над алфавитом $\Sigma$ является подмножеством универсального множества $\Sigma^*$~--- множества всех слов над алфавитом $\Sigma$.
60-
61-
\begin{example}
62-
Примеры языков.
63-
64-
\begin{itemize}
65-
\item Язык целых чисел в двоичной записи
66-
\[\{0, 1, 10, 11, 100, 101, \dots\}.\]
67-
\item Язык всех правильных скобочных последовательностей\mytodo{ sidenote. Он же язык Дика. Ссыдка на языки Дика.}
68-
\[\{(), (()), ()(), (())(), \dots\}.\]
69-
\end{itemize}
70-
\end{example}
71-
72-
73-
74-
\mytodo{Добавить ссылки на работы в sidenote-ы ниже.}
75-
Заметим, что язык не обязан быть конечным множеством, в то время как алфавит в нашей области всегда конечен%
76-
\sidenote{Существуют ситуации, когда возникают бесконечные алфавиты.}
77-
и изучаем мы конечные слова%
78-
\sidenote{
79-
Существуют ситуации, когда возникают бесконечные слова.
80-
Например работы по обработке потоков.
81-
}.
82-
83-
Можно выделить следующие основные \emph{способы задания языков}.
84-
\begin{itemize}
85-
\item Перечислить все элементы.
86-
Такой способ работает только для конечных языков.
87-
Перечислить бесконечное множество за конечное время не получится.
88-
\item Задать генератор~--- процедуру, которая на каждый свой вызов возвращает очередное слово языка.
89-
\item Задать распознаватель~--- процедуру, которая по данному слову может определить, принадлежит оно заданному языку или нет.
90-
\end{itemize}
91-
92-
Стоит отметить, что существуют и другие способы задания.
93-
Например, язык может определяться как решение некоторого \emph{языкового уравнения}~\sidecite{Leiss1999}.
94-
16+
\input{part_02_Foundations/chapter_04_FormalLanguageTheoryIntro/00_BasicDefinitions}
9517
\input{part_02_Foundations/chapter_04_FormalLanguageTheoryIntro/01_SetOperations}
9618
\input{part_02_Foundations/chapter_04_FormalLanguageTheoryIntro/02_Derivatives}
9719
\input{part_02_Foundations/chapter_04_FormalLanguageTheoryIntro/03_Recognizers}

0 commit comments

Comments
 (0)