Есть много способов доказать, что язык не является контекстно-свободным, но как мне доказать, что язык не является контекстно-независимым?
Какие методы существуют, чтобы доказать это? Очевидно, один из способов - показать контекстную грамматику для языка. Существуют ли какие-либо систематические методы для поиска контекстно-свободной грамматики для данного языка?
Для регулярных языков, есть являются систематические способы , чтобы получить регулярную грамматику / конечно-автомат: например, Myhill-Nerode теорема дает один из способов. Есть ли соответствующая техника для контекстно-свободных языков?
Моя мотивация здесь состоит в том, чтобы (надеюсь) создать справочный вопрос, который содержит список методов, которые часто бывают полезны при попытке доказать, что данный язык не зависит от контекста. Поскольку у нас есть много вопросов, которые являются частными случаями этого, было бы хорошо, если бы мы могли документировать общий подход или общие приемы, которые можно использовать при решении подобных проблем.
Ответы:
Практический подход, который во многих примерах работает (но не всегда, я знаю), пытается найти структуру вложенности строк в языке. «Вложенные зависимости» должны создаваться одновременно в разных частях строки.
Также у нас есть основной набор инструментов :
конкатенация: если вы можете разделить язык на две последовательные части, используйте эту продукциюS→ S1S2
объединение: разделены на непересекающиеся частиS→ S1∣ S2
итерация:S→ S1S| & epsi ;
Пример 1
Вот пример для вложения (спасибо Рафаэль).
Заменить от . Теперь мы можем бросить в условиях.2 l nN 2 л N
Замените на (в замешательстве? это 'oh', а не 'ноль'). Применить инструменты для объединения. Мы работаем с здесь. Также тогда и только тогда, когда и где - новая переменная. Заменить на .k > o или k < o o k > o k > o k = s + o s > 0 s k s + oк ≠ о к > о или к < о о к > о к > о k = s + o с > 0 s К с + о
Несколько простых переписывает.
Теперь мы видим структуру вложенности и начинаем строить грамматику.
T → b U U → b U ∣ εS1→ TВ , , (см .: объединение и итерация здесь)T→ б U U→ б U| & epsi ;
o bВ→ B Vб ∣ з (мы генерируем 'с обеих сторон)о б
Y → b c b c Z → b c Z ∣ εИкс→ YZ , ,Y→ B C B C Z→ b c Z| & epsi ;
Пример 2
Первое «очевидное» переписывание.
В лингвистике это называется «перекрестной последовательной зависимостью»: чередование (обычно) строго указывает на отсутствие контекста. Конечно и мы спасены.m + k = k + mк , м , к , м м + к = к + м
с производствами , ,X → a X b ∣ ε Y → b Y c ∣ εS→ XY Икс→ Хб ∣ ε Y→ б Yc ∣ ε
Точно так жеК'= { аКбLсм∣ m = k + l } = { aКбLсLсК∣ k , l ≥ 0 }
с производствами ,X → b X c ∣ εS→ Sс ∣ х Икс→ B Xc ∣ ε
Заключительный комментарий: эти методы помогут вам создать кандидатскую контекстно-свободную грамматику, которая, будем надеяться, распознает ваш язык. До сих пор может потребоваться подтверждение правильности , чтобы гарантировать, что грамматика действительно работает для распознавания вашего языка (не более и не менее).
источник
Существует одна характеристика КЛЛ, которая может быть полезна, теорема Хомского-Шютценбергера .
Дейк язык
Теорема Хомского-Шютценбергера
Обратите внимание, что гомоморфизм распространяется на слова (символ за символом), а затем на языки (слово за словом).
пример
Рассмотрим . СL={anbncm∣n,m∈N
из теоремы следует, что зависит от контекста, в частности, посколькуL
Пример 2
Покажите, что зависит от контекста.L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
Здесь нам нужен один тип скобок для , один для , один для , а другой используется для моделирования , вызывающего . Мы используемa bc b b k≠o
и применить теорему. Чтобы увидеть, что , нам не нужно больше, чем тот факт, что совпадающие символы (например, и ) должны встречаться одинаково часто в любом . Добавляя это противоречие к регулярным выражениям, которые мы определили с помощью , получимL=ψ(DT∩R) [ ] w∈DT R
и вместе с тем
Грамматикам и автоматам
Если мы хотим иметь в конце автомат или грамматику, у нас впереди еще немного работы.
К автомату, построить NPDA для и НКА для . Первое является стандартным, и у нас есть алгоритмы для второго, при условии, что язык дан в подходящем представлении (см. Также здесь ). Пересечение - это еще одна стандартная конструкция, и можно применять к каждому переходу индивидуально. R ψDT R ψ
Что касается грамматики, постройте одну для (опять же, она должна быть стандартной), возьмите одну для и пересекайте их . Затем примените к набору правил (символ для символа).D T ψR DT ψ
Возможно, это легко, так как алгоритмический; сложность заключается в нахождении подходящих , и . Я не знаю, является ли этот подход (часто) более простым, чем непосредственное конструирование КПК / грамматик, но он может позволить сосредоточиться на важных особенностях языка под рукой. Попробуйте сами!R ψT R ψ
источник