Как доказать, что язык не зависит от контекста?

26

Есть много способов доказать, что язык не является контекстно-свободным, но как мне доказать, что язык не является контекстно-независимым?

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

Для регулярных языков, есть являются систематические способы , чтобы получить регулярную грамматику / конечно-автомат: например, Myhill-Nerode теорема дает один из способов. Есть ли соответствующая техника для контекстно-свободных языков?


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

DW
источник
Позвольте мне оставить свое обычное замечание: при предоставлении контекстно-свободной грамматики для данного языка вам нужно подтверждение правильности, которое может сделать такой подход довольно громоздким.
Рафаэль
Ради правильного справочного вопроса, который мы можем задать на проблемных самосвалах, не могли бы вы добавить ответ о разработке грамматик и автоматов, может быть, с примером для каждого? Благодарность!
Рафаэль
Пока материал не будет перенесен сюда, обратите внимание, что Рик Декер и Бабу собрали несколько типичных неконтекстных идиом при повторном вопросе .
Рафаэль

Ответы:

13

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

Также у нас есть основной набор инструментов :

  1. конкатенация: если вы можете разделить язык на две последовательные части, используйте эту продукциюSS1S2

  2. объединение: разделены на непересекающиеся частиSS1S2

  3. итерация:SS1Sε

Пример 1

Вот пример для вложения (спасибо Рафаэль).

L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

Заменить от . Теперь мы можем бросить в условиях.2 l nn2ln

Замените на (в замешательстве? это 'oh', а не 'ноль'). Применить инструменты для объединения. Мы работаем с здесь. Также тогда и только тогда, когда и где - новая переменная. Заменить на .k > o  или  k < o o k > o k > o k = s + o s > 0 s k s + okok>o or k<ook>ok>ok=s+os>0sks+o

L1={bs+oal(bc)ma2lbol,m,o,sN,s>0,m2}

Несколько простых переписывает.

L1={bbsboalbcbc(bc)m(aa)lbol,m,o,sN}

Теперь мы видим структуру вложенности и начинаем строить грамматику.

T b U U b U εS1TV , , (см .: объединение и итерация здесь)TbUUbUε

o bVbVbW (мы генерируем 'с обеих сторон)o b

WaWaaX

Y b c b c Z b c Z εXYZ , ,YbcbcZbcZε

Пример 2

K={akblcml=m+k}

Первое «очевидное» переписывание.

K={akbm+kcmm,k0}={akbmbkcmm,k0}

В лингвистике это называется «перекрестной последовательной зависимостью»: чередование (обычно) строго указывает на отсутствие контекста. Конечно и мы спасены.m + k = k + mk,m,k,mm+k=k+m

K={akbk+mcmm,k0}={akbkbmcmm,k0}

с производствами , ,X a X b ε Y b Y c εSXYXaXbεYbYcε

Точно так жеK={akblcmm=k+l}={akblclckk,l0}

с производствами ,X b X c εSaScXXbXcε


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

Хендрик Ян
источник
11

Существует одна характеристика КЛЛ, которая может быть полезна, теорема Хомского-Шютценбергера .

Дейк язык

Пусть алфавит. Определим Дейка -Language из в контекстно-свободная грамматика с заданнымД Т( Т T ) * T G = ( { S } , Т T , δ , S ) δTDT(TT^)TG=({S},TT^,δ,S)δ

SaSa^Sε,aT .

Теорема Хомского-Шютценбергера

LΣ зависит от контекста, если и только если есть

  • алфавит ,T
  • обычный язык иR(TT^)
  • гомоморфизмψ:(TT^)Σ

и что

L=ψ(DTR) .

Обратите внимание, что гомоморфизм распространяется на слова (символ за символом), а затем на языки (слово за словом).

пример

Рассмотрим . СL={anbncmn,mN

  • Т = { ] , }T={[,} (и, канонически, ),T^={],}
  • R=L([]) и
  • ψ(x)={a,x=[b,x= ]ε,x=c,x= 

из теоремы следует, что зависит от контекста, в частности, посколькуL

DTR={[n]nmmn,mN} .

Пример 2

Покажите, что зависит от контекста.L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

Здесь нам нужен один тип скобок для , один для , один для , а другой используется для моделирования , вызывающего . Мы используемabcbbko

  • T={[,,,<} ,
  • R=L(<+>+[++])L([++]<+>+) и
  • ψ(x)={b,x{,,<}a,x=[aa,x= ]bc,x=ε,else

и применить теорему. Чтобы увидеть, что , нам не нужно больше, чем тот факт, что совпадающие символы (например, и ) должны встречаться одинаково часто в любом . Добавляя это противоречие к регулярным выражениям, которые мы определили с помощью , получимL=ψ(DTR)[]wDTR

DTR={<p>po[lmm]lop1,o0,l0,m2} {}

и вместе с тем

ψ(DTR)={bp+oal(bc)ma2lbop1,o0,l0,m2} {}={bkal(bc)manbok,l,m,n,oN,k>o,2l=n,m2} {}=L.

Грамматикам и автоматам

Если мы хотим иметь в конце автомат или грамматику, у нас впереди еще немного работы.

  • К автомату, построить NPDA для и НКА для . Первое является стандартным, и у нас есть алгоритмы для второго, при условии, что язык дан в подходящем представлении (см. Также здесь ). Пересечение - это еще одна стандартная конструкция, и можно применять к каждому переходу индивидуально. R ψDTRψ

  • Что касается грамматики, постройте одну для (опять же, она должна быть стандартной), возьмите одну для и пересекайте их . Затем примените к набору правил (символ для символа).D T ψRDTψ

Возможно, это легко, так как алгоритмический; сложность заключается в нахождении подходящих , и . Я не знаю, является ли этот подход (часто) более простым, чем непосредственное конструирование КПК / грамматик, но он может позволить сосредоточиться на важных особенностях языка под рукой. Попробуйте сами!R ψTRψ

Рафаэль
источник
Неразрешимо, является ли любой данный язык контекстно-свободным.
reinierpost