Языки и их представление
Линейно-ограниченные автоматы и их связь с контекстно-зависимыми грамматиками
Каждый КЗ-язык является рекурсивным, но обратное не
верно. Покажем что существует алгоритм, позволяющий для
произвольного КЗ-языка L в алфавите T, и произвольной
цепочки определить, принадлежит ли w языку L.
Теорема 2.6. Каждый контекстно-зависимый язык является рекурсивным языком.
Доказательство. Пусть L - контекстно-зависимый язык. Тогда существует некоторая неукорачивающая грамматика G = (N, T, P, S), порождающая L.
Пусть . Если n = 0, то есть w = e, то
принадлежность
проверяется тривиальным образом.
Так что будем предполагать, что n > 0.
Определим множество Tm как множество строк длины не более n таких, что вывод
имеет не более m шагов. Ясно, что T0 = {S}.
Легко показать, что Tm можно получить из Tm-1 просматривая, какие строки с длиной, меньшей или равной n можно вывести из строк из Tm-1 применением одного правила, то есть
Если и
для некоторого m. Если
из S не выводится u или |u| > n, то u не принадлежит Tm ни
для какого m.
Очевидно, что для всех m > 1. Поскольку Tm зависит только от Tm-1, если Tm = Tm-1, то Tm = Tm+1 = Tm+2 = .... Процедура будет вычислять T1, T2, T3, . .. пока для некоторого m не окажется Tm = Tm-1. Если w не
принадлежит Tm, то не принадлежит и L(G), поскольку для j > m выполнено Tj = Tm. Если
, то
.
Покажем, что существует такое m, что Tm = T m-1. Поскольку для каждого i > 1 справедливо , то если
, то число элементов в Ti по крайней мере на 1 больше, чем в Ti-1. Пусть
. Тогда число строк в
длины меньшей или равной n равно
. Только эти строки могут
быть в любом Ti. Значит, Tm = Tm-1 для некоторого
.
Таким образом, процедура, вычисляющая Ti для всех
до тех пор, пока не будут найдены два равных множества,
гарантированно заканчивается, значит, это алгоритм.
Линейно-ограниченный автомат (ЛОА) - это
недетерминированная машина Тьюринга с одной лентой,
которая никогда не выходит за пределы |w| ячеек, где w - вход. Формально, линейно-ограниченный автомат
обозначается как . Обозначения имеют
тот же смысл, что и для машин Тьюринга. Q - это множество
состояний,
- множество заключительных состояний,
- множество ленточных символов,
- множество входных символов,
- начальное состояние, D - отображение из
в подмножество
.
содержит два специальных символа, обычно
обозначаемых
и $, - левый и правый концевые маркеры,
соответственно. Эти символы располагаются сначала по
концам входа и их функция - предотвратить переход головки
за пределы области, в которой расположен вход.
Конфигурация M и отношение , связывающее две
конфигурации, если вторая может быть получена из
первой применением D, определяются так же, как и
для машин Тьюринга. Конфигурация M обозначается как
(q,A1A2,...,An,i) где -целое
от 1 до n. Предположим, что
и i > 1
Будем говорить, что
и i < n, будем говорить, что
То есть M печатает A поверх Ai, меняет состояние на p
и передвигает головку влево или вправо, но не за пределы
области, в которой символы располагались исходно. Как
обычно, определим отношение как
и
Если и
,
то
Язык, допускаемый M - это и
для некоторого
и целого i}.
Будем называть M детерминированным, если D(q, A)
содержит не более одного элемента для любых .
Не известно, совпадает ли класс множеств, допускаемых
детерминированными и недетеминированными ЛОА. Ясно,
что любое множество, допускаемое недетерминированным
ЛОА, допускается некоторой детерминированной МТ.
Однако, число ячеек ленты, требуемой этой МТ, может
экспоненциально зависеть от длины входа.
Класс множеств, допускаемых ЛОА, в точности совпадает с классом контекстно - зависимых языков.
Теорема 2.7. Если L - контекстно-зависимый язык, то L допускается ЛОА.
Доказательство. Пусть G = (VN, VT, P, S) - контекстно-
зависимая грамматика. Построим ЛОА M такой, что он
допускает язык L(G). Не вдаваясь в детали построения M, поскольку он довольно сложен, рассмотрим схему его
работы. В качестве ленточных символов будем рассматривать
пары В начальной конфигурации лента содержит (@, B), (a1, B), ... (an, B), ($, B), где a1 ... an = w - входная цепочка, n=|w|. Цепочку символов
n будем называть " первым треком ",
n - " вторым треком ". Первый трек
будет содержать входную строку x с концевыми маркерами.
Второй трек будет использоваться для вычислений. На
первом шаге M помещает символ S в самой левой ячейке
второго трека. Затем M выполняет процедуру генерации в
соответствии со следующими шагами:
- Процедура выбирает подстроку символов
из второго трека такую, что
.
- Подстрока
заменяется на
перемещая, если необходимо, вправо символы справа от
. Если эта операция могла бы привести к перемещению символа за правый концевой маркер, ЛОА останавливается.
- Процедура недетерминированно выбирает перейти на шаг 1 или завершиться.
На выходе из процедуры первый трек все еще содержит
строку x, а второй трек содержит строку такую, что
ЛОА сравнивает символы первого трека с
соответствующими символами второго трека. Если сравнение
неуспешно, строки символов первого и второго треков не
одинаковы и ЛОА останавливается без допуска. Если строки
одинаковы, ЛОА останавливается и допускает.
Если , то существует некоторая
последовательность шагов, на которой ЛОА строит x на
втором треке и допускает вход. Аналогично, для того, чтобы
ЛОА допустил x, должна существовать последовательность
шагов такая, что x может быть построен на втором треке.
Таким образом, должен быть вывод x из S в G.
Отметим схожесть этих рассуждений и рассуждений в случае произвольной грамматики. Тогда промежуточные сентенциальные формы могли иметь длину, произвольно большую по сравнению с длиной входа. Как следствие, требовалась вся мощь машин Тьюринга. В случае контекстно- зависимых грамматик промежуточные сентенциальные формы не могут быть длиннее входа.
Теорема 2.8. Если L допускается ЛОА, то L - контекстно - зависимый язык.
Доказательство. Конструкция КЗГ по ЛОА аналогична конструкции грамматики типа 0, моделирующей машину Тьюринга. Различие заключатся в том, что нетерминалы КЗГ должны указывать не только текущее и исходное содержимое ячеек ленты ЛОА, но и то, является ли ячейка соседней справа или слева с концевым маркером. Кроме того, состояние ЛОА должно комбинироваться с символом под головкой, поскольку КЗГ не может иметь раздельные символы для концевых маркеров и состояния ЛОА, так как эти символы должны были бы быть заменены на e, когда строка превращается в терминальную.
Теорема 2.9. Существуют рекурсивные множества, не являющиеся контекстно - зависимыми.
Доказательство. Все строки в {0,1}* можно занумеровать. Пусть xi - i -ое слово. Мы можем занумеровать все грамматики типа 0, терминальными символами которых являются 0 и 1. Поскольку имена переменных не важны и каждая грамматика имеет конечное их число, можно предположить, что существует счетное число переменных.
Представим переменные в двоичной кодировке как 01, 011, 0111, 01111 и т.д. Предположим, что 01 всегда является стартовым символом. Кроме того, в этой кодировке терминал 0 будет представляться как 00, а терминал 1 как 001. Символ " -> " представляется как 0011, а запятая как 00111. Любая грамматика с терминалами 0 и 1 может быть представлена строкой правил, использующей стрелку (0011) для разделения левой и правой частей, и запятой (00111) для разделения правил. Строки, представляющие символы, используемые в правилах, - это 00, 001 и 01i для i = 1, 2, ... Множество используемых переменных определяется неявно правилами.
Отметим, что не все строки из 0 и 1 представляют грамматики, и не обязательно КЗГ. Однако, по данной строке легко можно сказать, представляет ли она КЗГ. i - ю грамматику можно найти, генерируя двоичные строки в описанном порядке пока не сгенерируется i -я строка, являющаяся КЗГ. Поскольку имеется бесконечное число КЗГ, их можно занумеровать в некотором порядке G1, G2, ...
Определим . L рекурсивно. По
строке xi легко можно определить i и затем определить Gi. По теореме 2.6. имеется алгоритм, определяющий для xi принадлежит ли он L(Gi), поскольку Gi КЗГ. Таким
образом имеется алгоритм для определения для любого x
принадлежит ли он G.
Покажем теперь, что L не генерируется никакой
КЗ-грамматикой. Предположим, что L генерируется КЗ-
грамматикой Gi. Во-первых, предположим, что .
Поскольку
. Но тогда по определению
- противоречие. Таким образом предположим,
что
. Поскольку
. Но тогда
по определению
- снова противоречие. Из чего
можно заключить, что L не генерируется Gi. Поскольку
приведенный выше аргумент справедлив для каждой КЗ-
грамматики Gi в перечислении, и поскольку перечисление
содержит все КЗ-грамматики, можно заключить, что L не
КЗ-язык. Поэтому L - рекурсивное множество, не являющееся
контекстно-зависимым.