Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
395 changes: 381 additions & 14 deletions Практика/РК1/Варианты/Вариант 1.md

Large diffs are not rendered by default.

262 changes: 261 additions & 1 deletion Практика/РК1/Варианты/Вариант 2.md

Large diffs are not rendered by default.

362 changes: 360 additions & 2 deletions Практика/РК1/Варианты/Вариант 4.md

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$ — двоичные числа.

#пустой
90 changes: 87 additions & 3 deletions Практика/РК1/Варианты/Вариант 6.md
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)$$
> А это вновь нас сводит к тому, что построенное нами отношение эквивалентности соответствует отношению равенства. Поэтому даже если мы очень захотим построить другое отношение эквивалентности на вычисляющих деревьях в полугруппах, то у нас это не получится =(.
> Почему важно требование, что мы работаем в группе? Потому что наше рассуждение целиком опирается на факт, что $+(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$ не древесно-автоматный язык.
9 changes: 0 additions & 9 deletions Практика/РК1/Варианты/Вариант 8.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
В РК было 3 типа заданий [[Содержание РК1]]:![[Pasted image 20241112182939.png]]
# Что нужно для РК?
Мозги(Опционально)
![[Теорема Майхилла-Нероуда]]![[Лемма о накачке для КС-языков]]
Элементы не академических регулярок
+ $r_1(?<= r_2)r_3 \sim (.^*r_2 \cap r_1) r_3$ - (look behind) ретроспективная проверка
+ $(?= r_1)r_2 \sim (r_1.^* \cap r_2)$ - (look ahead) опережающая проверка
# Разбор вариантов
## Вариант 8
### 1. Язык правильно построенных логических формул над алфавитом $\{(,),P, Q, \land, \neg\}$, таких что в их каждом подслове длинны 3, кроме, возможно, единственного, первая и последняя буквы совпадают
Решение:
Рассмотрим сначала возможные "правильные" подслова(P или Q буду обозначать за X)
Expand Down
110 changes: 82 additions & 28 deletions Практика/РК1/Навигация по вариантам.md
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]]