Як довести, що мова без контексту?


26

Існує багато методик довести, що мова не є контекстною, але як я можу довести, що мова є безконтекстною?

Які методи є для того, щоб довести це? Очевидно, один із способів - виявити без контексту граматику для мови. Чи існують якісь систематичні прийоми для пошуку безтекстової граматики для даної мови?

Для регулярних мов, є є систематичні способи , щоб отримати регулярну граматику / кінцево-автомат: наприклад, Myhill-Nerode теорема дає один з способів. Чи є відповідна техніка для без контекстних мов?


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


Дозвольте мені залишити свою звичайну зауваження: надаючи без контексту граматику для мови, яка вам потрібна, вам потрібен доказ коректності, який може зробити підхід досить непростим.
— Рафаель

Задля того, щоб зробити це належним довідковим запитанням, яке ми можемо поставити перед проблемними самоскидами, чи можете ви додати відповідь про створення граматик та автоматів, можливо, з прикладом кожного? Спасибі!
— Рафаель

Поки матеріал не буде переміщений сюди, зауважте, що Рік Декер та Бабу зібрали кілька типових без контекстуальних ідіом під час повторного запитання .
— Рафаель

Відповіді:


13

Практичний підхід, який у багатьох прикладах працює [але не завжди, я знаю] намагається знайти це в мові структуру гніздування струн. "Вкладені залежності" повинні створюватися одночасно в різних частинах рядка.

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

  1. конкатенація: S→S1S2 якщо ви можете розділити мову на дві послідовні частини, використовуйте це виробництво

  2. союз: S→S1∣S2 розділиться на роз'єднані частини

  3. ітерація: S→S1S∣ε

Приклад 1

Ось приклад для гніздування (дякую Рафаелю).

L={бкал(бc)манбо∣к,л,м,н,о∈N,к≠о,2л=н,м≥2}

Замініть на 2 л . Тепер ми можемо скинути nн2лн в умовах.

Замініть на k > o  або  k < o (плутати? O - це "о", а не "нуль"). Застосовуйте інструменти для об'єднання. Ми працюємо з k > o тут. Також k > o iff k = s + o і s > 0, де s - нова змінна. Замініть k на s + o .k≠ok>o or k<ook>ok>ok=s+os>0sks+o

L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}

Деякі прості переписування.

L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}

Тепер ми бачимо структуру гніздування і починаємо будувати граматику.

, T → b U , U → b U ∣ ε (див. Тут: конкатенація та ітерація)S1→TVT→bUU→bU∣ε

(генеруємо o b з обох сторін)V→bVb∣Wo b

W→aWaa∣X

, Y → b c b c , Z → b c Z ∣ εX→YZY→bcbcZ→bcZ∣ε

Приклад 2

K={akblcm∣l=m+k}

Перший "очевидний" перепис.

K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}

У лінгвістиці це називається " міжсеріальна залежність": переплетення (як правило) сильно вказує на безконфліктність. Звичайно, m + k = k + m і ми врятовані.k,m,k,mm+k=k+m

K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}

з виробництвами , X → a X b ∣ ε , Y → b Y c ∣ εS→XYX→aXb∣εY→bYc∣ε

Аналогічно K′={akblcm∣m=k+l}={akblclck∣k,l≥0}

з виробництвами , X → b X c ∣ εS→aSc∣XX→bXc∣ε


Остаточний коментар: ці методи допоможуть вам розібратися з кандидатською граматикою без контексту, яка, сподіваємось, розпізнає вашу мову. Доказ коректності все ж може знадобитися для того, щоб граматика справді працювала на розпізнавання вашої мови (нічого більше, і не менше).


11

Існує одна характеристика CFL, яка може бути корисною, теорема Хомського-Шютценбергера .

Дік мова

Нехай алфавіт. Визначимо Дейка -Language D T ⊆ ( T ∪ T ) * з T з допомогою контекстно-вільна граматика G = ( { S } , Т ∪ T , б , S ) з б заданоїTDT⊆(T∪T^)∗TG=({S},T∪T^,δ,S)δ

.S→aSa^S∣ε,a∈T

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

без контексту, якщо і лише якщо вони єL⊆Σ∗

  • T
  • звичайна мова R⊆(T∪T^)∗
  • ψ:(T∪T^)→Σ∗

так що

L=ψ(DT∩R)

Зауважте, що гомоморфізм поширюється на слова (символ за символом), а потім на мови (слово за словом).

Приклад

L={anbncm∣n,m∈N

  • T={[,⟨} (and, canonically, T^={],⟩}),
  • R=L([∗]∗⟨∗⟩∗) and
  • ψ(x)={a,x=[b,x= ]ε,x=⟨c,x= ⟩

the theorem implies that L is context-free, in particular since

DT∩R={[n]n⟨m⟩m∣n,m∈N}.

Example 2

Show that L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2} is context-free.

Here, we need one type of parentheses for a, one for bc, one for b, and another used to model the b that cause k≠o. We use

  • T={[,⟨,⊢,<},
  • R=L(<+>+⊢∗[∗⟨⟨+⟩+⟩]∗⊣∗)∪L(⊢∗[∗⟨⟨+⟩+⟩]∗⊣∗<+>+) and
  • ψ(x)={b,x∈{⊢,⊣,<}a,x=[aa,x= ]bc,x=⟨ε,else

and apply the theorem. In order to see that L=ψ(DT∩R), we don't need more than the fact that matching symbols (e.g. [ and ]) have to occur equally often in any w∈DT. Adding this contraint to the regular expressions we defined R by, we get

DT∩R={<p>p⊢o[l⟨m⟩m]l⊣o∣p≥1,o≥0,l≥0,m≥2}∪ {…}

and therewith

ψ(DT∩R)={bp+oal(bc)ma2lbo∣p≥1,o≥0,l≥0,m≥2}∪ {…}={bkal(bc)manbo∣k,l,m,n,o∈N,k>o,2l=n,m≥2}∪ {…}=L.

To grammars and automata

If we want to have an automaton or grammar in the end, we have some more work ahead of us.

  • Towards an automaton, construct the NPDA for DT and an NFA for R. The former is standard and we have algorithms for the latter, provided the language is given in a suitable representation (see also here). Intersection both is another standard construction and ψ can be applied to every transition individually.

  • Towards a grammar, build one for R (again, should be standard), take the one for DT and intersect them. Then apply ψ to the rule set (symbol for symbol).

Arguably, this is easy since algorithmic; the complexity lies in finding suitable T, R and ψ. I don't know if this approach is (often) simpler than constructing PDA/grammars directly but it may allow to focus on the important features of the language at hand. Try for yourself!


It is undecidable whether any given language is context-free.
— reinierpost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.