W5. Лемма о накачке для регулярных языков, автоматы с магазином (PDA)
1. Краткое содержание
1.1 Почему некоторые языки не регулярны
Напомним: регулярный язык — это любой язык, который может быть распознан конечным автоматом (FSA). FSA — мощный инструмент, но у него принципиальное ограничение: есть лишь фиксированная конечная память — ровно текущее состояние. У FSA с
Из этого следует, что FSA не справляются с шаблонами, где нужно считать до произвольной глубины. Например:
: чтобы распознать этот язык, машина должна сосчитать символовa, а затем проверить ровно символовb. Сколько бы состояний ни было у FSA, при достаточно большом «памяти» не хватит. : палиндромы чётной длины. Здесь нужно запомнить всю первую половину строки, а она может быть сколь угодно длинной.
Чтобы доказать регулярность языка, достаточно выписать работающий FSA. Чтобы доказать нерегулярность, задача сложнее: нужно показать, что ни один FSA язык не распознаёт. Перебрать все автоматы невозможно. Вместо этого используют лемму о накачке (Pumping Lemma).
1.2 Принцип Дирихле
Перед формулировкой леммы о накачке нужен классический принцип голубятни (Pigeonhole Principle):
Если
голубей разложили по голубятням и , то в каком-то голубятне окажется не меньше двух голубей.
Применение к FSA: состояния автомата — это «ящики», а переходы, пройденные при чтении строки, — «голуби». Если длина строки больше числа состояний
1.3 У бесконечного регулярного языка обязан быть цикл
Пусть бесконечный регулярный язык
Тогда путь автомата выглядит так:
1.4 Лемма о накачке для регулярных языков
1.4.1 Формулировка
Лемма о накачке: если
(фрагмент накачки непуст) (накачка расположена в начале строки) для всех (сколько ни повторяй , строка остаётся в )
В качестве
Набросок доказательства: пусть
1.4.2 Необходимое, но не достаточное условие
Лемма о накачке даёт лишь необходимое условие регулярности, не достаточное:
регулярный для выполняется лемма (гарантированно)- Лемма выполняется
регулярный (у некоторых нерегулярных языков лемма тоже «проходит»!)
Поэтому:
- нельзя по лемме доказать регулярность;
- можно доказать нерегулярность (через контрапозицию).
1.4.3 Контрапозиция: как доказывают нерегулярность
Контрапозиция леммы:
Если для любого
существует с такая, что при любом разбиении с и найдётся с , то не регулярен.
Это и есть рабочий инструмент. Удобно думать как об игре в двух лиц:
| Игрок 1 (противник) | Игрок 2 (вы) |
|---|---|
| Задаёт любое |
Выбираете |
| Задаёт любое разбиение |
Находите |
Вы выигрываете (язык не регулярен), если всегда можете ответить, как бы ни действовал противник.
1.4.4 Стандартный шаблон доказательства
- Предположим от противного, что
регулярен. - Пусть
— длина накачки из леммы. - Выберите слово
, (тактически так, чтобы любое допустимое разбиение «ломало» язык). - Рассмотрите произвольное допустимое
, , . - Используйте
, чтобы ограничить положение . - Найдите
, что . - Вывод: лемма нарушена —
не регулярен.
Самый творческий шаг — выбор
1.4.5 Классический пример:
Утверждение:
Доказательство:
- Пусть
регулярен, — длина накачки. - Возьмём
, . - Любое
, , . - Первые
символов — всеa, значит целиком в блокеa: , , , . - Тогда
. - При
: . - Так как
, числоaбольше , аbровно , значит .
Противоречие с леммой.
Три случая из лекции: можно разобрать все разбиения без опоры только на
- Случай 1:
— накачка даёт - Случай 2:
— - Случай 3:
(смешанный) —
1.5 Автоматы с магазином (PDA)
1.5.1 Мотивация: за пределами регулярных языков
Лемма о накачке показывает, что для
Иерархия (от слабой к сильной):
- Комбинационная логика (без памяти)
- FSA (конечная память — только состояние)
- PDA (неограниченный стек — контекстно-свободные языки, CFL)
- Машина Тьюринга (лента — всё вычислимое)
PDA ровно на ступень выше FSA; они распознают контекстно-свободные языки, включая вложенные скобки, баланс и т.п.
1.5.2 Что такое стек?
Стек — структура «последним пришёл — первым ушёл» (LIFO), как стопка тарелок: добавлять и снимать можно только сверху.
- Push: положить символ наверх.
- Pop: снять верхний (и «прочитать» его).
На дне стека обычно специальный маркер
Пример — push
Из пустого стека (только
- После push
: сверху вниз - После push
: - После push
: - После pop: сняли
; осталось
Последний положенный символ снимается первым — свойство LIFO.
Историческая заметка: идею стека ввёл Алан Тьюринг в работе 1946 г. об ACE; операции называл BURY и UNBURY в теории подпрограмм.
1.5.3 Неформальное описание
У FSA есть входная лента и конечное управление (состояние).
PDA то же самое, плюс стек:
- Управление читает следующий символ входа и вершину стека.
- По ним (и по состоянию) переходит в новое состояние и заменяет вершину стека строкой символов.
PDA может:
- Push: поместить символ(ы) в стек (заменить вершину на более длинную строку)
- Pop: извлечь символ из стека (заменить вершину на
) - Не менять стек (заменить символ самим собой)
- Делать
-переходы (не двигать головку по входу, только стек)
1.5.4 Формальное определение
PDA — кортеж из 7 компонент:
где:
— конечное множество состояний — конечный входной алфавит — конечный алфавит магазина — функция переходов — начальное состояние — начальный символ стека — принимающие (финальные) состояния
Чтение перехода:
На стрелках пишут
- Push
под : - Pop
: - Без изменений:
1.5.5 Шаги PDA
За шаг определяют:
- Текущее состояние
- Текущий входной символ (или
) - Вершина стека
За один шаг PDA одновременно:
- меняет состояние на
- двигает головку по входу (или не двигает при
) - заменяет вершину
на
Так как
1.5.6 Условия принятия
- По финальному состоянию: вход исчерпан и PDA в
; содержимое стека не важно. - По пустому стеку: вход исчерпан и стек «пуст» (только
или пусто); состояние не важно.
Для недетерминированных PDA оба режима эквивалентны. Для DPDA — не эквивалентны.
Замечание: при приёме по пустому стеку язык должен быть префикс-свободным (ни одна строка языка не является собственным префиксом другой): после опустошения стека продолжить чтение
1.5.7 Пошаговый пример: PDA для
Идея: по одному a кладём b снимаем b стек ровно «пуст» по смыслу задачи, длины совпали.
Состояния: a), b),
Переходы:
: : : : :
Трассировка для aabb:
| Шаг | Состояние | Остаток входа | Стек (сверху) | Переход |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ПРИНЯТО |
2. Определения
- Регулярный язык:
, для которого существует FSA с . - Лемма о накачке: для регулярного
существует : любое , , раскладывается с , и . - Длина накачки (
): можно взять число состояний распознающего FSA. - Накачка: повторение средней части
в ; раз даёт . - Контрапозиция леммы: если
, , что для всех допустимых разбиений найдётся с , то не регулярен. - Принцип Дирихле:
объектов, контейнеров — в каком-то контейнере больше одного объекта. - Цикл в FSA: путь, начинающийся и заканчивающийся в одном состоянии.
- PDA: модель с конечным управлением, входной лентой и стеком; формально 7-кортеж
. Распознают ровно CFL. - Стек: LIFO; операции push и pop.
- Алфавит стека (
): конечный; обычно включает . - Символ дна стека (
): маркер дна. PDA: ; переход — прочитать , заменить на . -переход: без чтения входа.- Принятие по финальному состоянию: вход исчерпан, состояние
. - Принятие по пустому стеку: вход исчерпан, стек пуст (в смысле определения); для NPDA эквивалентно финальному состоянию.
- Контекстно-свободный язык (CFL): язык, распознаваемый PDA; эквивалентно порождён КС-грамматикой. Всякий регулярный — CFL, обратное неверно.
- NPDA: у
может быть несколько исходов; принятие, если существует успешная ветка. - DPDA: автомат с магазином, у которого на каждом шаге не более одного возможного перехода:
для всех ; кроме того, если , то (нельзя одновременно читать символ с входа и делать -переход с той же вершиной стека).
3. Формулы
- Лемма (регулярные):
: , , , , , - Контрапозиция:
не регулярен, если , , допустимых - Длина после накачки:
- Ограничение на
: вынуждает лежать в первых символах - Нотация переходов PDA:
; для тихого шага: - Формально PDA:
, - Принятие по финальному состоянию:
принимается для некоторого ,
4. Примеры
4.1. Доказать, что не регулярен (Лаба 5, Задание 1)
Докажите леммой о накачке, что
(Здесь
Показать решение
Идея: a даёт непалиндром.
- Пусть
регулярен, — длина накачки. ( , ), .- Произвольное
, , . - Первые
символов —a, значит изa: , , , . : .- Символ на позиции
слева — первыйbв блоке; справа от конца — всё ещёaпри . Не палиндром . - Вывод:
не регулярен.
Ответ:
4.2. Доказать, что не регулярен (Лаба 5, Задание 2)
Докажите леммой о накачке, что
Показать решение
Идея: любая строка из a и b. Слово a; накачка вниз убирает часть a, не трогая b, и баланс нарушается.
- Предположим от противного, что
регулярен. Пусть — длина накачки. - Возьмём
. Тогда . - Рассмотрим произвольное
с и . - Так как первые
символов — всеaи , целиком в блокеa: , , . - Возьмём
: - Тогда
, . При имеем , счётчики не равны, значит . - Противоречие с леммой.
не регулярен.
Ответ:
4.3. Доказать, что не регулярен (Лаба 5, Задание 3)
Докажите леммой о накачке, что
Показать решение
Идея: факториалы растут быстрее любой линейной прибавки от накачки. Для соседних факториалов
Пусть
регулярен, — длина накачки. , при .Произвольное
, , .Положим
, тогда .Возьмём
:Нижняя граница:
. Верхняя граница: . До следующего факториала: . Нужно , т.е. . При из следует . Значит , длина не равна ни одному , и .(При
единственное ; возьмём : , а , так как для .)Лемма нарушена,
не регулярен.
Ответ:
4.4. Доказать, что не регулярен (Лаба 5, Задание 4)
Показать решение
Идея: в c равно сумме чисел a и b. Слово a; накачка вниз уменьшает число a, не трогая b и c, и равенство c нарушается.
- Пусть
регулярен, — длина накачки. ( , тогда ), .- Произвольное
, , . - Первые
символов —a, значит , , . : .- Для членства в
нужно , но фактически , при не совпадает. Значит . не регулярен.
Ответ:
4.5. Доказать, что не регулярен (Туториал 5, Пример 1)
Показать решение
Идея: a; любая накачка нарушает равенство чисел a и b.
- Пусть
регулярен, — длина накачки. , .- Произвольное
, , . целиком изa: , , , , . : .- При
числоaне равно числуb, значит . не регулярен.
Дополнение — три случая без b перед a, не формат
Ответ:
4.6. Доказать, что не регулярен (Туториал 5, Пример 2)
Показать решение
Идея: слово b в центре — «ориентир»: в b и поровну a слева и справа. Накачка левого блока a ломает симметрию.
- Пусть
регулярен, — длина накачки. , .- Произвольное
, , . - Так как
и первые символов — всеa, целиком в левом блокеa: , , , , где . - При
: - Для членства в
нужно равенство длин левого и правого блоковa, то есть , что невозможно при . Значит . - Лемма нарушена,
не регулярен.
Ответ:
4.7. PDA для (Туториал 5, Пример 3)
Показать решение
PDA: состояния
(принимающее), .Переходы:
Переход Смысл :Первый a: положить :Каждый следующий a: ещё :Первый b: снять :Каждый следующий b: снять :Конец входа, наверху — принятьТрассировка
aabb: как в табл. разд. 1.5.7 — принято.Корректность: на
кладётся и снимается по символов ; при либо остаются , либо до нельзя дойти честно.
Ответ: указанный PDA распознаёт
4.8. PDA для (Туториал 5, Пример 4)
Показать решение
PDA:
(левыеa), (после единственногоb, правыеa), (принимающее); .Переходы:
Переход Смысл :Первый aслева :Следующие aслева :Видим b, не снимая , переходим к правой части :Каждый aсправа снимает :Все сняты, наверху — принятьТрассировка
aba: ; ; ; — принято.aabaa: аналогично, два push слева, два pop справа — принято.
Ответ: указанный PDA распознаёт