From 95253ea0f481dd3b65c78dd0caadc473a99416c6 Mon Sep 17 00:00:00 2001 From: TonitaN Date: Wed, 28 Jan 2026 12:38:04 +0300 Subject: [PATCH 1/8] Dummy --- ...\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" new file mode 100644 index 0000000..e69de29 From d7f14fcfbffa8fe4976bbf0770da3215df37797e Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sat, 7 Feb 2026 23:50:51 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=9C=D0=BE=D1=80=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...266\320\265\321\201\321\202\320\262\320\260.md" | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 "\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" new file mode 100644 index 0000000..7db315a --- /dev/null +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" @@ -0,0 +1,14 @@ + +Язык $\mathcal{L}$ называется ограниченным, если существует конечное число слов $w_1$, ..., $w_k$ таких, что $\mathcal{L} \subseteq w_1^*w_2^*\dots w_k^*$. Зная множество $\{w_1,\dots, w_k\}$, можно описать ограниченный язык $\mathcal{L}$ в терминах кортежей натуральных степеней, которые могут быть у опорных слов языка. Например, $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ можно описать через множество кортежей $\{\langle n,m\rangle\mid n,m\geq 0\land (n\leq m \lor m=1)\}$. Поскольку отрицательные степени слов не определены, первое условие в дальнейшем будем опускать. Множество кортежей опорных слов ограниченного языка $\mathcal{L}$ будем называть характеристическим множеством для $\mathcal{L}$. + +Оказывается, что контекстно-свободные ограниченные языки можно достаточно точно описать. А именно, их характеристические множества: +- мультилинейны, то есть являются объединениями линейных комбинаций векторов, а именно могут быть представлены в виде $\bigcup\sum_{j} k_j\cdot \langle v_{1,j},v_{2,j},\dots, v_{k,j}\rangle$; +- и стратифицированы, то есть в каждом из кортежей $\langle v_{1,j},v_{2,j},\dots, v_{k,j}\rangle$ не больше двух ненулевых компонент, и не существует двух кортежей вида $\langle 0,v_{i},0,\dots, v_{i+m},\dots, 0\rangle$, $\langle 0,v_{i+r_1},0,\dots, v_{i+m+r_2},\dots, 0\rangle$, $r_1 < m$. +Тем самым запрещены подъязыки, изоморфные ограниченным языкам $\{a^k b^k c^k\mid k\geq 0\}$, $\{a^n b^k c^n d^k \mid n,k\geq 0\}$ - известным примерам не контекстно-свободных языков. + +Главной проблемой при применении данного утверждения становится построение корректного характеристического множества для ограниченного языка. Поупражняемся в этом построении. + +Для уже упомянутого языка $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ характеристическим будет объединение $\{k_1\cdot \langle 1,1\rangle + k_2\cdot \langle 0,1\rangle\mid k_1, k_2 \geq 0\} \cup \{k'_1\cdot \langle 1,0\rangle + \langle 1,1\rangle\mid k'_1\geq 0\}$. Действительно, первая часть объединения строит вектора степеней, первый из которых не больше второго. Вторая часть объединения позволяет добавлять сколько угодно букв $a$ при наличии хотя бы одной буквы $a$ и единственной буквы $b$. Но это простой для представления язык, поскольку в нём нет неравенств. +С неравенствами помогает справиться объединение - можно упорядочить неравные степени по строгому возрастанию и перебрать все случаи этого упорядочения. Для примера рассмотрим язык $\{a^n b^m a^n \mid m,n\geq 0\land m\neq n\}$. Его характеристическое представление - это $\{k_1\cdot\langle 1,1,1\rangle + (k_2+1)\cdot\langle 0,1,0\rangle\mid k_1, k_2\geq 0\}\cup \{k'_1\cdot\langle 1,1,1\rangle + (k'_2+1)\cdot\langle 1,0,1\rangle\mid k'_1,k'_2\geq 0\}$. Первая часть объединения соответствует случаю, когда $m>n$, вторая - обратному ему. + +Однако следует проявлять осторожность в вопросе построения характеристических множеств, если опорные слова могут сливаться в неразличимые блоки. Например, язык $\{(ab)^n a (ba)^n (ab)^n\mid n>0\}$ так и хочется представить множеством $\{k\cdot\langle 1, 0, 1, 1\rangle + \langle 0, 1 , 0,0\rangle \mid k> 0\}$, очевидно не стратифицированным. Однако, если заметить, что первые два блока сливаются в один, и только на стыке двух последних возникает неоднородность - то есть переписать язык в форме $\{(ab)^{2n}a(ab)^n\mid n>0\}$, то удастся построить и стратифицированное характеристическое множество: $\{k\cdot \langle 2, 0, 1\rangle + \langle 0, 1 , 0\rangle \mid k>0\}$. \ No newline at end of file From d63104eac107d77d4aa3333d1916e979c0adcdb0 Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sun, 8 Feb 2026 03:53:55 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=9C=D0=BE=D1=80=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=D0=BE=D0=BE=D0=BE2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\320\266\320\265\321\201\321\202\320\262\320\260.md" | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" index 7db315a..8b2538b 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" @@ -11,4 +11,6 @@ Для уже упомянутого языка $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ характеристическим будет объединение $\{k_1\cdot \langle 1,1\rangle + k_2\cdot \langle 0,1\rangle\mid k_1, k_2 \geq 0\} \cup \{k'_1\cdot \langle 1,0\rangle + \langle 1,1\rangle\mid k'_1\geq 0\}$. Действительно, первая часть объединения строит вектора степеней, первый из которых не больше второго. Вторая часть объединения позволяет добавлять сколько угодно букв $a$ при наличии хотя бы одной буквы $a$ и единственной буквы $b$. Но это простой для представления язык, поскольку в нём нет неравенств. С неравенствами помогает справиться объединение - можно упорядочить неравные степени по строгому возрастанию и перебрать все случаи этого упорядочения. Для примера рассмотрим язык $\{a^n b^m a^n \mid m,n\geq 0\land m\neq n\}$. Его характеристическое представление - это $\{k_1\cdot\langle 1,1,1\rangle + (k_2+1)\cdot\langle 0,1,0\rangle\mid k_1, k_2\geq 0\}\cup \{k'_1\cdot\langle 1,1,1\rangle + (k'_2+1)\cdot\langle 1,0,1\rangle\mid k'_1,k'_2\geq 0\}$. Первая часть объединения соответствует случаю, когда $m>n$, вторая - обратному ему. -Однако следует проявлять осторожность в вопросе построения характеристических множеств, если опорные слова могут сливаться в неразличимые блоки. Например, язык $\{(ab)^n a (ba)^n (ab)^n\mid n>0\}$ так и хочется представить множеством $\{k\cdot\langle 1, 0, 1, 1\rangle + \langle 0, 1 , 0,0\rangle \mid k> 0\}$, очевидно не стратифицированным. Однако, если заметить, что первые два блока сливаются в один, и только на стыке двух последних возникает неоднородность - то есть переписать язык в форме $\{(ab)^{2n}a(ab)^n\mid n>0\}$, то удастся построить и стратифицированное характеристическое множество: $\{k\cdot \langle 2, 0, 1\rangle + \langle 0, 1 , 0\rangle \mid k>0\}$. \ No newline at end of file +Однако следует проявлять осторожность в вопросе построения характеристических множеств, если опорные слова могут сливаться в неразличимые блоки. Например, язык $\{(ab)^n a (ba)^n (ab)^n\mid n>0\}$ так и хочется представить множеством $\{k\cdot\langle 1, 0, 1, 1\rangle + \langle 0, 1 , 0,0\rangle \mid k> 0\}$, очевидно не стратифицированным. Однако, если заметить, что первые два блока сливаются в один, и только на стыке двух последних возникает неоднородность - то есть переписать язык в форме $\{(ab)^{2n}a(ab)^n\mid n>0\}$, то удастся построить и стратифицированное характеристическое множество: $\{k\cdot \langle 2, 0, 1\rangle + \langle 0, 1 , 0\rangle \mid k>0\}$. + +Также при построении характеристических множеств нужно проверить, чтобы объединения нельзя было представить более простым способом (чаще всего это происходит, если границы между объединяемыми множествами нет). Например, язык $a^* b^*$, очевидно, характеризуется множеством $\{k_1 \cdot \langle 1,0\rangle + k_2\cdot \langle 0,1\rangle\mid k_1,k_2\geq 0\}$. Но можно записать его и так: $\{k_1 \cdot \langle 1,1\rangle + k_2\cdot \langle 0,1\rangle\mid k_1,k_2\geq 0\}\cup \{k'_1 \cdot \langle 1,1\rangle + k'_2\cdot \langle 1,0\rangle\mid k'_1,k'_2\geq 0\}$. Хотя оба представления стратифицированы, легко понять, что экстраполяция этого же примера на язык $a^*b^* c^*$ уже даст неверное представление, если пользоваться вторым методом. \ No newline at end of file From a82e7de53853353044409d71d6f642934934b9f6 Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sat, 7 Mar 2026 01:54:14 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=AE=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=20?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=B0=D1=81=D1=81=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\261\320\265\321\200\320\266\320\265.md" | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/PDA \320\270 \320\276\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\250\321\216\321\202\321\206\320\265\320\275\320\261\320\265\321\200\320\266\320\265.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/PDA \320\270 \320\276\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\250\321\216\321\202\321\206\320\265\320\275\320\261\320\265\321\200\320\266\320\265.md" index 3735e55..c037042 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/PDA \320\270 \320\276\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\250\321\216\321\202\321\206\320\265\320\275\320\261\320\265\321\200\320\266\320\265.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/PDA \320\270 \320\276\321\202\320\276\320\261\321\200\320\260\320\266\320\265\320\275\320\270\320\265 \320\250\321\216\321\202\321\206\320\265\320\275\320\261\320\265\321\200\320\266\320\265.md" @@ -22,7 +22,7 @@ digraph{ point -> S S -> S [label="a, X/BX"] S:s -> S:s [label="b, B/"] - S -> E [label="e, Z0/Z0"] + S -> E [label="ε, Z₀/Z₀"] } ``` Применим эту же идею для грамматики, содержащей правила $S\rightarrow a S b$, $S\rightarrow S b S$, $S\rightarrow \varepsilon$: @@ -38,13 +38,13 @@ digraph{ E [shape=doublecircle] point [shape=point] point -> S - S:n -> S:n [label="a, X/BX\n e, X/CX"] + S:n -> S:n [label="a, X/BX\n ε, X/CX"] S:s -> S:s [label="b, C/"] - S -> E [label="e, Z0/Z0"] - S -> SE [label="b, B/"] - SE -> SE [label="b,B/"] - SE -> S [label="b, C/"] - SE -> E [label="e,Z0/Z0"] + S -> E [label="ε, Z₀/Z₀"] + S -> Sᴇ [label="b, B/"] + Sᴇ -> Sᴇ [label="b,B/"] + Sᴇ -> S [label="b, C/"] + Sᴇ -> E [label="ε,Z₀/Z₀"] } ``` Итоговый МП-автомат содержит недетерминированный $\varepsilon$-переход, влияющий на стек: без него можно было бы обойтись, перенеся недетерминизм на обработку $b$-переходов. Ниже выделено состояние $SS$ - начало разбора нетерминала $S$, не манипулирующее со стеком. @@ -60,11 +60,11 @@ digraph{ SS -> SS [label="b"] SS -> S [label="a, X/BX"] S -> S [label="a, B/BB"] - S -> SE [label="b, B/\n"] - SE -> SE [label="b,B/\n"] - SE -> SS [label="b,X/X"] - SE -> E [label="e,Z0/Z0"] - SS -> E [label="e,Z0/Z0"] + S -> Sᴇ [label="b, B/\n"] + Sᴇ -> Sᴇ [label="b,B/\n"] + Sᴇ -> SS [label="b,X/X"] + Sᴇ -> E [label="ε,Z₀/Z₀"] + SS -> E [label="ε,Z₀/Z₀"] } ``` @@ -109,17 +109,17 @@ digraph{ point [shape=point] point -> S S -> T [label="b, X/AX"] - S -> B0 [label="a, X/BX"] + S -> B₀ [label="a, X/BX"] T -> T [label="b\n a, A/"] - T -> TE [label="a"] + T -> Tᴇ [label="a"] T -> S [label="a"] - B0 -> B [label="b"] - B -> B0 [label="a, B/"] + B₀ -> B [label="b"] + B -> B₀ [label="a, B/"] B -> B [label="a"] B -> T [label="a, A/"] - B -> E [label="e, Z0/Z0"] - TE -> T [label="a, A/"] - TE -> E [label="e, Z0/Z0"] + B -> E [label="ε, Z₀/Z₀"] + Tᴇ -> T [label="a, A/"] + Tᴇ -> E [label="ε, Z₀/Z₀"] } ``` From c16a353a2a687e9952aa53562eaf0701830e1dd5 Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sat, 7 Mar 2026 01:54:35 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=AE=D0=9F=D1=80=D0=BE=D0=B4=D0=BE=D0=BB?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\201\321\202\320\262\320\260.md" | 2 +- ...0\265\320\274\320\274\321\213 \320\256.md" | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" index 8b2538b..5265dca 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\320\263\321\200\320\260\320\275\320\270\321\207\320\265\320\275\320\275\321\213\320\265 \321\217\320\267\321\213\320\272\320\270 \320\270 \321\201\321\202\321\200\320\260\321\202\320\270\321\204\320\270\321\206\320\270\321\200\320\276\320\262\320\260\320\275\320\275\321\213\320\265 \320\274\320\275\320\276\320\266\320\265\321\201\321\202\320\262\320\260.md" @@ -1,5 +1,5 @@ -Язык $\mathcal{L}$ называется ограниченным, если существует конечное число слов $w_1$, ..., $w_k$ таких, что $\mathcal{L} \subseteq w_1^*w_2^*\dots w_k^*$. Зная множество $\{w_1,\dots, w_k\}$, можно описать ограниченный язык $\mathcal{L}$ в терминах кортежей натуральных степеней, которые могут быть у опорных слов языка. Например, $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ можно описать через множество кортежей $\{\langle n,m\rangle\mid n,m\geq 0\land (n\leq m \lor m=1)\}$. Поскольку отрицательные степени слов не определены, первое условие в дальнейшем будем опускать. Множество кортежей опорных слов ограниченного языка $\mathcal{L}$ будем называть характеристическим множеством для $\mathcal{L}$. +Язык $\mathcal{L}$ называется ограниченным, если существует конечное число слов $w_1$, ..., $w_k$ таких, что $\mathcal{L} \subseteq w_1^*w_2^*\dots w_k^*$. Зная множество $\{w_1,\dots, w_k\}$, которое в дальнейшем называем множеством опорных слов ограниченного языка, можно описать соответствующий ограниченный язык $\mathcal{L}$ в терминах кортежей натуральных степеней, которые могут быть у этих опорных слов. Например, $\{a^n b^{k+n}\mid n,k\geq 0\}\cup\{a^n b \mid n>0\}$ можно описать через множество кортежей $\{\langle n,m\rangle\mid n,m\geq 0\land (n\leq m \lor m=1)\}$. Поскольку отрицательные степени слов не определены, первое условие в дальнейшем будем опускать. Множество кортежей, описывающих степени опорных слов ограниченного языка $\mathcal{L}$, будем называть характеристическим множеством для $\mathcal{L}$. Оказывается, что контекстно-свободные ограниченные языки можно достаточно точно описать. А именно, их характеристические множества: - мультилинейны, то есть являются объединениями линейных комбинаций векторов, а именно могут быть представлены в виде $\bigcup\sum_{j} k_j\cdot \langle v_{1,j},v_{2,j},\dots, v_{k,j}\rangle$; diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" index e69de29..d32a14e 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" @@ -0,0 +1,61 @@ + +Напомним, что стековый автомат считается недетерминированным, если в нём присутствует хотя бы одна пара переходов $\langle q_0, \gamma_1, \Delta\rangle\to \langle q_1, \Delta'_1\rangle$, $\langle q_0, \gamma_2,\Delta\rangle\to \langle q_2, \Delta'_2\rangle$ такая, что $\Delta_1 = \Delta_2 \land (\gamma_1 = \gamma_2\lor \gamma_1 = \varepsilon \lor \gamma_2 = \varepsilon)$. Заметим, что это определение имеет чисто синтаксическую природу: нас не волнует, может ли вообще появиться символ $\Delta$ на вершине стека в состоянии $q_0$. Даже если такое сочетание невозможно ни на каком пути исполнения МП-автомата, он всё равно считается недетерминированным. Более того, недетерминированные переходы очень часто можно удалить посредством более аккуратной обработки однородных блоков букв в слове. + +**Пример** + +Язык $\mathcal{L}_0 = \{ww' | \text{при стирании из }w'\text{ некоторого количества букв }b\text{ получается } w^R\}$ легко распознать "в лоб по определению" с помощью недетерминированного МП-автомата. +```dot +digraph{ + rankdir = LR + node [shape=circle] + E [shape=doublecircle] + point [shape=point] + point -> S + S:s -> S:s [label="a, X/AX"] + S:n -> S:n [label="b, X/BX"] + S -> T [label="ε"] + T:s -> T:s [label="a, A/"] + T:n -> T:n [label="b, B/\n b, X/X"] + T -> E [label="ε, Z₀/Z₀"] + } +``` +В нём есть несколько неоднозначных переходов: из состояния $S$ в состояние $T$; обработка букв в состоянии $T$, а также выход из него в состояние $E$. Однако оказывается, что от двух последних можно избавиться. Действительно, можно потребовать, чтобы вместо перехода $b, X/X$ из состояния $T$ в себя был переход вида $b, A/A$, и дополнительно добавить в состояние $E$ петлю вида $b, Z_0/Z_0$. Тогда к реверсу первой части слова будут относиться лишь буквы, принадлежащие началам $b$-блоков из второй части слова. +Интуитивно понятно, что неоднозначность при переходе из $S$ в $T$ не получится; мы вернёмся к этому вопросу чуть позже. +Если рассматривать только слова языка $\mathcal{L}_0$, имеющие вид $a^n b w'$, $|w'|_a = n$, то, изменив "глупый" МП-автомат для $\mathcal{L}_0$ максимально лениво, можно получить вот такой: +```dot +digraph{ + rankdir = LR + node [shape=circle] + E [shape=doublecircle] + point [shape=point] + point -> S + S:s -> S:s [label="a, X/AX"] + S -> T [label="b"] + T:s -> T:s [label="a, A/"] + T:n -> T:n [label="b, B/\n b, X/X"] + T -> E [label="ε, Z₀/Z₀"] + } +``` +В этом МП-автомате формально присутствует неоднозначность, хотя, как мы уже видели, всю неоднозначность дальше перехода от $S$ к $T$ можно устранить, к тому же стековый символ $B$ вообще не может появиться на стеке этого автомата, поэтому переход из $T$ в себя по такому символу смысла не имеет. Наш пример показывает, что недетерминизм в МП-автомате для некоторого языка - ещё не гарантия того, что построить детерминированный МП-автомат для этого языка невозможно. +Как мы можем понять, что недетерминизм в некотором состоянии МП-автомата устранить не получится? Мы должны попробовать "обмануть" его детерминированные аналоги: то есть, представив, что у языка есть детерминированный МП-автомат, заставить его неправильно обрабатывать стек после такого перехода. Рассмотрим пример такой обманки для перехода $S \to T$ в МП-автомате для $\mathcal{L}_0$. +Предположим, наш автомат прочитал префикс $aba^n b aa b a^{n}b$, оптимистично предположив, что переход от чтения стека к его опустошению произошёл после чтения префикса $aba^n b a$. Если слово продолжится единственной буквой $a$, то предположение окажется верным. Однако любое изменение числа букв $a$ приведёт к обратному эффекту. Поэтому можно добавить их так много, чтобы никакой конечный автомат не мог бы обработать эту разницу. +В соответствии с идеей предыдущего абзаца, построим два слова, поведение стека на которых конфликтует: +$$aba^n ba\textcolor{blue}{aba^{n}b} \begin{cases} a - \text{ в синей части снимаем со стека}\\ aaba^{n}baaba^nba - \text{в синей части всё ещё кладём}\end{cases}$$ +Если бы существовал детерминированный МП-автомат, распознающий язык $\mathcal{L}_0$, то ему бы пришлось каким-то образом сохранить информацию о синей части слова к моменту чтения буквы $a$ в первом из двух слов, иначе, если после этой буквы не окажется конца строки, автомат не сумеет правильно пересчитать середину слова. Иначе говоря, если к моменту чтения буквы $a$, следующей за общим префиксом, мы могли бы обойтись конечным числом состояний, то, варьируя $n$ в пределах, больших, чем это число состояний, мы бы заставили МП-автомат принять какое-то из слов вида $aba^n baaba^{n}baaba^{m}baaba^n ba$, где $m> n$, а они не принадлежат $\mathcal{L}_0$. Кроме того, если бы к моменту чтения этой буквы $a$ мы бы не использовали всю информацию о синей части префикса, то сумели бы распознать слово вида $aba^n baaba^{m}b a$, $m>n$, а такие слова тоже не принадлежат языку $\mathcal{L}_0$. +Лемма Ю позволяет формализовать подобные рассуждения. + +>[!Theorem] Лемма Ю +>Пусть $\mathcal{L}$ --- детерминированный контекстно-свободный язык. Тогда существует такая натуральная константа $p$ (длина детерминированной накачки), что для каждой пары слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$, справедливо хотя одно из двух утверждений. +>1. Префикс $xy$ накачивается в обычном смысле одинаково для обеих слов --- то есть разбивается на $u_1 u_2 u_3 u_4 u_5$, $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$. так что $\forall i (u_1 u_2^i u_3 u_4^i u_5 z_1\in\mathcal{L}\land u_1 u_2^i u_3 u_4^i u_5 z_2\in\mathcal{L})$. +>2. Или часть $y$ накачивается синхронно с обоими суффиксами, --- то есть $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$, $\forall i (x y_1 y_2^i y_3 u_1 u_2^i u_3\in\mathcal{L}\land x y_1 y_2^i y_3 w_1 w_2^i w_3\in\mathcal{L})$. + +Для опровержения детерминированности языка используется отрицание этой леммы. + +>[!Example] Отрицание леммы Ю +>Язык $\mathcal{L}$ не детерминирован, если при любом выборе константы $p$ найдётся пара слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$ и не выполняется **ни одно** из утверждений: +>1. префикс $xy$ накачивается одинаково для обеих слов. +>2. часть $y$ накачивается синхронно с обоими суффиксами. +> +>То есть при любом разбиении $xy = u_1 u_2 u_3 u_4 u_5$, $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$ найдётся такое значение $i$, что $u_1 u_2^i u_3 u_4^i u_5 z_1\notin\mathcal{L}$ **или** $u_1 u_2^i u_3 u_4^i u_5 z_2\notin\mathcal{L}$. И при любом разбиении $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$ найдётся такое значение $i$, что $x y_1 y_2^i y_3 u_1 u_2^i u_3\notin\mathcal{L}$ **или** $x y_1 y_2^i y_3 w_1 w_2^i w_3\notin\mathcal{L}$. + +Можно сказать, что первое условие накладывает условие на то, чтобы к концу чтения префикса мы бы не могли обойтись заведомо конечной памятью о нём, а второе --- чтобы нельзя было накопить память в стеке однозначным образом. \ No newline at end of file From d6b9b604a4c3632040b655a2c841bf5e809ef08a Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sat, 7 Mar 2026 18:10:40 +0300 Subject: [PATCH 6/8] YuLemma contd --- ...0\265\320\274\320\274\321\213 \320\256.md" | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" index d32a14e..24f365d 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" @@ -40,22 +40,33 @@ digraph{ Как мы можем понять, что недетерминизм в некотором состоянии МП-автомата устранить не получится? Мы должны попробовать "обмануть" его детерминированные аналоги: то есть, представив, что у языка есть детерминированный МП-автомат, заставить его неправильно обрабатывать стек после такого перехода. Рассмотрим пример такой обманки для перехода $S \to T$ в МП-автомате для $\mathcal{L}_0$. Предположим, наш автомат прочитал префикс $aba^n b aa b a^{n}b$, оптимистично предположив, что переход от чтения стека к его опустошению произошёл после чтения префикса $aba^n b a$. Если слово продолжится единственной буквой $a$, то предположение окажется верным. Однако любое изменение числа букв $a$ приведёт к обратному эффекту. Поэтому можно добавить их так много, чтобы никакой конечный автомат не мог бы обработать эту разницу. В соответствии с идеей предыдущего абзаца, построим два слова, поведение стека на которых конфликтует: -$$aba^n ba\textcolor{blue}{aba^{n}b} \begin{cases} a - \text{ в синей части снимаем со стека}\\ aaba^{n}baaba^nba - \text{в синей части всё ещё кладём}\end{cases}$$ -Если бы существовал детерминированный МП-автомат, распознающий язык $\mathcal{L}_0$, то ему бы пришлось каким-то образом сохранить информацию о синей части слова к моменту чтения буквы $a$ в первом из двух слов, иначе, если после этой буквы не окажется конца строки, автомат не сумеет правильно пересчитать середину слова. Иначе говоря, если к моменту чтения буквы $a$, следующей за общим префиксом, мы могли бы обойтись конечным числом состояний, то, варьируя $n$ в пределах, больших, чем это число состояний, мы бы заставили МП-автомат принять какое-то из слов вида $aba^n baaba^{n}baaba^{m}baaba^n ba$, где $m> n$, а они не принадлежат $\mathcal{L}_0$. Кроме того, если бы к моменту чтения этой буквы $a$ мы бы не использовали всю информацию о синей части префикса, то сумели бы распознать слово вида $aba^n baaba^{m}b a$, $m>n$, а такие слова тоже не принадлежат языку $\mathcal{L}_0$. -Лемма Ю позволяет формализовать подобные рассуждения. +$$aba^n ba\textcolor{blue}{aba^{n}b} \begin{cases} \textcolor{red}{a} - \text{ в синей части снимаем со стека}\\ \textcolor{red}{a}\overbrace{aba^{n}baaba^nba}^{w^R} - \text{в синей части всё ещё кладём}\end{cases}$$ +Если бы существовал детерминированный МП-автомат, распознающий язык $\mathcal{L}_0$, то ему бы пришлось каким-то образом сохранить информацию о синей части слова к моменту чтения красной буквы $a$, иначе, если после этой буквы не окажется конца строки, автомат не сумеет правильно пересчитать середину слова. Иначе говоря, если к моменту чтения буквы $a$, следующей за общим префиксом, мы могли бы обойтись конечным числом состояний, то, варьируя $n$ в пределах, больших, чем это число состояний, мы бы заставили МП-автомат принять какое-то из слов вида $aba^n baaba^{n}baaba^{m}baaba^n ba$, где $m> n$, а они не принадлежат $\mathcal{L}_0$. Кроме того, если бы к моменту чтения красной буквы $a$ мы бы не использовали всю информацию о синей части префикса, то либо не сумели бы распознать слово $ab a^n baab a^n ba$, либо сумели бы распознать слово вида $aba^n baaba^{m}b a$, а такие слова тоже не принадлежат языку $\mathcal{L}_0$, если $m>n$. +Лемма Ю позволяет манипулировать с подобными рассуждениями более аккуратно. >[!Theorem] Лемма Ю ->Пусть $\mathcal{L}$ --- детерминированный контекстно-свободный язык. Тогда существует такая натуральная константа $p$ (длина детерминированной накачки), что для каждой пары слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$, справедливо хотя одно из двух утверждений. +>Пусть $\mathcal{L}$ --- детерминированный контекстно-свободный язык. Тогда существует такая натуральная константа $p$ (длина детерминированной накачки), что для каждой пары слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$ и $z_1$, $z_2$ начинаются с одинаковых букв, справедливо хотя одно из двух утверждений. >1. Префикс $xy$ накачивается в обычном смысле одинаково для обеих слов --- то есть разбивается на $u_1 u_2 u_3 u_4 u_5$, $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$. так что $\forall i (u_1 u_2^i u_3 u_4^i u_5 z_1\in\mathcal{L}\land u_1 u_2^i u_3 u_4^i u_5 z_2\in\mathcal{L})$. ->2. Или часть $y$ накачивается синхронно с обоими суффиксами, --- то есть $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$, $\forall i (x y_1 y_2^i y_3 u_1 u_2^i u_3\in\mathcal{L}\land x y_1 y_2^i y_3 w_1 w_2^i w_3\in\mathcal{L})$. +>2. Или часть $y$ накачивается синхронно с обоими суффиксами, --- то есть $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|y_2 y_3|\leq p$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$, $\forall i (x y_1 y_2^i y_3 u_1 u_2^i u_3\in\mathcal{L}\land x y_1 y_2^i y_3 w_1 w_2^i w_3\in\mathcal{L})$. Для опровержения детерминированности языка используется отрицание этой леммы. >[!Example] Отрицание леммы Ю ->Язык $\mathcal{L}$ не детерминирован, если при любом выборе константы $p$ найдётся пара слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$ и не выполняется **ни одно** из утверждений: +>Язык $\mathcal{L}$ не детерминирован, если при любом выборе константы $p$ найдётся пара слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$ и $z_1,z_2$ начинаются с одинаковых букв, причём не выполняется **ни одно** из утверждений: >1. префикс $xy$ накачивается одинаково для обеих слов. >2. часть $y$ накачивается синхронно с обоими суффиксами. > ->То есть при любом разбиении $xy = u_1 u_2 u_3 u_4 u_5$, $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$ найдётся такое значение $i$, что $u_1 u_2^i u_3 u_4^i u_5 z_1\notin\mathcal{L}$ **или** $u_1 u_2^i u_3 u_4^i u_5 z_2\notin\mathcal{L}$. И при любом разбиении $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$ найдётся такое значение $i$, что $x y_1 y_2^i y_3 u_1 u_2^i u_3\notin\mathcal{L}$ **или** $x y_1 y_2^i y_3 w_1 w_2^i w_3\notin\mathcal{L}$. +>То есть при любом разбиении $xy = u_1 u_2 u_3 u_4 u_5$, $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$ найдётся такое значение $i$, что $u_1 u_2^i u_3 u_4^i u_5 z_1\notin\mathcal{L}$ **или** $u_1 u_2^i u_3 u_4^i u_5 z_2\notin\mathcal{L}$. И при любом разбиении $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|y_2 y_3|\leq p$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$ найдётся такое значение $i$, что $x y_1 y_2^i y_3 u_1 u_2^i u_3\notin\mathcal{L}$ **или** $x y_1 y_2^i y_3 w_1 w_2^i w_3\notin\mathcal{L}$. -Можно сказать, что первое условие накладывает условие на то, чтобы к концу чтения префикса мы бы не могли обойтись заведомо конечной памятью о нём, а второе --- чтобы нельзя было накопить память в стеке однозначным образом. \ No newline at end of file +Можно сказать, что первое условие накладывает условие на то, чтобы к концу чтения префикса мы бы не могли обойтись заведомо конечной памятью о нём, а второе --- чтобы нельзя было накопить память в стеке однозначным образом. +Применим отрицание леммы Ю к уже найденным словам из языка $\mathcal{L}_0$. Чтобы уменьшить перебор подслов в накачках, вспомним, что детерминированные языки замкнуты относительно пересечений с регулярными языками, и пересечём наш язык с регулярным языком $aba^+ baab a^+ba \underbrace{(aba^+baaba^+ba)?}_{\text{опциональная часть}}$. Получится объединение языков $\mathcal{L}_{0a}\cup\mathcal{L}_{0b}$: +$$\begin{cases}\mathcal{L}_{0a} = \bigl\{aba^{n_1}baaba^{n_2}ba\mid n_1+n_2\text{ чётно и }n_1\geq n_2>0\bigr\}\\ +\mathcal{L}_{0b}=\bigl\{aba^{n_1}baaba^{n_2}baaba^{n_3}baaba^{n_4}ba\mid n_1+n_2+n_3+n_4\text{ чётно}, n_1,n_2,n_3,n_4>0\\ +\;\quad\quad \quad \text{ и либо }n_1\geq n_2 + n_3 + n_4 + 6,\text{ либо }n_1 = n_4 \land n_2\geq n_3\bigr\}\end{cases}$$ +Позволим себе вольность называть первой половиной слова, принадлежащего объединению этих языков, ту его максимальную часть, в которой не больше половины всех имеющихся в слове букв $b$. Тогда эти языки можно кратко описать как языки, соответствующие регулярному ограничению, в которых число букв $a$ чётно и в первой половине слова их больше, чем во второй. +Пусть $p$ - длина недетерминированной накачки из леммы Ю. Положим $x=ab\overbrace{a^p}^{\eta_1}baab$, $y=\underbrace{a^p}_{\eta_2} b$, $z_1 = a$, $z_2 = aaba^pbaaba^pba$. +1. Предположим, что накачивается только $xy$. Из-за ограничений, наложенных регулярным выражением, это означает, что могут меняться только блоки $\eta_1$ либо $\eta_2$. Рассмотрим произвольную нулевую накачку в этих блоках в слове $xyz_2$. Получим слово: $aba^{p-k_1}baaba^{p-k_2}baaba^pbaaba^pba$. $k_1+k_2>0$. Очевидно, оно не будет принадлежать языку $\mathcal{L}_{0b}$ из-за нехватки букв $a$ в первой половине слова. Поэтому накачка только в префиксе невозможна. +2. Предположим, что часть $y$ можно накачать синхронно с суффиксами. В случае слова $xyz_1$, это означает, что накаченное слово при $i=2$ примет вид $aba^pbaaba^{p+k_1}ba^{1+k_2}$, $k_1>0$, $k_2\in\{0,1\}$. Такое слово опять-таки не может принадлежать $\mathcal{L}_{0a}$ из-за нехватки букв $a$ в его первой половине. +Мы предъявили контрпример к гипотезе о существовании детерминированной накачки у языка-пересечения $\mathcal{L}_0$ с регулярным. Значит, это пересечение, равно как и сам язык $\mathcal{L}_0$, не являются детерминированными. + +В примере с языком $\mathcal{L}_0$ мы подобрали такие слова, в которых на недетерминированном переходе в МП-автомате принималось решение, продолжать ли класть на стек буквы или уже пора их начать снимать. Это весьма типичный вид недетерминизма, но он не единственен. Иногда момент перехода от наполнения стека к опустошению достаточно ясен, но непонятно, как именно его следует опустошать, поскольку один и тот же символ стека может обрабатываться несколькими способами. В качестве примера языка с такого типа недетерминизмом приведём язык $\mathcal{L}' = \bigl\{a^n b^m\mid n\leq m\leq 2\cdot n\bigr\}$. \ No newline at end of file From edb753cd61bcbfb1ef1767267f054eb54dcdc364 Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sun, 8 Mar 2026 04:16:25 +0300 Subject: [PATCH 7/8] Almost done --- ...0\265\320\274\320\274\321\213 \320\256.md" | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" index 24f365d..46da4ba 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" @@ -46,8 +46,8 @@ $$aba^n ba\textcolor{blue}{aba^{n}b} \begin{cases} \textcolor{red}{a} - \text{ >[!Theorem] Лемма Ю >Пусть $\mathcal{L}$ --- детерминированный контекстно-свободный язык. Тогда существует такая натуральная константа $p$ (длина детерминированной накачки), что для каждой пары слов $xy\begin{cases}z_1\\z_2\end{cases}$ из $\mathcal{L}$ таких, что $|y|\geq p$ и $z_1$, $z_2$ начинаются с одинаковых букв, справедливо хотя одно из двух утверждений. ->1. Префикс $xy$ накачивается в обычном смысле одинаково для обеих слов --- то есть разбивается на $u_1 u_2 u_3 u_4 u_5$, $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$. так что $\forall i (u_1 u_2^i u_3 u_4^i u_5 z_1\in\mathcal{L}\land u_1 u_2^i u_3 u_4^i u_5 z_2\in\mathcal{L})$. ->2. Или часть $y$ накачивается синхронно с обоими суффиксами, --- то есть $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, $|y_2 y_3|\leq p$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$, $\forall i (x y_1 y_2^i y_3 u_1 u_2^i u_3\in\mathcal{L}\land x y_1 y_2^i y_3 w_1 w_2^i w_3\in\mathcal{L})$. +>1. Префикс $xy$ накачивается в обычном смысле одинаково для обеих слов --- то есть разбивается на части $u_1 u_2 u_3 u_4 u_5$ такие, что $|u_2 u_3 u_4|\leq p$, $|u_2 u_4|\geq 1$. так что $\forall i (u_1 u_2^i u_3 u_4^i u_5 z_1\in\mathcal{L}\land u_1 u_2^i u_3 u_4^i u_5 z_2\in\mathcal{L})$. +>2. Или часть $y$ накачивается синхронно с обоими суффиксами, --- то есть $y = y_1 y_2 y_3$, $z_1 = u_1 u_2 u_3$, $z_2 = w_1 w_2 w_3$, причём $|y_2 y_3|\leq p$, $|u_2 w_2|\geq 1$, $|y_2|\geq 1$, $\forall i (x y_1 y_2^i y_3 u_1 u_2^i u_3\in\mathcal{L}\land x y_1 y_2^i y_3 w_1 w_2^i w_3\in\mathcal{L})$. Для опровержения детерминированности языка используется отрицание этой леммы. @@ -69,4 +69,42 @@ $$\begin{cases}\mathcal{L}_{0a} = \bigl\{aba^{n_1}baaba^{n_2}ba\mid n_1+n_2\text 2. Предположим, что часть $y$ можно накачать синхронно с суффиксами. В случае слова $xyz_1$, это означает, что накаченное слово при $i=2$ примет вид $aba^pbaaba^{p+k_1}ba^{1+k_2}$, $k_1>0$, $k_2\in\{0,1\}$. Такое слово опять-таки не может принадлежать $\mathcal{L}_{0a}$ из-за нехватки букв $a$ в его первой половине. Мы предъявили контрпример к гипотезе о существовании детерминированной накачки у языка-пересечения $\mathcal{L}_0$ с регулярным. Значит, это пересечение, равно как и сам язык $\mathcal{L}_0$, не являются детерминированными. -В примере с языком $\mathcal{L}_0$ мы подобрали такие слова, в которых на недетерминированном переходе в МП-автомате принималось решение, продолжать ли класть на стек буквы или уже пора их начать снимать. Это весьма типичный вид недетерминизма, но он не единственен. Иногда момент перехода от наполнения стека к опустошению достаточно ясен, но непонятно, как именно его следует опустошать, поскольку один и тот же символ стека может обрабатываться несколькими способами. В качестве примера языка с такого типа недетерминизмом приведём язык $\mathcal{L}' = \bigl\{a^n b^m\mid n\leq m\leq 2\cdot n\bigr\}$. \ No newline at end of file +В примере с языком $\mathcal{L}_0$ мы подобрали такие слова, в которых на недетерминированном переходе в МП-автомате принималось решение, продолжать ли класть на стек буквы или уже пора их начать снимать. Это весьма типичный вид недетерминизма, но он не единственен. Иногда момент перехода от наполнения стека к опустошению достаточно ясен, но непонятно, как именно его следует наполнять, поскольку один и тот же символ входа может обрабатываться несколькими способами. В качестве примера языка с такого типа недетерминизмом приведём язык $\mathcal{L}' = \bigl\{a^n b^m\mid n\leq m\leq 2\cdot n\bigr\}$. Простейший недетерминированный МП-автомат, который его распознаёт, довольно легко построить "в лоб". +```dot +digraph{ + rankdir = LR + node [shape=circle] + E [shape=doublecircle] + point [shape=point] + point -> S + S:s -> S:s [label="a, X/AX"] + S:n -> S:n [label="a, X/AAX"] + S -> T [label="b,A/"] + T:s -> T:s [label="b, A/"] + T -> E [label="ε, Z₀/Z₀"] + S -> E [label="ε, Z₀/Z₀"] + } +``` +Недетерминизм на переходе $S\to E$ легко устраняется введением дополнительного начального состояния, являющегося одновременно и финальным и принимающим только пустое слово. А вот с переходами из $S$ в себя всё сложнее: очень трудно заранее угадать, сколько букв $b$ нужно поставить в соответствие одной букве $a$ - одну или две. Однако можно существенно уменьшить число недетерминированных переходов при распознавании слов, объявив, что буквы $a$ делятся на два блока: в первом каждая буква $a$ соответствует по весу одной букве $b$, во втором - двум. Тем самым в МП-автомате останется ровно один недетерминированный переход. +```dot +digraph{ + rankdir = LR + node [shape=circle] + E, S₀ [shape=doublecircle] + point [shape=point] + point -> S₀ + S₀ -> 1 [label="ε, Z₀/Z₀"] + 1 -> 1 [label="a, X/AX"] + 1 -> 2 [label="ε"] + 2 -> 2 [label="a, X/AAX"] + 2 -> T [label="b,A/"] + T -> T [label="b, A/"] + T -> E [label="ε, Z₀/Z₀"] + } +``` +Теперь уже кажется, что от этого перехода избавиться не удастся. Покажем, что наш язык недетерминирован. Для этого естественно, в предположении о длине детерминированной накачки $p$, выбрать слова на самой левой и самой правой границах диапазона степеней $b$: +$$a^{p+1}\underbrace{b^p}_y\begin{cases}\overbrace{b}^{z_1}\\\underbrace{b^{p+2}}_{z_2}\end{cases}$$ +Сразу же понятно, что накачка $y$ вместе с любыми фрагментами $z_1$ и $z_2$ не приведёт к словам из языка - такой накачкой можно будет вывести степень буквы $b$ из диапазона $[p+1,2p+2]$, притом что степень $a$ не меняется. Поэтому остаётся разобраться только со случаем накачки только в префиксе. +Нулевая накачка $xyz_1$: чтобы слово $a^{p+1-i} b^{p+1-j}$ принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $i\geq j$. +Положительная накачка $xyz_1$: чтобы слово $a^{p+1+i} b^{p+1+j}$ принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $j\geq i$. +Поэтому $i=j$. Теперь рассмотрим нулевую накачку $xyz_2$ - слово $a^{p+1-i} b^{2p+2-i}$. Чтобы оно принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $2p+2-i\leq 2(p+1-i)$. Но это влечёт $i\leq 0$, что невозможно. \ No newline at end of file From 33b85b599ccd33d79c0825def58efcd282a67479 Mon Sep 17 00:00:00 2001 From: TonitaN Date: Sat, 21 Mar 2026 00:01:47 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=9F=D1=80=D0=BE=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B1=D0=B8=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Как будто ещё чего-то не хватает... --- ... \320\273\320\265\320\274\320\274\321\213 \320\256.md" | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" index 46da4ba..007ff79 100644 --- "a/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" +++ "b/\320\237\321\200\320\260\320\272\321\202\320\270\320\272\320\260/\320\240\320\260\320\267\320\261\320\276\321\200 \320\267\320\260\320\264\320\260\321\207/\320\236\321\201\320\276\320\261\320\265\320\275\320\275\320\276\321\201\321\202\320\270 \320\277\321\200\320\270\320\274\320\265\320\275\320\265\320\275\320\270\321\217 \320\273\320\265\320\274\320\274\321\213 \320\256.md" @@ -69,7 +69,7 @@ $$\begin{cases}\mathcal{L}_{0a} = \bigl\{aba^{n_1}baaba^{n_2}ba\mid n_1+n_2\text 2. Предположим, что часть $y$ можно накачать синхронно с суффиксами. В случае слова $xyz_1$, это означает, что накаченное слово при $i=2$ примет вид $aba^pbaaba^{p+k_1}ba^{1+k_2}$, $k_1>0$, $k_2\in\{0,1\}$. Такое слово опять-таки не может принадлежать $\mathcal{L}_{0a}$ из-за нехватки букв $a$ в его первой половине. Мы предъявили контрпример к гипотезе о существовании детерминированной накачки у языка-пересечения $\mathcal{L}_0$ с регулярным. Значит, это пересечение, равно как и сам язык $\mathcal{L}_0$, не являются детерминированными. -В примере с языком $\mathcal{L}_0$ мы подобрали такие слова, в которых на недетерминированном переходе в МП-автомате принималось решение, продолжать ли класть на стек буквы или уже пора их начать снимать. Это весьма типичный вид недетерминизма, но он не единственен. Иногда момент перехода от наполнения стека к опустошению достаточно ясен, но непонятно, как именно его следует наполнять, поскольку один и тот же символ входа может обрабатываться несколькими способами. В качестве примера языка с такого типа недетерминизмом приведём язык $\mathcal{L}' = \bigl\{a^n b^m\mid n\leq m\leq 2\cdot n\bigr\}$. Простейший недетерминированный МП-автомат, который его распознаёт, довольно легко построить "в лоб". +В примере с языком $\mathcal{L}_0$ мы подобрали такие слова, в которых на недетерминированном переходе в МП-автомате принималось решение, продолжать ли класть на стек буквы или уже пора их начать снимать. Это весьма типичный вид недетерминизма, но он не единственен. Иногда момент перехода от наполнения стека к опустошению достаточно ясен, но непонятно, как именно стек следует опустошать, поскольку один и тот же символ входа может обрабатываться несколькими способами. В качестве примера языка с такого типа недетерминизмом приведём язык $\mathcal{L}' = \bigl\{a^n b^m\mid n\leq m\leq 2\cdot n\bigr\}$. Простейший недетерминированный МП-автомат, который его распознаёт, довольно легко построить "в лоб". ```dot digraph{ rankdir = LR @@ -102,9 +102,11 @@ digraph{ T -> E [label="ε, Z₀/Z₀"] } ``` -Теперь уже кажется, что от этого перехода избавиться не удастся. Покажем, что наш язык недетерминирован. Для этого естественно, в предположении о длине детерминированной накачки $p$, выбрать слова на самой левой и самой правой границах диапазона степеней $b$: +Теперь уже есть подозрение, что от этого перехода избавиться не удастся. Покажем, что наш язык недетерминирован. Для этого естественно, в предположении о длине детерминированной накачки $p$, выбрать слова на самой левой и самой правой границах диапазона степеней $b$: $$a^{p+1}\underbrace{b^p}_y\begin{cases}\overbrace{b}^{z_1}\\\underbrace{b^{p+2}}_{z_2}\end{cases}$$ Сразу же понятно, что накачка $y$ вместе с любыми фрагментами $z_1$ и $z_2$ не приведёт к словам из языка - такой накачкой можно будет вывести степень буквы $b$ из диапазона $[p+1,2p+2]$, притом что степень $a$ не меняется. Поэтому остаётся разобраться только со случаем накачки только в префиксе. Нулевая накачка $xyz_1$: чтобы слово $a^{p+1-i} b^{p+1-j}$ принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $i\geq j$. Положительная накачка $xyz_1$: чтобы слово $a^{p+1+i} b^{p+1+j}$ принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $j\geq i$. -Поэтому $i=j$. Теперь рассмотрим нулевую накачку $xyz_2$ - слово $a^{p+1-i} b^{2p+2-i}$. Чтобы оно принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $2p+2-i\leq 2(p+1-i)$. Но это влечёт $i\leq 0$, что невозможно. \ No newline at end of file +Поэтому $i=j$. Теперь рассмотрим нулевую накачку $xyz_2$ - слово $a^{p+1-i} b^{2p+2-i}$. Чтобы оно принадлежало $\mathcal{L}'$, необходимо, чтобы выполнялось условие $2p+2-i\leq 2(p+1-i)$. Но это влечёт $i\leq 0$, что невозможно. + +Видно, что в обоих разобранных примерах применения леммы Ю мы выбирали разбиения слов таким образом, чтобы суффикс одного из них был максимально коротким. Фактически, мы подбирали в качестве контрпримеров слово из языка и его префикс, который тоже является словом из языка, и проводили границу разбиения по последней букве этого префикса. Очевидно, так удастся поступить не всегда (в частности, по той причине, некоторые недетерминированные языки являются беспрефиксными). Однако эти примеры иллюстрируют важный принцип при построении разбиений: разбиение на общий префикс и разные суффиксы нужно делать не по недетерминированному переходу (частая ошибка), а в той позиции, которая отстоит от недетерминированного перехода достаточно далеко, чтобы МП-автомат не мог разрешить вопрос с обработкой стека за конечное число состояний. То есть последние $p$ символов общего префикса должны находиться уже *после* недетерминированного перехода. \ No newline at end of file