Выталкивающий автомат - Pushdown automaton

Combinational logic Finite-state machine Pushdown automaton Turing machine Automata theoryAutomata theory.svg
Об этом изображении
Классы автоматов
(При нажатии на каждый слой открывается статья на эту тему)

В теории вычислений , разделе теоретической информатики , автомат выталкивания ( КПК ) - это тип автомата, который использует стек .

Автоматические выталкивающие машины используются в теориях о том, что может быть вычислено машинами. Они более способны, чем машины с конечным числом состояний, но менее способны, чем машины Тьюринга (см. Ниже ). Детерминированные автоматы с расширением могут распознавать все детерминированные контекстно-свободные языки, в то время как недетерминированные могут распознавать все контекстно-свободные языки , причем первые часто используются при разработке парсеров .

Термин «толкание вниз » относится к тому факту, что стопку можно рассматривать как «толкаемую вниз», как раздаточное устройство для подносов в кафетерии, поскольку операции никогда не работают с элементами, кроме верхнего элемента. Стек автомат , напротив, это позволяет доступ и работу на более глубоких элементов. Стек-автоматы могут распознавать строго больший набор языков, чем автоматические выталкивающие. Вложенная стек автомат обеспечивает полный доступ, а также позволяет стек значения целые суб-стеки , а не только одиночные конечные символы.

Неформальное описание

Схема выталкивающего автомата

Конечный автомат просто смотрит на входной сигнал и текущее состояние: оно не имеет стек для работы с. Он выбирает новое состояние, результат следования за переходом. Магазинный автомат (PDA) отличается от конечного автомата двумя способами:

  1. Он может использовать верхнюю часть стека, чтобы решить, какой переход выбрать.
  2. Он может манипулировать стеком как часть выполнения перехода.

Автомат выталкивания читает заданную строку ввода слева направо. На каждом шаге он выбирает переход, индексируя таблицу по входному символу, текущему состоянию и символу наверху стека. Автомат выталкивания также может управлять стеком как часть выполнения перехода. Манипуляция может заключаться в том, чтобы подтолкнуть определенный символ к вершине стека или выскочить из вершины стека. В качестве альтернативы автомат может игнорировать стек и оставить его как есть.

Сложить вместе: учитывая входной символ, текущее состояние и символ стека, автомат может следовать переходу в другое состояние и при необходимости манипулировать стеком (толкать или выталкивать).

Если в каждой ситуации возможно не более одного такого переходного действия, то автомат называется детерминированным автоматом выталкивания (DPDA) . В общем случае, если возможны несколько действий, автомат называется общим , или недетерминированным , КПК . Данная входная строка может привести недетерминированный автомат выталкивания к одной из нескольких последовательностей конфигурации; если один из них приводит к принятию конфигурации после прочтения всей входной строки, последняя считается принадлежащей к языку, принятому автоматом .

Формальное определение

Мы используем стандартные обозначения формального языка: обозначает набор строк конечной длины по алфавиту и обозначает пустую строку .

КПК формально определяется как набор из семи элементов:

куда

  • конечный набор состояний
  • конечное множество, которое называется входным алфавитом
  • - конечное множество, которое называется стековым алфавитом.
  • является конечным подмножеством , переходное отношение
  • это начальное состояние
  • это начальный символ стека
  • это набор принимающих состояний

Элемент - это переход . Он имеет предполагаемое значение, что в состоянии , на входе и с самым верхним символом стека, он может читать , изменять состояние на , выталкивать, заменяя его нажатием . Компонент переходного соотношения используется для формализации , что КПК может либо прочитать письмо от входа, или перейти оставляя вход нетронутым.

Во многих текстах отношение перехода заменено (эквивалентной) формализацией, где

  • - функция перехода , отображаемая в конечные подмножества

Здесь собраны все возможные действия в состоянии с в стеке при чтении на входе. Например, пишут именно когда, потому что . Отметим, что конечность в этом определении существенна.

Расчеты

шаг выталкивающего автомата

С целью формализации семантики автомата проталкивания вводится описание текущей ситуации. Любая тройка называется мгновенным описанием (ID) , которое включает в себя текущее состояние, часть входной ленты, которая не была прочитана, и содержимое стека (самый верхний символ, записанный первым). Переход отношение определяет ступенчатые отношения с на мгновенных описаниях. Для инструкции существует шаг , для каждого и каждого .

В общем, автоматические выталкивающие машины недетерминированы, что означает, что в данном мгновенном описании может быть несколько возможных шагов. Любой из этих шагов может быть выбран в вычислении. С приведенным выше определением на каждом шаге всегда выскакивает один символ (верх стека), заменяя его необходимым количеством символов. Как следствие, шаг не определяется, когда стек пуст.

Вычисления автомата выталкивания представляют собой последовательность шагов. Вычисление начинается в начальном состоянии с начальным символом стека в стеке и строкой на входной ленте, то есть с начальным описанием . Есть два режима принятия. Автомат выталкивания либо принимает конечное состояние, что означает, что после чтения своего ввода автомат достигает состояния приема (in ), либо принимает пустым стеком ( ), что означает, что после чтения своего ввода автомат опустошает свой стек. Первый режим приема использует внутреннюю память (состояние), второй - внешнюю память (стек).

Формально определяется

  1. с и (конечное состояние)
  2. с (пустой стек)

Здесь представлено рефлексивное и транзитивное замыкание шагового отношения, означающее любое количество последовательных шагов (ноль, один или несколько).

Для каждого отдельного выталкивающего автомата эти два языка не должны иметь никакого отношения: они могут быть равны, но обычно это не так. Спецификация автомата должна также включать предполагаемый режим приемки. Применительно ко всем автоматам выталкивания оба условия приема определяют одно и то же семейство языков.

Теорема. Для каждого автомата выталкивания можно построить автомат выталкивания так , что , и наоборот, для каждого автомата выталкивания можно построить автомат выталкивания, такой что

Пример

Ниже приводится формальное описание КПК, распознающего язык по конечному состоянию:

КПК для (по конечному состоянию)

, куда

  • состояния:
  • входной алфавит:
  • сложить алфавит:
  • начальное состояние:
  • символ начала стека: Z
  • принимающие государства:

Отношение перехода состоит из следующих шести инструкций:

,
,
,
,
, а также
.

На словах первые две инструкции говорят, что в состоянии p в любое время символ0 читается, один A помещается в стек. Размещение символа A поверх другого A формализуется как замена вершины A на AA (и аналогично для нажатия символа A поверх Z ).

Третья и четвертая инструкции говорят, что в любой момент автомат может перейти из состояния p в состояние q .

Пятая инструкция говорит, что в состоянии q для каждого символа1 прочитал, выскочил один A.

И, наконец, шестая инструкция говорит , что машина может перейти от состояния д до принятия состояния г только тогда , когда стек состоит из одного Z .

Вроде бы нет общепринятого представления для КПК. Здесь мы изобразили инструкцию переходом от состояния p к состоянию q, помеченным (прочтите a ; замените A на ).

Понимание вычислительного процесса

принятие вычислений для 0011

Ниже показано, как указанный выше КПК вычисляет различные входные строки. Нижний индекс M символа шага здесь опущен.

  1. Входная строка = 0011. Существуют различные вычисления, в зависимости от момента перехода из состояния p в состояние q . Только один из них принимает.

    1. Конечным состоянием является принятие, но ввод таким образом не принимается, так как он не был прочитан.

    2. Дальнейшие шаги невозможны.

    3. Принятие вычисления: завершается в состоянии принятия, в то время как полный ввод был прочитан.
  2. Строка ввода = 00111. Опять же, есть разные вычисления. Ни один из них не принимает.

    1. Конечным состоянием является принятие, но ввод таким образом не принимается, так как он не был прочитан.

    2. Дальнейшие шаги невозможны.

    3. Конечным состоянием является принятие, но ввод таким образом не принимается, так как он не был (полностью) прочитан.

КПК и контекстно-свободные языки

Любую контекстно-свободную грамматику можно преобразовать в эквивалентный недетерминированный автомат выталкивания. Процесс создания грамматики моделируется крайним левым образом. Если грамматика переписывает нетерминал, КПК берет самый верхний нетерминал из своего стека и заменяет его правой частью грамматического правила ( развернуть ). Если грамматика генерирует терминальный символ, КПК считывает символ из ввода, когда это самый верхний символ в стеке ( совпадение ). В некотором смысле стек КПК содержит необработанные данные грамматики, соответствующие предварительному обходу дерева вывода.

Технически, учитывая контекстно-свободную грамматику, КПК имеет единственное состояние, 1, и его отношение перехода строится следующим образом.

  1. для каждого правила ( развернуть )
  2. для каждого терминального символа ( совпадение )

КПК принимает пустой стек. Его начальный символ стека - это начальный символ грамматики.

Для контекстно-свободной грамматики в нормальной форме Грейбаха определение (1, γ) ∈ δ (1, a , A ) для каждого правила грамматики Aa γ также дает эквивалентный недетерминированный автомат выталкивания.

Наоборот, найти грамматику для данного КПК не так-то просто. Уловка состоит в том, чтобы закодировать два состояния КПК в нетерминалах грамматики.

Теорема. Для каждого автомата выталкивания можно построить контекстно-свободную грамматику, такую ​​что .

Язык строк, принимаемый детерминированным автоматом выталкивания, называется детерминированным контекстно-свободным языком . Не все контекстно-свободные языки детерминированы. Как следствие, DPDA является строго более слабым вариантом КПК, и не существует алгоритма преобразования КПК в эквивалентный DPDA, если такой DPDA существует.

Конечный автомат с доступом к двум стекам - более мощное устройство, эквивалентное по мощности машине Тьюринга . Линейный ограниченный автомат представляет собой устройство , которое является более мощным , чем магазинный автомат , но в меньшей степени, чем машина Тьюринга.

КПК и машины Тьюринга

Автомат выталкивания в вычислительном отношении эквивалентен «ограниченной» машине Тьюринга (TM) с двумя лентами, которая ограничена следующим образом: на первой ленте TM может только читать ввод и перемещаться слева направо (он не может вносить изменения) . На второй ленте он может только «проталкивать» и «выталкивать» данные. Или, что эквивалентно, он может читать, писать и перемещаться влево и вправо с ограничением, что единственное действие, которое он может выполнять на каждом шаге, - это либо удаление самого левого символа в строке (pop), либо добавление дополнительного символа слева к самому левому символ в строке (push).

То, что КПК слабее TM, можно свести к тому, что процедура pop удаляет некоторые данные. Чтобы КПК был таким же сильным, как TM, нам нужно где-то сохранять данные, потерянные из-за «всплывающего окна». Мы можем добиться этого, введя второй стек. В модели TM КПК из последнего абзаца это эквивалентно TM с 3 лентами, где первая лента является входной лентой только для чтения, а 2-я и 3-я ленты являются лентами «push and pop» (стопка). Чтобы такой КПК мог имитировать любую заданную ТМ, мы передаем вход КПК на первую ленту, при этом оба стека остаются пустыми. Затем он перемещает весь ввод с входной ленты в первый стек. Когда весь ввод передается в 1-й стек, теперь мы действуем как обычная TM, где движение прямо по ленте аналогично извлечению символа из 1-го стека и перемещению (возможно обновленного) символа во второй стек, и перемещение влево соответствует выталкиванию символа из 2-го стека и помещению (возможно обновленного) символа в первую стопку. Таким образом, у нас есть КПК с 2 стеками, который может имитировать любую TM.

Обобщенный автомат выталкивания (GPDA)

GPDA - это КПК, который записывает всю строку известной длины в стек или удаляет всю строку из стека за один шаг.

GPDA формально определяется как кортеж из 6:

где , и определяются так же, как и КПК.

:

- функция перехода.

Правила вычислений для GPDA такие же, как и для КПК, за исключением того, что 's и ' теперь являются строками, а не символами.

GPDA и КПК эквивалентны в том смысле, что если язык распознается КПК, он также распознается GPDA, и наоборот.

Можно сформулировать аналитическое доказательство эквивалентности GPDA и КПК, используя следующую симуляцию:

Пусть будет переход GPDA

где .

Постройте для КПК следующие переходы:

Стек автомат

В качестве обобщения автоматов выталкивания, Гинзбург, Грейбах и Харрисон (1967) исследовали стековые автоматы , которые могут дополнительно шагать влево или вправо во входной строке (окруженные специальными символами концевых маркеров, чтобы предотвратить выскальзывание), и шагать вверх или вниз в строке ввода. стек в режиме только для чтения. Автомат стека называется не стирающимся, если он никогда не появляется из стека. Класс языков, принимаемых недетерминированными, нестирающими стековыми автоматами, - это NSPACE ( n 2 ), который является надмножеством контекстно-зависимых языков . Класс языков, принимаемых детерминированными, нестирающими стековыми автоматами, - это DSPACE ( n ⋅log ( n )).

Чередующиеся выталкивающие автоматы

Переменного магазинный автомат (APDA) представляет собой магазинный автомат с множеством состояний

  • где .

Состояния в и называются экзистенциальными соотв. универсальный . В экзистенциальном состоянии APDA недетерминированно выбирает следующее состояние и принимает его, если принимает хотя бы одно из результирующих вычислений. В универсальном состоянии APDA переходит ко всем следующим состояниям и принимает, если все результирующие вычисления принимают.

Модель была представлена Chandra , Kozen и Stockmeyer . Ладнер , Липтон и Стокмейер доказали, что эта модель эквивалентна EXPTIME, т.е. язык принимается некоторым APDA тогда и только тогда , когда он может быть определен с помощью алгоритма экспоненциального времени.

Айзиковиц и Камински представили синхронизированные чередующиеся автоматы с выталкиванием вниз (SAPDA), которые эквивалентны конъюнктивным грамматикам так же, как недетерминированные КПК эквивалентны контекстно-свободным грамматикам.

Смотрите также

Примечания

использованная литература

  1. ^ a b c Джон Э. Хопкрофт; Джеффри Д. Ульман (1967). «Неизменные стековые автоматы» . Журнал компьютерных и системных наук . 1 (2): 166–186. DOI : 10.1016 / s0022-0000 (67) 80013-8 .
  2. ^ a b c d e е Джон Э. Хопкрофт и Джеффри Д. Уллман (1979). Введение в теорию автоматов, языки и вычисления . Ридинг / МА: Аддисон-Уэсли. ISBN 0-201-02988-X.
  3. ^ Джон Э. Хопкрофт; Раджив Мотвани; Джеффри Д. Ульман (2003). Введение в теорию автоматов, языки и вычисления . Эддисон Уэсли. Здесь: раздел 6.4.3, стр.249
  4. ^ Сеймур Гинзбург, Шейла А. Грейбах и Майкл А. Харрисон (1967). «Стек-автоматы и компиляция». J. ACM . 14 (1): 172–201. DOI : 10.1145 / 321371.321385 .
  5. ^ Сеймур Гинзбург, Шейла А. Грейбах и Майкл А. Харрисон (1967). «Односторонние стековые автоматы». J. ACM . 14 (2): 389–418. DOI : 10.1145 / 321386.321403 .
  6. ^ Чандра, Ашок К .; Kozen, Dexter C .; Стокмейер, Ларри Дж. (1981). «Чередование». Журнал ACM . 28 (1): 114–133. DOI : 10.1145 / 322234.322243 . ISSN  0004-5411 .
  7. ^ Ladner, Ричард Э .; Липтон, Ричард Дж .; Стокмейер, Ларри Дж. (1984). «Чередование автоматов выталкивания и стека». SIAM Journal on Computing . 13 (1): 135–155. DOI : 10.1137 / 0213010 . ISSN  0097-5397 .
  8. ^ Айзиковиц, Тамар; Камински, Майкл (2011). "LR (0) Конъюнктивные грамматики и детерминированные синхронизированные чередующиеся автоматические выталкивания". Информатика - теория и приложения . Конспект лекций по информатике. 6651 . С. 345–358. DOI : 10.1007 / 978-3-642-20712-9_27 . ISBN 978-3-642-20711-2. ISSN  0302-9743 .

внешние ссылки

  • JFLAP , симулятор для нескольких типов автоматов, включая недетерминированные автоматы выталкивания
  • CoAn , еще один симулятор для нескольких типов машин, включая недетерминированные автоматы с выталкиванием (C ++, Windows, Linux, MacOS)