Grammatiken sind von Natur aus rekursive Objekte, daher liegt die Antwort auf der Hand: durch Induktion. Das heißt, die Einzelheiten sind oft schwierig, richtig zu machen. In der Folge werde ich eine Technik beschreiben, die es ermöglicht, viele Grammatikkorrektheitsnachweise auf mechanische Schritte zu reduzieren, vorausgesetzt, eine kreative Vorverarbeitung wird durchgeführt.
Die Grundidee ist, sich nicht auf Wörter der Grammatik und der Sprache zu beschränken; Es ist schwer, die Struktur der Grammatik auf diese Weise zu erfassen. Stattdessen streiten wir uns über die Menge der Sätze, die die Grammatik erzeugen kann. Darüber hinaus werden wir ein entmutigendes Beweisziel in viele kleine Ziele aufteilen, die leichter zu erreichen sind.
Lassen eine formale Grammatik mit Nonterminals , Klemmen , Regeln und Startsymbol . Wir bezeichnen mit der Satz von Sätzen , die von der abgeleitet werden kann gegeben , dh . Die von erzeugte Sprache ist . Angenommen, wir wollen zeigen, dass für einige .N T δ S ≤ N ≤ ( G ) S δ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∗
Der Ansatz
So gehen wir vor. Wir definieren damitM1,…,Mk⊆(N∪T)∗
- ϑ(G)=⋃i=1kMi und
- T∗∩⋃i=1kMi=L .
Während 2. normalerweise per Definition des klar ist , erfordert 1. einige ernsthafte Arbeit. Die beiden Elemente zusammen bedeuten eindeutig wie gewünscht.L ( G ) = LMiL(G)=L
Zur Vereinfachung der Notation bezeichnen wir .M=⋃ki=1Mi
Der steinige Weg
Es gibt zwei Hauptschritte, um einen solchen Beweis durchzuführen.
Wie finde (gutes) ? Mi
Eine Strategie besteht darin, die Phasen zu untersuchen , in denen die Grammatik arbeitet. Nicht jede Grammatik ist dieser Idee zugänglich; Im Allgemeinen ist dies ein kreativer Schritt. Es hilft, wenn wir die Grammatik selbst definieren können. Mit etwas Erfahrung werden wir in der Lage sein, Grammatiken zu definieren, die sich mit diesem Ansatz besser handhaben lassen.
Wie beweise ich 1.?
Wie bei jeder Mengengleichheit gibt es zwei Richtungen.
- Gϑ(G)⊆M : (strukturelle) Induktion über die Produktionen von .G
- M i SM⊆ϑ(G) : Normalerweise eine Induktion von , beginnend mit der, die enthält .MiS
Dies ist so spezifisch wie es nur geht; Die Details hängen von der jeweiligen Grammatik und Sprache ab.
Beispiel
Betrachten Sie die Sprache
L={anbncm∣n,m∈N}
und die Grammatik mit gegeben durchδG=({S,A},{a,b,c},δ,S)δ
SA→Sc∣A→aAb∣ε
für die wir zeigen wollen, dass . Welche Phasen durchläuft diese Grammatik? Nun, zuerst erzeugt es und dann . Dies informiert sofort unsere Wahl von , nämlichc m a n b n M iL=L(G)cmanbnMi
M0M1M2={Scm∣m∈N},={anAbncm∣m,n∈N},={anbncm∣m,n∈N}.
Da und , ist Punkt 2. bereits . In Richtung 1. teilen wir den Beweis wie angekündigt in zwei Teile.M 0 ∩ T * = M 1 ∩ T * = ∅M2=LM0∩T∗=M1∩T∗=∅
ϑ(G)⊆M
Wir führen eine strukturelle Induktion nach den Regeln von .G
IA: Da , verankern wir erfolgreich.S=Sc0∈M0
IH: Nehmen wir für einige Mengen von Sätzen dass wir auch .X ⊆ MX⊆ϑ(G)X⊆M
IS: Lassen Sie beliebig. Wir müssen zeigen, dass wir nicht verlassen , unabhängig davon, welche Form hat und welche Regel als Nächstes angewendet wird . Wir tun dies durch vollständige Fallunterscheidung. Aus der Induktionshypothese wissen wir, dass (genau) einer der folgenden Fälle zutrifft:α Mα∈X⊆ϑ(G)∩MαM
- w = S c m m ≤ N Mw∈M0 , das heißt für einige .
Es können zwei Regeln angewendet werden, die beide einen Satz in ableiten :
w=Scmm∈N
M
- Scm⇒Scm+1∈M0 und ab
- Scm⇒Acm=a0Ab0cm∈M1 .
- w = a n A b n c m m , n ≤ Nw∈M1 , dh für einige :
w=anAbncmm,n∈N
- w⇒an+1Abn+1cm∈M1 und ab
- w⇒anbncm∈M2 .
- w ∈ T ∗w∈M3 : seit sind keine weiteren Ableitungen möglich.w∈T∗
Da wir alle Fälle erfolgreich abgedeckt haben, ist die Einführung abgeschlossen.
ϑ(G)⊇M
Wir führen einen (einfachen) Beweis pro . Beachten Sie, wie wir die Beweise verketten, damit "später" mit dem "früheren" verankern kann .M i M iMiMiMi
- m S c 0 = S S → S cM1 : Wir führen eine Induktion über , verankern in und verwenden im Schritt .mSc0=SS→Sc
- m n A c m S ⇒ ∗ S c m ⇒ A c m A → a A bM2 : Wir fixieren auf einen beliebigen Wert und induzieren über . Wir verankern in und aus dem ersteren Beweis ab. Der Schritt geht über .mnAcmS⇒∗Scm⇒AcmA→aAb
- M3 : Für beliebige wir den ersteren Beweis für .m,n∈NS⇒∗anAbncm⇒anbncm
Damit ist die zweite Richtung des Beweises von 1 abgeschlossen, und wir sind fertig.
Wir können sehen, dass wir stark ausnutzen, dass die Grammatik linear ist . Für nichtlineare Grammatiken benötigen wir mit mehr als einem variablen Parameter (in den Beweisen), was hässlich werden kann. Wenn wir die Grammatik unter Kontrolle haben, lernen wir, sie einfach zu halten. Betrachten Sie als abschreckendes Beispiel diese Grammatik, die :MiG
SAC→aAbC∣ε→aAb∣ε→cC∣ε
Übung
Gib eine Grammatik für
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
und beweisen ihre Richtigkeit.
Wenn Sie Probleme haben, eine Grammatik:
Man betrachte mit ProduktionenG=({S,Br,Bl,A,C},{a,b,c},δ,S)
SBlBrAC→bSb∣Bl∣Br→bBl∣bA→Brb∣Ab→aAaa∣C→bcC∣bcbc
und :Mi
M0M1M2M3M4M5={biSbi∣i∈N}={biBlbo∣o∈N,i≥o}={bkBrbi∣k∈N,i≥k}={bkaiAa2ibo∣k,o,i∈N,k≠o}={bkal(bc)iCa2lbo∣k,o,l,i∈N,k≠o}=L
Was ist mit nichtlinearen Grammatiken?
Das kennzeichnende Merkmal der Klasse der kontextfreien Sprachen ist die Dyck-Sprache : Im Wesentlichen kann jede kontextfreie Sprache als Schnittmenge einer Dyck-Sprache und einer regulären Sprache ausgedrückt werden. Leider ist die Dyck-Sprache nicht linear, das heißt, wir können keine Grammatik angeben, die inhärent für diesen Ansatz geeignet ist.
Wir können natürlich immer noch definieren und den Beweis , aber es ist mit verschachtelten Induktionen zwangsläufig schwieriger, und was nicht. Es gibt einen allgemeinen Weg, von dem ich weiß, dass er in gewissem Maße helfen kann. Wir ändern den Ansatz, um anzuzeigen, dass wir mindestens alle erforderlichen Wörter erzeugen und dass wir die richtige Anzahl von Wörtern (pro Länge) erzeugen. Formal zeigen wir dasMi
- ϑ(G)⊇L und
- n ∈ N|L(G)∩Tn|=|L∩Tn|für alle .n∈N
Auf diese Weise können wir uns auf die "einfache" Richtung vom ursprünglichen Ansatz beschränken und die Struktur in der Sprache ausnutzen, ohne die überkomplizierten Merkmale der Grammatik zu beachten. Natürlich gibt es kein kostenloses Mittagessen: Wir haben die brandneue Aufgabe, die Wörter zu zählen, die für jedes generiert . Glücklicherweise ist dies oft nachvollziehbar. siehe hier und hier für Details¹. Einige Beispiele finden Sie in meiner Bachelorarbeit .n ∈ NG n∈N
Für mehrdeutige und nicht-kontextfreie Grammatiken, fürchte ich, sind wir wieder bei Ansatz eins und denken Großbuchstaben.
- Wenn wir diese bestimmte Methode zum Zählen verwenden, erhalten wir als Bonus, dass die Grammatik eindeutig ist. Dies bedeutet wiederum auch, dass die Technik bei mehrdeutigen Grammatiken versagen muss, wie wir niemals beweisen können 2.