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


26

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

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

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


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


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

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

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

Відповіді:


13

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

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

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

  2. союз: SS1S2 розділиться на роз'єднані частини

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

Приклад 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 .kok>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 ε (див. Тут: конкатенація та ітерація)S1TVTbUUbUε

(генеруємо o b з обох сторін)VbVbWo b

WaWaaX

, Y b c b c , Z b c Z εXYZYbcbcZbcZε

Приклад 2

K={akblcml=m+k}

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

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

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

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

Дік мова

Нехай алфавіт. Визначимо Дейка -Language D T( T 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={[,} (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

DTR={[n]nmmn,mN}.

Example 2

Show that L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2} 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 ko. 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=ψ(DTR), we don't need more than the fact that matching symbols (e.g. [ and ]) have to occur equally often in any wDT. Adding this contraint to the regular expressions we defined R by, we get

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

and therewith

ψ(DTR)={bp+oal(bc)ma2lbop1,o0,l0,m2} {}={bkal(bc)manbok,l,m,n,oN,k>o,2l=n,m2} {}=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.