Come mostrare che L = L (G)?


22

Specificare le lingue formali dando grammatiche formali è un compito frequente: abbiamo bisogno di grammatiche non solo per descrivere le lingue, ma anche per analizzarle o persino per fare scienza adeguata . In tutti i casi, è importante che la grammatica a portata di mano sia corretta , ovvero generi esattamente le parole desiderate.

Spesso possiamo argomentare ad alto livello perché la grammatica è una rappresentazione adeguata della lingua desiderata, omettendo una prova formale. E se avessimo dei dubbi o avessimo bisogno di una prova formale per qualche motivo? Quali sono le tecniche che possiamo applicare?

Questo dovrebbe diventare una domanda di riferimento . Pertanto, si prega di prestare attenzione a dare risposte generali, presentate in modo didattico, che sono illustrate da almeno un esempio ma che tuttavia coprono molte situazioni. Grazie!

Risposte:


21

Le grammatiche sono oggetti intrinsecamente ricorsivi, quindi la risposta sembra ovvia: per induzione. Detto questo, le specifiche sono spesso difficili da ottenere. Nel sequel descriverò una tecnica che consente di ridurre molti passaggi di correttezza grammaticale a passaggi meccanici, a condizione che venga eseguita una pre-elaborazione creativa.

L'idea di base è di non limitarsi alle parole di grammatica e lingua; in questo modo è difficile comprendere la struttura della grammatica. Invece, discuteremo dell'insieme di frasi che la grammatica può creare. Inoltre, divideremo un obiettivo scoraggiante in molti piccoli obiettivi che sono più tracciabili.

Let una grammatica formale con non-terminali , terminali , regole e che iniziano simbolo . Indichiamo con l'insieme di frasi che possono essere derivate da dato , ovvero . La lingua generata da è . Supponiamo di voler dimostrare che per alcuni .N T δ S N ϑ ( G ) S δ α ϑ ( G )G=(N,T,δ,S)NTδSNϑ(G)SδG L ( G ) = ϑ ( G ) T L = L ( G ) L T αϑ(G)SαGL(G)=ϑ(G)TL=L(G)LT

Il Ansatz

Ecco come lo facciamo. Definiamo modo cheM1,,Mk(NT)

  1. ϑ(G)=i=1kMi e
  2. Ti=1kMi=L .

Mentre 2. è generalmente chiaro per definizione di , 1. richiede un lavoro serio. I due elementi insieme implicano chiaramente come desiderato.L ( G ) = LMiL(G)=L

Per facilità di notazione, denotiamo .M=i=1kMi

La strada rocciosa

Esistono due passaggi principali per eseguire tale prova.

  • Come trovare (bene) ? Mi
    Una strategia è investigare le fasi attraverso cui la grammatica funziona. Non tutte le grammatiche sono suscettibili di questa idea; in generale, questo è un passaggio creativo. Aiuta se possiamo definire noi stessi la grammatica; con una certa esperienza, saremo in grado di definire grammatiche più trattabili con questo approccio.

  • Come provare 1.?
    Come con qualsiasi uguaglianza impostata, ci sono due direzioni.

    • Gϑ(G)M : induzione (strutturali) sulle produzioni di .G
    • M i SMϑ(G) : Di solito si induzione , a partire da quello che contiene .MiS

Questo è il più specifico possibile; i dettagli dipendono dalla grammatica e dalla lingua a portata di mano.

Esempio

Considera la lingua

L={anbncmn,mN}

e la grammatica con data daδG=({S,A},{a,b,c},δ,S)δ

SScAAaAbε

per il quale vogliamo dimostrare che . Quali sono le fasi che attraversa questa grammatica? Bene, prima genera poi . Questo informa immediatamente la nostra scelta di , vale a direc m a n b n M iL=L(G)cmanbnMi

M0={ScmmN},M1={anAbncmm,nN},M2={anbncmm,nN}.

Poiché e , l'articolo 2. è già curato. Verso 1., abbiamo diviso la prova in due parti come annunciato.M2=LM0T=M1T=

ϑ(G)M

Eseguiamo induzione strutturale lungo le regole di .G

IA: Poiché ci ancoriamo con successo.S=Sc0M0

IH: assumere per un insieme di frasi che anche noi conosciamo .X MXϑ(G)XM

IS: Let arbitrario. Dobbiamo dimostrare che qualsiasi forma ha e qualunque regola viene applicata prossimo, non ci lasciare . Lo facciamo per distinzione tra maiuscole e minuscole. Per ipotesi di induzione, sappiamo che (esattamente) si applica uno dei seguenti casi:α MαXϑ(G)MαM

  • wM0 , ovvero per alcuni . È possibile applicare due regole, entrambe derivate da una frase in : m N Mw=ScmmN
    M
    • ScmScm+1M0 e
    • ScmAcm=a0Ab0cmM1 .
  • w = a nwM1 , ovvero per alcuni : m , n Nw=anAbncmm,nN
    • wan+1Abn+1cmM1 e
    • wanbncmM2 .
  • w T wM3 : poiché , non sono possibili ulteriori derivazioni.wT

Dal momento che abbiamo coperto con successo tutti i casi, l'induzione è completa.

ϑ(G)M

Eseguiamo una (semplice) prova per . Nota come concateniamo le prove in modo che "successiva" possa ancorarsi usando la "precedente" .M i M iMiMiMi

  • mM1 : eseguiamo un'induzione su , ancorando in e usando nel passaggio.mS S cSc0=SSSc
  • m n A c m S S c mM2 : fissiamo su un valore arbitrario e induciamo oltre . in , usando quella dalla precedente dimostrazione. Il passaggio procede da .mnAcm A a A bSScmAcmAaAb
  • m , n N S a n A b n c mM3 : Per usiamo la precedente dimostrazione per .m,nNSanAbncmanbncm

Questo conclude la seconda direzione della prova di 1. e abbiamo finito.

Possiamo vedere che sfruttiamo pesantemente che la grammatica è lineare . Per le grammatiche non lineari, abbiamo bisogno di con più di un parametro variabile (nelle prove), che può diventare brutto. Se abbiamo il controllo della grammatica, questo ci insegna a mantenerlo semplice. Considera come esempio dissuasivo questa grammatica che è equivalente a : GMiG

SaAbCεAaAbεCcCε

Esercizio

Dare una grammatica per

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

e dimostrare la sua correttezza.

Se hai problemi, una grammatica:

Considera con produzioniG=({S,Br,Bl,A,C},{a,b,c},δ,S)

SBSB|Bl|BrBlBBl|BUNBrBrB|UNBUNun'UNun'un'|CCBcC|BcBc

e :Mio

M0={biSbiiN}M1={biBlbooN,io}M2={bkBrbikN,ik}M3={bkaiAa2ibok,o,iN,ko}M4={bkal(bc)iCa2lbok,o,l,iN,ko}M5=L

Che dire delle grammatiche non lineari?

La caratteristica che caratterizza la classe dei linguaggi senza contesto è il linguaggio Dyck : in sostanza, ogni linguaggio privo di contesto può essere espresso come intersezione di un linguaggio Dyck e di un linguaggio regolare. Sfortunatamente, il linguaggio Dyck non è lineare, cioè non possiamo dare una grammatica intrinsecamente adatta a questo approccio.

Naturalmente, possiamo ancora definire e fare la prova, ma è destinato ad essere più arduo con le induzioni nidificate e cosa no. C'è un modo generale che conosco che può aiutare in una certa misura. Modifichiamo la risposta per mostrare che generiamo almeno tutte le parole richieste e che generiamo la giusta quantità di parole (per lunghezza). Formalmente, lo dimostriamoMi

  1. ϑ(G)L e
  2. |L(G)Tn|=|LTn|per tutti i .nN

In questo modo, possiamo limitarci alla direzione "facile" dalla risposta originale e sfruttare la struttura nella lingua, ignorando le caratteristiche complicate della grammatica. Certo, non c'è pranzo libero: abbiamo il nuovissimo compito di contare le parole che genera per ogni . Fortunatamente per noi, questo è spesso trattabile; vedi qui e qui per i dettagli¹. Puoi trovare alcuni esempi nella mia tesi di laurea .G nN

Per grammatiche ambigue e prive di contesto, temo che siamo tornati a rispondere a una domanda e a pensare ai limiti.


  1. Quando si utilizza quel particolare metodo per il conteggio, si ottiene come bonus che la grammatica non è ambigua. A sua volta, questo significa anche che la tecnica deve fallire per grammatiche ambigue come non possiamo mai provare 2.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.