TIB: Endliche Automaten und kontextfreie Grammatiken (Lernziele KE6 2/3), Update 3
Update 3: Korrektur der Beweisidee für Durchschnitt, nicht Vereinigung. Danke Phil.
Update 2: Korrektur Aufgabe aus Lernziel 3. Danke Mike.
Update: Aufgabe mit Lösung hinzugefügt um aus einem Automaten eine Regelmenge abzuleiten.
Ohne viele Worte: weiter in KE6.
Lernziel 3
Wie konstruiert man zu einem endlichen Automaten einen regulären Ausdruck mit ?
Hier kommt einiges an Schreibarbeit auf uns zu. Wie wir aus dem Beitrag zu KE5 wissen, können wir reguläre Sprachen mit einem regulären Ausdruck beschreiben. Um zu beweisen, dass eine Sprache regulär ist, muss man sie auf eine reguläre Grammatik, einen endlichen Automaten, einen regulären Ausdruck oder auf bereits bekannte reguläre Sprachen zurückführen.
Hier haben wir einen Automaten zu einer Sprache bereits gegeben (die Sprache ist also als regulär bewiesen) und suchen nun auch noch einen regulären Ausdruck, der uns dieselbe Sprache beschreibt. Wir verwenden als beispiel wieder den Automaten aus dem vorherigen Beitrag:
Beispiel: mit
Hier nochmal der Graph damit Ihr nicht zwischen den Beiträgen wechseln müsst:
Der Ansatz im Beweis ist ein geringfügig anderer, ich will sagen etwas formaler aus die Vorgehensweise, die ich gleich vorstelle. Das Ergebnis ist aber dasselbe. Wenn jemand eine schöne Erklärung für den formalen Beweis im Skript hat, der die folgenden zwei Formeln verwendet, immer her damit.
Wir machen das etwas weniger formal. Die Schritte sind wie folgt:
Wir führen einen neuen Startzustand ein, der mit einem leeren Wort bereits in unseren ehemaligen Startzustand übergeht. Ebenfalls wird ein neuer Endzustand eingesetzt, zu dem ein Pfeil von jedem ehemaligen Endzustand gezogen wird. Auch hier wird das leere Wort als Übergang verwendet. Unser neuer Graph sieht wie folgt aus:
Wenn wir uns den Übergang von Zustand zu Zustand anschauen, fällt auf, dass wir in jedem Fall ein als Abschluss der Zeichenkette brauchen um zu Zustand zu kommen. Beliebig lange Worte, die aus oder zusammengesetzt sind, spielen für den Übergang aufgrund der Schleife im Zustand keine Rolle solange das als Suffix im Wort vorhanden ist. Das führt uns auch zu den beiden Überführungsregeln, die wir brauchen. Ein Bild sagt mehr als tausend Worte:
Klammern wir die Ausdrücke bei Regel 1, wird es evtl. deutlicher: ist dann der gesuchte, reguläre Ausdruck um von Zustand zu Zustand zu kommen nachdem man Zustand entfernt hat. Ein Wort, dass den regulären Ausdruck erfüllen würde, wäre z.B. oder . Eines, dass ihn nicht erfüllt ist .
Regel 2 ist noch einfacher: Von Zustand zu Zustand kommt man durch die Konkatenation von und . That's it.
Das alles angewendet auf unseren Graphen führt uns zu folgendem:
Die leeren Worte brauchen wir nun nicht mehr und können sie streichen. Korrekt geklammert haben wir den gesuchten, regulären Ausdruck und damit gilt: . Wir können auch problemlos eine reguläre Grammatik zum Automaten angeben um zu bekommen. Könnt Ihr mal selbst probieren.
Aufgabe: findet zum Automaten die Regelmenge der passenden Grammatik
Lernziel 4
Wie zeigt man, dass die regulären Sprache unter den in Satz 8.4.1 genannten Operationen abgeschlossen sind (Beweisidee)?
Was waren nochmal die Operationen in Satz 8.4.1? Ach ja:
- Vereinigung, Komplexprodukt, Stern
- Durchschnitt, Mengendifferenz, Komplement
- Spiegelung
Und was Abgeschlossenheit ist, wisst Ihr doch noch, oder? Die Anwendung der Operationen auf zwei Mengen der selben Klasse führt nicht aus dieser Klasse heraus. Ein einleuchtendes Beispiel sind die ganzen Zahlen , die bzgl. Subtraktion, Addition und Multiplikation abgeschlossen sind. Aber nicht bzgl. der Division: und es gilt und .
Wie beweisen wir denn nun, dass die regulären Sprachen bzgl. der Operationen abgeschlossen sind? Fangen wir mit dem Komplement an:
Beweisidee zur Abgeschlossenheit bzgl. des Komplements
, wobei
Was müssen wir zeigen? Es muss gelten und . D.h. in liegen alle Worte aus , die nicht in liegen. Das wäre dann unser Komplement.
Es werden zwei vollständige und determinierte Automaten und konstruiert, die sich nur in ihren Endzuständen unterscheiden. Wir erinnern uns, dass ein Wort nur dann zu einer Sprache gehört, wenn es ausgehend vom Startzustand den Automaten in einen Endzustand überführt.
Der Unterschied zwischen den Automaten sind nur ihre Endzustände: für Automat sind die Endzustände in und für Automat sind die Endzustände in , d.h. alle Zustände außer den Endzuständen des Automaten . Die Überführungsfunktionen aus bleiben erhalten. Ein kleines Beispiel um es greifbarer zu machen:
Beispiel: Sei der Automat von oben mit , so wäre der andere Automat mit . Beachtet die Endzustände des Automaten .
Ist also ein Wort in der Sprache , so führt es die Maschine in den Endzustand . Ist es nicht in , so sind wir notgedrungen immer noch in Zustand oder unterwegs. Und das sind ja genau die Endzustände unserer Maschine , was bedeutet, dass wenn ein Wort nicht in Sprache ist, so ist es gezwungenermaßen in Sprache . Die umgekehrte Richtung gilt ebenfalls, wie man sich leicht vorstellen kann.
Achtung: kontextfreie Grammatiken (Typ-2) sind nicht abgeschlossen bzgl. des Komplement!
Beweisidee zur Abgeschlossenheit bzgl. Vereinigung, Produkt und Stern:
Diese sind bereits nach der Definition der regulären Mengen ebenfalls regulär. Hier müssen wir also nichts mehr tun. Im Skript ist noch eine Beweisidee für die Vereinigung drin, aber vielleicht macht es Sinn diese hier anhand von Beispielen (aus dem Buch von Dirk W. Hoffmann) zu illustrieren.
Beispiel: Nehmen wir zunächst zwei Grammatiken (wir sind wieder bei Grammatiken, nicht mehr bei Automaten) über einem Alphabet .
(zur Erinnerung: Nonterminale, Alphabet, Regeln, Start) mit den Regeln
mit den Regeln
Wichtig: Wie Ihr unschwer erkennen könnt, sind die Grammatiken nur kontextfrei (Typ-2) und nicht regulär. Das ist jedoch für die Beispiele zur Vereinigung, Produkt und Stern nicht schlimm, dafür sind sie abgeschlossen. Sie sind jedoch nicht abgeschlossen für Durchschnitt und Komplement.
Wir gehen davon aus, dass die Nonterminalmengen und keine gemeinsamen Mengen haben.
Vereinigung
Wir müssen also eine Grammatik erzeugen, die uns erzeugt. Dazu werden die Mengen und (Nonterminale), sowie und (Regeln) zu neuen Mengen zusammengefasst. Auch kümmern wir uns um das Startsymbol, welches beide Startsymbole und zusammenfasst. Auch müssen wir eine neue Produktion einführen und wir erhalten:
Die Regelmenge sieht im Ergebnis wie folgt aus:
Und diese Grammatik erzeugt uns . Sie ist zwar nicht regulär, aber wir können sie durch Einführung von neuen Regeln und Zuständen zu einer regulären Grammatik transformieren.
Die Beweisidee für den Durchschnitt sollten wir aber auch nicht unerwähnt lassen: Ausgehend von zwei Automaten, die unsere Mengen und berechnen, werden weitere Automaten für und erzeugt. Zu diesen Mengen werden zwei reguläre Ausdrücke und konstruiert und diese mittels zu verbunden, was nichts anderes als ist.
Zu diesem Ausdruck wird eine Grammatik konstruiert, zur Grammatik ein vollständiger Automat , welcher anschließend zu umgeformt wird. Alles zusammengenommen ist dann . Ich fand die Darstellung aus dem Buch von Dirk. W. Hoffmann mit dem Beispiel einfacher nachzuvollziehen.
Komplexprodukt
Hier brauchen wir eine Grammatik für . Dazu werden wieder die Nonterminale und Regeln zusammengeführt und die Startsymbole durch ein neues ersetzt.
Und das ist unsere neue Regelmenge:
Auch das sieht gut aus. Nun zum Stern.
Sternoperator: Kleene'sche Hülle
Was brauchen wir? ! Wir brauchen hierzu einfach nur neue Ableitungsregeln, die es uns ermöglichen aus dem neuen Startsymbol eine beliebige Anzahl des ursprünglichen Startsymbols zu erzeugen. Die neue Grammatik sieht wie folgt aus:
Und das ist unsere neue Regelmenge:
Und fertig!
Weiter geht es mit dem Durchschnitt für reguläre Sprachen.
Beweisidee zur Abgeschlossenheit bzgl. des Durchschnitts:
Mittels der de Morgan'schen Regel gilt: . Und die Vereinigung haben wir ja bereits in der Definition als regulär drin.
Achtung: kontextfreie Grammatiken (Typ-2) sind nicht abgeschlossen bzgl. des Durchschnitts!
Beweisidee zur Abgeschlossenheit bzgl. der Differenz
, wobei hier nicht unbedingt eine Teilmenge von sein muss.
Es gilt:
Achtung: kontextfreie Grammatiken (Typ-2) sind nicht abgeschlossen bzgl. des Durchschnitts und somit auch nicht bzgl. der Differenz!
Beweisidee zur Abgeschlossenheit bzgl. der Spiegelung
Es muss also gelten ist regulär ist regulär.
Ich finde hier den Beweis mittels Automat einfacher. Dazu wird einfach ein neuer Automat, der Umkehrautomat wie folgt gebildet:
- gdw. (Umkehrung der Zustandsübergänge)
- Startzustand wird zum neuen Endzustand
- Neuer Startzustand mit -Übergängen zu allen alten Endzuständen
Damit haben wir unser gespiegeltes Wort. Und da sich ansonsten nichts am Automaten geändert hat, ist die Ergebnismenge weiterhin regulär.
Antwort zum Lernziel: man zeigt die Abgeschlossenheit der regulären Sprachen bzgl. der Operationen, indem man Automaten erstellt, die die Operationen auf den beiden Mengen durchführen. Nach Definition aus dem Beitrag zu KE5 sind die regulären Sprachen, auf denen die Operationen , und ausgeführt werden ebenfalls regulär. Können wir also die oben genannten Operationen damit "nachbilden", ist uns der Nachweis gelungen (siehe Beweis zum Durchschnitt).
Lernziel 5
Welche "Probleme" sind für reguläre Sprachen entscheidbar?
Der Abschnitt ist kurz, aber wichtig! Es gibt bestimmte Probleme auf den regulären Mengen, die entscheidbar sind. Dazu gehören:
? (Sprachproblem, gehört das Wort zur Sprache ?)
? (Inkklusionsproblem, ist eine Teilmenge der Sprache ?)
? (Äquivalenzproblem, ist die Sprache äquivalent zur Sprache ?)
? (Leerheitsproblem, ist die Sprache leer?)
endlich? (Endlichkeitsproblem, ist die Sprache endlich? D.h. )
Für Typ-2-Sprachen können wir z.B. das Äquivalenzproblem nicht entscheiden.
Antwort zum Lernziel: Das Sprachproblem, das Inklusionsproblem, das Äquivalenzproblem, das Leerheitsproblem und das Endlichkeitsproblem sind für reguläre Sprachen entscheidbar.
Lernziel 6
Wie lautet das Pumping-Lemma für reguläre Sprachen? Wie kann man es verwenden um nachzuweisen, dass eine Sprache nicht regulär ist?
Die Definition im Skript lasse ich mal für zuletzt. Erst einmal: mit dem Pumping Lemma für reguläre Sprachen (für Typ-2-Sprachen gibt es auch eins) haben wir ein Werkzeug an der Hand, mit dem wir nachweisen können, dass eine Sprache nicht regulär ist. Das liegt an der festgelegten Struktur der Produktionen (Regeln) unserer Sprachtypen.
Sieht man sich z.B. die festgelegten Regeln für unsere regulären Sprachen an, so sieht man, dass wir in jedem Schritt ein Terminal und ein Nonterminal erzeugen, wobei das Nonterminal immer an letzter Stelle steht. Abgesehen von der Abschlussregel mit dem leeren Wort haben wir hier ein festgelegtes Erzeugungsmuster. Das Nonterminal an letzter Stelle begrenzt die Anzahl der Regeln, die im nächsten Schritt anzuwenden sind und erlaubt uns Rückschlüsse auf die bisher erzeugten Zeichen.
Haben wir bei der Erzeugung eines Wortes mehr Schritte getan, als Nonterminale zur Verfügung stehen, so muss min. ein Nonterminal irgendwo mehrfach aufgetaucht sein. Bildlich gesprochen sind wir also über einen Zyklus im Automaten gestolpert. Denn jeder Automat zu einer regulären Sprache hat auch eine endliche Anzahl an Zuständen.
Beispiel: nehmen wir einfach aus dem vorherigen Beitrag: mit , , Startsymbol und den Regeln :
Damit ist , also alle Worte über , d.h. z.B. , oder . Hier habt Ihr auch euren Zyklus. Wir haben z.B. das Wort : die Anzahl der Terminale ist größer als die Anzahl der Zustände im Automaten. Damit müssen wir min. einen Zyklus durchlaufen haben.
Jetzt ist der richtige Zeitpunkt für die Definition des Pumping Lemma:
Für jede reguläre Sprache existiert ein , so dass sich alle Wörter mit in der folgenden Form darstellen lassen:
mit und
Dann ist mit auch das Wort für alle enthalten.
wird Pumping-Zahl genannt. Wenden wir die Definition von oben also auf unser Beispiel an, so hat das kleinste Wort mit einem Zyklus die Länge (). Dann muss das Anfangsstück mindestens die Länge aufweisen und in Kombination mit dem Mittelteil maximal Zeichen lang sein. Wichtig ist, dass nicht die kleinste Länge haben muss, auf die die Kriterien zutreffen. Es genügt irgendein , das passt und man eine Zerlegung für das Wort zeigen kann.
In unserem Beispiel mit dem Wort und haben wir eine:
Es lässt sich der Mittelteil also beliebig oft wiederholen und das daraus entstandene Wort ist immer noch noch in . Ist das nicht der Fall, so ist die Sprache nicht regulär. Wie man oben am Automaten sehen kann, ist die Kombination auch genau unser Zyklus! Wir haben in unserem Wort immer ein am Anfang und ein am Ende (unsere und ), während wir den Mittelteil beliebig oft (oder auch gar nicht) wiederholen können.
Kommen wir nun zu einer kleinen Abweichung von der obigen Grammatik.
Beispiel: mit , , Startsymbol und den Regeln :
Der einzige Unterschied von zu ist, dass der Zustandsübergang von keinen Zyklus mehr hat. Der Automat sieht nun wie folgt aus:
Die Sprache besteht also nur aus dem Wort . Fällt euch was auf? Wir haben keinen Zyklus. Die Sprache ist trotzdem regulär. Was machen wir hier mit unserem Pumping-Lemma? Nichts! Das Pumping-Lemma ist sinnvoll für unendliche Sprachen, endliche Sprachen sind der Definition nach bereits regulär. Das heißt aber nicht, dass das Pumping-Lemma hier nicht auch funktioniert.
Nicht vergessen: wir können mit dem Pumping-Lemma nicht zeigen, dass eine Sprache regulär ist (die Erfüllung des Pumping Lemma ist nicht hinreichend), wir können aber zeigen, dass sie das nicht ist, indem wir uns eine Pumping Lemma Zahl suchen, für Wörter, die größer sind als die Zerlegungen durchgehen und sie prüfen. Hat keine unserer unserer Zerlegungen die gewünschte Form, so ist die Sprache nicht regulär (kontextfrei). Warum größer als ?
Ganz einfach: für eine reguläre Sprache brauchen wir nur einen endlichen Automaten anzugeben, der für jedes Wort aus der Sprache einen akzeptierenden Zustand hat.
Setzen wir in unserem Beispiel z.B. auf , bedeutet es, dass wir für alle anderen Worte bereits einen Automaten im Kopf haben, der für alle Wörter keiner als akzeptierende Zustände hat. Damit ist sind bzgl. der Worte die Sprache bereits als regulär entlarvt. Fehlt uns nur noch der Beweis der Regularität aller anderen Worte der Sprache.
Tja, wie viele Worte haben wir nun mit der Länge ? Keine! Wir haben also nichts mehr zu prüfen, da eine leere Menge ist der Definition nach regulär ist. Also ist die Sprache nicht nur nicht nicht regulär (sorry für das komische Wortkonstrukt), sondern sogar durch die Angabe eines endlichen Automaten regulär. Das ist der Grund für die Regularität von endlichen Sprachen.
Merksatz: Endliche Sprachen sind immer regulär. Wir basteln uns hierzu einfach einen Automaten, der für jedes Wort, dass wir haben (denn die Menge unserer Worte ist endlich) einen akzeptierenden Zustand hat. Auch wenn die Länge der Worte ist, und der Automat Milliarden an akzeptierenden Zuständen hat. Hauptsache sie sind endlich. That's it.
In der Regel kennen wir das jedoch nicht, so dass wir nur eine Sprachdefinition, wie z.B. haben und prüfen müssen ob die Sprache regulär ist. Bei Gelegenheit bringe ich hier ein paar explizite Beispiele. Bis dahin begnüge ich mich mit der Antwort zum Lernziel.
Antwort zum Lernziel: Mit dem Pumping Lemma lässt sich nachweisen, dass eine Sprache nicht regulär ist. Der Umkehrschluss gilt nicht, es gibt Sprachen, die nicht regulär sind aber das Pumping Lemma erfüllen. Dazu wird eine Pumping Lemma Zahl gesucht und für alle Worte, die länger sind als eine Zerlegung angegeben, so dass man das Midfix beliebig oft wiederholen kann und sich das Wort immer noch in der Sprache befindet. Tut es das nicht, so ist die Sprache nicht regulär. Wir weisen mit der Angabe von also quasi einen Zyklus im Automaten nach, mit dem man unendliche Worte durch Wiederholung von erstellen kann ohne die Sprache zu verlassen. Für endliche Sprachen gilt er Merksatz von oben.
Weiter geht es dann mit den letzten beiden Lernzielen im nächsten Beitrag. Fehler, Ergänzungen, Bermerkungen wie immer bitte ASAP in die Kommentare.
Sie können zum Ende springen und ein Kommentar hinterlassen. Pingen ist im Augenblick nicht erlaubt.
April 23rd, 2014 10:52
Hallo Anton,
in der letzten Aufgabe zum Lernziel 3 ist m.E. ein kleiner Fehler.
0→a0∣b0∣b1 soll sicher eher 0→a0∣b0∣a1 lauten, oder?
Gruß
Mike
P.S. Danke für deinen Blog. Wirklich sehr hilfreich!!!
April 23rd, 2014 15:27
Hallo Mike,
Du hast Recht. Ist gefixt.
Gruß
Anton
Dezember 31st, 2015 12:05
Kleiner Fehler: "Beweisidee für Vereinigung aus dem Skript" - hier geht es um die Schnittmenge (Durchschnitt).