-
Notifications
You must be signed in to change notification settings - Fork 0
rk 1 : variants 1, 2, 4, 6 #10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
78ab2ab
5a3e1d5
526ba84
f18332c
b08b84c
9400709
df917d7
bc15f5d
3ba5e9c
2267e21
cc02f27
5bdefc0
d7735c0
577e5c6
cd43bd6
5292e5a
72da310
c48287d
7da5ac9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| ### 1. Язык $\{w \big{|} |w|_{ab} = |w|_{bba} \& |w|_{bbb} = 0 \& w \in \{a, b\}^*\}$. | ||
| ### 2. Язык слов, первая треть которых не равна последней трети. | ||
| ### 3. Язык истинных выражений, представляющих собой утверждение вида $N_1 + N_2 > N_0$, где $N_0, N_1, и N_2$ — двоичные числа. | ||
| ### 3. Язык истинных выражений, представляющих собой утверждение вида $N_1 + N_2 > N_0$, где $N_0, N_1,\text{ и }N_2$ — двоичные числа. | ||
|
|
||
| #пустой |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,89 @@ | ||
| ### 1. Язык логических формул $c \Rightarrow$ и без скобок, содержащих только константы $0$ и $1$, таких что их значение равно $1$. Считаем следование правоассоциативным, т.е. $1 \Rightarrow 0 \Rightarrow 0$понимаем как $1 \Rightarrow (0 \Rightarrow 0)$. | ||
| ### 2. Язык $$\{w_1 v w_2 \big{|} w_2 = h (w_1)h(w_1) \& w_i \in \{a, b\}^* \& v \in b^*a^*\}$$, где h - гомоморфизм, определённый правилами $h(a) = aa, h(b) = a$. | ||
| ### 1. Язык логических формул с $\Rightarrow$ и без скобок, содержащих только константы $0$ и $1$, таких что их значение равно $1$. Считаем следование правоассоциативным, т.е. $1 \Rightarrow 0 \Rightarrow 0$ понимаем как $1 \Rightarrow (0 \Rightarrow 0)$. | ||
|
|
||
| Если справа 1, то слева может быть все что угодно. | ||
| Если справа 0, то слева только 0. | ||
|
|
||
| Соответственно, можно регулярку строить рекурсивно, относительно правого выражения. | ||
| - Если справа $0\Rightarrow0$, $0\Rightarrow1$, $1\Rightarrow1$, то слева может быть любое регулярное выражение | ||
| - Если справа стоит $1\Rightarrow0$, то слева должно быть $0\Rightarrow X$, где X - это ложное выражение | ||
|
|
||
| Регулярка делает вывод о разборе по первому символу. Если символ 0, то формула будет истинной при любом суффиксе. Если 1, то истина только если истин суффикс. | ||
| Выведем регулярку через грамматику | ||
| ``` | ||
| S -> 0 => T | 1 => S | 1 => 1 | 0 => 0 | 0 => 1 // верное логическое выражение | ||
| T -> 0 => T | 1 => 1 | 1 => 1 | 0 => 0 | 0 => 1 | 1 => 0 // любое логическое выражение | ||
| ``` | ||
|
|
||
| Таким образом можно построить НКА, разбирающий язык(приведен без промежуточных состояний): | ||
| ```dot | ||
| digraph{ | ||
| rankdir=LR | ||
| node[shape=circle] | ||
| point[shape=point] | ||
| F[shape=doublecircle] | ||
|
|
||
| point -> S | ||
|
|
||
| S -> F [label="1=>1"] | ||
| S -> F [label="0=>1"] | ||
| S -> F [label="0=>0"] | ||
| S -> S [label="1=>"] | ||
| S,T -> T [label="0=>"] | ||
| T -> T [label="1=>"] | ||
| T -> F [label="1=>1"] | ||
| T -> F [label="0=>1"] | ||
| T -> F [label="0=>0"] | ||
| T -> F [label="1=>0"] | ||
| } | ||
| ``` | ||
|
|
||
| Далее при необходимости можно добавить промежуточные состояния и детерминизирвать. | ||
|
|
||
| ### 2. Язык $\{w_1 v w_2 \big{|} w_2 = h (w_1)h(w_1) \& w_i \in \{a, b\}^* \& v \in b^*a^*\}$, где h - гомоморфизм, определённый правилами $h(a) = aa, h(b) = a$. | ||
|
|
||
| Грамматика | ||
| ``` | ||
| S -> aSaaaa | bSaa | T | ||
| T -> BA | ||
| A -> aA | ε | ||
| B -> bB | ε | ||
| ``` | ||
| Так допустимо, так как образы гомоморфизма комутативны, то есть можно спокойно перемещать так как необходимо и нужно учитывать только количество. Поэтому структуру последовательных слов преобразуем в комутативную ей скобочную структуру. | ||
| $$S \to aS\underbrace{aa}_{h(a)}\underbrace{aa}_{h(a)} \mid bS\underbrace{a}_{h(b)}\underbrace{a}_{h(b)} \mid T$$ | ||
| ### 3. Язык деревьев арифметических выражений с операциями бинарного сложения и умножения, а также одноразрядными числами, таких, что они вычисляют простое число. | ||
| В-первых, определим как задается язык деревьев арифметических выражений, вычисляющих простое число $p$. | ||
| В листьях может быть одноразрядные числа $0,1,2,3,4,5,6,7,8,9$. | ||
| В ветвях может быть только $+(T1, T2)$ и $*(T1, T2)$. | ||
|
|
||
| Очевидно, что на поддеревьях естественно возникает отношение эквивалентности по равенству значений, которые они вычисляют. Это соответствует определению эквивалентности, так как мы можем поменять любые поддеревья, вычисляющие одинаковое число местами и общий результат арифметического выражения не изменится. Более того, такое отношение эквивалентности возникает для любых вычисляющих деревьев: будь то деревья булевой алгебры или другие. | ||
|
|
||
| В соответствии с этим, мы получаем счетное число классов эквивалентности, поэтому по теореме Майхилла-Нероуда этот язык **не будет древесно-автоматным.** | ||
|
|
||
| Почему нельзя задать другое отношение эквивалентности? Полученное нами отношение эквивалентности естественно возникает из того, что деревья являются вычисляющими. Так рассмотрим операции, и проверим, когда они будут равны. | ||
| $$+(X,Y) = +(Z, Y) \Leftrightarrow X = Z$$ | ||
| $$*(X,Y) = *(Z,Y) \Leftrightarrow X = Z$$ | ||
|
|
||
| >[!note] Излишнее рассуждение о том, что мы не можем ввести другое отношение эквивалентности на вычисляющих деревьях | ||
| >Пусть мы задали какое-то другое отношение эквивалентности, отличное от построенного ранее. Обозначим как $\operatorname{eqv}$, тогда существуют такие $X,Y$, что | ||
| >$$\begin{matrix} | ||
| X \neq Y \text{ и } X \operatorname{eqv} Y\space (1)\\ | ||
| \text{ или }\\ | ||
| X = Y \text{ и не } X \operatorname{eqv} Y \space (2) | ||
| \end{matrix}$$ | ||
| > Случай 2 не может быть, так как если $X = Y$, то тогда нарушается определение эквивалентности, что $X \operatorname{eqv} X$. и мы получаем противоречие. | ||
| > Случай 1 означает, что общее число классов эквивалентности уменьшается, поэтому мы не можем просто отбросить этот случай. Из определения эквивалентности имеем | ||
| > $$X \operatorname{eqv} Y \Leftrightarrow +(X, Z) = +(Y,Z)$$ | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Здесь важно, что после следования в общем случае не равенство, а эквивалентность. Как уже говорила ранее, вообще говоря, в этой задаче всё обстоит именно так, как вы описываете, но возникает много тонкостей при применении этого общего подхода. Поскольку наша цель в этом репозитории попытаться донести до студентов иу9 доступные способы решения задач, мне кажется, имеет смысл перенести данные наброски в исследовательскую часть из методической. А то прочитают их условные мороженки и пельменькусы и начнут пытаться применять тот же подход вообще к любым древесным языкам, даже тем, которые факторизуются по более сильному отношению эквивалентности :( |
||
| > А это вновь нас сводит к тому, что построенное нами отношение эквивалентности соответствует отношению равенства. Поэтому даже если мы очень захотим построить другое отношение эквивалентности на вычисляющих деревьях в полугруппах, то у нас это не получится =(. | ||
| > Почему важно требование, что мы работаем в группе? Потому что наше рассуждение целиком опирается на факт, что $+(X,Y) = +(Z, Y) \Leftrightarrow X = Z$. Слева направо факт следует в всех случаях, но обратно следует не всегда. Докажем его. | ||
| > $$f(x,z) = f(y,z) \text{, но } x \neq y$$ | ||
| > $$f(f(x,z),a) = f(f(y,z), a)$$ | ||
| > ассоциативность | ||
| > $$f(x, f(z,a)) = f(y, f(z,a))$$ | ||
| > $$f(x,b) = f(y,b)$$ | ||
| > Причем, мы так можем сделать для любого $a$, таким образом мы получаем, что все множество значений разбивается на 2 класса эквивалентности(так как $x\neq y$): для которых $f(x,z) = f(y,z)$ и для которых не выполнено это равенство. Но если это равенство не выполнено, то не выполнено определение эквивалентных поддеревьев. Соответственно для любых элементов выполено равенство, из чего следует равенство $x,y$. Так как мы воспользовались только свойством ассоциативности бинарной операции, то это свойство будет выполняться для любых вычисляющих деревьев в полугруппах. | ||
|
|
||
| Стоит сказать, что такой вывод об эквивалентности работает далеко не всегда. Например, если бы вычислялись четные выражения с теми же самыми структурами, то язык был бы древесным, так как можно выделить лишь 2 класса эквивалентности: четные и нечетные подвыражения, и на основе этих данных можно делать вывод о четности их суммы или произведения. Аналогично, можно расширить на другие остатки от деления. | ||
|
|
||
| Почему нельзя представить другую факторизацию чисел, то есть перейти к гомоморфизму в другую полугруппу, в которой все будет работать? ==Для обоснования этого можно привести== | ||
|
|
||
| #пустой | ||
| Возьмем подмножество деревьев только из 1 и сложений, вычисляющих простые числа. Очевидно, что если взять 2 дерева, вычисляющих $x < y$ - простые числа, то $x$ - поддерево $y$, причем $y$ линейно зависит от значения поддерева $x$, то есть пожно представить как $y = x + b$. Так как мы полагаем, что они принадлежат одному классу эквивалентности, то справедливо $z = y+ b = x+ 2b$ - также простое. Если провести соответствующую накачку $x$ раз, то получим $z = x + xb = x(1 + b)$ - очевидно составное число. Получаем противоречие $\implies$ бесконечное число классов эквивалентности в силу общности рассуждения относительно двух простых чисел и бесконечного количества простых чисел $\implies$ не древесно-автоматный язык. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,28 +1,82 @@ | ||
| [[Вариант 1]] | ||
| [[Вариант 2]] | ||
| [[Вариант 3]] | ||
| [[Вариант 4]] | ||
| [[Вариант 5]] | ||
| [[Вариант 6]] | ||
| [[Вариант 7]] | ||
| [[Вариант 8]] | ||
| [[Вариант 9]] | ||
| [[Вариант 10]] | ||
| [[Вариант 11]] | ||
| [[Вариант 12]] | ||
| [[Вариант 13]] | ||
| [[Вариант 14]] | ||
| [[Вариант 15]] | ||
| [[Вариант 16]] | ||
| [[Вариант 17]] | ||
| [[Вариант 18]] | ||
| [[Вариант 19]] | ||
| [[Вариант 20]] | ||
| [[Вариант 21]] | ||
| [[Вариант 22]] | ||
| [[Вариант 23]] | ||
| [[Вариант 24]] | ||
| [[Вариант 25]] | ||
| [[Вариант 26]] | ||
| [[Вариант 27]] | ||
| [[Вариант 28]] | ||
| ![[Вариант 1]] | ||
|
|
||
| --- | ||
| ![[Вариант 2]] | ||
|
|
||
| --- | ||
| ![[Вариант 3]] | ||
|
|
||
| --- | ||
| ![[Вариант 4]] | ||
|
|
||
| --- | ||
| ![[Вариант 5]] | ||
|
|
||
| --- | ||
| ![[Вариант 6]] | ||
|
|
||
| --- | ||
| ![[Вариант 7]] | ||
|
|
||
| --- | ||
| ![[Вариант 8]] | ||
|
|
||
| --- | ||
| ![[Вариант 9]] | ||
|
|
||
| --- | ||
| ![[Вариант 10]] | ||
|
|
||
| --- | ||
| ![[Вариант 11]] | ||
|
|
||
| --- | ||
| ![[Вариант 12]] | ||
|
|
||
| --- | ||
| ![[Вариант 13]] | ||
|
|
||
| --- | ||
| ![[Вариант 14]] | ||
|
|
||
| --- | ||
| ![[Вариант 15]] | ||
|
|
||
| --- | ||
| ![[Вариант 16]] | ||
|
|
||
| --- | ||
| ![[Вариант 17]] | ||
|
|
||
| --- | ||
| ![[Вариант 18]] | ||
|
|
||
| --- | ||
| ![[Вариант 19]] | ||
|
|
||
| --- | ||
| ![[Вариант 20]] | ||
|
|
||
| --- | ||
| ![[Вариант 21]] | ||
|
|
||
| --- | ||
| ![[Вариант 22]] | ||
|
|
||
| --- | ||
| ![[Вариант 23]] | ||
|
|
||
| --- | ||
| ![[Вариант 24]] | ||
|
|
||
| --- | ||
| ![[Вариант 25]] | ||
|
|
||
| --- | ||
| ![[Вариант 26]] | ||
|
|
||
| --- | ||
| ![[Вариант 27]] | ||
|
|
||
| --- | ||
| ![[Вариант 28]] |
Uh oh!
There was an error while loading. Please reload this page.