В теории вычислений , разделе теоретической информатики , магазинный автомат ( PDA ) — это тип автомата , использующий стек .
Магазинные автоматы используются в теориях о том, что может быть вычислено машинами. Они более эффективны, чем конечные автоматы , но менее эффективны, чем машины Тьюринга (см. ниже). Детерминированные магазинные автоматы могут распознавать все детерминированные контекстно-свободные языки , в то время как недетерминированные могут распознавать все контекстно-свободные языки , причем первые часто используются при проектировании синтаксических анализаторов .
Термин «pushdown» относится к тому факту, что стек можно рассматривать как «выталкиваемый вниз», как поднос в кафе, поскольку операции никогда не работают с элементами, отличными от верхнего элемента. Автомат стека , напротив, позволяет получать доступ к более глубоким элементам и выполнять операции с ними. Автоматы стека могут распознавать строго больший набор языков, чем автоматы pushdown. [1] Вложенный автомат стека обеспечивает полный доступ, а также позволяет стекированным значениям быть целыми подстеками, а не просто отдельными конечными символами.
Конечный автомат просто смотрит на входной сигнал и текущее состояние: у него нет стека для работы, и поэтому он не может получить доступ к предыдущим значениям входа. Он может только выбрать новое состояние, результат перехода. Автомат с магазином (PDA) отличается от конечного автомата двумя способами:
Магазинный автомат считывает заданную входную строку слева направо. На каждом шаге он выбирает переход, индексируя таблицу по входному символу, текущему состоянию и символу наверху стека. Магазинный автомат также может манипулировать стеком в рамках выполнения перехода. Манипуляция может заключаться в том, чтобы поместить определенный символ наверх стека или вытащить его с вершины стека. Автомат может также игнорировать стек и оставить его таким, какой он есть.
В совокупности: при наличии входного символа, текущего состояния и символа стека автомат может выполнить переход в другое состояние и при необходимости манипулировать стеком (вставлять или выталкивать его).
Если в каждой ситуации возможно не более одного такого действия перехода, то автомат называется детерминированным магазинным автоматом (DPDA) . В общем случае, если возможны несколько действий, то автомат называется общим или недетерминированным PDA . Заданная входная строка может привести недетерминированный магазинный автомат к одной из нескольких последовательностей конфигураций; если одна из них приводит к принимающей конфигурации после чтения полной входной строки, то говорят, что последняя принадлежит языку, принимаемому автоматом .
Мы используем стандартную формальную языковую нотацию: обозначает множество строк конечной длины по алфавиту , а обозначает пустую строку .
PDA формально определяется как 7-кортеж:
где
Элемент — это переход . Он имеет предполагаемое значение, что , в состоянии , на входе и с самым верхним символом стека, может читать , изменять состояние на , выталкивать , заменяя его нажатием . Компонент отношения перехода используется для формализации того, что КПК может либо читать букву из входа, либо продолжать работу, оставляя вход нетронутым. [ необходима цитата ]
Во многих текстах [2] : 110 отношение перехода заменяется (эквивалентной) формализацией, где
Здесь содержатся все возможные действия в состоянии с на стеке, при чтении на входе. Например, пишется точно когда потому что . Обратите внимание, что конечность в этом определении существенна.
Вычисления
Для формализации семантики магазинного автомата вводится описание текущей ситуации. Любой 3-кортеж называется мгновенным описанием (ID) , которое включает текущее состояние, часть входной ленты, которая не была прочитана, и содержимое стека (самый верхний символ записан первым). Отношение перехода определяет отношение шага для мгновенных описаний. Для инструкции существует шаг , для каждого и каждого .
В общем случае магазинные автоматы недетерминированы, что означает, что в данном мгновенном описании может быть несколько возможных шагов. Любой из этих шагов может быть выбран в вычислении. С приведенным выше определением на каждом шаге всегда выталкивается один символ (верхушка стека), заменяя его необходимым количеством символов. Как следствие, ни один шаг не определен, когда стек пуст.
Вычисления магазинного автомата представляют собой последовательности шагов. Вычисление начинается в начальном состоянии с начальным символом стека на стеке и строкой на входной ленте, таким образом, с начальным описанием . Существует два режима принятия. Магазинный автомат либо принимает по конечному состоянию, что означает, что после чтения его ввода автомат достигает принимающего состояния (в ), либо принимает по пустому стеку ( ), что означает, что после чтения его ввода автомат очищает свой стек. Первый режим принятия использует внутреннюю память (состояние), второй — внешнюю память (стек).
Формально определяется
Здесь представлено рефлексивное и транзитивное замыкание шагового отношения, означающего любое количество последовательных шагов (ноль, один или более).
Для каждого отдельного магазинного автомата эти два языка не должны иметь никакой связи: они могут быть равны, но обычно это не так. Спецификация автомата должна также включать предполагаемый режим принятия. Применительно ко всем магазинным автоматам оба условия принятия определяют одно и то же семейство языков.
Теорема. Для каждого магазинного автомата можно построить магазинный автомат такой, что , и наоборот, для каждого магазинного автомата можно построить магазинный автомат такой, что
Ниже приведено формальное описание КПК, распознающего язык по конечному состоянию:
, где
Отношение перехода состоит из следующих шести инструкций:
На словах первые две инструкции говорят, что в состоянии p в любой момент времени символСчитывается 0 , в стек помещается один A. Помещение символа A поверх другого A формализуется как замена верхнего A на AA (и аналогично для помещения символа A поверх Z ).
Третья и четвертая инструкции говорят, что в любой момент автомат может перейти из состояния p в состояние q .
Пятая инструкция гласит, что в состоянии q для каждого символа1 прочитано, одна буква А выбита.
Наконец, шестая инструкция гласит , что машина может перейти из состояния q в принимающее состояние r только в том случае, если стек состоит из одного Z.
Кажется, нет общепринятого представления для PDA. Здесь мы изобразили инструкцию ребром из состояния p в состояние q , помеченным (читай a ; замени A на ).
Ниже показано, как вышеуказанный PDA вычисляет различные входные строки. Нижний индекс M из символа шага здесь опущен.
Каждая контекстно-свободная грамматика может быть преобразована в эквивалентный недетерминированный магазинный автомат. Процесс вывода грамматики моделируется самым левым способом. Там, где грамматика переписывает нетерминал, PDA берет самый верхний нетерминал из своего стека и заменяет его правой частью грамматического правила ( expand ). Там, где грамматика генерирует терминальный символ, PDA считывает символ из ввода, когда он является самым верхним символом в стеке ( match ). В некотором смысле стек PDA содержит необработанные данные грамматики, соответствующие предварительному обходу дерева вывода.
Технически, учитывая контекстно-свободную грамматику, PDA имеет единственное состояние 1, а его отношение перехода строится следующим образом.
КПК принимает пустой стек. Его начальный символ стека — это начальный символ грамматики. [3]
Для контекстно-свободной грамматики в нормальной форме Грейбаха определение (1,γ) ∈ δ(1, a , A ) для каждого правила грамматики A → a γ также дает эквивалентный недетерминированный магазинный автомат. [2] : 115
Обратное, найти грамматику для данного PDA, не так просто. Хитрость в том, чтобы закодировать два состояния PDA в нетерминалы грамматики.
Теорема. Для каждого магазинного автомата можно построить контекстно-свободную грамматику, такую что . [2] : 116
Язык строк, принимаемый детерминированным магазинным автоматом (DPDA), называется детерминированным контекстно-свободным языком . Не все контекстно-свободные языки являются детерминированными. [примечание 1] Как следствие, DPDA является строго более слабым вариантом PDA. Даже для регулярных языков существует проблема взрывного роста размера: для любой рекурсивной функции и для произвольно больших целых чисел существует PDA размера, описывающего регулярный язык, наименьший DPDA которого имеет не менее состояний. [5] Для многих нерегулярных PDA любой эквивалентный DPDA потребовал бы неограниченного числа состояний.
Конечный автомат с доступом к двум стекам является более мощным устройством, эквивалентным по мощности машине Тьюринга . [2] : 171 Линейный ограниченный автомат является устройством, которое является более мощным, чем магазинный автомат, но менее мощным, чем машина Тьюринга. [примечание 2]
Магазинный автомат вычислительно эквивалентен «ограниченной» машине Тьюринга (TM) с двумя лентами, которая ограничена следующим образом: на первой ленте TM может только считывать входные данные и перемещаться слева направо (она не может вносить изменения). На второй ленте он может только «вталкивать» и «выталкивать» данные. Или, что эквивалентно, он может читать, записывать и перемещаться влево и вправо с ограничением, что единственное действие, которое он может выполнить на каждом шаге, — это либо удалить самый левый символ в строке (pop), либо добавить дополнительный символ слева к самому левому символу в строке (push).
То, что PDA слабее TM, можно объяснить тем, что процедура «pop» удаляет некоторые данные. Чтобы сделать PDA таким же сильным, как TM, нам нужно где-то сохранить данные, потерянные при «pop». Мы можем добиться этого, введя второй стек. В модели TM PDA из последнего абзаца это эквивалентно TM с 3 лентами, где первая лента является входной лентой только для чтения, а 2-я и 3-я ленты являются лентами «push and pop» (стек). Для того чтобы такой PDA мог имитировать любую заданную TM, мы передаем вход PDA на первую ленту, оставляя оба стека пустыми. Затем он продолжает проталкивать весь вход с входной ленты на первый стек. Когда весь ввод переносится в 1-й стек, теперь мы действуем как обычный TM, где перемещение вправо по ленте соответствует извлечению символа из 1-го стека и вставке (возможно, обновленного) символа во второй стек, а перемещение влево соответствует извлечению символа из 2-го стека и вставке (возможно, обновленного) символа в первый стек. Таким образом, у нас есть КПК с 2 стеками, который может имитировать любой TM.
Обобщенный магазинный автомат (GPDA) — это КПК, который записывает целую строку известной длины в стек или удаляет целую строку из стека за один шаг.
Формально GPDA определяется как кортеж из 6 элементов:
где , и определяются так же, как КПК.
— это функция перехода.
Правила вычислений для GPDA такие же, как и для PDA, за исключением того, что «и » теперь являются строками, а не символами.
GPDA и PDA эквивалентны в том смысле, что если язык распознается PDA, он также распознается GPDA, и наоборот.
Можно сформулировать аналитическое доказательство эквивалентности GPDA и PDA, используя следующую симуляцию:
Пусть будет переход GPDA
где .
Постройте следующие переходы для КПК:
В качестве обобщения стековых автоматов Гинзбург, Грейбах и Харрисон (1967) исследовали стековые автоматы , которые могут дополнительно переходить влево или вправо во входной строке (окруженные специальными символами-маркерами конца для предотвращения выскальзывания) и переходить вверх или вниз по стеку в режиме только для чтения. [6] [7] Стековый автомат называется нестирающим, если он никогда не выталкивается из стека. Класс языков, принимаемых недетерминированными, нестирающими стековыми автоматами, — это NSPACE ( n 2 ), который является надмножеством контекстно -зависимых языков . [1] Класс языков, принимаемых детерминированными, нестирающими стековыми автоматами, — это DSPACE ( n ⋅log( n )). [1]
Автомат с чередующимся магазином (APDA) — это магазин с набором состояний
Состояния в и называются экзистенциальными соответственно универсальными . В экзистенциальном состоянии APDA недетерминированно выбирает следующее состояние и принимает, если хотя бы одно из результирующих вычислений принимает. В универсальном состоянии APDA переходит ко всем следующим состояниям и принимает, если все результирующие вычисления принимают.
Модель была введена Чандрой , Козеном и Стокмейером . [8] Ладнер , Липтон и Стокмейер [9] доказали, что эта модель эквивалентна EXPTIME , т.е. язык принимается некоторой APDA тогда и только тогда , когда он может быть решен с помощью алгоритма с экспоненциальным временем.
Айзиковиц и Камински [10] представили синхронизированные чередующиеся автоматы с магазинной памятью (SAPDA), которые эквивалентны конъюнктивным грамматикам так же, как недетерминированные PDA эквивалентны контекстно-свободным грамматикам.