Skip to content
Draft
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
190 changes: 190 additions & 0 deletions Практика/2024 РК2/РК2 - Вариант 23.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
# 1. Язык SRS $a \to bab \quad a^3 \to a^2 \quad ba \to ac$ над множеством базисных слов $b^n a^n$
## Анализ завершимости SRS
Данная система очевидно является незавершимой, так как возможно бесконечно применять первое правило для любого слова, содержащее символ $a$.
## Анализ класса языка, порождаемого SRS над множеством базисных слов
Рассмотрим слова получаемых из базисного $a$ применением SRS

Такие слова порождаются грамматикой
```
T -> bTb | TR | a
R -> cRb | .
```
Где `.` - пустое слово, $\varepsilon$
Это не трудно заметить, проанализировав поведение первого и третьего правил переписывания. Первое правило позволяет сколько угодно наращивать с обеих сторон символы $b$. С другой стороны третье правило позволяет часть из них перекинуть на другую сторону. Тем самым справа от корня роста (символ $a$ окруженный равным количеством $b$ в том числе и отдельным символом $a$) может наблюдаться уравновешенный блок $c^n b^n$. Для учета этого вводится отдельный нетерминал и отдельное правило переписывания.

Для $a^n$ нужно дополнительно учитывать, что мы можем произвольным образом сначала уменьшить число $a$ до двух и более, а после применять правила 1 и 3.

Таким образом при рассмотрении языка над базисом $b^na^n$ нужно отдельно рассмотреть случаи $n=0, n=1, n\geq 2$

При $n = 0$ имеем только пустое слово.

При n = 1 язык состоит либо из присоединения слева b к T (нетерминалу рассмотренному в самом начале), либо справа $c$.
```
S -> bT | Tc
...
```

При $n\geq2$ необходимо допустить, что третье правило будет применено к исходному базисному слову произвольное число раз.

Приведем грамматику без условия на $n$
```
S -> bST | bS | TE
E -> cE | .
...
```

Преобразуем ее с $n\geq2$
```
P -> bbSTT | bTET | TcET

S -> bST | bS | TE
E -> cE | .
...
```

Объединяем вместе грамматики
```
S'-> bT | Tc | P | .
P -> bbSTT | bTET | TcET
S -> bST | bS | TE
E -> cE | .
T -> bTb | aR
R -> cRb | .
```

Таким образом мы предъявили КС грамматику (недетерминированную), порождающую все слова языка $\implies$ язык КС.
## Анализ детерминированности данного языка
Пусть $n$ - длинна накачки. Рассмотрим два слова из языка
$$\begin{aligned}
b^{n+2} a b^n &\mid b \\
b^{n+2} a b^n &\mid b a b^{n+1} a^n
\end{aligned}$$
1) в втором слове нельзя **отрицательно** накачать префикс в КС смысле, так как первый отрезок $b$ уравновешивается $a$ в суффиксе, а второй отрезок $b$ уравновешивается $b$ из суффикса. Стоит сказать, что в положительную сторону накачка легко осуществима, например, при синхронной накачке участков $b$ они будут засчитаны за применение первого правила SRS.
2) накачка конец префикса + суффикс не работает в первом слове, так как $b$ уравновешивается первым отрезком $b$ в префиксе.

Таким образом по лемме о накачки для DCFL получили, что язык не DCFL

Также автоматически проверили, что нарушается *префикс свойство*.

> Линейность языка можно опровергнуть с помощью леммы о накачке для линейных языков:
> Пусть $n$ - длинна накачки. Рассмотрим $w = b^{n+1} a (b^n a b^n)^n$
> При накачке первых $n$ символов и последних $n$ символов мы гарантированно выйдем из языка, так как они уравновешиваются разными структурами $\implies$ язык не линейный КС.
# 2. Язык $\{w \mid |w|_{ab}=|w|_{baa} \text{ \& } w=w^R\}$
## Анализ класса языка
Язык $L$ состоит из слов в котором число подслов $ab$ равно числу подслов $baa$ и при этом слова являются палиндромами (причем как четными так и нечетными). Можно заметить также дополнительный факт, что в силу обратимости языка, будет выполнено следующее условие $|w|_{ba}= |w|_{aab}$.

Примеры слов из языка:
- очевидно, что слова, состоящие только из $a$ или символов $b$ (в том числе и пустое слово), очевидно принадлежат языку, так как количество подслов обоих типов будут равны 0.
- $baab \in L$ ровно как и $baabaab, baabaabaab$ и так далее. То есть можно сказать, что $baab(aab)^* \subseteq L$. Кроме того, каждый символ $b$ и $a$ можно расширить, если дополнительно уравновесить их в другой части слова, для сохранения палиндромности.
- $aabaa \in L$, и аналогично $aabaabaa \in L$. То есть можно сказать, что $aabaa(baa)^* \subseteq L$

Стоит сказать, что из структуры подслов очевидно наблюдается, что количество подслов $ab$ может значительно расти по сравнению с $baa$, например последовательность $(ab)^*$. В то время как количество $baa$ не может превышать число $ab$ больше чем на 1.

>[!note] Доказательство утверждения о количестве подслов
> Пусть у нас есть строка $w : |w|_{ab}=|w|_{baa} \& |w| \ge 1$. Пусть оно заканчивается на $a$, тогда чтобы увеличить число $baa$ нужно будет добавить соответствующую подстроку к слову. Но вместе с тем и число $ab$ вырастет как минимум на 1. Если даже мы до этого добавим произвольную подстроку, то если там не встретится $ab$, то ситуация не поменяется, а если встретится, то количество вырастет еще сильнее.
> Если слово $w$ заканчивалось на $b$, то тогда для увеличения количества хватит добавить $a^2$, что увеличит разницу на 1, но после ситуация сведется к первому случаю. Стоит сказать, что такой дисбаланс возможен только в случае, если первым в слове встретилось именно $baa$, что возможно если префикс слова имеет вид $b^*baa$ (для большего детерминизма $bb^*aa$)
> Теперь пусть мы начинаем с пустого слова, тогда общая ситуация сводится лишь к тому, какой символ будет написан первым, что сведет задачу к предыдущим случаям.

Таким образом можно выделить только 4 возможных основ языка
$$a^* \mid b^* \mid baab(aab)^* \mid aabaa(baa)^*$$
и в каждой из этих основ могут дополнительно разрастаться количества $a$ и $b$ сохраняя соотношения между количествами слов. Есть ли ограничения на итерацию? Для первой и второй альтернативы очевидно нет. Для третьей и четвертой, итерации задают бесконечное количество одинаковых симметричных накладывающихся подслов, поэтому ограничений так же нет.

Поэтому для данного языка можно построить следующую грамматику:
$$\begin{matrix}
S \to A \mid B \mid C \mid D \\
A \to aA \mid \varepsilon \\
B \to bB \mid \varepsilon \\
\\
C \to bC_1b \mid B\\
C_1 \to aC_2a \mid A\\
C_2 \to aCa \\
\\
D \to C_1
\end{matrix}$$
Объяснение данной грамматики

Данная грамматика не в полной мере отражает возможности по дополнительной накачке символов, и кроме того имеет не совсем удобную нумерацию и расположения. Поэтому финальный вариант грамматики выглядит следущим образом
$$\begin{matrix}
S \to C \mid D \\
C \to bCb \mid bDb \mid B\\
D \to aDa \mid aEa \mid A\\
E \to aEa \mid aCa \\
\\
A \to aA \mid \varepsilon \\
B \to bB \mid \varepsilon \\
\end{matrix}$$

Таким образом, язык является КС.
## Анализ на детерминированность
В-первых для повышения детерминированности стоит немного доработать грамматику, убрав лишний недетерминизм (например правила $C \to bCb \mid b^*$)
$$\begin{matrix}
S \to C \mid D \mid \varepsilon \\
C \to bCb \mid bDb \mid bb \mid b \\
D \to aDa \mid aEa \mid aa \mid a \\
E \to aEa \mid aCa \\
\end{matrix}$$
Потенциально уже сейчас можно сказать, что данный язык будет недетерминированным, приведя в качестве аргумента недетерминированность языков палиндромов. Но фактически это не означает недетерминированность, а только намекает на нее.

Наибольший недетерминизм создают нетерминалы $D$ и $E$, так как мы никогда не можем четко сказать, какой из них необходимо использовать. Это можно незначительно уменьшить, если убрать рекурсию нетерминала $E$ и если объединить оставшееся правило с D
$$\begin{matrix}
S \to C \mid D \mid \varepsilon \\
C \to bCb \mid bDb \mid bb \mid b \\
D \to aDa \mid aaCaa \mid aa \mid a \\
\end{matrix}$$
Таким образом мы теперь имеем 2 отдельных нетерминала, которые отвечают за разные символы в языке. И таким образом можно построить LL(3) разбор данного языка, который будет гарантировать детерминированность разбора. Можно добавить большую детерминированность, если перенести обязательные символы из последнего шага к первому в силу коммутативности перестановок одинаковых символов:
$$\begin{matrix}
S \to C \mid D \mid \varepsilon \\
C \to bC_1b \mid bb \mid b \\
C_1 \to bC_1b \mid D \\
D \to aaD_1aa \mid aa \mid a \\
D_1 \to aD_1a \mid C
\end{matrix}$$
## Прочие свойства
Очевидно, нарушение префикс свойства (контрпример - $baab(aab)^*$)
Построенная грамматика является линейной $\implies$ линейный язык.


# 3. Атрибутная грамматика
```
S -> [regexp]
[regexp] -> ([regexp][regexp])
...
Пока опущу грамматику из условия
```

Текстовое описание языка:
Язык описывает регулярные выражения, состоящие из a, b и epsilon. Операции построения регулярки обрамляются в круглые скобочки, причем:
- не допускаются вложенные звездочки вида (a* b*)*
- внутри альтернативы есть как минимум одна не пустая альтернатива, и первый элемент не может быть альтернативой
- не допускается звездочка или конкатенация с пустым словом

Таким образом можно построить грамматику, которая учитывает эти условия:
```
R -> E | T | A | Cs | C
S -> (T)* | (C)* | (A)*
C -> (TT) | (TS) | (TCs) | (TA) | (TC) | (ST) | (SA) | (SC) | (CsT) | (CsA) | (CsC) | (AT) | (AS) | (ACs) | (AA) | (AC) | (CT) | (CS) | (CCs) | (CA) | (CC)
Cs -> (SS) | (CsS) | (SCs) | (CsCs)
A -> (E|T) | (E|S) | (E|C) | (E|Cs) | (E|A) | (T|E) | (T|S) | (T|C) | (T|Cs) | (T|A) | (T|T) | (S|E) | (S|S) | (S|C) | (S|Cs) | (S|A) | (S|T) | (C|E) | (C|S) | (C|C) | (C|Cs) | (C|A) | (C|T) | (Cs|E) | (Cs|S) | (Cs|C) | (Cs|Cs) | (Cs|A) | (Cs|T)
E -> epsilon
T -> a | b
```

Описание смыслов нетерминалов:
- $T$ - внутренний символ алфавита
- $E$ - пустой символ выделен в отдельный символ, так как в грамматике требуется учет непустых альтернатив
- $A$ - нетерминал, отвечающий за операцию альтернатива, которая учитывает правила языка - в альтернативе есть одна непустая альтернатив и первый элемент не может быть альтернативой.
- $S$ - операция звездочка
- $C$ - операция конкатенации без вложенных звездочек
- $Cs$ - конкатенация двух звездочек
- $R$ - нетерминал регулярного выражения.

Язык беспрефиксный, так как все операции обрамляются скобками.

По построенной грамматике возможно построить lr(0) парсер => язык детерминированный.
Ссылка на построенную таблицу LR(0) разбора(Я вручную это все делать не буду)
```
https://smlweb.cpsc.ucalgary.ca/lr0.php?grammar=R+-%3E+E+%7C+T+%7C+A+%7C+Cs+%7C+C+%7C+S.%0AS+-%3E+%28+T+%29+%2A+%7C+%28+C+%29+%2A+%7C+%28+A+%29+%2A.%0AC++-%3E+%28+T+T+%29+%7C+%28+T+S+%29+%7C+%28+T+Cs+%29+%7C+%28+T+A+%29+%7C+%28+T+C+%29+%7C+%28+S+T+%29+%7C+%28+S+A+%29+%7C+%28+S+C+%29+%7C+%28+Cs+T+%29+%7C+%28+Cs+A+%29+%7C+%28+Cs+C+%29+%7C+%28+A+T+%29+%7C+%28+A+S+%29+%7C+%28+A+Cs+%29+%7C+%28+A+A+%29+%7C+%28+A+C+%29+%7C+%28+C+T+%29+%7C+%28+C+S+%29+%7C+%28+C+Cs+%29+%7C+%28+C+A+%29+%7C+%28+C+C+%29.%0ACs+-%3E+%28+S+S+%29+%7C+%28+Cs+S+%29+%7C+%28+S+Cs+%29+%7C+%28+Cs+Cs+%29.%0AA+-%3E+%28+E+%21+T+%29+%7C+%28+E+%21+S+%29+%7C+%28+E+%21+C+%29+%7C+%28+E+%21+Cs+%29+%7C+%28+E+%21+A+%29+%7C+%28+T+%21+E+%29+%7C+%28+T+%21+S+%29+%7C+%28+T+%21+C+%29+%7C+%28+T+%21+Cs+%29+%7C+%28+T+%21+A+%29+%7C+%28+T+%21+T+%29+%7C+%28+S+%21+E+%29+%7C+%28+S+%21+S+%29+%7C+%28+S+%21+C+%29+%7C+%28+S+%21+Cs+%29+%7C+%28+S+%21+A+%29+%7C+%28+S+%21+T+%29+%7C+%28+C+%21+E+%29+%7C+%28+C+%21+S+%29+%7C+%28+C+%21+C+%29+%7C+%28+C+%21+Cs+%29+%7C+%28+C+%21+A+%29+%7C+%28+C+%21+T+%29+%7C+%28+Cs+%21+E+%29+%7C+%28+Cs+%21+S+%29+%7C+%28+Cs+%21+C+%29+%7C+%28+Cs+%21+Cs+%29+%7C+%28+Cs+%21+A+%29+%7C+%28+Cs+%21+T+%29.%0AE+-%3E+epsilon.%0AT+-%3E+a+%7C+b.&substs=
```

Неформальное обоснование - все продукции однозначно зависят от наполнения внутри. В том числе из-за беспрефиксности исключаются конфликты в LR(0) разборе.

Loading