diff --git "a/\320\242\320\265\320\276\321\200\320\270\321\217/\320\227\320\260\320\274\320\272\320\275\321\203\321\202\320\276\321\201\321\202\321\214 \320\272\320\273\320\260\321\201\321\201\320\276\320\262 \321\217\320\267\320\272\320\276\320\262.md" "b/\320\242\320\265\320\276\321\200\320\270\321\217/\320\227\320\260\320\274\320\272\320\275\321\203\321\202\320\276\321\201\321\202\321\214 \320\272\320\273\320\260\321\201\321\201\320\276\320\262 \321\217\320\267\320\272\320\276\320\262.md"
new file mode 100644
index 0000000..3d6c8ad
--- /dev/null
+++ "b/\320\242\320\265\320\276\321\200\320\270\321\217/\320\227\320\260\320\274\320\272\320\275\321\203\321\202\320\276\321\201\321\202\321\214 \320\272\320\273\320\260\321\201\321\201\320\276\320\262 \321\217\320\267\320\272\320\276\320\262.md"
@@ -0,0 +1,134 @@
+```dot
+graph {
+ node[shape=none]
+
+ label="Chomsky Hierarchy"
+ subgraph cluster_recursive{
+ label="Recursive"
+
+ subgraph cluster_Conj {
+ label="Conj"
+ subgraph cluster_CFL{
+ label="CFL"
+ subgraph cluster_DCFL{
+ label="DCFL"
+
+ subgraph cluster_VPL{
+ label="VPL"
+
+ subgraph cluster_Reg{
+ label="Reg"
+
+ subgraph cluster_Finite{
+ label="Finite Languages"
+ F1[label="{a,b,ab}"]
+ }
+ R1[label="a*b*"]
+ }
+ VPL1[label="Dyck Language"]
+ }
+ DCFL1[label="a^nb^{2n}"]
+ }
+ CFL[label="ww^R"]
+ }
+ Conj1[label="a^nb^nc^n"]
+ }
+ Rec1[label="Prime numbers"]
+ }
+}
+```
+# Замкнутость различных классов языков относительно операций
+
+| Класс\операция | $\mathcal{L}_1 \cap \mathcal{L}_2$ | $\mathcal{L}_1 \cup \mathcal{L}_2$,
$\Sigma_1\cap\Sigma_2\neq\emptyset$ | $\mathcal{L}_1 \cup \mathcal{L}_2$,
$\Sigma_1\cap\Sigma_2=\emptyset$ | $L_1L_2$,
$\Sigma_1\cap\Sigma_2\neq\emptyset$ | $\mathcal{L}_1\mathcal{L}_2$,
$\Sigma_1\cap\Sigma_2=\emptyset$ | $\mathcal{L}^*$ | $\mathcal{L}\cup Reg$ | $\mathcal{L}\cap Reg$ | $\overline {\mathcal{L}}$ | $h(\mathcal{L})$ | $h(\mathcal{L})$ нестирающие | $h^{-1}(\mathcal{L})$ | $h^{-1}(\mathcal{L})$ нестирающие | $\mathcal{L}^R$ |
+| --------------------- | ---------------------------------- | -------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------- | --------------- | --------------------- | --------------------- | ------------------------- | ---------------- | ---------------------------- | --------------------- | --------------------------------- | --------------- |
+| Конечные языки | + | + | + | + | + | - | - | + | - | + | + | - | + | + |
+| $Reg$ | + | + | + | + | + | + | + | + | + | + | + | | | + |
+| $VPL$ | | | | | | | | | | | | | | |
+| $LR(0)$ | | | | | | | | | | | | | | |
+| $DCFL=$$=LR(k)=LR(1)$ | | | | | | | | | | | | | | |
+| $LL(k)$ | | | | | | | | | | | | | | |
+| $CFL$ | - | + | + | + | + | + | | | | | | | | |
+| $LinCFL$ | | | | | | | | | | | | | | |
+| $LinConj$ | | | | | | | | | | | | | | |
+| $Conj$ | + | + | + | + | + | + | + | + | | | | | | |
+| Ограниченные языки | | | | | | | | | | | | | | |
+| $Rec$ | | | | | | | | | | | | | | |
+
+Расшифровка сокращений
+- Reg - [[регулярный язык |регулярные языки]]
+- VPL(Visibly Pushdown Languages)
+- DCFL - детерминированные контекстно свободные языки
+- CFL(Contest Free Languages) - [[КС-язык|контекстно свободные языки]]
+- LinCFL - линейные контекстно свободные языки
+- $\text{LinConj} = \text{trellis automata}$ - линейные конъюнктивные языки
+- Conj - конъюнктивные языки
+- Rec - рекурсивные языки
+
+# Док-во замкнутости конечных языков
+Для операций $\mathcal{L}_1\cap \mathcal{L}_2$, $\mathcal{L}_1\cup \mathcal{L}_2$ имеет место объединение и пересечение конечных множеств, что есть конечное множество.
+
+Элементы $\mathcal{L}_1\mathcal{L}_2$ мы можем отобразить в элементы множества $\mathcal{L}_1 \times \mathcal{L}_2$, которое для конечных $\mathcal{L}_1,\mathcal{L}_2$ является также конечным множеством, из чего следует замкнутость.
+
+Конечные языки не замкнуты относительно $\mathcal{L}^*, \mathcal{L}\cup Reg, \overline{\mathcal{L}}$ так как эти операции дают бесконечные множества языков: замыкание Клини дает бесконечное множество слов, объединение с бесконечным регулярным дает бесконечное множество слов, и дополнение к языку также дает счетное множество слов.
+
+Пересечение $\mathcal{L}\cap Reg$ дает также конечное множество, так как $\mathcal{L}\cap Reg \subseteq \mathcal{L}$, поэтому получившийся язык будет иметь размер не больше исходного.
+
+Конечные языки замкнуты относительно $\mathcal{L}^R$,$h(\mathcal{L})$ и нестирающие $h^{-1}(\mathcal{L})$ , так как они не увеличивают число слов: каждое слово либо уникально, либо совпадает с другим образом.
+
+Для стирающих обратных морфизмов $h^{-1}(\mathcal{L})$ уже не выполняется замкнутость в классе конечных языков. Возьмем пример простейшего стирающего морфизма для языка над алфавитом $\{a,b\}$.
+Пусть
+$$h(x) = \begin{cases} a, \text{если } x = a \\ \varepsilon , \text{если } x = b\end{cases}$$
+И рассмотрим простейший конечный язык, состоящий из одного слова $\{a\}$. Тогда, при применении к нему обратного морфизма мы получим уже регулярный язык $b^*ab^*$. В общем случае, стирающие обратные морфизмы позволяют произвольным образом добавлять стираемые символы между любыми символами прообраза слова. Таким образом мы получаем бесконечный язык, поэтому замкнутость не выполняется.
+# Док-во замкнутости для регулярных языков
+
+Регулярные языки замкнуты относительно пересечения $\mathcal{L}_1 \cap \mathcal{L}_2$. Для этого рассмотрим ДКА $A_i$ для $\mathcal{L}_i$. $A = A_1 \cap A_2$ - новый "автомат-пересечение"
+Состояния автомата - пары состояний $(s_1, s_2)$из $A_1$, $A_2$
+Переходы состояний - переходы $(s_1, s_2) \xrightarrow{a} (f_1,f_2)$ в случае если $s_1 \xrightarrow{a} f_1$ и $s_2 \xrightarrow{a} f_2$
+Финальные состояния - состояния, где каждый составляющий пары - финальное состояние в своем автомате.
+Таким образом построенный автомат будет одновременно отслеживать состояния двух автоматов сразу, и будет принимать слово только тогда, когда оно принимается в обоих автоматах. %%вроде как если рассмотреть категорию автоматов, с морфизмами - а не знаю какими :( , то такой "автомат-пересечение" - произведение автоматов%%
+
+Регулярные языки **замкнуты** относительно $\mathcal{L}_1\mathcal{L}_2, \mathcal{L}_1 \cup \mathcal{L}_2, \mathcal{L}^*$ по структурному определению регулярных языков - использовать соответсвенно конкатенацию, альтернативу и замыкание Клини для представления в виде регулярного выражения.(автоматически выполняется и $\mathcal{L}\cup Reg \sim \mathcal{L}_1 \cup \mathcal{L}_2$)
+
+Для замкнутости относительно **дополнения** к языку $\overline{ \mathcal{L}}$, воспользуемся представлением регулярного языка в виде ДКА. Для построения дополнения к языку, инвертируем все состояния - финальные в нефинальные и наоборот. Таким образом все слова, что раньше принимались автоматом перестанут приниматься, а те что отвергались - начнут. Тем самым мы построили автомат для дополнения $\Rightarrow$ дополнение регулярно.
+
+Регулярные языки замкнуты относительно морфизмов, так как мы можем в регулярном выражении в соответствии с морфизмом каждое вхождение символов исходного алфавита заменить на его образ, тем самым мы получим регулярное выражение, которое разбирает новый язык.
+
+%%обратные морфизмы%%
+
+Для доказательства замкнутости регулярных языков относительно обращения воспользуемся ДКА, распознающим заданный язык $\mathcal L$. Пусть ДКА задан как $(\Sigma, Q, q_0, F, \delta)$, где $\Sigma$ - алфавит, $Q$ - множество состояний, $q_0 \in Q$ - начальное состояние, $F \subset Q$ - множество конечных состояний, $\delta: Q \times \Sigma \to Q$ - функция переходов в автомате, тогда
+Строим НКА, распознающий обращенный язык по следующему принципу:
+- В ДКА обращаем все стрелки;
+- Делаем новым единственным финальным состоянием $q_0$;
+- Добавляем новое начальное состояние $q_0'$ и строим от него переходы к всем состояниям $q \in F$ по пустому слову $\varepsilon$.
+
+Таким образом построенный нами НКА будет распознавать обращенный регулярный язык.
+Почему построение верно?
+Потому что при распознавании обращенного слова новым автоматом мы будем проходить путь по графу автомата, соответствующий обращенному пути в исходном автомате. При этом путь будет идти от одного из финальных состояний в начальное. Новое начальное состояние нужно лишь для соответствия определению автомата, по сути оно говорит, что мы недетерминировано выбираем одно из начальных состояний.
+
+# Док-во замкнутости для CFL
+CFL **не замкнуты** относительно пересечения - контрпример -
+Языки $\{a^nb^nc^*\mid n \in \mathbb N\}$ и $\{a^*b^nc^n\mid n \in \mathbb N\}$ при пересечении дают не кс язык $\{a^nb^nc^n \mid n \in \mathbb N\}$.
+
+
+CFL языки **замкнуты** относительно $\mathcal{L}_1\mathcal{L}_2$ по структурной индукции.
+Пусть $S_1$ и $S_2$ - стартовые нетерминалы языков $\mathcal{L}_1,\mathcal{L}_2$. Тогда новый стартовый нетерминал для $\mathcal{L}_1\mathcal{L}_2$ определяется следующим образом:
+$$S' \to S_1S_2$$
+Аналогично для $\mathcal{L}_1 \cup \mathcal{L}_2$ только используем $S' \to S_1 \mid S_2$.
+
+CFL языки **замкнуты** относительно $\mathcal{L}^*$ по структурной индукции.
+Для стартового нетерминала S новый стартовый нетерминал:
+$$S' \to SS' \mid \varepsilon$$
+
+
+
+# Док-во замкнутости для Conj
+Свойства $\mathcal{L}_1\mathcal{L}_2, \mathcal{L}_1 \cup \mathcal{L}_2, \mathcal{L}_1 \cap \mathcal{L}_2, \mathcal{L}^*$ вытекают из структурных конструкторов.
+
+>[!error]
+> Замкнутость относительно морфизмов получается по той же схеме, что и предыдущие классы языков - каждый терминал в грамматике заменяем на соответсвующую замену морфизма.
+
+%%
+Для доказательства обращения, рассмотрим контекстную грамматику в нормальной форме: правила имеют либо КС вид, либо вид $N_1 \to N_2 \& N_3$. Тогда обращение можно построить очень просто - обращаем все КС правила, а раскрытие конъюнктивных правил оставляем такое же. Полученная конъюнктивная грамматика будет разбирать обращенный язык.
+Док-во корректности построения
+%%
+