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δS∈Nϑ(G)SδG L ( G ) = ϑ ( G ) ∩ T ∗ L = L ( G ) L ⊆ T ∗α∈ϑ(G)⟺S⇒∗αGL(G)=ϑ(G)∩T∗L=L(G)L⊆T∗
Il Ansatz
Ecco come lo facciamo. Definiamo modo cheM1,…,Mk⊆(N∪T)∗
- ϑ(G)=⋃i=1kMi e
- T∗∩⋃i=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=⋃ki=1Mi
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={anbncm∣n,m∈N}
e la grammatica con data daδG = ( { S, A } , { a , b , c } , δ, S)δ
SUN→ Sc ∣ A→ a A b ∣ ε
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
M0M1M2={Scm∣m∈N},={anAbncm∣m,n∈N},={anbncm∣m,n∈N}.
Poiché e , l'articolo 2. è già curato. Verso 1., abbiamo diviso la prova in due parti come annunciato.M2=LM0∩T∗=M1∩T∗=∅
ϑ(G)⊆M
Eseguiamo induzione strutturale lungo le regole di .G
IA: Poiché ci ancoriamo con successo.S=Sc0∈M0
IH: assumere per un insieme di frasi che anche noi conosciamo .X ⊆ MX⊆ϑ(G)X⊆M
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
- w∈M0 , ovvero per alcuni .
È possibile applicare due regole, entrambe derivate da una frase in :
m ∈ N Mw=Scmm∈N
M
- Scm⇒Scm+1∈M0 e
- Scm⇒Acm=a0Ab0cm∈M1 .
- w = a nw∈M1 , ovvero per alcuni :
m , n ∈ Nw=anAbncmm,n∈N
- w⇒an+1Abn+1cm∈M1 e
- w⇒anbncm∈M2 .
- w ∈ T ∗w∈M3 : poiché , non sono possibili ulteriori derivazioni.w∈T∗
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=SS→Sc
- 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 bS⇒∗Scm⇒AcmA→aAb
- m , n ∈ N S ⇒ ∗ a n A b n c mM3 : Per usiamo la precedente dimostrazione per .m,n∈NS⇒∗anAbncm⇒anbncm
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
SAC→aAbC∣ε→aAb∣ε→cC∣ε
Esercizio
Dare una grammatica per
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
e dimostrare la sua correttezza.
Se hai problemi, una grammatica:
Considera con produzioniG=({S,Br,Bl,A,C},{a,b,c},δ,S)
SBlBrAC→ b Sb ∣ Bl∣ Br→ b Bl∣ b A→ Brb ∣ A b→ a A a a ∣ C→ b c C∣ b c b c
e :Mio
M0M1M2M3M4M5= { bioSBio∣ i ∈ N }= { bioBlBo∣ o ∈ N , i ≥ o }= { bKBrBio∣ k ∈ N , i ≥ k }= { bKun'ioA a2 iBo∣k,o,i∈N,k≠o}={bkal(bc)iCa2lbo∣k,o,l,i∈N,k≠o}=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
- ϑ(G)⊇L e
- |L(G)∩Tn|=|L∩Tn|per tutti i .n∈N
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 n∈N
Per grammatiche ambigue e prive di contesto, temo che siamo tornati a rispondere a una domanda e a pensare ai limiti.
- 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.