Wie kann man zeigen, dass L = L (G)?


22

Das Spezifizieren von formalen Sprachen durch die Angabe formaler Grammatiken ist eine häufige Aufgabe: Wir brauchen Grammatiken, um Sprachen nicht nur zu beschreiben, sondern auch zu analysieren oder sogar Wissenschaft zu betreiben . In allen Fällen ist es wichtig, dass die vorliegende Grammatik korrekt ist, dh genau die gewünschten Wörter generiert.

Wir können oft auf hoher Ebene darüber streiten, warum die Grammatik eine angemessene Darstellung der gewünschten Sprache ist, ohne einen formalen Beweis. Aber was ist, wenn wir Zweifel haben oder aus irgendeinem Grund einen formellen Beweis benötigen? Welche Techniken können wir anwenden?

Dies soll eine Referenzfrage werden . Achten Sie daher darauf, allgemeine, didaktisch aufbereitete Antworten zu geben, die an mindestens einem Beispiel illustriert sind, aber dennoch viele Situationen abdecken. Vielen Dank!

Antworten:


21

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δSNϑ(G)SδG L ( G ) = ϑ ( G ) T L = L ( G ) L Tαϑ(G)SαGL(G)=ϑ(G)TL=L(G)LT

Der Ansatz

So gehen wir vor. Wir definieren damitM1,,Mk(NT)

  1. ϑ(G)=i=1kMi und
  2. Ti=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=i=1kMi

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={anbncmn,mN}

und die Grammatik mit gegeben durchδG=({S,A},{a,b,c},δ,S)δ

SScAAaAbε

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

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

Da und , ist Punkt 2. bereits . In Richtung 1. teilen wir den Beweis wie angekündigt in zwei Teile.M 0T * = M 1T * = M2=LM0T=M1T=

ϑ(G)M

Wir führen eine strukturelle Induktion nach den Regeln von .G

IA: Da , verankern wir erfolgreich.S=Sc0M0

IH: Nehmen wir für einige Mengen von Sätzen dass wir auch .X MXϑ(G)XM

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 MwM0 , das heißt für einige . Es können zwei Regeln angewendet werden, die beide einen Satz in ableiten : w=ScmmN
    M
    • ScmScm+1M0 und ab
    • ScmAcm=a0Ab0cmM1 .
  • w = a n A b n c m m , n NwM1 , dh für einige : w=anAbncmm,nN
    • wan+1Abn+1cmM1 und ab
    • wanbncmM2 .
  • w T wM3 : seit sind keine weiteren Ableitungen möglich.wT

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=SSSc
  • 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 .mnAcmSScmAcmAaAb
  • M3 : Für beliebige wir den ersteren Beweis für .m,nNSanAbncmanbncm

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

SaAbCεAaAbεCcCε

Übung

Gib eine Grammatik für

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

und beweisen ihre Richtigkeit.

Wenn Sie Probleme haben, eine Grammatik:

Man betrachte mit ProduktionenG=({S,Br,Bl,A,C},{a,b,c},δ,S)

SbSbBlBrBlbBlbABrBrbAbAaAaaCCbcCbcbc

und :Mi

M0={biSbiiN}M1={biBlbooN,io}M2={bkBrbikN,ik}M3={bkaiAa2ibok,o,iN,ko}M4={bkal(bc)iCa2lbok,o,l,iN,ko}M5=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

  1. ϑ(G)L und
  2. n N|L(G)Tn|=|LTn|für alle .nN

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 nN

Für mehrdeutige und nicht-kontextfreie Grammatiken, fürchte ich, sind wir wieder bei Ansatz eins und denken Großbuchstaben.


  1. 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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.