W7. Преобразователи с магазином (PDT), операции над языками DPDA, теория автоматов и модели вычислений
1. Краткое содержание
1.1 Напоминание: конечные преобразователи (FST)
Прежде чем вводить более мощный преобразователь с магазином (PDT), полезно вспомнить, как работает конечный преобразователь (FST), поскольку PDT — его прямое обобщение.
Конечный преобразователь (FST) — это конечный автомат (FSA), дополненный механизмом вывода. Формально FST — это кортеж
— обычный FSA (состояния, входной алфавит, функция переходов, начальное состояние, принимающие состояния); — выходной алфавит — множество символов, которые могут записываться на выход; — функция перевода — она сопоставляет каждой паре «состояние — входной символ» выходную строку.
Важное замечание: функция
Как работает FST: при чтении каждого входного символа FST одновременно (a) меняет состояние (через вход/выход, например a/A означает «прочитать
Пример — простой регистронный преобразователь:
Пусть
У FST одно принимающее состояние
: прочитать , вывести : прочитать , вывести
На входе
Пример — FST с ограниченной областью:
Пусть
(принимающее): читает и выводит ; при чтении переходит в непринимающее «стоковое» состояние (отвергающее): читает любой символ и выводит (строка всё равно будет отвергнута)
На входе
Ограничение FST: как и у FSA, память только конечная и фиксированная (текущее состояние). Нельзя обрабатывать языки, где нужен «счёт», например
1.2 Преобразователи с магазином (PDT)
1.2.1 Мотивация и наглядная картина
Преобразователь с магазином (PDT) расширяет автомат с магазином (PDA) выходной лентой так же, как FST расширяет FSA. PDT использует стек не только для распознавания языка (как в PDA), но и для помощи переводу: в стеке хранится промежуточная информация, нужная для корректного выхода.
Архитектура PDT состоит из четырёх частей:
- Входная лента: только для чтения; символы читаются слева направо
- Конечное управление: конечное множество состояний и логика переходов
- Стек: память LIFO (последним пришёл — первым ушёл), может неограниченно расти
- Выходная лента: только для записи; к ней дописываются выходные символы
Стек — разрушающая память: символ, снятый со стека, исчезает. В этом и сила PDT, и его принципиальное ограничение.
Один переход PDT за атомарный шаг: читает входной символ (или
1.2.2 Нотация переходов
Переход из состояния
где:
— прочитанный входной символ (или для тихого шага) — символ стека, снимаемый с вершины — строка, вталкиваемая на стек (вместо ) — строка, записываемая на выходную ленту
Альтернативная нотация отделяет двоеточием часть стека от выхода:
В литературе встречаются обе; смысл один.
То есть
1.2.3 Формальное определение
Преобразователь с магазином — это 9-кортеж:
где:
— конечное множество состояний — конечный входной алфавит — конечный алфавит стека — функция переходов (частичная; образ — конечные подмножества) — начальное состояние — начальный символ стека (маркер дна) — принимающие состояния — конечный выходной алфавит — функция перевода (определена только там, где определена )
Замечания:
— те же компоненты, что у обычного PDA-«распознавателя». определена только там, где определена — на неопределённых переходах выхода нет.- Стек может быть нужен по двум разным причинам: (a) для распознавания языка, и/или (b) для перевода.
1.2.4 Конфигурации и переходы
Конфигурация PDT — это 4-кортеж:
где:
— текущее состояние управления — непрочитанный остаток входной строки — текущее содержимое стека (верхний символ записан первым) — строка, уже записанная на выходную ленту
Переходы между конфигурациями:
- Шаг по входу (потребление символа
): если и , то: -шаг (тихий, вход не читается): если и , то:
Важно: при
1.2.5 Условие принятия
PDT переводит строку
Это согласуется с тем, как устроен перевод в FST: перевод
1.3 Примеры PDT
1.3.1 Перевод
Пусть
Идея: стек считает число
Состояния
: переход — первое , втолкнуть над , вывести : — каждое следующее , ещё на стек, вывести : — начало чтения , снять один , вывести : — каждое следующее , снять , вывести : — если после входа наверху , принять (без выхода)
На входе
1.3.2 Перевод
Пусть
Идея: на фазе вталкивания (
: и — вталкивать без выхода : — первое , снять , вывести : — дальше , выводить : — принять
Итог:
1.3.3 Перевод
Пусть
Идея: на фазе
: и — вталкивать , на каждое выводить : — снять , вывести : : — принять
Итог:
1.3.4 Перевод (обращение строки)
Пусть
Идея (СНАЧАЛА ВТАЛКИВАНИЕ — ПОТОМ СНЯТИЕ): пока читается
- Состояние
(ФАЗА ВТАЛКИВАНИЯ — БЕЗ ВЫХОДА): ; ; ; ;
- Переход
(КОНЕЦ ВТАЛКИВАНИЯ): ;
- Состояние
(ФАЗА СНЯТИЯ — ФОРМИРОВАНИЕ ВЫХОДА): ;
- Переход
(принимающее):
На входе
Стек позволяет переводы, где выход не следует строго слева направо по входу.
1.4 Свойства замкнутости языков DPDA
Перейдём от преобразователей к базовому вопросу теории формальных языков: какие операции сохраняют класс языков, распознаваемых детерминированными автоматами с магазином (DPDA)?
Это вопрос свойств замкнутости. Класс языков
Формально:
Зачем это нужно: для регулярных языков (FSA) класс замкнут по четырём стандартным операциям — объединение, пересечение, дополнение и разность. Интересно, есть ли у детерминированных контекстно-свободных языков (DPDA) такие же удобные свойства.
Итог (сводная таблица):
| FSA (регулярные) | да | да | да | да |
| DPDA (дет. КС-языки) | нет | нет | нет | да |
Далее по очереди разберём каждую операцию и причину результата.
1.4.1 Замкнутость по объединению: НЕТ
Утверждение: класс языков DPDA не замкнут по объединению.
Контрпример: два языка над
И
не распознаётся ни одним DPDA.
Наглядно: «проблема подготовки стека». Пока DPDA читает
Точнее: после
В отличие от регулярных: для FSA объединение строится декартовым произведением; для DPDA общего аналога нет — стеки для
1.4.2 Замкнутость по пересечению: НЕТ
Утверждение: DPDA не замкнут по пересечению.
Контрпример: языки над
Оба распознаются DPDA:
: считать , по одному сопоставлять , затем принять любое положительное число . : пропустить любое положительное число , считать , сопоставлять один к одному.
Пересечение:
Классический язык
Через дополнение: алгебраически, законы де Моргана:
Так как DPDA замкнут по дополнению (ниже), при замкнутости по пересечению получилась бы замкнутость по объединению — противоречие.
1.4.3 Замкнутость по дополнению: ДА
Утверждение: DPDA замкнут по дополнению.
Теорема: если
Почему для NPDA дополнение «ломается», а для DPDA — нет: у NPDA строка может отвергаться на всех путях, но приниматься на другом; недетерминизм мешает просто «инвертировать» принятие. У детерминированного PDA на каждый вход одна вычислимая ветка — принятые и отвергнутые строки разделимы.
Набросок построения — почему недостаточно поменять местами финальные состояния:
Для FSA дополнение: поменять финальные и нефинальные. У PDA наивный приём ломается из-за
Правильное построение — три шага:
- Убрать циклы: привести DPDA к ациклическому виду — после прочтения всего входа дальнейших
-ходов нет. Любой DPDA эквивалентен ациклическому DPDA (нетривиальный факт). Тогда проблема выше исчезает. - Полнота
: сделать переходы везде определёнными, добавив непринимающее «мусорное» состояние для всех «дыр». Тогда из каждой конфигурации ровно один следующий шаг. - Обмен финальных и нефинальных: раз машина после полного чтения входа останавливается в однозначном состоянии без
-неоднозначности, обмен и даёт язык-дополнение.
Зачем ацикличность: иначе после конца входа возможны бесконечные
1.4.4 Замкнутость по разности: НЕТ
Утверждение: DPDA не замкнут по разности множеств.
От противного: пусть замкнут по
По дополнению
Сравнение с регулярными: у FSA все четыре операции; у дет. КСЯ профиль асимметричен — только дополнение.
1.5 Лемма Бар-Хиллеля (накачка для КС-языков)
Лемма Бар-Хиллеля обобщает лемму о накачке с регулярных языков на контекстно-свободные. Как лемма о накачке для регулярных даёт необходимое условие регулярности, Бар-Хиллель даёт необходимое (но не достаточное) условие контекстно-свободности.
Лемма Бар-Хиллеля: если
причём:
(накачиваемые части не обе пусты) (окно накачки ограничено) для всех
В отличие от регулярной леммы (одна подстрока
Применение —
Пусть
короткое, значит пересекает не больше двух из трёх блоков ( , , ).- Накачка вверх (
) увеличивает не более двух типов символов, не все три поровну. - Тогда
имеет неравные числа , , — не в .
Противоречие. Значит
1.6 Стек как разрушающая память и пределы PDA
1.6.1 Разрушающая и постоянная память
У PDA стек разрушающий: снятый символ не восстановить. Поэтому:
- PDA распознаёт
: операций push на , затем по одному pop на каждый . - PDA не распознаёт
: для снова нужно знать , а стек уже «использован» на .
Нужна постоянная (читаемая/записываемая) память — устройство, где ячейку можно прочитать без уничтожения. Это мотивация машин Тьюринга с неограниченной лентой чтения-записи вместо стека.
1.6.2 Иерархия языков
Иерархия по моделям:
- Регулярные ⊂ контекстно-свободные (КСЯ) ⊂ перечислимые (всё, что считает МТ)
Границы:
: не регулярный (лемма о накачке), но КС (PDA) : не КС (Бар-Хиллель), но вычислим МТ : КС (NPDA), но не детерминированный КС-язык
1.7 Почему PDA в центре компиляторов
PDA — не только абстракция: они напрямую связаны с построением компиляторов.
1.7.1 PDA и компиляторы
Стек в PDA — политика LIFO. Она как раз подходит для вложенных синтаксических конструкций:
- Арифметика со скобками:
(a + (b * c)) - Блочная структура
begin/endили{/} - Цепочки вызовов (каждый вызов — кадр на стек, возврат — снятие)
Типичные фазы компилятора:
- Лексический анализ: токены — часто FSA
- Синтаксический анализ (разбор): грамматика программы — NPDA (КС-грамматики описывают большую часть синтаксиса языков программирования)
- Семантика, генерация кода, оптимизация — дальше
Поэтому синтаксис почти всех ЯП задаёт контекстно-свободной грамматикой, а парсеры — по сути PDA.
1.7.2 Фиксированная и неограниченная память
- FSA: память ограничена числом состояний — не сосчитать произвольное
. - PDA: состояний конечно, но стек неограничен — можно сосчитать любое
вталкиваниями.
Для
1.8 Теория автоматов и модели вычислений
1.8.1 Что такое теория автоматов?
Теория автоматов — раздел теоретической информатики, изучающий:
- Абстрактные математические машины (автоматы) и их вычислительные свойства
- Задачи, которые решают разные типы автоматов
Слово automaton (мн.ч. automata) от греч. αὐτόματον — «самодвижущийся». У Гомера — про автоматические двери и статуи.
1.8.2 Зачем изучать теорию автоматов?
- Автомат — конечное описание языка, который может быть бесконечным
- Автоматы — теоретические модели вычислителей для строгих доказательств о разрешимости и сложности
- Практика: компиляторы, проверка моделей, протоколы, поиск по шаблону
1.8.3 Модели вычислений
Модель вычислений описывает, как из входа получают выход, как устроены память и шаги. Разные модели — разная вычислительная мощность:
Последовательные модели:
- FSA — ограниченная выразительность, фиксированная память; шаблоны, проверка моделей
- PDA — стек, вложенность; основа разбора
- Машина Тьюринга — неограниченная лента чтения-записи; общая последовательная модель
Функциональные модели:
- Лямбда-исчисление — редукция и применение функций
Параллельные модели:
- Сети Петри — параллельные и распределённые системы
Список неполный (регистровые машины, клеточные автоматы и т.д.).
1.8.4 Применения FSA на практике
FSA широко используются:
- Машины Мура/Мили — цифровые схемы
- Мили по сути FST — выход на переходах
- Лексический анализ: токены
- Диаграммы состояний UML
- Протоколы: турникеты, автоматы, сети
Главное ограничение FSA — фиксированная память: без счёта и без запоминания неограниченного объёма данных.
2. Определения
- Конечный преобразователь (FST): FSA с выходом. 7-кортеж
, где — выходной алфавит, — функция перевода. Перевод только для принятых строк. - Преобразователь с магазином (PDT): PDA с выходной лентой. 9-кортеж
, где — выходной алфавит, — функция перевода. Стек хранит информацию и для распознавания, и для перевода. - Конфигурация PDT: 4-кортеж
: состояние , непрочитанный вход , стек (верх первым), уже записанный выход . - Функция перевода (
): задаёт выход на переходе. : в , читая при вершине , записать . Определена только там, где определена . - Метка перехода PDT: на стрелке
(или ): прочитать , снять , втолкнуть , записать . - Замкнутость по операции: класс
замкнут по , если для любых результат . - DPDA (детерминированный PDA): у каждой конфигурации не больше одного продолжения:
для всех , и влечёт . - Детерминированный контекстно-свободный язык (DCFL): язык, распознаваемый некоторым DPDA. Класс DCFL строго вложен в класс CFL.
- Ациклический PDA: для каждого входа
вычисление всегда завершается; после исчерпания входа -переходов нет. Любой DPDA эквивалентен ациклическому DPDA. - Разрушающая память: свойство стека — снятый символ теряется безвозвратно. В отличие от ленты МТ, где чтение не стирает символ.
- Лемма Бар-Хиллеля (накачка для КС-языков): если
КС, то : любое , , раскладывается с , и . - Теория автоматов: раздел ТКС об абстрактных машинах и разрешимых ими задачах.
- Модель вычислений: математическая схема: как из входа получают выход, как устроены память и шаги. Примеры: FSA, PDA, МТ,
-исчисление, сети Петри. - Машина Тьюринга (МТ): модель с бесконечной лентой чтения-записи. Сильнее PDA: память не разрушается при чтении. Общая последовательная модель.
- Контекстно-свободный язык (CFL): язык, распознаваемый (недетерминированным) PDA, эквивалентно порождённый КС-грамматикой. Все регулярные — КС, обратное неверно.
3. Формулы
- Формально PDT:
, где и - Переход PDT (по входу):
при и - Переход PDT (
): при и - Условие принятия и перевода PDT:
для некоторого - Лемма Бар-Хиллеля: для КС
, : , , разбиение с , и - Пересечение через разность:
(доказательство незамкнутости DPDA по из незамкнутости по ) - Де Морган (множества):
- Сводка по DPDA: замкнутость только по
; нет замкнутости по , ,
4. Примеры
4.1. Построить DPDT, переводящий в (Лаба 7, Задание 1)
Постройте детерминированный преобразователь с магазином, который принимает a и b, лишние b отбросить).
Показать решение
Идея: на каждое a втолкнуть a). На фазе b снимать по b — когда стек «опустел» (все b без выхода.
Состояния:
(чтениеa), (чтениеb, стек ещё не пуст до ), (лишниеbпосле опустошения счётчика — принимающее)Переходы:
От К Метка Смысл Втолкнуть , вывестиaВтолкнуть , вывестиaПервое b: снять , вывестиbЕщё b: снять , вывестиbСтек без : всеaсопоставлены, фаза «лишние b»Лишние b: игнорировать (без выхода)Принятие:
принимающее (после -перехода, на стеке только ). Условие обеспечивается: без фазы вталкивания в в не попасть.Трассировка для
( , ):a: втолкнуть , выходaa: втолкнуть , выходab: снять , выходbb: снять , выходb -переход в (на стеке )b: снять без выхода- Конец:
принимает. Выход: . ✓
Ответ: a и первые b; остальные b отбросить.
4.2. Построить DPDT, обращающий строки в (Лаба 7, Задание 2)
Постройте детерминированный преобразователь с магазином, распознающий
Показать решение
Идея: LIFO стека даёт обращение. Втолкивать каждый символ
Состояния:
(фаза вталкивания — ), (фаза снятия после ), (принимающее)Переходы:
От К Метка Смысл Втолкнуть , без выходаВтолкнуть , без выходаВтолкнуть под , без выходаВтолкнуть , без выходаВтолкнуть , без выходаВтолкнуть под , без выхода : снять , вывестиa : снять , вывестиbСнять , вывестиaСнять , вывестиbСтек пуст до маркера: принять Трассировка для
( , ):- Втолкнуть
, (без выхода) - Прочитать
c: снять , выходb : снять , выходa : вершина → принять. Выход: . ✓
- Втолкнуть
Ответ:
4.3. Построить DPDT, переводящий в (Лаба 7, Задание 3)
Постройте DPDT, принимающий
Показать решение
Идея: на ведущие a выводить a и вести счётчик в стеке. На каждое b выводить b. После b на хвостовые a снимать стек без выхода — при совпадении чисел принять.
Состояния:
(ведущие ), ( ), (хвостовые ), (принимающее)Переходы:
От К Метка Смысл Ведущее a: втолкнуть , вывестиaЕщё ведущие a: втолкнуть , вывестиaПервое b: стек не менять, вывестиbЕщё b: вывестиb, стек не трогатьПервое хвостовое a: снять , без выходаЕщё хвостовые a: снять , без выходаСтек без : хвост согласован — принятьТрассировка для
:a,a: втолкнуть , выходa; то же для второго- три
b: выходb,b,b(стек ) - два
a: снять , без выхода; снова → , принять. Выход: . ✓
Ответ: a и все b; хвостовые a только проверить.
4.4. Построить DPDT, переводящий в (Лаба 7, Задание 4)
Постройте DPDT, принимающий b, «лишние» b, «оплаченные» символами c, отбросить на выходе).
Показать решение
Идея: из b. Вывести a, сопоставить ровно b с втолкнутыми b), затем без выхода прочитать ещё b, затем проверить c с выводом c.
Стратегия:
- На каждое
aвтолкнуть (вывестиa). - Сопоставлять
bс (снять , вывестиb) — после символовbна стеке только . - Дальше читать
b, вталкивая (без выхода) — «лишние»b. - Сопоставлять
cс (снять , вывестиc). - Принять, когда и
, и исчерпаны по смыслу построения.
- На каждое
Состояния:
(a), (bпротив ), (лишниеb, вталкивание ), (cпротив ), (принимающее)Переходы:
От К Метка Смысл Втолкнуть , вывестиaВтолкнуть , вывестиaПервое b: снять , вывестиbЕщё bпротив : снять, вывестиbСтек без (прочитано символовb): фаза лишнихbЕщё лишние b: втолкнуть , без выходаПервое c: снять , вывестиcЕщё c: снять , вывестиcВсё согласовано: принять Трассировка для
( , , , ✓):- Втолкнуть
, выходa,a - Снять
, выходb; снять , выходb - Втолкнуть
, (два лишнихb) - Снять
, выходc; снять , выходc - Вершина
→ принять. Выход: . ✓
- Втолкнуть
Ответ: b (с выводом b), затем вталкивание b, затем снятие c (с выводом c).
4.5. Построить DPDT, переводящий в (Лаба 7, Задание 5)
Постройте DPDT, принимающий
Показать решение
Идея: b между a втолкивать два символа a). На каждое b снимать один маркер; выводить b только для «первичных» снятий в пределах
Проще: на каждое a — два маркера на стеке, снятие по одному на каждое b. Выход
- Фаза вталкивания: на каждое
a— и . Вывестиa. - Фаза снятия: на каждое
bснять один маркер. Выводитьbтолько для первых снятий. - Принятие: когда маркеры исчерпаны при
.
Упрощённая схема переходов:
Состояния: a), b, снятие первой «половины» маркеров — с выходом b), b, вторая «половина» — без выхода),
Символы стека: b) и a втолкнуть
| От | К | Метка | Смысл |
|---|---|---|---|
Втолкнуть a |
|||
Втолкнуть a |
|||
Втолкнуть a |
|||
Первое b по первичному маркеру: снять b |
|||
Ещё b против b |
|||
b против вторичного: снять |
|||
Ещё b против |
|||
Сняты только b): принять |
|||
| Все маркеры сняты: принять |
Ответ: a; на каждое b снять один маркер; b на выход только для первичных маркеров; принять при пустоте стека в допустимом диапазоне.
4.6. Замкнутость класса языков DPDA по дополнению — идея построения (Лекция 7, Пример 1)
Объясните, почему класс языков DPDA замкнут по дополнению, и набросайте построение дополняющего DPDA.
Показать решение
Идея: дополнение языка DPDA строится так: (1) сделать DPDA ациклическим, (2) полностью определить
- Почему не работает простой обмен состояний: на входе
машина может оказаться в непринимающем , затем -перейти в принимающее . После обмена станет принимающим — «дополнение» тоже примет — ошибка. - Шаг 1 — убрать циклы (ацикличность): преобразовать DPDA так, чтобы после полного чтения входа
-продолжений не было; вычисление заканчивается в однозначном состоянии. Любой DPDA эквивалентен ациклическому (доказательство опускаем; нужно аккуратно убрать -циклы без смены языка). - Шаг 2 — полнота
: добавить непринимающее состояние ошибки и направить туда все неопределённые переходы. Тогда у каждой конфигурации ровно один преемник. - Шаг 3 — обмен
и : машина полна и ациклична после входа — одно финальное состояние; обмен корректно инвертирует принятие. - Итог: дополняющий DPDA распознаёт
, если исходный распознаёт . DPDA замкнут по .
Ответ: замкнутость по дополнению — трёхшаговое построение: ацикличность, полнота
4.7. Незамкнутость DPDA по разности — доказательство от противного (Лекция 7, Пример 2)
Докажите, что DPDA не замкнут по разности множеств (
Показать решение
Идея: тождество
- Предположим от противного: DPDA замкнут по
. - Тождество: для любых
: - Замкнутости: по дополнению
. По предположению , значит для любых . - Но мы доказали незамкнутость по
(например ). Противоречие. - Вывод: предположение неверно. DPDA не замкнут по
.
Ответ: от противного через
4.8. Незамкнутость DPDA по объединению — контрпример (Лекция 7, Пример 3)
Покажите, что класс языков, распознаваемых DPDA, не замкнут по объединению, используя
Показать решение
Идея: a готовиться сразу к двум вариантам числа b.
: втолкнуть по одному наa, затем снимать по одному наb; принять при сверху после всехb. Стандартная конструкция. : втолкнуть два на каждоеa, затем снимать по одному наb; принять при сверху. :- Читая
, DPDA должен «закоммитить» стек под или символовb. - После
aстек фиксирован; числоaне перечитать. - Детерминированно нельзя одновременно подготовиться к
и символамb. - Формально часто ссылаются на
(Бар-Хиллель) и алгебраические приёмы.
- Читая
- Вывод:
, значит DPDA не замкнут по .
Ответ: объединение
4.9. FST — перевод всех строк над (Туториал 7, Пример 1)
Постройте конечный преобразователь, принимающий любую строку
Показать решение
Идея: все строки принимаются — достаточно одного принимающего состояния с петлями.
- Компоненты FST:
- Состояния:
; начальное ; - Входной алфавит
; выходной
- Состояния:
- Переходы (петли на
): : прочитатьa, записатьA : прочитатьb, записатьB
- Трассировка для
:aв : выходA, остаться вb: выходB, остатьсяa: выходA, остаться- Конец входа;
→ принято
Ответ: выход
4.10. FST — перевод только строк без символов b (Туториал 7, Пример 2)
Постройте конечный преобразователь, принимающий строки b, с переводом b отвергаются (перевод не определён).
Показать решение
Идея: стоковое непринимающее состояние после первого b.
- Состояния:
(принимающее —bещё не было), (сток — былоb) - Переходы:
: в сток : в стоке без выхода
- Трассировка
: остаёмся в , выход → принято, перевод - Трассировка
: → отвергнуто (перевод не определён)
Ответ: состояния b переводятся в «верхний регистр»; с b — отвергаются.
4.11. PDT — перевод (Туториал 7, Пример 3)
Постройте преобразователь с магазином для
Показать решение
Идея: нужен стек для подсчёта b. FST не сосчитает произвольное
Состояния:
(старт), (a), (b), (принимающее)Алфавит стека:
Переходы:
От К Метка Смысл Первое a: втолкнуть , вывестиAЕщё a: втолкнуть , вывестиAПервое b: снять , вывестиBЕщё b: снять , вывестиBТолько наверху: принятьТрассировка для
: (выходA) (выходA) (выходB) (выходB) — ПРИНЯТО
Ответ: a, затем сопоставляет b.
4.12. PDT — перевод (Туториал 7, Пример 4)
Постройте детерминированный преобразователь с магазином для a).
Показать решение
Идея: на фазе a выводить b выводить b на каждое снятие.
Состояния:
(a), (b), (принимающее)Переходы:
От К Метка Смысл Первое a: втолкнуть , без выходаЕщё a: втолкнуть , без выходаПервое b: снять , вывестиbЕщё b: снять , вывестиbСтек пуст до маркера: принять, без выхода Трассировка для
(3aи 2b— не в ; возьмём ):- Втолкнуть
, (без выхода), затем два снятия с выходомb, увидеть → принять. - Выход:
.
- Втолкнуть
Ответ: a; выход только на фазе снятия.
4.13. PDT — перевод (Туториал 7, Пример 5)
Постройте DPDT для
Показать решение
Идея: на фазе вталкивания (a) выводить b, на фазе снятия (b) — a.
Состояния:
(a), (b), (принимающее)Переходы:
От К Метка Смысл Первое a: втолкнуть , вывестиbЕщё a: втолкнуть , вывестиbПервое b: снять , вывестиaЕщё b: снять , вывестиaКонец: принять Трассировка для
:a: выходb, втолкнутьa: выходb, втолкнутьb: выходa, снятьb: выходa, снять- Вершина
→ принять. Выход: . ✓
Ответ: b, на снятии — a.
4.14. DPDA — построение для (Туториал 7, Пример 6)
Постройте DPDA, распознающий
Показать решение
Идея: втолкнуть a, сопоставить b, затем принять любое положительное число c (на счётчик c стек не опирается).
Состояния:
(старт), (a), (b), (c, принимающее)Переходы:
От К Метка Смысл Первое a: втолкнутьЕщё a: втолкнутьПервое b: снятьЕщё b: снятьПервое c(сверху —aиbсогласованы): фазаcЕщё cПринятие:
принимающее; достижимо только при символовbпротив символовaи хотя бы одномc.
Ответ: DPDA с состояниями
4.15. DPDA — построение для (Туториал 7, Пример 7)
Постройте DPDA, распознающий
Показать решение
Идея: пропустить a (не фиксируют соотношение), затем считать b вталкиваниями, затем проверять c снятиями.
Состояния:
(старт), (a), (b), (c), (принимающее)Переходы:
От К Метка Смысл Первое a: стек не менятьЕщё aПервое b: втолкнутьЕщё b: втолкнутьПервое c: снятьЕщё c: снятьСверху только : всеbсогласованы сc— принятьПринятие:
принимающее, достижимо -переходом при наверху.
Ответ: DPDA с
4.16. Незамкнутость DPDA по пересечению — контрпример (Туториал 7, Пример 8)
Покажите, что
Показать решение
Идея: оба языка распознаются DPDA (примеры выше). Пересечение —
- Пересечение:
(Строка в обоих языках тогда и только тогда, когда числаa,bиcсовпадают.) - Бар-Хиллель для
: пусть язык КС; — константа. Возьмём . Любое разбиение с пересекает не больше двух групп символов. Накачка вверх ( ) ломает равенство счётчиков. Противоречие. Значит , тем более . - Вывод:
, но . Следовательно DPDA не замкнут по .
Ответ: пересечение