Skip to content

Лабораторная работа 5. Проклашкина Софья#178

Open
sprosonya wants to merge 15 commits intomainfrom
proklashkina-lab5
Open

Лабораторная работа 5. Проклашкина Софья#178
sprosonya wants to merge 15 commits intomainfrom
proklashkina-lab5

Conversation

@sprosonya
Copy link
Contributor

No description provided.

molivka and others added 11 commits December 27, 2024 23:46
* found questions

* add answers

* fix

* conversation resolve

* fix

* fix

* fix

* fix

* fix

* fix

---------

Co-authored-by: Alexey Lisov <lisov.a2005@yandex.ru>
* Update interpret.py

Attempted nesting of parentheses

* Update interpret.py

---------

Co-authored-by: ShilovaMaria <108538231+ShilovaMaria@users.noreply.github.com>
@sprosonya
Copy link
Contributor Author

Добрый вечер, Антонина Николаевна! На всякий случай оставляю здесь пометку о том, что мои вопросы готовы к ревью. Посмотрите, пожалуйста, когда вам будет удобно

data/data.yaml Outdated
author: Проклашкина Софья
id: 193
questions:
- 'Конечный автомат для распознавания {a^n b^n | n>0}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

нужно обязательно уточнить, что конечный PDA, потому что {a^n b^n | n>0} - не регулярный

Copy link
Contributor

@HumsterProgrammer HumsterProgrammer Jan 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь точно есть галюцинация?
Грамматика для языка
https://gist.github.com/stewkk/fad1fcf612bae365a71ed0e8e0e211e4

PDA для языка
https://gist.github.com/stewkk/13e99c8f9cae43d144bc51dab7e15621

Только единственный момент, что бот построил для слов n>0.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я взяла этот вопрос из списка галлюцинаций, которые составляла Антонина Николаевна. Если спрашивать ллм именно про конечный автомат, то она отвечает, что построить конечный автомат невозможно https://gist.github.com/stewkk/bb024f603b30d4cf4b910dbe812240e8

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я так понимаю, ценность этого элемента именно в утверждении, что КС языки могут распознаваться конечными автоматами

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я взяла этот вопрос из списка галлюцинаций, которые составляла Антонина Николаевна. Если спрашивать ллм именно про конечный автомат, то она отвечает, что построить конечный автомат невозможно https://gist.github.com/stewkk/bb024f603b30d4cf4b910dbe812240e8

Тут в ответе нейросети ошибка только в отсутсвии одного перехода в PDA. В остальном нейросеть ответила верно

'
author: Проклашкина Софья
id: 198
questions:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

еще давай тогда добавим вопрос

- 'Нормальная форма DPDA
    
    '

'
author: Проклашкина Софья
id: 192
questions:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

давай еще попробуем добавить вопрос по типу

- '
  Приведи пример не кс языка, который накачивается
  '

author: Проклашкина Софья
id: 195
questions:
- 'Язык, допускаемый по заключительному состоянию
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вроде называем обычно финальными, мы же про одно и то же?

data/data.yaml Outdated
- 'Нормальная форма ДМПА

'
- answer: 'Пусть M, - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- answer: 'Пусть M, - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ.
- answer: 'Пусть M - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ.

data/data.yaml Outdated

'
- answer: 'Пусть M, - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ.
Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → α, где a∈Σ, S∈G, α∈G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элментов, но важно количество.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если есть возможность - давай не a и α, а что-то более различающееся?

@sprosonya
Copy link
Contributor Author

sprosonya commented Jan 3, 2025

Добрый вечер, @TonitaN. Внесла предложенные Лешей правки

Copy link

@TonitaN TonitaN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Одобрение условно.

data/data.yaml Outdated
- answer: 'Лемма о накачке для контекстно-свободных языков (англ. Pumping lemma) является необходимым условием для того, чтобы язык порождался контекстно-свободной грамматикой, однако недостаточным.
То есть, если язык не накачивается с помощью леммы - он точно не контекстно-свободный, однако если накачивается - может таковым не являться.
Пример: язык L = {a^nb^nc^i, i ≠ n}. Докажем, что этот язык накачивается с помощью леммы.
Выберем для языка L = {a^nb^nc^i, i ≠ n} константу из леммы n = 5. Рассмотрим следующие случаи:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не очень хорошо, что тут и степень в языке, и длина накачки - одна и та же буква.

data/data.yaml Outdated
- answer: 'Язык {a^n b^n | n>0} является контекстно-свободным языком, который может быть распознан с помощью конечного автомата со стековой памятью.
Данный автомат будет содержать следующие состояния:
q_0: Начальное состояние, "накапливаем" количество символов a.
q_1: Состояние, когда мы уже прочитали все a и при встрече b снимаем со стека символы X.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут пока никто не знает про символы X, можно просто - снимаем со стека символы.

data/data.yaml Outdated
s — стартовое состояние автомата,
Z0 — маркер дна стека,
T — множество допускающих состояний автомата.
Тогда языком, допускаемым автоматом Aпо заключительному состоянию, является L(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, α)} для некоторого состояния q ∈ T и произвольной магазинной цепочки α. Сочетание (s, w, Z0) ⊢∗ (q, ε, α) означает, что функция переходов δ позволяет от (s, w, Z0), проходя через промежуточные значения функции, попасть в (s, w, Z0). Начиная с стартовой вершины s и w на входе, автомат читает слово w и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут и в вопросе ниже один и тот же баг в расшифровке обозначения ⊢∗ .

- answer: 'ДМП (DPDA) в нормальной форме - это детерминированный автомат с магазинной памятью M, представленный конечным набором состояний Q, входным алфавитом на ленте Σ, стековым алфавитом G и множеством переходов Δ, который удовлетворяет следующим условиям:
1. Если (p, a, S) → (q, γ) ∈ Δ, то |γ|⩽2, где γ ∈ G* — последовательность стековых символов, S∈G.
2. Если (p, ε, S) → (q, γ) ∈ Δ, то γ = ε.
3. Δ не содержит бесполезных переходов (переход (p, a, S) → (q, γ) считается бесполезным, если L(q, γ) = ∅, то есть из конфигурации (q, γ) нельзя ничего вывести).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это нетривиальное условие, его не так просто разрешить) Но оставим как есть.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А стоп, тут точно должно быть именно такое условие? Дело в том, что (q, γ) - это не конфигурация, а пара "состояние - результат изменения стека". При этом сам стек не обязан иметь вид γ. Например, из конфигурации (q0, ε) ничего вывести обычно нельзя (т.к. для действий в PDA нужны какие-то стековые символы), но признавать все переходы, сбрасывающие со стека символы, бесполезными, точно абсурдно.

Мне видится два возможных исправления:

  1. либо на любом пути вычисления переход бесполезен (т.е. при чтении любого префикса мы получаем при этом переходе конфигурацию с пустым языком). Это нетривиальное, хотя и вычислимое в PDA условие.
  2. либо если γ непусто, то переход (p, a, S) → (q, γ) считается бесполезным, если из q нет переходов по верхнему стековому символу из γ. Это простое синтаксическое условие.

Поскольку дальше присутствует слово ловушка, я склоняюсь всё-таки к семантической трактовке (пункт 1).

data/data.yaml Outdated

'

- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный по регулярному выражению. Принимает те же строки, что и соответствующее регулярное выражение.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну не всякий же, а с использованием множеств First, Follow, Last линеаризованного регулярного выражения.

data/data.yaml Outdated
'

- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный по регулярному выражению. Принимает те же строки, что и соответствующее регулярное выражение.
Автомат Глушкова без ε-переходов эквивалентен автомату, построенному по тому же регулярному выражению по алгоритму Томсона.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А вот это нужно поправить))

@sprosonya
Copy link
Contributor Author

Добрый вечер, Антонина Николаевна @TonitaN, постаралась поправить все замечания

Copy link

@TonitaN TonitaN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заметила ещё при прежнем ревью что-то странное с ловушками в PDA. При более детальном разборе - да, там какая-то неточность в формулировке.

Остальное - последние штрихи исправлений.

5) Слово w = a^jb^jc^(j+1). Пусть u = a^(j-2), v = aa, x = ℇ, y = bb, z = b^(j-2)c^j+1. |vxy| ≤ 5. При накачке uv^kxy^kz количество a и b будет одновременно и сбалансированно увеличиваться, при этом никогда не будет равно числу i.
6) Слово w = a^jb^jc^i, i > j+1. Пусть u = a^jb^c^i-1, v = c, x = y = z = ℇ. |vxy| ≤ 5. При накачке uv^kxy^kz количество a и b не будет меняться, в то время как число c будет увеличиваться и никогда не будет равно j.
Таким образом, существует такое n из леммы, что все условия для этого языка выполняются. Однако, данный язык не будет являться контекстно-свободным. Докажем это с помощью леммы Огдена.
Для фиксированного n из леммы Огдена рассмотрим слово w = a^mb^mc^(m!+m). Пометим все символы a и b и разобьем на u, v, x, y, z так, что x содержит выделенную позицию, u и v содержат выделенные позиции и vxy содержат не более n выделенных позиций.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут только что заметила, что n и m никак не связаны :(

- 'Язык, допускаемый по заключительному состоянию

'
- 'Язык, допускаемый по финальному состоянию
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Язык магазинного автомата, допускаемый по финальному состоянию
(т.к. есть и другие классы автоматов, здесь речь только о PDA)

- 'Язык, допускаемый по пустому стеку

'
- answer: 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому магазину (стеку), совпадают.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Может, ещё добавим, что классы языков, допускаемых детерминированными автоматами с магазинной памятью по финальному состоянию и по пустому стеку не совпадают?
Первые - это в точности LR(1) языки, вторые - LR(0)-языки

- answer: 'ДМП (DPDA) в нормальной форме - это детерминированный автомат с магазинной памятью M, представленный конечным набором состояний Q, входным алфавитом на ленте Σ, стековым алфавитом G и множеством переходов Δ, который удовлетворяет следующим условиям:
1. Если (p, a, S) → (q, γ) ∈ Δ, то |γ|⩽2, где γ ∈ G* — последовательность стековых символов, S∈G.
2. Если (p, ε, S) → (q, γ) ∈ Δ, то γ = ε.
3. Δ не содержит бесполезных переходов (переход (p, a, S) → (q, γ) считается бесполезным, если L(q, γ) = ∅, то есть из конфигурации (q, γ) нельзя ничего вывести).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А стоп, тут точно должно быть именно такое условие? Дело в том, что (q, γ) - это не конфигурация, а пара "состояние - результат изменения стека". При этом сам стек не обязан иметь вид γ. Например, из конфигурации (q0, ε) ничего вывести обычно нельзя (т.к. для действий в PDA нужны какие-то стековые символы), но признавать все переходы, сбрасывающие со стека символы, бесполезными, точно абсурдно.

Мне видится два возможных исправления:

  1. либо на любом пути вычисления переход бесполезен (т.е. при чтении любого префикса мы получаем при этом переходе конфигурацию с пустым языком). Это нетривиальное, хотя и вычислимое в PDA условие.
  2. либо если γ непусто, то переход (p, a, S) → (q, γ) считается бесполезным, если из q нет переходов по верхнему стековому символу из γ. Это простое синтаксическое условие.

Поскольку дальше присутствует слово ловушка, я склоняюсь всё-таки к семантической трактовке (пункт 1).

'
- answer: 'Пусть M - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ.
Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → γ, где a ∈ Σ, S ∈ G, γ ∈ G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элементов, но важно количество.
Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → γ ∈ Δ, тогда |γ|⩽2 и L(γ) ≠ ∅.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Опять тот же нюанс про пустой язык.

'

- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный с использованием множеств First, Last, Follow линеаризованного регулярного выражения. Принимает те же строки, что и соответствующее регулярное выражение.
Автомат Глушкова эквивалентен автомату без ε-переходов, построенному по тому же регулярному выражению по алгоритму Томсона.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

*автомат Глушкова совпадает с результатом применения к автомату Томпсона операции удаления эпсилон-переходов посредством построения эпсилон-замыканий состояний.

4) Создание состояний: добавляем стартовое состояние и состояния, соответствующие пронумерованным символам регулярного выражения. Финальными обозначаем состояния, которые соответствуют пронумерованным символам, присутствующим в множестве LAST. Также делаем финальным состоянием стартовое, если регулярное выражение принимает пустую строку.
5) Для каждого пронумерованного состояния из множества FIRST добавляем переходы из стартового состояния в состояние по этому символу, соответствующее пронумерованному символу из множества FIRST.
6) Для каждой пары (γ_i, γ_j) из множества FOLLOW добавляем переход по символу γ_j из состояния, соответствующего символу γ_i в состояние, соответствующее символу γ_j
Таким образом будет построен недетерминированный конечный автомат Глушкова, распознающий это регулярное выражение
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно ещё стереть на переходах линеаризующую разметку.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants