Skip to content

Commit 66ee2e7

Browse files
committed
Merge branch 'LinAl' into dev
2 parents c030bfb + 906f162 commit 66ee2e7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2902
-2897
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
[![Ubuntu](https://github.com/JetBrains-Research/FormalLanguageConstrainedReachability-LectureNotes/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/JetBrains-Research/FormalLanguageConstrainedReachability-LectureNotes/actions/workflows/main.yml)
55
[![License](https://img.shields.io/badge/license-CC--BY--SA--4.0-orange)](https://github.com/JetBrains-Research/FormalLanguageConstrainedReachability-LectureNotes/blob/master/LICENSE.txt)
66

7-
Данный текст есть попытка изложить основные идеи и результаты в такой области, как поиск путей (или достижимость) с ограничениями в терминах формальных языков. Наиболее чато встречающиеся частные случаи данной задачи, с которыми достаточно легко встретиться в литературе:
8-
- Поиск путей с регулярными ограничениями, Regular Path Querying, RPQ
9-
- Поиск путей с контекстно-свободными ограничениями, Context-Free Path Querying, CFPQ
10-
- Достижимость с контекстно-свободными ограничениями, Context-Free Language Reachability, CFL-r
7+
Данный текст есть попытка изложить основные идеи и результаты в такой области, как поиск путей (или достижимость) с ограничениями в терминах формальных языков. Наиболее часто встречающиеся частные случаи данной задачи, с которыми достаточно легко встретиться в литературе, следующие.
8+
- Поиск путей с регулярными ограничениями, Regular Path Querying, RPQ.
9+
- Поиск путей с контекстно-свободными ограничениями, Context-Free Path Querying, CFPQ.
10+
- Достижимость с контекстно-свободными ограничениями, Context-Free Language Reachability, CFL-r.
1111

1212
Указанные выше англоязычные термины полезны для того, чтобы найти больше информации по теме.
1313

@@ -20,15 +20,15 @@
2020

2121
## Скачать pdf
2222

23-
* Текущую версию можно найти в [артифактах сборки](https://github.com/JetBrains-Research/FormalLanguageConstrainedReachability-LectureNotes/actions/runs/1004758399).
23+
* Текущую версию можно найти в [артефактах сборки](https://github.com/JetBrains-Research/FormalLanguageConstrainedReachability-LectureNotes/actions/runs/1004758399).
2424
* Официальные "издания" можно найти в [релизах](https://github.com/JetBrains-Research/FormalLanguageConstrainedReachability-LectureNotes/releases).
2525

2626
## Собрать из исходников
2727

2828
Если вы решили что-то изменить в тексте или просто собрать pdf из исходников, то необходимо проделать следующие шаги.
2929
- Устанвить [TeX Live](https://tug.org/texlive/) или аналогичный дистрибутив.
3030
- Сделать клон репозитория.
31-
- Зайти в папку ```tex```
31+
- Зайти в папку ```tex```.
3232
- Выполнить команду
3333
```
3434
make

tex/CYK_for_CFPQ.tex

Lines changed: 84 additions & 106 deletions
Large diffs are not rendered by default.

tex/Context-Free_Languages.tex

Lines changed: 51 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -187,35 +187,7 @@ \section{Дерево вывода}\label{sect:DerivTree}
187187
\[ G = \langle \{a,b\}, \{S\}, S, \{S \to a \ S \ b \ S, S \to \varepsilon\} \rangle \]
188188

189189
\begin{center}
190-
191-
\begin{tikzpicture}[sibling distance=4em,
192-
every node/.style = {shape=rectangle, rounded corners,
193-
draw, align=center,
194-
top color=white, bottom color=blue!20}]]
195-
\node {S}
196-
child { node {a} }
197-
child { node {S}
198-
child { node {$\varepsilon$}}
199-
}
200-
child { node {b} }
201-
child { node {S}
202-
child {node {a}}
203-
child { node {S}
204-
child { node {$\varepsilon$}}
205-
}
206-
child { node {b} }
207-
child { node {S}
208-
child {node {a}}
209-
child {node {S}
210-
child {node {$\varepsilon$}}
211-
}
212-
child {node {b}}
213-
child {node {S}
214-
child {node {$\varepsilon$}}
215-
}
216-
}
217-
};
218-
\end{tikzpicture}
190+
\input{figures/cfl/tree0.tex}
219191
\end{center}
220192

221193
\end{example}
@@ -338,7 +310,7 @@ \section{Нормальная форма Хомского}
338310
\begin{proof}
339311
\textit{Цепное правило} --- правило вида $A \to B\text{, где } A, B \in N\\$.
340312
\textit{Цепная пара} --- упорядоченная пара $(A,B)$, в которой $A\derives B$, используя только цепные правила.
341-
313+
342314
Алгоритм:
343315
\begin{enumerate}
344316
\item Найти все цепные пары в грамматике $G$.
@@ -361,7 +333,7 @@ \section{Нормальная форма Хомского}
361333

362334
\begin{proof}
363335
После удаления из грамматики правил, содержащих непорождающие нетерминалы, язык не изменится, так как непорождающие нетерминалы по определению не могли участвовать в выводе какого-либо слова.
364-
336+
365337
Алгоритм нахождения порождающих нетерминалов:
366338
\begin{enumerate}
367339
\item Множество порождающих нетерминалов пустое.
@@ -375,52 +347,52 @@ \section{Нормальная форма Хомского}
375347
\begin{example}
376348
Приведем в Нормальную Форму Хомского однозначную грамматику правильных скобочных последовательностей: $S \to a S b S \mid \varepsilon$
377349

378-
Первым шагом добавим новый нетерминал и сделаем его стартовым:
350+
Первым шагом добавим новый нетерминал и сделаем его стартовым:
379351

380352
\begin{align*}
381-
S_0 &\to S \\
353+
S_0 &\to S \\
382354
S &\to a S b S \mid \varepsilon
383355
\end{align*}
384356

385-
Заменим все терминалы на новые нетерминалы:
357+
Заменим все терминалы на новые нетерминалы:
386358

387359
\begin{align*}
388-
S_0 &\to S \\
389-
S &\to L S R S \mid \varepsilon \\
390-
L &\to a \\
360+
S_0 &\to S \\
361+
S &\to L S R S \mid \varepsilon \\
362+
L &\to a \\
391363
R &\to b
392364
\end{align*}
393365

394-
Избавимся от длинных правил:
366+
Избавимся от длинных правил:
395367

396368
\begin{align*}
397-
S_0 &\to S \\
398-
S &\to L S' \mid \varepsilon \\
399-
S' &\to S S'' \\
369+
S_0 &\to S \\
370+
S &\to L S' \mid \varepsilon \\
371+
S' &\to S S'' \\
400372
S'' &\to R S \\
401-
L &\to a \\
373+
L &\to a \\
402374
R &\to b
403375
\end{align*}
404376

405-
Избавимся от $\varepsilon$-продукций:
377+
Избавимся от $\varepsilon$-продукций:
406378

407379
\begin{align*}
408-
S_0 &\to S \mid \varepsilon \\
409-
S &\to L S' \\
410-
S' &\to S'' \mid S S'' \\
380+
S_0 &\to S \mid \varepsilon \\
381+
S &\to L S' \\
382+
S' &\to S'' \mid S S'' \\
411383
S'' &\to R \mid R S \\
412-
L &\to a \\
384+
L &\to a \\
413385
R &\to b
414386
\end{align*}
415387

416-
Избавимся от цепных правил:
388+
Избавимся от цепных правил:
417389

418390
\begin{align*}
419-
S_0 &\to L S' \mid \varepsilon \\
420-
S &\to L S' \\
421-
S' &\to b \mid R S \mid S S'' \\
391+
S_0 &\to L S' \mid \varepsilon \\
392+
S &\to L S' \\
393+
S' &\to b \mid R S \mid S S'' \\
422394
S'' &\to b \mid R S \\
423-
L &\to a \\
395+
L &\to a \\
424396
R &\to b
425397
\end{align*}
426398
\end{example}
@@ -463,14 +435,26 @@ \section{Лемма о накачке}
463435

464436
\begin{figure}
465437
\centering
466-
\includegraphics[width=0.5\textwidth]{pics/pumping_tree_1.pdf}
438+
\input{figures/cfl/pumping1.tex}
467439
\caption{Разбиение цепочки для леммы о накачке}
468440
\label{fig:pumping1}
469441
\end{figure}
470442

471443
\begin{figure}
472444
\centering
473-
\includegraphics[width=0.5\textwidth]{pics/pumping_tree_2.pdf}
445+
\begin{subfigure}[b]{0.4\textwidth}
446+
\centering
447+
\input{figures/cfl/pumping0.tex}
448+
\caption{$k = 0$.}
449+
% \label{fig:f1}
450+
\end{subfigure}
451+
\hfill
452+
\begin{subfigure}[b]{0.4\textwidth}
453+
\centering
454+
\input{figures/cfl/pumping2.tex}
455+
\caption{$k = 2$.}
456+
% \label{fig:f2}
457+
\end{subfigure}
474458
\caption{Пример накачки цепочки с рисунка~\ref{fig:pumping1}}
475459
\label{fig:pumping2}
476460
\end{figure}
@@ -493,24 +477,24 @@ \section{Замкнутость КС языков относительно оп
493477
\item Разность с регулярными языками: если $L_1$ --- контекстно-свободный, а $L_2$ --- регулярный, то $L_3 = L_1 \setminus L_2$ --- контекстно-свободный.
494478
\end{enumerate}
495479
\end{theorem}
496-
Для доказательства пунктов 1--4 можно построить КС граммтику нового языка имея грамматики для исходных.
480+
Для доказательства пунктов 1--4 можно построить КС граммтику нового языка имея грамматики для исходных.
497481
Будем предполагать, что множества нетерминальных символов различных граммтик для исходных языков не пересекаются.
498482
\begin{enumerate}
499-
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, $G_1=\langle\Sigma_2,N_2,P_2,S_2\rangle$ --- граммтика для $L_2$, тогда $G_3=\langle\Sigma_1 \cup \Sigma_2, N_1 \cup N_2 \cup \{S_3\}, P_1 \cup P_2 \cup \{S_3 \to S_1 \mid S_2\} ,S_3\rangle$ --- граммтика для $L_3$.
483+
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, $G_1=\langle\Sigma_2,N_2,P_2,S_2\rangle$ --- граммтика для $L_2$, тогда $G_3=\langle\Sigma_1 \cup \Sigma_2, N_1 \cup N_2 \cup \{S_3\}, P_1 \cup P_2 \cup \{S_3 \to S_1 \mid S_2\} ,S_3\rangle$ --- граммтика для $L_3$.
500484

501-
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, $G_1=\langle\Sigma_2,N_2,P_2,S_2\rangle$ --- граммтика для $L_2$, тогда $G_3=\langle\Sigma_1 \cup \Sigma_2, N_1 \cup N_2 \cup \{S_3\}, P_1 \cup P_2 \cup \{S_3 \to S_1 S_2\} ,S_3\rangle$ --- граммтика для $L_3$.
485+
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, $G_1=\langle\Sigma_2,N_2,P_2,S_2\rangle$ --- граммтика для $L_2$, тогда $G_3=\langle\Sigma_1 \cup \Sigma_2, N_1 \cup N_2 \cup \{S_3\}, P_1 \cup P_2 \cup \{S_3 \to S_1 S_2\} ,S_3\rangle$ --- граммтика для $L_3$.
502486

503-
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, тогда $G_2=\langle\Sigma_1, N_1 \cup \{S_2\}, P_1 \cup \{S_2 \to S_1 S_2\ \mid \varepsilon\}, S_2\rangle$ --- граммтика для $L_2$.
487+
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, тогда $G_2=\langle\Sigma_1, N_1 \cup \{S_2\}, P_1 \cup \{S_2 \to S_1 S_2\ \mid \varepsilon\}, S_2\rangle$ --- граммтика для $L_2$.
504488

505-
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, тогда $G_2=\langle\Sigma_1, N_1, \{N^i \to \omega^R \mid N^i \to \omega \in P_1 \}, S_1\rangle$ --- граммтика для $L_2$.
489+
\item $G_1=\langle\Sigma_1,N_1,P_1,S_1\rangle$ --- граммтика для $L_1$, тогда $G_2=\langle\Sigma_1, N_1, \{N^i \to \omega^R \mid N^i \to \omega \in P_1 \}, S_1\rangle$ --- граммтика для $L_2$.
506490
\end{enumerate}
507491

508492
Чтобы доказать замкнутость относительно пересечения с регулярными языками, построим по КС грамматике рекурсивный автомат $R_1$, по регулярному выражению --- детерминированный конечный автомат $R_2$, и построим их прямое произведение $R_3$.
509-
Переходы по терминальным символам в новом автомате возможны тогда и только тогда, когда они возможны одновременно и в исходном рекурсивном автомате и в исходном конечном.
510-
За рекурсивные вызовы отвечает исходныа рекурсивный автомат.
493+
Переходы по терминальным символам в новом автомате возможны тогда и только тогда, когда они возможны одновременно и в исходном рекурсивном автомате и в исходном конечном.
494+
За рекурсивные вызовы отвечает исходныа рекурсивный автомат.
511495
Значит цепочка принимается $R_3$ тогда и только тогда, когда она принимается одновременно $R_1$ и $R_2$: так как состояния $R_3$ --- это пары из состояния $R_1$ и $R_2$, то по трассе вычислений $R_3$ мы всегда можем построить трассу для $R_1$ и $R_2$ и наоборот.
512496

513-
Чтобы доказать замкнутость относительно разности с регулятным языком, достаточно вспомнить, что регулярные языки замкнуты относительно дополнения, и выразить разность через пересечение с дополнением:
497+
Чтобы доказать замкнутость относительно разности с регулятным языком, достаточно вспомнить, что регулярные языки замкнуты относительно дополнения, и выразить разность через пересечение с дополнением:
514498
$$
515499
L_1 \setminus L_2 = L_1 \cap \overline{L_2}
516500
$$
@@ -527,25 +511,25 @@ \section{Замкнутость КС языков относительно оп
527511

528512
Чтобы доказать незамкнутость относительно пресечения, рассмотрим языки $L_1 = \{a^n b^n c^k \mid n \geq 0, k \geq 0\}$ и $L_2 = \{a^k b^n c^n \mid n \geq 0, k \geq 0\}$.
529513
Очевидно, что $L_1$ и $L_2$ --- контекстно-свободные языки.
530-
Рассмотрим $L_3 = L_1 \cap L_2 = \{a^n b^n c^n \mid n \geq 0\}$.
514+
Рассмотрим $L_3 = L_1 \cap L_2 = \{a^n b^n c^n \mid n \geq 0\}$.
531515
$L_3$ не является контекстно-свободным по лемме о накачке для контекстно-свободных языков.
532516

533517
Чтобы доказать незамкнутость относительно разности проделаем следующее.
534518
\begin{enumerate}
535-
\item Рассмотрим языки $L_4 = \{a^m b^n c^k \mid m \neq n, k \geq 0\}$ и $L_5 = \{a^m b^n c^k \mid n \neq k, m \geq 0\}$.
519+
\item Рассмотрим языки $L_4 = \{a^m b^n c^k \mid m \neq n, k \geq 0\}$ и $L_5 = \{a^m b^n c^k \mid n \neq k, m \geq 0\}$.
536520
Эти языки являются контекстно-свободными.
537521
Это легко заметить, если знать, что язык $L'_4 = \{a^m b^n c^k \mid 0 \leq m < n, k \geq 0\}$ задаётся следующей граммтикой:
538522
\begin{align*}
539523
S \to & S c & T \to & a T b \\
540524
S \to & T & T \to & T b \\
541-
& & T \to & b.
542-
\end{align*}
525+
& & T \to & b.
526+
\end{align*}
543527

544528
\item Рассмотрим язык $L_6 = \overline{L'_6} = \overline{\{a^n b^m c^k \mid n \geq 0, m \geq 0, k \geq 0\}}$. Данный язык является регулярным.
545529

546530
\item Рассмотрим язык $L_7 = L_4 \cup L_5 \cup L_6$ --- контектсно свободный, так как является объединением контекстно-свободных.
547531

548-
\item Рассмотрим $\overline{L_7} = \{a^n b^n c^n \mid n \geq 0\} = L_3$: $L_4$ и $L_5$ задают языки с правильным порядком символов, но неравным их количеством, $L_6$ задаёт язык с неправильным порядком символов.
532+
\item Рассмотрим $\overline{L_7} = \{a^n b^n c^n \mid n \geq 0\} = L_3$: $L_4$ и $L_5$ задают языки с правильным порядком символов, но неравным их количеством, $L_6$ задаёт язык с неправильным порядком символов.
549533
Из пердыдущего пункта мы знаем, что $L_3$ не является контекстно-свободным.
550534

551535
\end{enumerate}

0 commit comments

Comments
 (0)