From 8e1c1dcfccc04ec8dc5f366efc65323b5df5219f Mon Sep 17 00:00:00 2001 From: milena Date: Fri, 27 Dec 2024 23:46:54 +0300 Subject: [PATCH 01/13] =?UTF-8?q?=D0=BF=D0=BE=20=D0=BC=D0=BE=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=BC=20https://github.com/BaldiSlayer/rofl-lab1/i?= =?UTF-8?q?ssues/79#issuecomment-2549664042?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/data.yaml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 8fe3b762..997c6492 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -105,15 +105,15 @@ id: 9 questions: - Какой язык называется префиксным (беспрефиксным) -- answer: 'Это значит, что язык L принимается детерминированным конечным автоматом - с магазинной памятью по терминальному состоянию, а также язык L – префиксный - (то есть если для любого w не равного v из языка L не верно, что w – префикс v). +- answer: 'Это значит, что язык M принимается детерминированным конечным автоматом + с магазинной памятью по терминальному состоянию, а также язык M – префиксный + (то есть если для любого w не равного v из языка M не верно, что w – префикс v). ' author: Лисов Алексей id: 10 questions: - - 'Что можно сказать о языке L, который принимается детерминированным конечным автоматом с + - 'Что можно сказать о языке M, который принимается детерминированным конечным автоматом с магазинной памятью по пустому стеку ' @@ -359,7 +359,7 @@ author: Филимонов Михаил id: 28 questions: - - Что такое язык диагонализации L_d + - Что такое язык диагонализации? - answer: 'Язык L_d не является рекурсивно-перечислимым, т.е. не существует машины Тьюринга, которая допускала бы L_d. Доказательство. Допустим, что L_d = L(M) для некоторой МТ M. Так как L_d — язык над алфавитом {0, 1}, M должна содержаться @@ -379,7 +379,7 @@ author: Филимонов Михаил id: 29 questions: - - Является ли язык L_d рекурсивно-перечислимым + - Является ли язык диагонализации рекурсивно-перечислимым - answer: 'Рекурсивные функции были введены в 30-х годах XX века С. К. Клини. Это название закрепилось за одним из наиболее распространённых вариантов уточнения общего понятия арифметического алгоритма, то есть такого алгоритма, допустимые @@ -423,7 +423,7 @@ author: Филимонов Михаил id: 31 questions: - - 'Почему универсальный язык L_u является рекурсивно-перечислимым, но не рекурсивным. + - 'Почему универсальный язык является рекурсивно-перечислимым, но не рекурсивным. ' - answer: 'L_ne – непустой язык состоит из кодов всех машин Тьюринга, которые допускают @@ -447,7 +447,7 @@ id: 32 questions: - 'Является ли язык, состоящий из кодов всех машин Тьюринга, которые допускают - хотя бы одну цепочку, L_ne рекурсивно-перечислимым/рекурсивным? + хотя бы одну цепочку, рекурсивно-перечислимым/рекурсивным? ' - answer: 'L_e – пустой язык состоит из кодов всех МТ, языки которых пусты. Он не @@ -457,7 +457,7 @@ author: Филимонов Михаил id: 33 questions: - - 'Является ли язык L_e, состоящий из кодов всех МТ, языки которых пусты, рекурсивно-перечислимым/рекурсивным? + - 'Является ли пустой язык, состоящий из кодов всех МТ, языки которых пусты, рекурсивно-перечислимым/рекурсивным? ' - answer: 'Свойство называется тривиальным, если оно либо пустое (т.е. никакой язык @@ -642,7 +642,7 @@ author: Захарин Сергей id: 46 questions: - - 'Что такое обращение языка L? + - 'Что такое обращение языка? ' - answer: 'Строку также часто называют словом. Гомоморфизм строк — это такая функция @@ -1890,10 +1890,10 @@ author: Еделькин Герман id: 113 questions: - - 'Доказательство леммы о накачке для регулярных языков (Пусть L - регулярный язык) + - 'Доказательство леммы о накачке для регулярных языков ' -- answer: 'При объединении или пересечении двух языков L и M может оказаться, что +- answer: 'Пусть L - регулярный язык. При объединении или пересечении двух языков L и M может оказаться, что они определены в разных алфавитах. Например, возможен случай, когда L1 ⊆ {a, b}^*, а L2 ⊆ {b, c, d}^*. Однако, если язык L состоит из цепочек символов алфавита Σ, то L можно также рассматривать как язык в любом конечном алфавите, включающем @@ -1977,7 +1977,7 @@ author: Еделькин Герман id: 117 questions: - - 'Как задаётся суффиксная конгруэнтность языка L на множестве слов алфавита? + - 'Как задаётся суффиксная конгруэнтность языка на множестве слов алфавита? ' - answer: "Чтобы определить язык L(a) ⊆ Σ* по регулярному выражению a, можно использовать\ @@ -2000,16 +2000,16 @@ author: Еделькин Герман id: 118 questions: - - 'Пусть a – регулярное выражение алфавита. Как Язык L(a), являющийся подмножеством + - 'Пусть a – регулярное выражение алфавита. Как Язык M(a), являющийся подмножеством множества слов алфавита, определяется по регулярному выражению a индукцией по структуре a? ' - answer: "Лемма о разрастании также называется леммой о накачке (по-английски - никаких\ - \ разночтений: pumping lemma) Теорема: Для любого регулярного языка L существует\ - \ число n ∈ ℕ такое, что для любого слова w ∈ L, |w| ≥ n найдутся такие три слова\ + \ разночтений: pumping lemma) Теорема: Для любого регулярного языка M существует\ + \ число n ∈ ℕ такое, что для любого слова w ∈ M, |w| ≥ n найдутся такие три слова\ \ x, y, z, что: \n 1. w = xyz; y ≠ ε; \n 2. |xy| ≤ n; \n 3. ∀ k ≥ 0: x(y^k)z\ - \ ∈ L.\nТаким образом эта лемма утверждает, что любой регулярный язык допускает\ + \ ∈ M.\nТаким образом эта лемма утверждает, что любой регулярный язык допускает\ \ представление всех своих достаточно длинных цепочек в виде соединения трех цепочек,\ \ причем средняя цепочка из этих трех не пуста, ограничена по длине, и ее `накачка`\ \ — повторение любое число раз — или выбрасывание не выводит за пределы языка\ @@ -2946,7 +2946,7 @@ author: Коровкин Алексей id: 164 questions: - - 'Если L - контекстно-свободный язык, обязательно ли он определяется односторонним + - 'Обязательно ли контекстно-свободный язык определяется односторонним недетерминированным автоматом с магазинной памятью? ' @@ -2985,7 +2985,7 @@ id: 166 questions: - 'Как работает CYK-алгоритм (Cocke–Younger–Kasami algorithm) для проверки принадлежности - цепочки 𝜔 контекстно-свободному языку L? + цепочки контекстно-свободному языку? ' - answer: 'Пусть G = (N, Σ, P, S) — контекстно-свободная грамматика, где N — множество From 4128aa411eefb17240d1a3705fe45df90a4c833d Mon Sep 17 00:00:00 2001 From: milena Date: Fri, 27 Dec 2024 23:59:05 +0300 Subject: [PATCH 02/13] remove L --- data/data.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/data.yaml b/data/data.yaml index 997c6492..946620ea 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -379,7 +379,7 @@ author: Филимонов Михаил id: 29 questions: - - Является ли язык диагонализации рекурсивно-перечислимым + - Является ли язык диагонализации рекурсивно-перечислимым? - answer: 'Рекурсивные функции были введены в 30-х годах XX века С. К. Клини. Это название закрепилось за одним из наиболее распространённых вариантов уточнения общего понятия арифметического алгоритма, то есть такого алгоритма, допустимые From 75116b5b7d1bd7dbb4f65941b5df85d15b6d7967 Mon Sep 17 00:00:00 2001 From: milena Date: Sat, 28 Dec 2024 00:28:33 +0300 Subject: [PATCH 03/13] =?UTF-8?q?fix=20=D0=9C=D0=A2=20and=20questions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/data.yaml | 52 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 946620ea..91765c74 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -457,7 +457,8 @@ author: Филимонов Михаил id: 33 questions: - - 'Является ли пустой язык, состоящий из кодов всех МТ, языки которых пусты, рекурсивно-перечислимым/рекурсивным? + - 'Является ли пустой язык, состоящий из кодов всех машины Тьюринга, языки которых пусты, + рекурсивно-перечислимым/рекурсивным? ' - answer: 'Свойство называется тривиальным, если оно либо пустое (т.е. никакой язык @@ -631,6 +632,9 @@ questions: - 'Что такое обращение строки в формальных языках? + ' + - 'Реверс строки + ' - answer: 'Обращение языка L, обозначаемое L^R, состоит из всех строк, являющихся реверсами (обращениями) строк из исходного языка L. То есть, если L — это язык, @@ -2607,9 +2611,13 @@ author: Утебаева Милена id: 145 questions: - - 'Определение производной языка по слову. Производные Бржозовски (Brzozowski derivative) + - 'Определение производной языка по слову. ' + - 'Производные Бржозовски (Brzozowski derivative) по слову + + ' + - answer: 'Степень недетерминизма НКА (NFA), обозначим автомат буквой A, - это функция f(n), зависящая от натурального числа n, такая, что её значение на аргументе n равно наибольшему возможному числу путей разбора слова длины n в автомате A. @@ -2632,8 +2640,14 @@ id: 146 questions: - 'Определение степени неоднозначности недетерминированного конечного автомата (Nondeterministic - Finite Automaton). Виды неоднозначностей: полиномиальная неоднозначность, экспоненциальная - неоднозначность + Finite Automaton). + + ' + - 'Виды неоднозначностей неоднозначности недетерминированного конечного автомата: полиномиальная + неоднозначность, экспоненциальная неоднозначность + + ' + - 'Полиномиальная неоднозначность, экспоненциальная неоднозначность недетерминированного конечного автомата ' - answer: 'Класс языков, которые распознаются PDA (Pushdown Automata) не совпадает @@ -2672,6 +2686,12 @@ - 'Какие языки обладают свойством беспрефиксности (prefix-free)? Примеры беспрефиксных языков. + ' + - 'Свойство беспрефиксности для языка + + ' + - 'Примеры беспрефиксных языков + ' - answer: 'Для построения VPA (Visibly Pushdown Automata) входной алфавит разбивается на три непересекающихся части: алфавит символов вызова, алфавит внутренних символов, @@ -2690,8 +2710,10 @@ author: Утебаева Милена id: 149 questions: - - 'Чем VPA (Visibly Pushdown Automata) отличается от PDA (Pushdown Automata)? Сравнение - VPA (Visibly Pushdown Automata) и PDA (Pushdown Automata) + - 'Чем VPA (Visibly Pushdown Automata) отличается от PDA (Pushdown Automata)? + + ' + - 'Сравнение VPA (Visibly Pushdown Automata) и PDA (Pushdown Automata) ' - answer: 'Лемма Ардена (Arden''s rule): пусть X, Y, Z - произвольные языки, X = YX @@ -2707,6 +2729,9 @@ questions: - 'Формулировка леммы Ардена (Arden''s rule). Уравнения с регулярными выражениями + ' + - 'Лемма для решения систем уравнений в регулярных языках + ' - answer: 'Переключающийся автомат A (Alternating Finite Automaton) задаётся шестью компонентами: A = (Σ, Q, Q_∀, F, q_0, δ), где Σ - алфавит, Q - множество состояний @@ -2724,9 +2749,14 @@ author: Утебаева Милена id: 151 questions: - - 'Определение переключающегося автомата (Alternating Finite Automaton). Автомат - имеющий множество конъюнктивных состояний + - 'Определение переключающегося автомата (Alternating Finite Automaton). + ' + - 'Автомат имеющий множество конъюнктивных состояний + + ' + - 'Когда слово допускается переключающимся автоматом? + ' - answer: 'Конъюнктивная грамматика G задаётся четырьмя компонентами: G = <Σ, N, S, Δ>, где Σ - алфавит, N - множество нетерминальных символов, S - начальный символ, @@ -2772,9 +2802,11 @@ author: Утебаева Милена id: 154 questions: - - 'Определение двоичного нормального вида для конъюнктивной грамматики. Конъюнктивная - грамматика в двоичном нормальном виде + - 'Определение двоичного нормального вида для конъюнктивной грамматики. + ' + - 'Конъюнктивная грамматика в двоичном нормальном виде + ' - answer: 'Переходы DFA над односимвольным алфавитом Σ = {a} образуют конечный граф со степенью исхода (числом выходящих из вершины рёбер) 1. Поскольку граф конечный From 0ad9dbf8d766b99267ddf4a7be74f6116c1eb524 Mon Sep 17 00:00:00 2001 From: "rofl-helm-update[bot]" <189265035+rofl-helm-update[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2024 08:37:00 +0000 Subject: [PATCH 04/13] updating image tag --- chart/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/values.yaml b/chart/values.yaml index 09f67aa2..5b21a8ad 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -1,3 +1,3 @@ image: repository: stewkk - tag: dd05ba516c12bc55f7c2a94d249ef9e5aede4632 + tag: b78d61c19f584452db366769c0bde6b254df04f8 From 0a543c9e4df05fdd4fc11afce2699d5279252527 Mon Sep 17 00:00:00 2001 From: Alisa Egorova <125650176+AlisaEee@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:27:41 +0300 Subject: [PATCH 05/13] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=205.=20=D0=95=D0=B3=D0=BE=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=20=D0=90=D0=BB=D0=B8=D1=81=D0=B0=20(#157)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * found questions * add answers * fix * conversation resolve * fix * fix * fix * fix * fix * fix --------- Co-authored-by: Alexey Lisov --- data/data.yaml | 366 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 282 insertions(+), 84 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 91765c74..128290a5 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -136,8 +136,9 @@ язык над алфавитом {a,b}.) ' - - 'Является ли регулярным язык правильных скобочных последовательностей с единственным типом скобок? - + - 'Является ли регулярным язык правильных скобочных последовательностей с единственным + типом скобок? + ' - 'Является ли регулярным язык ПСП с единственным типом скобок? @@ -726,14 +727,12 @@ ' - 'Объединение двух регулярных языков - + ' - - ' - Пересечение двух регулярных языков + - ' Пересечение двух регулярных языков ' - - ' - Разность двух регулярных языков + - ' Разность двух регулярных языков ' - answer: 'Для регулярных выражений существует три закона, связанных с этими понятиями. @@ -1351,8 +1350,8 @@ универсальный язык Σ∗, и какова сложность алгоритма проверки? ' - - 'Как определить, что детерминированный конечный автомат (ДКА) принимает - универсальный язык Σ∗ + - 'Как определить, что детерминированный конечный автомат (ДКА) принимает универсальный + язык Σ∗ ' - 'Можно ли определить, что ДКА принимает универсальный язык? @@ -2239,42 +2238,44 @@ - 'Что такое взаимно рекурсивные нетерминалы? ' -- answer: 'Рассмотрим контекстно-свободную грамматику Γ. Для приведения ее к нормальной - форме Хомского необходимо выполнить пять шагов. На каждом шаге мы строим новую - Γ_i, которая допускает тот же язык, что и Γ. 1. Уберём длинные правила. Воспользуемся - алгоритмом удаления длинных правил из грамматики. Получим грамматику Γ_1, эквивалентную - исходной, содержащую правила длины 0, 1 и 2. 2. Удаление ε-правил. Воспользуемся - алгоритмом удаления ε-правил из грамматики. Получим грамматику Γ_2, эквивалентную - исходной, но в которой нет ε-правил. 3. Удаление цепных правил. Воспользуемся - алгоритмом удаления цепных правил из грамматики. Алгоритм работает таким образом, - что новые ε-правила не образуются. Получим грамматику Γ_3, эквивалентную Γ. 4. - Удалим бесполезные символы. Воспользуемся алгоритмом удаления бесполезных символов - из грамматики. Так как Γ_3 эквивалентна Γ, то бесполезные символы не могли перестать - быть бесполезными. Более того, мы только удаляем правила, новые ε-правила и цепные - правила не могли появиться. 5. Уберём ситуации, когда в правиле встречаются несколько - терминалов. Для всех правил вида A → u_1u_2 (где u_i — терминал или нетерминал) - заменим все терминалы u_i на новые нетерминалы U_i и добавим правила U_i→u_i. - Теперь правила содержат либо одиночный терминал, либо строку из двух нетерминалов. - Таким образом, мы получили грамматику в нормальной форме Хомского, которая допускает - тот же язык, что и Γ. Стоит заметить, что порядок выполнения операций важен. Первое - правило должно быть выполнено перед вторым, иначе время нормализации ухудшится - до O(2^|Γ|). (|Γ| - размер грамматики - численно равен числу символов в правой - части правил вывода). Третье правило идет после второго, потому что после удаления - ε-правил, могут образоваться новые цепные правила. Также четвертое правило должно - быть выполнено позже третьего и второго, так как они могут порождать бесполезные - символы. При таком порядке действий размеры грамматики возрастают полиномиально. - После удалении длинных правил из каждого правила длины k⩾3 могло появиться k−1 - новых правил, причем их длина не превышает двух. На этом шаге размер грамматики - возрастает не более, чем вдвое. При удалении ε-правил из грамматики, содержащей - правила длины 0, 1 и 2, размеры грамматики могли вырасти не больше, чем в 3 раза. - Всего цепных правил в грамматике не больше, чем n^2, где n — число нетерминалов. - При удалении цепных правил мы берем каждую из цепных пар и производим добавление - нецепных правил, выводимых из второго нетерминала в паре. Если максимальная суммарная - длина всех правил, выводимых из какого-либо нетерминала, равна k, то размер грамматики - возрастет не больше, чем на k*n^2. Наконец, на последнем шаге может произойти - добавление не более, чем |Σ| (Σ — алфавит грамматики) новых правил, причем все - они будут длины 1. - +- answer: 'Рассмотрим контекстно-свободную грамматику Γ. Для приведения ее к нормальной + форме Хомского необходимо выполнить пять шагов. На каждом шаге мы строим новую + Γ_i, которая допускает тот же язык, что и Γ. 1. Уберём длинные правила. Воспользуемся + алгоритмом удаления длинных правил из грамматики. Получим грамматику Γ_1, эквивалентную + исходной, содержащую правила длины 0, 1 и 2. 2. Пусть |Γ| - сумма длин правых частей правил. + Данный алгоритм добавляет в грамматику O(|Γ|) новых нетерминалов, O(|Γ|) новых правил длины O(1) и, + следовательно, работает за O(|Γ|). Удаление ε-правил. Воспользуемся + алгоритмом удаления ε-правил из грамматики. Получим грамматику Γ_2, эквивалентную + исходной, но в которой нет ε-правил. 3. Удаление цепных правил. Воспользуемся + алгоритмом удаления цепных правил из грамматики. Алгоритм работает таким образом, + что новые ε-правила не образуются. Получим грамматику Γ_3, эквивалентную Γ. 4. + Удалим бесполезные символы. Воспользуемся алгоритмом удаления бесполезных символов + из грамматики. Так как Γ_3 эквивалентна Γ, то бесполезные символы не могли перестать + быть бесполезными. Более того, мы только удаляем правила, новые ε-правила и цепные + правила не могли появиться. 5. Уберём ситуации, когда в правиле встречаются несколько + терминалов. Для всех правил вида A → u_1u_2 (где u_i — терминал или нетерминал) + заменим все терминалы u_i на новые нетерминалы U_i и добавим правила U_i→u_i. + Теперь правила содержат либо одиночный терминал, либо строку из двух нетерминалов. + Таким образом, мы получили грамматику в нормальной форме Хомского, которая допускает + тот же язык, что и Γ. Стоит заметить, что порядок выполнения операций важен. Первое + правило должно быть выполнено перед вторым, иначе время нормализации ухудшится + до O(2^|Γ|). (|Γ| - размер грамматики - численно равен числу символов в правой + части правил вывода). Третье правило идет после второго, потому что после удаления + ε-правил, могут образоваться новые цепные правила. Также четвертое правило должно + быть выполнено позже третьего и второго, так как они могут порождать бесполезные + символы. При таком порядке действий размеры грамматики возрастают полиномиально. + После удалении длинных правил из каждого правила длины k⩾3 могло появиться k−1 + новых правил, причем их длина не превышает двух. На этом шаге размер грамматики + возрастает не более, чем вдвое. При удалении ε-правил из грамматики, содержащей + правила длины 0, 1 и 2, размеры грамматики могли вырасти не больше, чем в 3 раза. + Всего цепных правил в грамматике не больше, чем n^2, где n — число нетерминалов. + При удалении цепных правил мы берем каждую из цепных пар и производим добавление + нецепных правил, выводимых из второго нетерминала в паре. Если максимальная суммарная + длина всех правил, выводимых из какого-либо нетерминала, равна k, то размер грамматики + возрастет не больше, чем на k*n^2. Наконец, на последнем шаге может произойти + добавление не более, чем |Σ| (Σ — алфавит грамматики) новых правил, причем все + они будут длины 1. + ' author: Якубов Павел id: 131 @@ -3072,8 +3073,9 @@ - 'Какая грамматика называется автоматной? ' -- answer: 'Порождающая грамматика называется неукорачивающей, если для каждого правила (α → β) ∈ P, - где P - конечное множество правил порождения, выполняется неравенство |α| <= |β|. +- answer: 'Порождающая грамматика называется неукорачивающей, если для каждого правила + (α → β) ∈ P, где P - конечное множество правил порождения, выполняется неравенство + |α| <= |β|. ' author: Рапота Мария @@ -3082,8 +3084,9 @@ - 'Какая грамматика в иерархии Хомского называется неукорачивающей? ' -- answer: 'Вполне упорядоченными называются фундированные множества (множества, в которых любое - непустое подмножество имеет минимальный элемент), являющиеся линейными и упорядоченными. +- answer: 'Вполне упорядоченными называются фундированные множества (множества, в + которых любое непустое подмножество имеет минимальный элемент), являющиеся линейными + и упорядоченными. ' author: Рапота Мария @@ -3092,9 +3095,10 @@ - 'Какие множества в теории порядков называются вполне упорядоченными? ' -- answer: 'Начальным отрезком вполне упорядоченного множества A называется такое множество B, - что если элемент x входит в начальный отрезок B, то все элементы, которые меньше x (по порядку в A), тоже обязательно должны входить в B. - Собственным начальным отрезком называется начальный отрезок, не равный самому множеству. +- answer: 'Начальным отрезком вполне упорядоченного множества A называется такое множество + B, что если элемент x входит в начальный отрезок B, то все элементы, которые меньше + x (по порядку в A), тоже обязательно должны входить в B. Собственным начальным + отрезком называется начальный отрезок, не равный самому множеству. ' author: Рапота Мария @@ -3103,8 +3107,9 @@ - 'Что называется начальным отрезком вполне упорядоченного множества? ' -- answer: 'Пусть a, b и c - элементы вполне упорядоченного множества M. - Элемент a называется (непосредственным) предшественником b в множестве M, если a < b и не существует такого c, что a < c и c < b. +- answer: 'Пусть a, b и c - элементы вполне упорядоченного множества M. Элемент a + называется (непосредственным) предшественником b в множестве M, если a < b и не + существует такого c, что a < c и c < b. ' author: Рапота Мария @@ -3113,27 +3118,31 @@ - 'Какой элемент вполне упорядоченного множества называется предшественником? ' -- answer: 'Пусть a, b и c - элементы вполне упорядоченного множества M. - Элемент a называется (непосредственным) последователем b в множестве M, если a > b и не существует такого c, что a > c и c > b. +- answer: 'Пусть a, b и c - элементы вполне упорядоченного множества M. Элемент a + называется (непосредственным) последователем b в множестве M, если a > b и не + существует такого c, что a > c и c > b. ' author: Рапота Мария id: 173 questions: - 'Какой элемент вполне упорядоченного множества называется последователем? - + ' -- answer: 'Пусть A и B — два вполне упорядоченных множества. Тогда либо A изоморфно некоторому начальному отрезку множества B, - либо B изоморфно некоторому начальному отрезку множества A. +- answer: 'Пусть A и B — два вполне упорядоченных множества. Тогда либо A изоморфно + некоторому начальному отрезку множества B, либо B изоморфно некоторому начальному + отрезку множества A. ' author: Рапота Мария id: 174 questions: - - 'Если A и B - два вполне упорядоченных множества, изоморфны ли они начальному отрезку друг друга? + - 'Если A и B - два вполне упорядоченных множества, изоморфны ли они начальному + отрезку друг друга? ' -- answer: 'Никакое бесконечное вполне упорядоченное множество не изоморфно своему начальному отрезку (не совпадающему со всем множеством). +- answer: 'Никакое бесконечное вполне упорядоченное множество не изоморфно своему + начальному отрезку (не совпадающему со всем множеством). ' author: Рапота Мария @@ -3142,9 +3151,11 @@ - 'Изоморфно ли бесконечное вполне упорядоченное множество своему начальному отрезку? ' -- answer: 'Пусть Z — частично упорядоченное множество, в котором всякое подмножество, любые два элемента которого сравнимы, имеет верхнюю границу. - Тогда в этом множестве Z есть максимальный элемент, и, более того, для любого элемента a ∈ Z существует элемент b > a, - являющийся максимальным в Z. (Верхняя граница подмножества — элемент, больший или равный любого элемента этого подмножества.) +- answer: 'Пусть Z — частично упорядоченное множество, в котором всякое подмножество, + любые два элемента которого сравнимы, имеет верхнюю границу. Тогда в этом множестве + Z есть максимальный элемент, и, более того, для любого элемента a ∈ Z существует + элемент b > a, являющийся максимальным в Z. (Верхняя граница подмножества — элемент, + больший или равный любого элемента этого подмножества.) ' author: Рапота Мария @@ -3153,37 +3164,42 @@ - 'Лемма Цорна (англ. Zorn''s lemma) в теории порядков ' -- answer: 'Множества всех элементов A, которые предшествуют x в порядке A, и множества всех элементов A, - которые предшествуют x или равны x, являются начальными отрезками. +- answer: 'Множества всех элементов A, которые предшествуют x в порядке A, и множества + всех элементов A, которые предшествуют x или равны x, являются начальными отрезками. ' author: Рапота Мария id: 177 questions: - - 'Если x — произвольный элемент вполне упорядоченного множества A, чем являются множества всех элементов A, - которые предшествуют x в порядке A, и множества всех элементов A, которые предшествуют x или равны x? + - 'Если x — произвольный элемент вполне упорядоченного множества A, чем являются + множества всех элементов A, которые предшествуют x в порядке A, и множества всех + элементов A, которые предшествуют x или равны x? ' -- answer: '1. Если A изоморфно начальному отрезку множества B, не совпадающему со всем B, то говорят, - что ординал множества A меньше ординала множества B. - 2. Если множества A и B изоморфны, то говорят, что у них одинаковые ординалы. - 3. Если B изоморфно начальному отрезку множества A, то говорят, что ординал множества A больше ординала множества B. +- answer: '1. Если A изоморфно начальному отрезку множества B, не совпадающему со + всем B, то говорят, что ординал множества A меньше ординала множества B. 2. Если + множества A и B изоморфны, то говорят, что у них одинаковые ординалы. 3. Если + B изоморфно начальному отрезку множества A, то говорят, что ординал множества + A больше ординала множества B. ' author: Рапота Мария id: 178 questions: - - 'Как происходит сравнение порядковых типов вполне упорядоченных множеств - (порядковый тип, или ординал, - это характеристика, описывающая структуру порядка в вполне упорядоченном множестве)? + - 'Как происходит сравнение порядковых типов вполне упорядоченных множеств (порядковый + тип, или ординал, - это характеристика, описывающая структуру порядка в вполне + упорядоченном множестве)? ' -- answer: 'Из любых двух множеств (вполне упорядоченных) одно равномощно подмножеству другого. +- answer: 'Из любых двух множеств (вполне упорядоченных) одно равномощно подмножеству + другого. ' author: Рапота Мария id: 179 questions: - - 'Верно ли, что из любых двух вполне упорядоченных множеств одно равномощно подмножеству другого? + - 'Верно ли, что из любых двух вполне упорядоченных множеств одно равномощно подмножеству + другого? ' - answer: 'Если некоторая NP-полная проблема P1 принадлежит P, то P = NP. @@ -3192,20 +3208,202 @@ author: Рапота Мария id: 180 questions: - - 'Если некоторая NP-полная проблема P1 принадлежит классу P (то есть существует полиномиальный алгоритм для её решения), - то верно ли, что P = NP (все задачи в недетерминированном полиномиальном классе NP могут быть решены за полиномиальное время)? + - 'Если некоторая NP-полная проблема P1 принадлежит классу P (то есть существует + полиномиальный алгоритм для её решения), то верно ли, что P = NP (все задачи в + недетерминированном полиномиальном классе NP могут быть решены за полиномиальное + время)? - ' -- answer: 'Теорема Кука (англ. Cook''s theorem) гласит о том, что проблема выполнимости булевых формул NP-полна. + ' +- answer: 'Теорема Кука (англ. Cook''s theorem) гласит о том, что проблема выполнимости + булевых формул NP-полна. ' author: Рапота Мария id: 181 questions: - - 'NP-полна ли проблема выполнимости булевых формул, которая заключается в вопросе, - существуют ли значения переменных (в множестве True, False) такие, что формула при этих значениях принимает значение True? + - 'NP-полна ли проблема выполнимости булевых формул, которая заключается в вопросе, + существуют ли значения переменных (в множестве True, False) такие, что формула + при этих значениях принимает значение True? + + ' +- answer: 'Рассмотрим один из способов удаления цепных правил. Чтобы удалить цепные + правила, то есть правила вида A -> B, где A, B - нетерминалы, построим множества + N для каждого нетерминала грамматики. Множества N для нетерминала содержат набор + нетерминалов, которые составляют с ним цепную пару, а также сам нетерминал. Для + того, чтобы построить множество N для нетерминала, каждое цепное правило из рассматриваемого + нетерминала добавляем в множество N для этого нетерминала и рекурсивно спускаемся + по цепным правилам, добавляя цепные в множество N до тех пор пока цепных правил + не будет найдено. Формально: N_0(A) = {A} N_i(A) = N_i-1(A) U {C | B -> C принадлежит + P, B принадлежит N_i-1(A)} Если N_i(A) не равен N_i-1(A), то i = i+1, иначе N(A) + = N_i(A) Следующим шагом является переопределение правил грамматики в соответствии + с найденными множествами. Для каждого нетерминала мы должны пройти по множеству + N для него и записать все нецепные правила нетерминалов из N(в левой части правила + при этом будет нетерминал соответствующий N). Формально: для каждого множества + N(A) добавляем в новую грамматику правила A -> a, где a - правая часть правила + B из N(A) Последним шагов является удаление недостижимых правил. Рассмотрим пример: + A -> B | ab B -> a | С C -> b Для этой грамматики N(A) = {A, B, C}, N(B) = {B, + C}, N(C) = {C}. При переопределении правил для A из N(A) записываем A -> ab, для + B из N(A) - A -> a, для C из N(A) - A -> b. Так переопределяем для всех множеств + N. Получаем: для N(A): A -> ab A -> a A -> b для N(B): B -> a B -> b для N(C): + C -> b После удаления недостижимых получаем: A -> ab | a | b + + ' + author: Егорова Алиса + id: 182 + questions: + - 'Как удалить цепные правила в контекстно-свободной грамматике? + + ' +- answer: "Позиционный автомат строится для реализации алгоритма LR-разбора слов.\ + \ Для построения позиционного автомата по контекстно-свободной грамматике строим\ + \ блоки. В первом блоке вводим стартовое правило S'->S, которое говорит о том,\ + \ что по нему можно собрать все слово целиком. Когда мы только начинаем читать\ + \ слово, мы находимся перед правой частью S стартового правила S'->.S. Каждый\ + \ раз при построении блока, мы смотрим на положение разбора слова. В случае, если\ + \ мы находимся в положении перед нетерминалом, то записываем в блок все правила,соответвующие\ + \ этому нетерминалу, с указателем входной цепочки в начале правила. Указатель\ + \ показывает положение рабора слова по текущему правилу, то есть последовательность\ + \ символов, находящихся слева от указателя может быть распознана грамматикой по\ + \ правилам, а символ справа от указателя показывает какой символ можно прочитать\ + \ следующим, чтобы продолжить разбор по этому правилу. Указатель обозначается\ + \ . в правиле. Разбираем все вариации перехода по терминалам и нетерминалам,\ + \ строя при этом блоки. Для этого из всех правил текущего блока выбираем те, у\ + \ которых указатель разбора находится перед символом, по которому идет переход,\ + \ при этом, перенося указатель . на следующий символ. В случае, если точка оказывается\ + \ в конце правила, то это означает свертку, то есть то, что мы можем распознать/свернуть\ + \ слово. При возникновении в одном блоке свертки и при этом позиция разбора в\ + \ других правилах блока не везде находится на конце правила, тогда эта ситуация\ + \ называется конфликт перенос-свертка, аналогично, если свертка происходит по\ + \ финальному S'->S., тогда этот конфликт - конфликт перенос-свертка(с финальным\ + \ правилом). Если свертка происходит в нескольких правилах блока, тогда эта ситуация\ + \ называется конфликтом свертка-свертка, то есть мы не знаем сколько символов\ + \ снять со стека, чтобы считать, что мы прошли разбор. Если в конфликте свертка-свертка\ + \ есть правила с одинаковыми по длине частями, но для разных нетерминалов, тогда\ + \ при сбросе со стека символов на стеке остается нетерминал, по которому мы должны\ + \ перейти, в нетерминал, по которому произошла свертка. Так возникает недетерминированный\ + \ выбор нетерминала, в который нужно переходить. Все эти конфликты дают недетерминизм\ + \ разбора. \n" + author: Егорова Алиса + id: 183 + questions: + - 'Как построить позиционный автомат по контекстно-свободной грамматике? + + ' +- answer: 'Язык L называется разрешимым, если существует такая вычислимая функция + f, что если слово w принадлежит L, то f(w) = 1 и, если w не принадлежит L, то + f(w) = 0 Функция f называется вычислимой, если существует программа, вычисляющая + функцию f, такая, что: 1. если f(n) определено для натурального числа n, то программа + завершает свою работу на входе n и выводит f(n) 2. если f(n) не определено, то + программа зависает на входе n. + + ' + author: Егорова Алиса + id: 184 + questions: + - 'Когда язык называется разрешимым? + + ' +- answer: 'Да, атрибутные грамматики могут распознавать нерекурсивно перечислимые + языки, если используемые ими функции невычислимы. + + ' + author: Егорова Алиса + id: 185 + questions: + - 'Могут ли атрибутные грамматики распознавать нерекурсивно перечислимые языки? - ' + ' +- answer: 'Да, верно. Visible pushdown languages (VPL)- это подкласс детерминированных + контекстно-свободных языков. Детерминированные контекстно-свободные языки (DCFL): + Это языки, которые могут быть распознаны детерминированными стековыми автоматами. + Эти автоматы имеют один стек и принимают входные строки, следуя детерминированным + правилам перехода. Это означает, что в любой момент времени у автомата есть только + один возможный переход для обработки текущего символа входной строки и верхнего + символа стека. Visible pushdown languages (VPL): Это языки, которые могут быть + распознаны с помощью VPA(Visible pushdown automata). Все языки, которые могут + быть распознаны видимыми стековыми автоматами, также могут быть распознаны детерминированными + видимыми стековыми автоматами. Однако не все детерминированные контекстно-свободные + языки являются VPL. Например, {a^2n b^n, n - натуральное число} является детерминированным + контекстно-свободным языком, но не является VPL. То есть, существует множество + языков, которые могут быть распознаны детерминированными стековыми автоматами, + но не могут быть распознаны VPL. + + ' + author: Егорова + id: 186 + questions: + - 'Верно ли, что visible pushdown languages являются подмножеством детерминированных + контекстно-свободных языков? + ' +- answer: "Нет, пересечение LL(k)-языка с регулярным языком не всегда является LL(k)-языком.\ + \ Контрпример: Язык {a^n(b | с)^n} - можно пересечь с регулярным выражением a*(b*\ + \ | c*) и получить {a^n(b^n| с^n)} - не LL(k) \n" + author: Егорова Алиса + id: 187 + questions: + - 'Замкнуты ли LL(k)-языки относительно пересечения с регулярным языком? + + ' +- answer: 'Повторные нетерминалы при присвоении атрибутов индексируются по вхождениям + в правило слева направо. То есть, если дано правило, что значение атрибута для + A (предка) увеличивается на единицу от значения потомка, то тогда A_0.iter := + A_1.iter + 1. Неповторные нетерминалы в уравнениях в уравнениях на атрибуты обычно + не индексируются, например, T.iter := A.iter + B.iter + + ' + author: Егорова Алиса + id: 188 + questions: + - 'Как индексируются нетерминалы в атрибутах нетерминалов атрибутной грамматики? - \ No newline at end of file + ' +- answer: 'В первую очередь исходное слово необходимо переписать на основании инициальных + правил, то есть каждый символ слова заменить на соответсвующее состояние из инициального + правила для данного терминала. Далее автомат каждые два соседних состояния в + получившейся последовательности состояний заменяет на состояние из таблицы правил + перехода для данной пары. При этом на каждом уровне разбора последовательность + состояний уменьшается на одно. Процесс идет до тех пор, пока последовательность + состояний не будет состоять из единственного состояния. Если данное состояние + находится в множестве финальных, то слово распознается автоматом Треллиса. + + ' + author: Егорова Алиса + id: 189 + questions: + - 'Каким образом можно разобрать слово по автомату Треллиса? + + ' +- answer: "Уточненная теорема Глайстера-Шаллита. Если существуют N префиксов y_1,...y_N\ + \ и N суффиксов w_1,...w_N и для любых i, j(y_i w_i принадлежит языку L и из\ + \ j > 0 следует y_(i-j) w_i не принадлежит языку L), тогда размер минимального\ + \ НКА не меньше, чем N. То есть существует таблица, где строки и стоблцы обозначают\ + \ выбранные N суффиков и префиксов, значения которой обозначают принадлежность\ + \ полученного из суффикса и префикса слова к языку. Мы выбираем суффксы и префиксы\ + \ так, чтобы на главной диагонали были единицы, а нижняя треугольная или верхняя\ + \ треугольная часть таблицы состояла из нулей. Таблица по Глайстеру-Шаллиту дает\ + \ оценку снизу на количество состояний НКА, а таблица по Майхиллу-Нероде - оценку\ + \ сверху, так как определяет точное число состояний в минимальном ДКА. Однако\ + \ оценка относительно классов эквивалентности по теореме Глайстера-Шаллита не\ + \ всегда точная, то есть может быть ниже чем в действительности, поэтому возможно\ + \ потребуются дополнительные исследования. \n" + author: Егорова Алиса + id: 190 + questions: + - 'Как определить размер минимального недетерминированного конечного автомата? + + ' +- answer: "Пример построения атрибутной грамматки для языка {a^n b^n c^n}. == - означает\ + \ предикат, то есть проверку условия равенства. := - операцию присваивания. ;\ + \ - разделение правил грамматики и атрибутов нетерминалов S -> AT ; T.iter ==\ + \ A.iter A -> aA ; A_0.iter := A_1.iter + 1 A -> epsilon ; A.iter := 0 T -> bTc\ + \ ; T_0.iter := T_1.iter + 1; T -> epsilon ; T.iter := 0 Здесь второе и четвертое\ + \ условия производят подсчет символов a, b, c. Третье и пятое правило задают стартовое\ + \ значение для отсчета равное нулю. Первое условие осуществляет проверку равенства\ + \ количества символов a, b, c. \n" + author: Егорова Алиса + id: 191 + questions: + - 'Приведи пример атрибутной грамматики + + ' From 838ff0de4fa00783ba28f3f79211eba73cd73d6e Mon Sep 17 00:00:00 2001 From: Sergey Kamaev <63342992+nybc4ik@users.noreply.github.com> Date: Sat, 28 Dec 2024 15:29:44 +0300 Subject: [PATCH 06/13] trrhtyh (#174) * Update interpret.py Attempted nesting of parentheses * Update interpret.py --------- Co-authored-by: ShilovaMaria <108538231+ShilovaMaria@users.noreply.github.com> --- interpret/logic/interpret.py | 117 +++++++++++++++++++++++------------ 1 file changed, 78 insertions(+), 39 deletions(-) diff --git a/interpret/logic/interpret.py b/interpret/logic/interpret.py index 128ebd27..6ed35fe6 100644 --- a/interpret/logic/interpret.py +++ b/interpret/logic/interpret.py @@ -172,47 +172,86 @@ def demo(): s2 = s1 for i in range(li): for j in trs_rules: - if s2.find(j[0]) != -1: - a = s2.find(j[0]) + 2 - b = 0 - for rule in range(k): - if terms[rule][0] == j[0]: - b = rule - break - var_n = n[b] - new_s = j[j.find('=') + 1:] - sub_s = "" - c = 1 - t = 0 - i = 0 - while t == 0: - if s2[a] == ',': - if c == 1: - new_s = new_s.replace(terms[b][2 * i + 2], sub_s) - sub_s = "" - i += 1 - else: - sub_s = sub_s + s2[a] - elif s2[a] == ')': - if c == 1: - new_s = new_s.replace(terms[b][2 * i + 2], sub_s) - sub_s = "" - t = 1 - else: - sub_s = sub_s + s2[a] - c += 1 - elif s2[a] == '(': - sub_s = sub_s + s2[a] - c -= 1 - else: - sub_s = sub_s + s2[a] - a += 1 - s2 = s2[:s2.find(j[0])] + new_s + s2[a:] - break - s1 = s1.replace(trs_variables[0] + '0', trs_variables[0]) - s2 = s2.replace(trs_variables[0] + '0', trs_variables[0]) + pattern = j.split('=')[0].strip() + replacement = j.split('=')[1].strip() + s2 = replace_pattern(s2, pattern, replacement, trs_variables) + s1 = s1.replace('var', trs_variables[0]) + s2 = s2.replace('var', trs_variables[0]) return s1, s2 + def replace_pattern(s, pattern, replacement, variables): + pattern_args = get_arguments(pattern) + args_mapping = {} + pattern_index = s.find(pattern.split('(')[0]) + while pattern_index != -1: + if check_pattern_match(s, pattern_index, pattern, pattern_args, variables, args_mapping): + new_replacement = replacement + for arg in (variables): + if arg in args_mapping: + new_replacement = new_replacement.replace(arg, args_mapping[arg]) + + + end_index = find_end_index(s, pattern_index) + s = s[:pattern_index] + new_replacement + s[end_index:] + pattern_index = s.find(pattern.split('(')[0], pattern_index + len(new_replacement)) + else: + pattern_index = s.find(pattern.split('(')[0], pattern_index + 1) + + return s + + def find_end_index(s, start_index): + open_brackets = 0 + current_index = start_index + while current_index < len(s): + if s[current_index] == '(': + open_brackets += 1 + elif s[current_index] == ')': + open_brackets -= 1 + if open_brackets == 0: + return current_index + 1 + current_index += 1 + return current_index + + def check_pattern_match(s, index, pattern, pattern_args, variables, args_mapping): + pattern_len = len(pattern.split('(')[0]) + if s[index:index + pattern_len] != pattern.split('(')[0]: + return False + + args_start = index + pattern_len + 1 + for i, arg in enumerate(pattern_args): + if arg in variables: + arg_value = get_var_value(s, args_start, i) + if arg in args_mapping and args_mapping[arg] != arg_value: + return False + else: + args_mapping[arg]=arg_value + continue + arg_value = get_var_value(s, args_start, i) + if not check_pattern_match(arg_value, 0, arg, get_arguments(arg), variables, args_mapping): + return False + return True + + def get_var_value(s, start, arg_index): + open_brackets = 0 + current_index = start + while current_index < len(s): + if s[current_index] == '(': + open_brackets += 1 + elif s[current_index] == ')': + open_brackets -= 1 + elif s[current_index] == ',' and open_brackets == 0: + if arg_index == 0: + return s[start:current_index].strip() + arg_index -= 1 + start=current_index+1 + current_index += 1 + s=s[start:current_index] + start=0 + while open_brackets<0: + s=s[start:s.rfind(")")] + open_brackets += 1 + return s + # ----------------------------------------------------------------------------- start_expressions = [] end_expressions = [] From 4adc16de9fe8ed825c56266fbeee71bbd50c22fc Mon Sep 17 00:00:00 2001 From: "rofl-helm-update[bot]" <189265035+rofl-helm-update[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2024 12:35:47 +0000 Subject: [PATCH 07/13] updating image tag --- chart/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/values.yaml b/chart/values.yaml index 5b21a8ad..020c87f8 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -1,3 +1,3 @@ image: repository: stewkk - tag: b78d61c19f584452db366769c0bde6b254df04f8 + tag: 0a543c9e4df05fdd4fc11afce2699d5279252527 From 892bb6c046cb438414a4d57946b2bd64d3352dd6 Mon Sep 17 00:00:00 2001 From: sprosonya <166607219+sprosonya@users.noreply.github.com> Date: Tue, 31 Dec 2024 05:55:31 +0300 Subject: [PATCH 08/13] Update data.yaml --- data/data.yaml | 179 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) diff --git a/data/data.yaml b/data/data.yaml index 128290a5..51f81a9b 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -3406,4 +3406,183 @@ questions: - 'Приведи пример атрибутной грамматики + ' +- answer: 'Лемма о накачке для контекстно-свободных языков является необходимым условием для того, чтобы язык был контекстно-свободным, однако недостаточным. + То есть, если язык не накачивается с помощью леммы - он точно не контекстно-свободный, однако если накачивается - может таковым не являться. + Пример: язык L = {a^nb^nc^i, i ≠ n}. Докажем, что этот язык накачивается с помощью леммы. + Лемма гласит, что для языка над алфавитом ∑ существует такое n, что для любого слова w∈L длины не меньше n найдутся слова u, v, x, y, z над алфавитом ∑*, для которых верно: w = uvxy, vy ≠ ℇ, |vxy| ≤ n и ∀k ≥ 0 uv^kxy^kz ∈ L. + Выберем для языка L = {a^nb^nc^i, i ≠ n} константу из леммы n = 5. Рассмотрим следующие случаи: + 1) Слово w = c^i. Пусть u = c^(i-1), v = c, x = y = z = ℇ. |vxy| ≤ 5. Очевидно, что при накачке uv^kxy^kz будет так же словом вида c^j, принадлежащим языку. + 2) Слово w = a^jb^j. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1). |vxy| ≤ n. При накачке uv^kxy^kz количество a и b будет увеличиваться одновременно и сбалансированно, структура слова a^jb^j сохранится и слово uv^kxy^kz = a^hb^h будет также принадлежать языку. + 3) Слово w = a^jb^jc^i, i < j-1. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1)c^i. |vxy| ≤ 5. При накачке uv^kxy^kz количество a и b будет одновременно и сбалансированно увеличиваться, при этом никогда не будет равным i. То есть, слово сохранит структуру uv^kxy^kz = a^hb^hc^i. + 4) Слово 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. + 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^nb^nc^(n!+n). Пометим все символы a и b и разобьем на u, v, x, y, z так, что x содержит выделенную позицию, u и v содержат выделенные позиции и vxy содержат не более n выделенных позиций. + Тогда очевидно, что vy должно содержать одинаковое число символов a и b, иначе выбираем k=0 и тогда количество символов a и b станет разным. + Пусть символов a в vy будет t. Очевидно, что vy не содержит символов c, так как vxy содержат не более n выделенных позиций, но v точно содержит символ a. Тогда выберем k = (n!)/t + 1 и получим слово a^(n!+n)b^(n!+n)c^(n!+n) которое не принадлежит языку. Значит, язык не удовлетворяет лемме Огдена и не является контекстно-свободным. + ' + author: Проклашкина Софья + id: 192 + questions: + - 'Является ли выполнение условия леммы о накачке для контекстно-свободных языков достаточным для того, чтобы язык назвать контекстно-свободным? + Приведи пример языка, который накачивается в соответствии с этой леммой, но не является контекстно-свободным. + + ' +- answer: 'Язык {a^n b^n | n>0} является контекстно-свободным языком, который может быть распознан с помощью конечного автомата со стековой памятью. + Данный автомат будет содержать следующие состояния: + q_0: Начальное состояние, ждем символы a. + q_1: Состояние, когда мы уже прочитали a и ждём b. + q_2: Принимающее состояние (конечное состояние). + 1. Алфавит стека: + Z_0: Дно стека. + X: Символ, добавляемый в стек. + Правила + 2. При чтении символа a в состоянии q_0 добавляем символ X на стек, и остаемся в состоянии q_0. (q_0, a, Z_0) -> (q_0, XZ_0), (q_0, a, X) -> (q_0, XX). + 3. При чтении символа b в состоянии q_0 переходим в состояние q_1. (q_0, b, X) -> (q_1, ""). + 4. При чтении символа b в состоянии q_1 удаляем символ X со стека. (q_1, b, X) -> (q_1, ""). + 5. При чтении пустого символа ε и если в стеке Z_0 переходим в принимающее состояние q_2. (q_1, ε, Z_0) -> (q_2, Z_0). + ' + author: Проклашкина Софья + id: 193 + questions: + - 'Конечный автомат для распознавания {a^n b^n | n>0} + + ' +- answer: 'Обратные ссылки (backreferences) в регулярных выражениях позволяют ссылаться на ранее найденную подстроку, заключенную в захватывающие скобки. Обратные ссылки значительно расширяют возможности регулярных выражений, позволяя проверять равенство или повторение подстрок. + Регулярные выражения с обратными ссылками не задают контекстно-свободные языки в общем случае, то есть, класс языков, задаваемых такими выражениями, не совпадает с классом контекстно-свободных языков. + Например, язык {ww} не является контекстно-свободным языком и задается регулярным выражением с обратными ссылками e = (.*) \ 1. + ' + author: Проклашкина Софья + id: 194 + questions: + - 'Регулярные выражения с обратными ссылками и КС-языки + + ' +- answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0, T⟩ — автомат с магазинной памятью. + Тогда языком, допускаемым автоматом Aпо заключительному состоянию, является L(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, α)} для некоторого состояния q∈T и произвольной магазинной цепочки α. Начиная с стартовой вершины s и w на входе, автомат читает слово w и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения. + ' + author: Проклашкина Софья + id: 195 + questions: + - 'Язык, допускаемый по заключительному состоянию + + ' +- answer: 'Для автомата с магазинной памятью A= ⟨Q, Σ, G, δ, s, Z0⟩ множество допускаемых по пустому стеку слов - это N(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, ε)}, где q — произвольное состояние. Таким образом, автомат A допускает слово w, полностью опустошив свой стек. Множество заключительных состояний T не имеет значения. + ' + author: Проклашкина Софья + id: 196 + questions: + - 'Язык, допускаемый по пустому стеку + + ' +- answer: 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому магазину (стеку), совпадают. + Доказательство: + 1. Исходя из автомата с магазинной памятью A_T, допускающего язык L по заключительному состоянию, построим другой автомат с магазинной памятью A_N, который допускает язык L по пустому стеку. + a. Добавим переходы по ε из каждого допускающего состояния автомата A_T в новое состояние p, которое отвечает за очистку стека. Находясь в состоянии p, автомат A_N опустошает свой магазин и ничего не прочитывает на входе. Таким образом, как только исходный автомат A_T приходит в допускающее состояние, прочитав слово w, A_N опустошает свой магазин, также прочитав слово w. + b. Во избежание случая, когда A_T может опустошить свой магазин без допуска, A_N использует свой маркер дна Z_1. Добавление нового стартового состояния s позволяет затолкнуть маркер Z_0 автомата A_T в магазин и перейти в стартовое состояние A_T. + c. Каждый переход A_T есть и у автомата A_N, символ Z_1 хранится в магазине под всеми символами из G и является символом, по которому нет переходов в A_T. Тогда A_N может совершить следующие действия: (s, w, Z_1) ⊢ (s_0, w, Z_0Z_1) ⊢* (q, ε, αZ_1) ⊢* (p, ε, ε), что означает, что A_N допускает слово w по пустому магазину. + 2. Исходя из автомата с магазинной памятью A_N, допускающего язык L по пустому стеку, построим автомат с магазинной памятью A_T, допускающий L по заключительному состоянию. + a. Добавим новый символ Z_1, не принадлежащий G, который будем маркером дна магазина нового автомата, позволяющий узнать, когда A_N опустошает свой магазин. Если построенный автомат A_T видит на вершине стека свой маркер, то он знает, что A_N опустошает свой магазин на этом же входе. + b. Добавим новое допускающее состояние p, в которое автомат переходит, как только обнаруживает, что A_N опустошил свой магазин. Таким образом, слово, допущенное по пустому стеку, будет допускаться и по заключительному состоянию, используя ε-переходы в новое состояние. + c. Каждый переход A_N есть и у автомата A_T. Тогда, согласно введенным начальному и заключительному состояниям, автомат A_T может совершить следующие действия: (s, w, Z_1) ⊢ (s_0, w, Z_0Z_1) ⊢* (q, ε, Z_1) ⊢ (p, ε, Z_1), что означает, что A_T допускает слово w по заключительному состоянию p. + ' + author: Проклашкина Софья + id: 197 + questions: + - 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому стеку + + ' +- answer: 'ДМП в нормальной форме (англ. normal form) - это детерминированный автомат с магазинной памятью M, представленный конечным набором состояний Q, входным алфавитом на ленте Σ, стековым алфавитом G и множеством переходов Δ, который удовлетворяет следующим условиям: + 1. Если (p, a, S) → (q, α) ∈ Δ, то |α|⩽2, где α∈G* — последовательность стековых символов, S∈G. + 2. Если (p, ε, S) → (q, α) ∈ Δ, то α = ε. + 3. Δ не содержит бесполезных переходов (переход (p, a, S) → (q, α) считается бесполезным, если L(q, α) = ∅, то есть из конфигурации (q, α) нельзя ничего вывести). + ' + author: Проклашкина Софья + id: 198 + questions: + - 'Детерминированный автомат с магазинной памятью в нормальной форме' + - 'Нормальная форма ДМПА' +- answer: 'Пусть M, - автомат, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. + Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → α, где a∈Σ, S∈G, α∈G*. + Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → α ∈ Δ, тогда |α|⩽2 и L(α) ≠ ∅. + ' + author: Проклашкина Софья + id: 199 + questions: + - 'Автомат с единственным состоянием. Его нормальная форма.' + - 'SDA normal form' +- answer: ' + 1. Если L = N(S) для некоторого ДМП-автомата S, то L имеет однозначную КС-грамматику. Доказательство: + Так как класс контекстно-свободных языков совпадает с классом автоматов с магазинной памятью, по любому МП-автомату можно поостроить контекстно-свободную грамматику. + Докажем, что КС-грамматика, порожденная детерминированным МП-автоматом, однозначна. + По следующей теореме - для каждой грамматики G = ⟨Σ, N, S, P⟩ и ω из N* цепочка ω имеет два разных дерева разбора тогда и только тогда, когда ω имеет два разных левых порождения из P - для однозначности грамматики G достаточно показать, что она имеет уникальные левые порождения. + Предположим, S допускает w по пустому магазину. Тогда он делает это с помощью одной-единственной последовательности переходов, поскольку он детерминирован и не может работать после опустошения магазина. + Зная эту последовательность переходов, мы можем однозначно определить выбор каждой продукции в левом порождении w в G. Правило автомата S, на основании которого применяется продукция, всегда одно. + Но, например, правило δ(q, a, X)={(r, Y_1Y_2...Y_k)} может порождать много продукций грамматики G, с различными состояниями в позициях, отражающих состояния S после удаления каждого из Y_1, Y_2, ..., Y_k. + Однако, поскольку S детерминирован, осуществляется только одна из этих последовательностей переходов, поэтому только одна из этих продукций в действительности ведет к порождению w. + 2. Если L = L(S) для некоторого ДМП-автомата S, то L имеет однозначную КС-грамматику. Доказательство: + Пусть $ будет "концевым маркером", отсутствующим в цепочках языка L, и пусть L‘=L$. Таким образом, цепочки языка L‘ представляют собой цепочки из L, к которым дописан символ $. Тогда L‘ имеет префиксное свойство, и L‘ = N(S‘) для некоторого ДМП-автомата S‘. По предыдущей теореме существует однозначная грамматика G‘, порождающая язык N(S‘), т.е. L‘. + Теперь по грамматике G‘ построим G, для которой L(G) = L. Для этого нужно лишь избавиться от маркера $ в цепочках. Будем рассматривать $ как переменную грамматики G и введем продукцию $ → ε; остальные продукции G и G‘ одинаковы. Поскольку L(G‘) = L‘, получаем, что L(G) = L. + Утверждаем, что G однозначна. Действительно, левые порождения в G совпадают с левыми порождениями в G‘, за исключением последнего шага в G — изменения $ на ε. Таким образом, если бы терминальная цепочка w имела два левых порождения в G, то w$ имела бы два порождения в G‘. Поскольку G‘ однозначна, G также однозначна. + + author: Проклашкина Софья + id: 200 + questions: + - 'Детерминированные автоматы с магазинной памятью и неоднозначность их грамматик + + ' +- answer: 'Алгоритм Эрли (англ. Earley algorithm) позволяет определить, выводится ли данное слово w в данной контекстно-свободной грамматике G. + Вход: КС грамматика G= ⟨N, Σ, P, S⟩ и слово w. + Выход: true, если w выводится в G; false — иначе. + Определение: Пусть G= ⟨N, Σ, P, S⟩ — контекстно-свободная грамматика и w = w_0w_1...w_{n−1} — входная цепочка из Σ*. Объект вида [A → α⋅β, i], где A → αβ — правило из P и 0⩽i⩽n — позиция в w, называется ситуацией, относящейся к цепочке w, где ⋅ — вспомогательный символ, который не явлется терминалом или нетерминалом (⋅∉Σ∪N). + Определение: Ситуации хранятся в множествах D_0, ..., D_{n−1}, называемых списками ситуаций. Причем наличие ситуации [A→ α⋅β, i] в j-м списке ситуаций D_j равносильно тому, что ∃δ∈Σ∪N: ((S′ ⇒* w_0...w_{i−1}Aδ) ∧ A ⇒* w_i...w_{j−1}). + Определение: Последовательность списков ситуаций D_0, D_1, ..., D_{n−1} называется списком разбора для входной цепочки w. + + Необходимо найти D_n для w. Алгоритм Эрли является динамическим алгоритмом - он последовательно строит список разбора, причём при построении D_j используются D_0, ..., D_j (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент). + Алгоритм основывается на следующих трёх правилах: + 1. Если [A → α⋅w_jβ, i] ∈ D_{j−1} (где w_j — j-ый символ строки), то [A → αw_j⋅β, i] ∈ D_j. + 2. Если [B → η⋅, i] ∈ D_j и [A → α⋅Bβ, k] ∈ D_i, то [A → αB⋅β, k] ∈ D_j. + 3. Если [A → α⋅Bβ, i] ∈ D_j и (B → η) ∈ P, то [B → ⋅η, j] ∈ D_j. + Для простоты добавим новый стартовый вспомогательный нетерминал S′ и правило (S′ → S). Псевдокод: + function earley(G, w): + // Инициализация + D_0 = {[S′ → ⋅S, 0]} + for i=1 to len(w) + D_i = ∅ + // Вычисление ситуаций + for j=0 to len(w) + scan(D, j, G, w) + while D_j изменяется + complete(D, j, G, w) + predict(D, j, G, w) + // Результат + if [S′ → S⋅, 0] ∈ D_{len(w)} + return true + else + return false + + function scan(D, j, G, w): + if j == 0 + return + for [A → α⋅aβ, i] ∈ D_{j−1} + if a == w_{j−1} + D_j ∪= [A → αa⋅β, i] + + function complete(D, j, G, w): + for [B → η⋅, i] ∈ D_j + for [A → α⋅Bβ, j] ∈ D_i + D_j ∪= [A → αB⋅β, j] + + function predict(D, j, G, w): + for [A → α⋅Bβ, i] ∈ D_j + for (B → η) ∈ P + D_j ∪= [B → ⋅η, j] + ' + author: Проклашкина Софья + id: 201 + questions: + - 'Алгоритм Эрли + ' From 8c8cfca5306d94e8892852199c6d74bf60a86e0d Mon Sep 17 00:00:00 2001 From: sprosonya <166607219+sprosonya@users.noreply.github.com> Date: Tue, 31 Dec 2024 19:05:49 +0300 Subject: [PATCH 09/13] fix questions --- data/data.yaml | 191 +++++++++++++++++++++++-------------------------- 1 file changed, 89 insertions(+), 102 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 51f81a9b..58e2ccfe 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -3407,12 +3407,11 @@ - 'Приведи пример атрибутной грамматики ' -- answer: 'Лемма о накачке для контекстно-свободных языков является необходимым условием для того, чтобы язык был контекстно-свободным, однако недостаточным. +- answer: 'Лемма о накачке для контекстно-свободных языков (англ. Pumping lemma) является необходимым условием для того, чтобы язык порождался контекстно-свободной грамматикой, однако недостаточным. То есть, если язык не накачивается с помощью леммы - он точно не контекстно-свободный, однако если накачивается - может таковым не являться. Пример: язык L = {a^nb^nc^i, i ≠ n}. Докажем, что этот язык накачивается с помощью леммы. - Лемма гласит, что для языка над алфавитом ∑ существует такое n, что для любого слова w∈L длины не меньше n найдутся слова u, v, x, y, z над алфавитом ∑*, для которых верно: w = uvxy, vy ≠ ℇ, |vxy| ≤ n и ∀k ≥ 0 uv^kxy^kz ∈ L. Выберем для языка L = {a^nb^nc^i, i ≠ n} константу из леммы n = 5. Рассмотрим следующие случаи: - 1) Слово w = c^i. Пусть u = c^(i-1), v = c, x = y = z = ℇ. |vxy| ≤ 5. Очевидно, что при накачке uv^kxy^kz будет так же словом вида c^j, принадлежащим языку. + 1) Слово w = c^i. Пусть u = c^(i-1), v = c, x = y = z = ℇ (пустое слово). |vxy| ≤ 5. Очевидно, что при накачке uv^kxy^kz будет так же словом вида c^j, принадлежащим языку. 2) Слово w = a^jb^j. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1). |vxy| ≤ n. При накачке uv^kxy^kz количество a и b будет увеличиваться одновременно и сбалансированно, структура слова a^jb^j сохранится и слово uv^kxy^kz = a^hb^h будет также принадлежать языку. 3) Слово w = a^jb^jc^i, i < j-1. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1)c^i. |vxy| ≤ 5. При накачке uv^kxy^kz количество a и b будет одновременно и сбалансированно увеличиваться, при этом никогда не будет равным i. То есть, слово сохранит структуру uv^kxy^kz = a^hb^hc^i. 4) Слово 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. @@ -3422,27 +3421,32 @@ Для фиксированного n из леммы Огдена рассмотрим слово w = a^nb^nc^(n!+n). Пометим все символы a и b и разобьем на u, v, x, y, z так, что x содержит выделенную позицию, u и v содержат выделенные позиции и vxy содержат не более n выделенных позиций. Тогда очевидно, что vy должно содержать одинаковое число символов a и b, иначе выбираем k=0 и тогда количество символов a и b станет разным. Пусть символов a в vy будет t. Очевидно, что vy не содержит символов c, так как vxy содержат не более n выделенных позиций, но v точно содержит символ a. Тогда выберем k = (n!)/t + 1 и получим слово a^(n!+n)b^(n!+n)c^(n!+n) которое не принадлежит языку. Значит, язык не удовлетворяет лемме Огдена и не является контекстно-свободным. + ' author: Проклашкина Софья id: 192 questions: - 'Является ли выполнение условия леммы о накачке для контекстно-свободных языков достаточным для того, чтобы язык назвать контекстно-свободным? Приведи пример языка, который накачивается в соответствии с этой леммой, но не является контекстно-свободным. + + ' + - 'Может ли язык накачиваться по лемме о накачке для контекстно-свободных языков, и при этом не быть контекстно-свободным ' - answer: 'Язык {a^n b^n | n>0} является контекстно-свободным языком, который может быть распознан с помощью конечного автомата со стековой памятью. Данный автомат будет содержать следующие состояния: - q_0: Начальное состояние, ждем символы a. - q_1: Состояние, когда мы уже прочитали a и ждём b. - q_2: Принимающее состояние (конечное состояние). - 1. Алфавит стека: + q_0: Начальное состояние, "накапливаем" количество символов a. + q_1: Состояние, когда мы уже прочитали все a и при встрече b снимаем со стека символы X. + q_2: Принимающее состояние (конечное состояние), в которое можно попасть лишь по пустому стеку, что гарантирует равенство количества символов a и b. + Алфавит стека: Z_0: Дно стека. X: Символ, добавляемый в стек. - Правила + Правила: 2. При чтении символа a в состоянии q_0 добавляем символ X на стек, и остаемся в состоянии q_0. (q_0, a, Z_0) -> (q_0, XZ_0), (q_0, a, X) -> (q_0, XX). 3. При чтении символа b в состоянии q_0 переходим в состояние q_1. (q_0, b, X) -> (q_1, ""). 4. При чтении символа b в состоянии q_1 удаляем символ X со стека. (q_1, b, X) -> (q_1, ""). 5. При чтении пустого символа ε и если в стеке Z_0 переходим в принимающее состояние q_2. (q_1, ε, Z_0) -> (q_2, Z_0). + ' author: Проклашкина Софья id: 193 @@ -3450,139 +3454,122 @@ - 'Конечный автомат для распознавания {a^n b^n | n>0} ' -- answer: 'Обратные ссылки (backreferences) в регулярных выражениях позволяют ссылаться на ранее найденную подстроку, заключенную в захватывающие скобки. Обратные ссылки значительно расширяют возможности регулярных выражений, позволяя проверять равенство или повторение подстрок. - Регулярные выражения с обратными ссылками не задают контекстно-свободные языки в общем случае, то есть, класс языков, задаваемых такими выражениями, не совпадает с классом контекстно-свободных языков. - Например, язык {ww} не является контекстно-свободным языком и задается регулярным выражением с обратными ссылками e = (.*) \ 1. +- answer: 'Длина накачки n регулярного языка L не больше (иногда меньше) числа нетерминалов в минимальной грамматике для L. Или, эквивалентно: длина накачки регулярного языка L не больше, чем размер минимального НКА для этого языка. + ' author: Проклашкина Софья id: 194 questions: - - 'Регулярные выражения с обратными ссылками и КС-языки - + - 'Как связана длина накачки из леммы о накачке регулярных языков и размер минимального НКА + ' -- answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0, T⟩ — автомат с магазинной памятью. - Тогда языком, допускаемым автоматом Aпо заключительному состоянию, является L(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, α)} для некоторого состояния q∈T и произвольной магазинной цепочки α. Начиная с стартовой вершины s и w на входе, автомат читает слово w и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения. + - 'Как связано количество нетерминалов в минимальной грамматике и длина накачки для этого языка + + ' +- answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0, T⟩ — автомат с магазинной памятью, где + Q — множество состояний автомата, + Σ — входной алфавит на ленте, + G — стековый алфавит, + δ — функция переходов, + 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 и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения. + ' author: Проклашкина Софья id: 195 questions: - 'Язык, допускаемый по заключительному состоянию - + ' -- answer: 'Для автомата с магазинной памятью A= ⟨Q, Σ, G, δ, s, Z0⟩ множество допускаемых по пустому стеку слов - это N(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, ε)}, где q — произвольное состояние. Таким образом, автомат A допускает слово w, полностью опустошив свой стек. Множество заключительных состояний T не имеет значения. +- answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0⟩, где + Q — множество состояний автомата, + Σ — входной алфавит на ленте, + G — стековый алфавит, + δ — функция переходов, + s — стартовое состояние автомата, + Z0 — маркер дна стека, + T — множество допускающих состояний автомата. + Тогда языком, допускаемым автоматом Aпо пустому стеку, является множество N(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, ε)}, где q — произвольное состояние. Сочетание (s, w, Z0) ⊢∗ (q, ε, α) означает, что функция переходов δ позволяет от (s, w, Z0), проходя через промежуточные значения функции, попасть в (s, w, Z0). Таким образом, автомат A допускает слово w, полностью опустошив свой стек. Множество заключительных состояний T не имеет значения. + ' author: Проклашкина Софья id: 196 questions: - 'Язык, допускаемый по пустому стеку - + ' - answer: 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому магазину (стеку), совпадают. - Доказательство: - 1. Исходя из автомата с магазинной памятью A_T, допускающего язык L по заключительному состоянию, построим другой автомат с магазинной памятью A_N, который допускает язык L по пустому стеку. - a. Добавим переходы по ε из каждого допускающего состояния автомата A_T в новое состояние p, которое отвечает за очистку стека. Находясь в состоянии p, автомат A_N опустошает свой магазин и ничего не прочитывает на входе. Таким образом, как только исходный автомат A_T приходит в допускающее состояние, прочитав слово w, A_N опустошает свой магазин, также прочитав слово w. - b. Во избежание случая, когда A_T может опустошить свой магазин без допуска, A_N использует свой маркер дна Z_1. Добавление нового стартового состояния s позволяет затолкнуть маркер Z_0 автомата A_T в магазин и перейти в стартовое состояние A_T. - c. Каждый переход A_T есть и у автомата A_N, символ Z_1 хранится в магазине под всеми символами из G и является символом, по которому нет переходов в A_T. Тогда A_N может совершить следующие действия: (s, w, Z_1) ⊢ (s_0, w, Z_0Z_1) ⊢* (q, ε, αZ_1) ⊢* (p, ε, ε), что означает, что A_N допускает слово w по пустому магазину. - 2. Исходя из автомата с магазинной памятью A_N, допускающего язык L по пустому стеку, построим автомат с магазинной памятью A_T, допускающий L по заключительному состоянию. - a. Добавим новый символ Z_1, не принадлежащий G, который будем маркером дна магазина нового автомата, позволяющий узнать, когда A_N опустошает свой магазин. Если построенный автомат A_T видит на вершине стека свой маркер, то он знает, что A_N опустошает свой магазин на этом же входе. - b. Добавим новое допускающее состояние p, в которое автомат переходит, как только обнаруживает, что A_N опустошил свой магазин. Таким образом, слово, допущенное по пустому стеку, будет допускаться и по заключительному состоянию, используя ε-переходы в новое состояние. - c. Каждый переход A_N есть и у автомата A_T. Тогда, согласно введенным начальному и заключительному состояниям, автомат A_T может совершить следующие действия: (s, w, Z_1) ⊢ (s_0, w, Z_0Z_1) ⊢* (q, ε, Z_1) ⊢ (p, ε, Z_1), что означает, что A_T допускает слово w по заключительному состоянию p. + ' author: Проклашкина Софья id: 197 questions: - 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому стеку - + ' -- answer: 'ДМП в нормальной форме (англ. normal form) - это детерминированный автомат с магазинной памятью M, представленный конечным набором состояний Q, входным алфавитом на ленте Σ, стековым алфавитом G и множеством переходов Δ, который удовлетворяет следующим условиям: +- 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, α) нельзя ничего вывести). + Нормальная форма ДМП упрощает его вид - все операции со стеком либо добавляют один символ, либо удаляют, либо оставляет стек неизменным, в автомате не существует бесполезных переходов (ловушек), а также по пустому символу переходы происходят в состояние с пустым стеком. + ' author: Проклашкина Софья id: 198 questions: - - 'Детерминированный автомат с магазинной памятью в нормальной форме' - - 'Нормальная форма ДМПА' -- answer: 'Пусть M, - автомат, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. - Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → α, где a∈Σ, S∈G, α∈G*. + - 'Детерминированный автомат с магазинной памятью в нормальной форме + + ' + - 'Нормальная форма ДМПА + + ' +- answer: 'Пусть M, - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. + Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → α, где a∈Σ, S∈G, α∈G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элментов, но важно количество. Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → α ∈ Δ, тогда |α|⩽2 и L(α) ≠ ∅. + ' author: Проклашкина Софья id: 199 questions: - - 'Автомат с единственным состоянием. Его нормальная форма.' - - 'SDA normal form' -- answer: ' - 1. Если L = N(S) для некоторого ДМП-автомата S, то L имеет однозначную КС-грамматику. Доказательство: - Так как класс контекстно-свободных языков совпадает с классом автоматов с магазинной памятью, по любому МП-автомату можно поостроить контекстно-свободную грамматику. - Докажем, что КС-грамматика, порожденная детерминированным МП-автоматом, однозначна. - По следующей теореме - для каждой грамматики G = ⟨Σ, N, S, P⟩ и ω из N* цепочка ω имеет два разных дерева разбора тогда и только тогда, когда ω имеет два разных левых порождения из P - для однозначности грамматики G достаточно показать, что она имеет уникальные левые порождения. - Предположим, S допускает w по пустому магазину. Тогда он делает это с помощью одной-единственной последовательности переходов, поскольку он детерминирован и не может работать после опустошения магазина. - Зная эту последовательность переходов, мы можем однозначно определить выбор каждой продукции в левом порождении w в G. Правило автомата S, на основании которого применяется продукция, всегда одно. - Но, например, правило δ(q, a, X)={(r, Y_1Y_2...Y_k)} может порождать много продукций грамматики G, с различными состояниями в позициях, отражающих состояния S после удаления каждого из Y_1, Y_2, ..., Y_k. - Однако, поскольку S детерминирован, осуществляется только одна из этих последовательностей переходов, поэтому только одна из этих продукций в действительности ведет к порождению w. - 2. Если L = L(S) для некоторого ДМП-автомата S, то L имеет однозначную КС-грамматику. Доказательство: - Пусть $ будет "концевым маркером", отсутствующим в цепочках языка L, и пусть L‘=L$. Таким образом, цепочки языка L‘ представляют собой цепочки из L, к которым дописан символ $. Тогда L‘ имеет префиксное свойство, и L‘ = N(S‘) для некоторого ДМП-автомата S‘. По предыдущей теореме существует однозначная грамматика G‘, порождающая язык N(S‘), т.е. L‘. - Теперь по грамматике G‘ построим G, для которой L(G) = L. Для этого нужно лишь избавиться от маркера $ в цепочках. Будем рассматривать $ как переменную грамматики G и введем продукцию $ → ε; остальные продукции G и G‘ одинаковы. Поскольку L(G‘) = L‘, получаем, что L(G) = L. - Утверждаем, что G однозначна. Действительно, левые порождения в G совпадают с левыми порождениями в G‘, за исключением последнего шага в G — изменения $ на ε. Таким образом, если бы терминальная цепочка w имела два левых порождения в G, то w$ имела бы два порождения в G‘. Поскольку G‘ однозначна, G также однозначна. - + - 'Автомат с единственным состоянием. Его нормальная форма. + + ' + - 'SDA normal form + + ' + +- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный по регулярному выражению. Принимает те же строки, что и соответствующее регулярное выражение. + Автомат Глушкова без ε-переходов эквивалентен автомату, построенному по тому же регулярному выражению по алгоритму Томсона. + + ' author: Проклашкина Софья - id: 200 - questions: - - 'Детерминированные автоматы с магазинной памятью и неоднозначность их грамматик - - ' -- answer: 'Алгоритм Эрли (англ. Earley algorithm) позволяет определить, выводится ли данное слово w в данной контекстно-свободной грамматике G. - Вход: КС грамматика G= ⟨N, Σ, P, S⟩ и слово w. - Выход: true, если w выводится в G; false — иначе. - Определение: Пусть G= ⟨N, Σ, P, S⟩ — контекстно-свободная грамматика и w = w_0w_1...w_{n−1} — входная цепочка из Σ*. Объект вида [A → α⋅β, i], где A → αβ — правило из P и 0⩽i⩽n — позиция в w, называется ситуацией, относящейся к цепочке w, где ⋅ — вспомогательный символ, который не явлется терминалом или нетерминалом (⋅∉Σ∪N). - Определение: Ситуации хранятся в множествах D_0, ..., D_{n−1}, называемых списками ситуаций. Причем наличие ситуации [A→ α⋅β, i] в j-м списке ситуаций D_j равносильно тому, что ∃δ∈Σ∪N: ((S′ ⇒* w_0...w_{i−1}Aδ) ∧ A ⇒* w_i...w_{j−1}). - Определение: Последовательность списков ситуаций D_0, D_1, ..., D_{n−1} называется списком разбора для входной цепочки w. - - Необходимо найти D_n для w. Алгоритм Эрли является динамическим алгоритмом - он последовательно строит список разбора, причём при построении D_j используются D_0, ..., D_j (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент). - Алгоритм основывается на следующих трёх правилах: - 1. Если [A → α⋅w_jβ, i] ∈ D_{j−1} (где w_j — j-ый символ строки), то [A → αw_j⋅β, i] ∈ D_j. - 2. Если [B → η⋅, i] ∈ D_j и [A → α⋅Bβ, k] ∈ D_i, то [A → αB⋅β, k] ∈ D_j. - 3. Если [A → α⋅Bβ, i] ∈ D_j и (B → η) ∈ P, то [B → ⋅η, j] ∈ D_j. - Для простоты добавим новый стартовый вспомогательный нетерминал S′ и правило (S′ → S). Псевдокод: - function earley(G, w): - // Инициализация - D_0 = {[S′ → ⋅S, 0]} - for i=1 to len(w) - D_i = ∅ - // Вычисление ситуаций - for j=0 to len(w) - scan(D, j, G, w) - while D_j изменяется - complete(D, j, G, w) - predict(D, j, G, w) - // Результат - if [S′ → S⋅, 0] ∈ D_{len(w)} - return true - else - return false + id: 202 + questions: + - 'Автомат Глушкова - function scan(D, j, G, w): - if j == 0 - return - for [A → α⋅aβ, i] ∈ D_{j−1} - if a == w_{j−1} - D_j ∪= [A → αa⋅β, i] - - function complete(D, j, G, w): - for [B → η⋅, i] ∈ D_j - for [A → α⋅Bβ, j] ∈ D_i - D_j ∪= [A → αB⋅β, j] - - function predict(D, j, G, w): - for [A → α⋅Bβ, i] ∈ D_j - for (B → η) ∈ P - D_j ∪= [B → ⋅η, j] ' +- answer: 'Алгоритм построения автомата Глушкова по регулярному выражению: + 1) Линеаризация регулярного выражения - пронумеруем все символы регулярного выражения, начиная с 0 и исключая скобки и другие специальные символы выражения + 2) Вычисление множеств FIRST и LAST для регулярного выражения (множества символов, которые могут начинать и заканчивать слова, распознаваемые этим регулярным выражением) + 3) Вычисление множества FOLLOW для регулярного выражения, состоящего из пар (𝛾_i, 𝛾_j), в каждой из которых 𝛾_j может стоять после 𝛾_i в регулярном выражении + 4) Создание состояний: добавляем стартовое состояние и состояния, соответствующие пронумерованным символам регулярного выражения. Финальными обозначаем состояния, которые соответствуют пронумерованным символам, присутствующим в множестве LAST. Также делаем финальным состоянием стартовое, если регулярное выражение принимает пустую строку. + 5) Для каждого пронумерованного состояния из множества FIRST добавляем переходы из стартового состояния в состояние по этому символу, соответствующее пронумерованному символу из множества FIRST. + 6) Для каждой пары (𝛾_i, 𝛾_j) из множества FOLLOW добавляем переход по символу 𝛾_j из состояния, соответствующего символу 𝛾_i в состояние, соответствующее символу 𝛾_j + Таким образом будет построен недетерминированный конечный автомат Глушкова, распознающий это регулярное выражение + + ' author: Проклашкина Софья - id: 201 + id: 203 questions: - - 'Алгоритм Эрли - + - 'Как построить автомат Глушкова + ' + - 'Как построить автомат, распознающий данное регулярное выражение + + ' + - 'Как построить НКА по регулярному выражению + + ' + From b660ea402249e22a247300a31c80c80632dd4372 Mon Sep 17 00:00:00 2001 From: sprosonya <166607219+sprosonya@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:06:38 +0300 Subject: [PATCH 10/13] fix id --- data/data.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 58e2ccfe..65a37dbc 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -3545,7 +3545,7 @@ ' author: Проклашкина Софья - id: 202 + id: 200 questions: - 'Автомат Глушкова @@ -3561,7 +3561,7 @@ ' author: Проклашкина Софья - id: 203 + id: 201 questions: - 'Как построить автомат Глушкова From 7c48dfb44d7642e18cec26a5f74678fd1f4bb3e1 Mon Sep 17 00:00:00 2001 From: sprosonya <166607219+sprosonya@users.noreply.github.com> Date: Fri, 3 Jan 2025 22:53:13 +0300 Subject: [PATCH 11/13] Update data.yaml --- data/data.yaml | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 65a37dbc..06cc34c2 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -3432,6 +3432,9 @@ ' - 'Может ли язык накачиваться по лемме о накачке для контекстно-свободных языков, и при этом не быть контекстно-свободным + ' + - 'Приведи пример не КС языка который накачивается + ' - answer: 'Язык {a^n b^n | n>0} является контекстно-свободным языком, который может быть распознан с помощью конечного автомата со стековой памятью. Данный автомат будет содержать следующие состояния: @@ -3451,7 +3454,7 @@ author: Проклашкина Софья id: 193 questions: - - 'Конечный автомат для распознавания {a^n b^n | n>0} + - 'Конечный PDA для распознавания {a^n b^n | n>0} ' - answer: 'Длина накачки n регулярного языка L не больше (иногда меньше) числа нетерминалов в минимальной грамматике для L. Или, эквивалентно: длина накачки регулярного языка L не больше, чем размер минимального НКА для этого языка. @@ -3482,6 +3485,9 @@ questions: - 'Язык, допускаемый по заключительному состоянию + ' + - 'Язык, допускаемый по финальному состоянию + ' - answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0⟩, где Q — множество состояний автомата, @@ -3510,9 +3516,9 @@ ' - 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, α) нельзя ничего вывести). + 1. Если (p, a, S) → (q, γ) ∈ Δ, то |γ|⩽2, где γ ∈ G* — последовательность стековых символов, S∈G. + 2. Если (p, ε, S) → (q, γ) ∈ Δ, то γ = ε. + 3. Δ не содержит бесполезных переходов (переход (p, a, S) → (q, γ) считается бесполезным, если L(q, γ) = ∅, то есть из конфигурации (q, γ) нельзя ничего вывести). Нормальная форма ДМП упрощает его вид - все операции со стеком либо добавляют один символ, либо удаляют, либо оставляет стек неизменным, в автомате не существует бесполезных переходов (ловушек), а также по пустому символу переходы происходят в состояние с пустым стеком. ' @@ -3525,9 +3531,12 @@ - 'Нормальная форма ДМПА ' -- answer: 'Пусть M, - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. - Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → α, где a∈Σ, S∈G, α∈G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элментов, но важно количество. - Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → α ∈ Δ, тогда |α|⩽2 и L(α) ≠ ∅. + - 'Нормальная форма DPDA + + ' +- answer: 'Пусть M - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. + Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → γ, где a ∈ Σ, S ∈ G, γ ∈ G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элментов, но важно количество. + Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → γ ∈ Δ, тогда |γ|⩽2 и L(γ) ≠ ∅. ' author: Проклашкина Софья @@ -3553,10 +3562,10 @@ - answer: 'Алгоритм построения автомата Глушкова по регулярному выражению: 1) Линеаризация регулярного выражения - пронумеруем все символы регулярного выражения, начиная с 0 и исключая скобки и другие специальные символы выражения 2) Вычисление множеств FIRST и LAST для регулярного выражения (множества символов, которые могут начинать и заканчивать слова, распознаваемые этим регулярным выражением) - 3) Вычисление множества FOLLOW для регулярного выражения, состоящего из пар (𝛾_i, 𝛾_j), в каждой из которых 𝛾_j может стоять после 𝛾_i в регулярном выражении + 3) Вычисление множества FOLLOW для регулярного выражения, состоящего из пар (γ_i, γ_j), в каждой из которых γ_j может стоять после γ_i в регулярном выражении 4) Создание состояний: добавляем стартовое состояние и состояния, соответствующие пронумерованным символам регулярного выражения. Финальными обозначаем состояния, которые соответствуют пронумерованным символам, присутствующим в множестве LAST. Также делаем финальным состоянием стартовое, если регулярное выражение принимает пустую строку. 5) Для каждого пронумерованного состояния из множества FIRST добавляем переходы из стартового состояния в состояние по этому символу, соответствующее пронумерованному символу из множества FIRST. - 6) Для каждой пары (𝛾_i, 𝛾_j) из множества FOLLOW добавляем переход по символу 𝛾_j из состояния, соответствующего символу 𝛾_i в состояние, соответствующее символу 𝛾_j + 6) Для каждой пары (γ_i, γ_j) из множества FOLLOW добавляем переход по символу γ_j из состояния, соответствующего символу γ_i в состояние, соответствующее символу γ_j Таким образом будет построен недетерминированный конечный автомат Глушкова, распознающий это регулярное выражение ' From c94811486b68818e1e9a92ef556c9c836d5f4d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BE=D1=84=D1=8C=D1=8F?= <[sonya_pr@bk.ru]> Date: Wed, 15 Jan 2025 01:20:59 +0300 Subject: [PATCH 12/13] fix --- data/data.yaml | 175 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) diff --git a/data/data.yaml b/data/data.yaml index 8f5391d9..2c6b3a3a 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -4430,3 +4430,178 @@ - 'Существование линейной конъюнктивной грамматики из одного нетерминала' - 'Лемма о сжатии для линейных конъюнктивных грамматик ' +- answer: 'Лемма о накачке для контекстно-свободных языков (англ. Pumping lemma) является необходимым условием для того, чтобы язык порождался контекстно-свободной грамматикой, однако недостаточным. + То есть, если язык не накачивается с помощью леммы - он точно не контекстно-свободный, однако если накачивается - может таковым не являться. + Пример: язык L = {a^nb^nc^i, i ≠ n}. Докажем, что этот язык накачивается с помощью леммы. + Выберем для языка L = {a^nb^nc^i, i ≠ n} константу из леммы n = 5. Рассмотрим следующие случаи: + 1) Слово w = c^i. Пусть u = c^(i-1), v = c, x = y = z = ℇ (пустое слово). |vxy| ≤ 5. Очевидно, что при накачке uv^kxy^kz будет так же словом вида c^j, принадлежащим языку. + 2) Слово w = a^jb^j. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1). |vxy| ≤ n. При накачке uv^kxy^kz количество a и b будет увеличиваться одновременно и сбалансированно, структура слова a^jb^j сохранится и слово uv^kxy^kz = a^hb^h будет также принадлежать языку. + 3) Слово w = a^jb^jc^i, i < j-1. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1)c^i. |vxy| ≤ 5. При накачке uv^kxy^kz количество a и b будет одновременно и сбалансированно увеличиваться, при этом никогда не будет равным i. То есть, слово сохранит структуру uv^kxy^kz = a^hb^hc^i. + 4) Слово 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. + 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^nb^nc^(n!+n). Пометим все символы a и b и разобьем на u, v, x, y, z так, что x содержит выделенную позицию, u и v содержат выделенные позиции и vxy содержат не более n выделенных позиций. + Тогда очевидно, что vy должно содержать одинаковое число символов a и b, иначе выбираем k=0 и тогда количество символов a и b станет разным. + Пусть символов a в vy будет t. Очевидно, что vy не содержит символов c, так как vxy содержат не более n выделенных позиций, но v точно содержит символ a. Тогда выберем k = (n!)/t + 1 и получим слово a^(n!+n)b^(n!+n)c^(n!+n) которое не принадлежит языку. Значит, язык не удовлетворяет лемме Огдена и не является контекстно-свободным. + + ' + author: Проклашкина Софья + id: 248 + questions: + - 'Является ли выполнение условия леммы о накачке для контекстно-свободных языков достаточным для того, чтобы язык назвать контекстно-свободным? + Приведи пример языка, который накачивается в соответствии с этой леммой, но не является контекстно-свободным. + + ' + - 'Может ли язык накачиваться по лемме о накачке для контекстно-свободных языков, и при этом не быть контекстно-свободным + + ' + - 'Приведи пример не КС языка который накачивается + + ' +- answer: 'Язык {a^n b^n | n>0} является контекстно-свободным языком, который может быть распознан с помощью конечного автомата со стековой памятью. + Данный автомат будет содержать следующие состояния: + q_0: Начальное состояние, "накапливаем" количество символов a. + q_1: Состояние, когда мы уже прочитали все a и при встрече b снимаем со стека символы X. + q_2: Принимающее состояние (конечное состояние), в которое можно попасть лишь по пустому стеку, что гарантирует равенство количества символов a и b. + Алфавит стека: + Z_0: Дно стека. + X: Символ, добавляемый в стек. + Правила: + 2. При чтении символа a в состоянии q_0 добавляем символ X на стек, и остаемся в состоянии q_0. (q_0, a, Z_0) -> (q_0, XZ_0), (q_0, a, X) -> (q_0, XX). + 3. При чтении символа b в состоянии q_0 переходим в состояние q_1. (q_0, b, X) -> (q_1, ""). + 4. При чтении символа b в состоянии q_1 удаляем символ X со стека. (q_1, b, X) -> (q_1, ""). + 5. При чтении пустого символа ε и если в стеке Z_0 переходим в принимающее состояние q_2. (q_1, ε, Z_0) -> (q_2, Z_0). + + ' + author: Проклашкина Софья + id: 249 + questions: + - 'Конечный PDA для распознавания {a^n b^n | n>0} + + ' +- answer: 'Длина накачки n регулярного языка L не больше (иногда меньше) числа нетерминалов в минимальной грамматике для L. Или, эквивалентно: длина накачки регулярного языка L не больше, чем размер минимального НКА для этого языка. + + ' + author: Проклашкина Софья + id: 250 + questions: + - 'Как связана длина накачки из леммы о накачке регулярных языков и размер минимального НКА + + ' + - 'Как связано количество нетерминалов в минимальной грамматике и длина накачки для этого языка + + ' +- answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0, T⟩ — автомат с магазинной памятью, где + Q — множество состояний автомата, + Σ — входной алфавит на ленте, + G — стековый алфавит, + δ — функция переходов, + 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 и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения. + + ' + author: Проклашкина Софья + id: 251 + questions: + - 'Язык, допускаемый по заключительному состоянию + + ' + - 'Язык, допускаемый по финальному состоянию + + ' +- answer: 'Пусть A= ⟨Q, Σ, G, δ, s, Z0⟩, где + Q — множество состояний автомата, + Σ — входной алфавит на ленте, + G — стековый алфавит, + δ — функция переходов, + s — стартовое состояние автомата, + Z0 — маркер дна стека, + T — множество допускающих состояний автомата. + Тогда языком, допускаемым автоматом Aпо пустому стеку, является множество N(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, ε)}, где q — произвольное состояние. Сочетание (s, w, Z0) ⊢∗ (q, ε, α) означает, что функция переходов δ позволяет от (s, w, Z0), проходя через промежуточные значения функции, попасть в (s, w, Z0). Таким образом, автомат A допускает слово w, полностью опустошив свой стек. Множество заключительных состояний T не имеет значения. + + ' + author: Проклашкина Софья + id: 252 + questions: + - 'Язык, допускаемый по пустому стеку + + ' +- answer: 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому магазину (стеку), совпадают. + + ' + author: Проклашкина Софья + id: 253 + questions: + - 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому стеку + + ' +- 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, γ) нельзя ничего вывести). + Нормальная форма ДМП упрощает его вид - все операции со стеком либо добавляют один символ, либо удаляют, либо оставляет стек неизменным, в автомате не существует бесполезных переходов (ловушек), а также по пустому символу переходы происходят в состояние с пустым стеком. + + ' + author: Проклашкина Софья + id: 254 + questions: + - 'Детерминированный автомат с магазинной памятью в нормальной форме + + ' + - 'Нормальная форма ДМПА + + ' + - 'Нормальная форма DPDA + + ' +- answer: 'Пусть M - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. + Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → γ, где a ∈ Σ, S ∈ G, γ ∈ G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элментов, но важно количество. + Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → γ ∈ Δ, тогда |γ|⩽2 и L(γ) ≠ ∅. + + ' + author: Проклашкина Софья + id: 255 + questions: + - 'Автомат с единственным состоянием. Его нормальная форма. + + ' + - 'SDA normal form + + ' + +- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный по регулярному выражению. Принимает те же строки, что и соответствующее регулярное выражение. + Автомат Глушкова без ε-переходов эквивалентен автомату, построенному по тому же регулярному выражению по алгоритму Томсона. + + ' + author: Проклашкина Софья + id: 256 + questions: + - 'Автомат Глушкова + + ' +- answer: 'Алгоритм построения автомата Глушкова по регулярному выражению: + 1) Линеаризация регулярного выражения - пронумеруем все символы регулярного выражения, начиная с 0 и исключая скобки и другие специальные символы выражения + 2) Вычисление множеств FIRST и LAST для регулярного выражения (множества символов, которые могут начинать и заканчивать слова, распознаваемые этим регулярным выражением) + 3) Вычисление множества FOLLOW для регулярного выражения, состоящего из пар (γ_i, γ_j), в каждой из которых γ_j может стоять после γ_i в регулярном выражении + 4) Создание состояний: добавляем стартовое состояние и состояния, соответствующие пронумерованным символам регулярного выражения. Финальными обозначаем состояния, которые соответствуют пронумерованным символам, присутствующим в множестве LAST. Также делаем финальным состоянием стартовое, если регулярное выражение принимает пустую строку. + 5) Для каждого пронумерованного состояния из множества FIRST добавляем переходы из стартового состояния в состояние по этому символу, соответствующее пронумерованному символу из множества FIRST. + 6) Для каждой пары (γ_i, γ_j) из множества FOLLOW добавляем переход по символу γ_j из состояния, соответствующего символу γ_i в состояние, соответствующее символу γ_j + Таким образом будет построен недетерминированный конечный автомат Глушкова, распознающий это регулярное выражение + + ' + author: Проклашкина Софья + id: 257 + questions: + - 'Как построить автомат Глушкова + + ' + - 'Как построить автомат, распознающий данное регулярное выражение + + ' + - 'Как построить НКА по регулярному выражению + + ' + \ No newline at end of file From 3d62cb9af3e3eeb2e3f8287378ad4e467b8b3821 Mon Sep 17 00:00:00 2001 From: sprosonya <166607219+sprosonya@users.noreply.github.com> Date: Wed, 15 Jan 2025 18:24:52 +0300 Subject: [PATCH 13/13] fix --- data/data.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/data/data.yaml b/data/data.yaml index 2c6b3a3a..b481fe32 100644 --- a/data/data.yaml +++ b/data/data.yaml @@ -4432,8 +4432,8 @@ ' - answer: 'Лемма о накачке для контекстно-свободных языков (англ. Pumping lemma) является необходимым условием для того, чтобы язык порождался контекстно-свободной грамматикой, однако недостаточным. То есть, если язык не накачивается с помощью леммы - он точно не контекстно-свободный, однако если накачивается - может таковым не являться. - Пример: язык L = {a^nb^nc^i, i ≠ n}. Докажем, что этот язык накачивается с помощью леммы. - Выберем для языка L = {a^nb^nc^i, i ≠ n} константу из леммы n = 5. Рассмотрим следующие случаи: + Пример: язык L = {a^mb^mc^i, i ≠ m}. Докажем, что этот язык накачивается с помощью леммы. + Выберем для языка L = {a^mb^mc^i, i ≠ m} константу из леммы n = 5. Рассмотрим следующие случаи: 1) Слово w = c^i. Пусть u = c^(i-1), v = c, x = y = z = ℇ (пустое слово). |vxy| ≤ 5. Очевидно, что при накачке uv^kxy^kz будет так же словом вида c^j, принадлежащим языку. 2) Слово w = a^jb^j. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1). |vxy| ≤ n. При накачке uv^kxy^kz количество a и b будет увеличиваться одновременно и сбалансированно, структура слова a^jb^j сохранится и слово uv^kxy^kz = a^hb^h будет также принадлежать языку. 3) Слово w = a^jb^jc^i, i < j-1. Пусть u = a^(j-1), v = a, x = ℇ, y = b, z = b^(j-1)c^i. |vxy| ≤ 5. При накачке uv^kxy^kz количество a и b будет одновременно и сбалансированно увеличиваться, при этом никогда не будет равным i. То есть, слово сохранит структуру uv^kxy^kz = a^hb^hc^i. @@ -4441,9 +4441,9 @@ 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^nb^nc^(n!+n). Пометим все символы a и b и разобьем на u, v, x, y, z так, что x содержит выделенную позицию, u и v содержат выделенные позиции и vxy содержат не более n выделенных позиций. + Для фиксированного n из леммы Огдена рассмотрим слово w = a^mb^mc^(m!+m). Пометим все символы a и b и разобьем на u, v, x, y, z так, что x содержит выделенную позицию, u и v содержат выделенные позиции и vxy содержат не более n выделенных позиций. Тогда очевидно, что vy должно содержать одинаковое число символов a и b, иначе выбираем k=0 и тогда количество символов a и b станет разным. - Пусть символов a в vy будет t. Очевидно, что vy не содержит символов c, так как vxy содержат не более n выделенных позиций, но v точно содержит символ a. Тогда выберем k = (n!)/t + 1 и получим слово a^(n!+n)b^(n!+n)c^(n!+n) которое не принадлежит языку. Значит, язык не удовлетворяет лемме Огдена и не является контекстно-свободным. + Пусть символов a в vy будет t. Очевидно, что vy не содержит символов c, так как vxy содержат не более n выделенных позиций, но v точно содержит символ a. Тогда выберем k = (m!)/t + 1 и получим слово a^(m!+m)b^(m!+m)c^(m!+m) которое не принадлежит языку. Значит, язык не удовлетворяет лемме Огдена и не является контекстно-свободным. ' author: Проклашкина Софья @@ -4462,7 +4462,7 @@ - answer: 'Язык {a^n b^n | n>0} является контекстно-свободным языком, который может быть распознан с помощью конечного автомата со стековой памятью. Данный автомат будет содержать следующие состояния: q_0: Начальное состояние, "накапливаем" количество символов a. - q_1: Состояние, когда мы уже прочитали все a и при встрече b снимаем со стека символы X. + q_1: Состояние, когда мы уже прочитали все a и при встрече b снимаем со стека символы. q_2: Принимающее состояние (конечное состояние), в которое можно попасть лишь по пустому стеку, что гарантирует равенство количества символов a и b. Алфавит стека: Z_0: Дно стека. @@ -4500,7 +4500,7 @@ 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 и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения. + Тогда языком, допускаемым автоматом Aпо заключительному состоянию, является L(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, α)} для некоторого состояния q ∈ T и произвольной магазинной цепочки α. Сочетание (s, w, Z0) ⊢* (q, ε, α) означает, что функция переходов δ позволяет от (s, w, Z0), проходя через промежуточные значения функции, попасть в (q, ε, α). Начиная с стартовой вершины s и w на входе, автомат читает слово w и достигает допускающего состояния. Содержимое стека в этот момент не имеет значения. ' author: Проклашкина Софья @@ -4520,7 +4520,7 @@ s — стартовое состояние автомата, Z0 — маркер дна стека, T — множество допускающих состояний автомата. - Тогда языком, допускаемым автоматом Aпо пустому стеку, является множество N(A) = {w ∣ (s, w, Z0) ⊢∗ (q, ε, ε)}, где q — произвольное состояние. Сочетание (s, w, Z0) ⊢∗ (q, ε, α) означает, что функция переходов δ позволяет от (s, w, Z0), проходя через промежуточные значения функции, попасть в (s, w, Z0). Таким образом, автомат A допускает слово w, полностью опустошив свой стек. Множество заключительных состояний T не имеет значения. + Тогда языком, допускаемым автоматом Aпо пустому стеку, является множество N(A) = {w ∣ (s, w, Z0) ⊢* (q, ε, ε)}, где q — произвольное состояние. Сочетание (s, w, Z0) ⊢∗ (q, ε, α) означает, что функция переходов δ позволяет от (s, w, Z0), проходя через промежуточные значения функции, попасть в (q, ε, α). Таким образом, автомат A допускает слово w, полностью опустошив свой стек. Множество заключительных состояний T не имеет значения. ' author: Проклашкина Софья @@ -4538,7 +4538,7 @@ - 'Классы языков, допускаемых автоматами с магазинной памятью по заключительному состоянию и по пустому стеку ' -- answer: 'ДМП (DPDA) в нормальной форме - это детерминированный автомат с магазинной памятью M, представленный конечным набором состояний Q, входным алфавитом на ленте Σ, стековым алфавитом G и множеством переходов Δ, который удовлетворяет следующим условиям: +- 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, γ) нельзя ничего вывести). @@ -4558,7 +4558,7 @@ ' - answer: 'Пусть M - автомат со стековой памятью, представленный тройкой: входной алфавит на ленте Σ, стековый алфавит G и множество переходов Δ. - Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → γ, где a ∈ Σ, S ∈ G, γ ∈ G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элментов, но важно количество. + Тогда M называется автоматом с единственным состоянием (англ. Single State Push Down Automata, SDA), если переходы в нем имеют вид (S, a) → γ, где a ∈ Σ, S ∈ G, γ ∈ G*. ДМП-автомат с единственным состоянием — это минимальная модель для работы со стеком, который может обрабатывать некоторые КС-языки, в которых, например, не важен порядок элементов, но важно количество. Автомат с единственным состоянием находится в нормальной форме, если все его переходы удовлетворяют следующему условию: если (S, a) → γ ∈ Δ, тогда |γ|⩽2 и L(γ) ≠ ∅. ' @@ -4572,8 +4572,8 @@ ' -- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный по регулярному выражению. Принимает те же строки, что и соответствующее регулярное выражение. - Автомат Глушкова без ε-переходов эквивалентен автомату, построенному по тому же регулярному выражению по алгоритму Томсона. +- answer: 'Автомат Глушкова - недетерминированный конечный автомат, построенный с использованием множеств First, Last, Follow линеаризованного регулярного выражения. Принимает те же строки, что и соответствующее регулярное выражение. + Автомат Глушкова эквивалентен автомату без ε-переходов, построенному по тому же регулярному выражению по алгоритму Томсона. ' author: Проклашкина Софья @@ -4604,4 +4604,4 @@ - 'Как построить НКА по регулярному выражению ' - \ No newline at end of file +