TIB: Endliche Automaten und kontextfreie Grammatiken (Lernziele KE6 1/3)
Vorletzte Kurseinheit. Und dazu noch ein eig. sehr schönes Thema. Die letzte KE und diese hier gehören ganz eng zusammen; ich kämpfe noch mit mir nicht einen einzigen Eintrag aus beiden Kurseinheiten zu gießen. Ich empfehle euch beide in einem Tab/Fenster aufzumachen damit Ihr beide Einträge vor der Nase habt und zwischen ihnen blättern könnt wenn in diesem Eintrag auf Sätze aus KE5 Bezug genommen wird.
Leider sind die letzten Kurseinheiten etwas dicker 😉 Kämpfen wir uns also wieder direkt durch die Lernziele.
Lernziel 1
Wie definiert man die von einem endlichen Automaten erkannte Sprache?
In dieser Kurseinheit sind Turingmaschinen mit einem Einweg-Ausgabeband ohne Arbeitsbänder im Fokus. Auch wenn man sie als Turingmaschinen notieren kann, wird eine andere Notation verwendet. Die der endlichen Automaten. Starten wir mit der Definition und einem Beispiel:
Endlicher (nichtdeterministischer) Automat
Quintupel mit
als Eingabealphabet
als endliche Menge der Zustände
als Anfangszustand
als Menge der Endzustände
als Überführungsrelation
Dieser Teil der Definition macht euch sicher kaum Probleme, haben wir doch bereits Turingmaschinen in ähnlicher Weise definiert. Die Überführungsrelation führt einfach nur von einem Zustand aus zu einem anderen Zustand aus bei der Eingabe von einem Element aus dem Eingabealphabet .
Nun definieren wir noch :
ist die transitive Hülle von
Oha. Die induktive Definition der Überführungsrelation ist nicht so einfach. Aber warten wir das folgende Beispiel gleich ab, dann wird es klarer. In der transitiven Hülle sind auch indirekte Relationen drin, d.h. erreichen wir z.B. den Zustand bei der Eingabe von nur über ausgehend vom Startzustand , so hätten wir eig. nur die Relationen und . In der transitiven Hülle haben wir jedoch auch noch das indirekte Tripel drin.
Diese Tripel in können nicht nur einzelne Zeichen aus beinhalten, sondern können der Definition nach auch Worte sein. Führt uns z.B. die Eingabe zu einem Endzustand, so ist in der transitiven Hülle auch drin (wobei ein Anfangs- und ein Endzustand ist). Wird gleich im folgenden beispiel etwas verständlicher, versprochen.
Kommen wir nun zur akzeptierten Sprache :
Es gilt also genau dann wenn den Anfangszustand in einen Endzustand überführt. Damit ist genau das die von dem endlichen Automaten erkannte Sprache . Nun kümmern wir uns um die Worte determiniert und vollständig.
determiniert, gdw. für alle
vollständig, gdw. für alle
Gar nicht so schwer: determiniert bedeutet, dass wir ausgehend vom Startzustand das Wort von links nach rechts ableiten und immer einen Folgezustand haben. Wenn es mal keinen Folgezustand gibt, so ist der Automat nicht vollständig und es gilt . Gibt es einen Zustand für die Eingabe , wobei (Länge von ), so gilt: . D.h. soviel wie wenn die Länge von ist, so muss nach Schritten der Endzustand erreicht worden sein. Damit ist dann auch . Landet man nach Berechnungsschritten nicht im Endzustand, so ist .
Nichtdeterminierte Automaten sind - genauso wie - reine Gedankenmodelle. Hierzu gibt es ein Beispiel im Skript, dass ich auch gerne anführen würde:
Beispiel: mit
(Eingabealphabet)
(Zustände)
(Startzustand)
(Endzustand)
Wir zeichnen die Zustände als Kreise, weisen Start- und Endzustand entsprechend aus und jeder Übergang von einem Zustand zum anderen wird eine gerichtete und gekennzeichnete Kante zwischen diesen. Gibt es bereits einen Übergang, so müssen wir die Kante mit dem zusätzlichen Zeichen nur noch kennzeichnen.
Dieser ist nicht determiniert. Warum? Weil es für für eine Eingabe und einen Zustand zwei Folgezustände gibt: und .
Auch ist er nicht vollständig: Warum? Weil wir im Zustand für die Eingabe keinen Folgezustand haben.
Wie sieht unsere transitive Hülle aus? Sie hat z.B. auch noch zusätzlich das indirekten Tripel drin. Und was ist mit dem ? Dazu kommen wir auch gleich. Ersteinmal stellen wir uns die Frage: Welche Sprache entscheidet der Automat?
Zunächst einmal können wir eine absolut beliebige Kombination aus und haben und verweilen im Zustand : . Erst wenn wir zum Zustand wollen, benötigen wir als Abschluss des ersten Teils der Zeichenkette ein . Und dort angekommen sind wir entweder fertig oder können im Zustand so verweilen, wie wir auch in Zustand verweilt haben: mit einer beliebigen Kombination aus und : .
Damit ist die von erkannte Sprache , d.h.
Und nun kümmern wir uns um am versprochenen Beispiel (ebenfalls aus dem Skript geklaut).
Beispiel ?
Wir müssen also schauen ob die Eingabe uns zu einem Endzustand (ein Zustand aus ) bringt oder nicht. In jedem Schritt bringt uns ein Zeichen aus dem Wort zu einem Folgezustand. Und wenn es mal keinen gibt oder wir nach Schritten noch keinen Endzustand erreicht haben, so ist das Wort nicht Teil unserer Sprache . Versuchen wir es also:
da
da
da
da
da
da
Wir sehen also, dass wir Ausgehend vom Startzustand zum Zustand gelangen, welcher ein Endzustand ist. Es liegt daher , woraus folgt, dass ! Um zu zeigen, dass ein Wort zur Sprache gehört, müssen wir also einfach nur eine Zustandsfolge angeben, die die zu prüfende Eingabe in den Endzustand überführt. Braucht Ihr noch ein Beispiel um zu zeigen, dass eine Zeichenfolge nicht in ist? Gerne.
Beispiel: ?
Spielen wir den Graphen mit der Eingabe durch, so sehen wir, dass wir nie in im Endzustand landen. Wir bleiben immer nur in oder . Damit ist ? Probiert die nächsten beiden mal selbst.
Übung: ?
Übung: ?
Übung: ?
Antwort zum Lernziel: Damit ist die von einem endlichen Automaten erkannte Sprache die Menge der Worte über dem Alphabet , die ausgehend von einem Startzustand den Automaten in einen Endzustand überführt und dabei nicht mehr Berechnungsschritte braucht als die Eingabe lang ist.
Lernziel 2
Wie kann man zu einem nichtdeterminierten endlichen Automaten einen determinierten konstruieren, der dieselbe Sprache erkennt?
Im Beitrag zu KE5 haben wir es bereits angedeutet: die Regeln aus den Grammatiken sind nichts weiter als Überführungsrelationen in Maschinen von einem Zustand zum anderen. Aus diesem Grund können wir rechtslineare Normalformgrammatiken in Automaten überführen. Dazu brauchen wir folgendes:
Transformation mit mit
und
Wir transformieren damit eine rechtslineare Normalformgrammatik in einen Automaten, so dass gilt. Die Definition von (unseren Endzuständen im Automaten) besagt lediglich, dass in die Menge der Endzustände unseres Automaten das Nonterminal reingehört. was auch als Regel für ein Nonterminal in den Regeln der Grammatik vorhanden ist und auf zeigt.
Mit ist es ähnlich. In die Überführungsrelationen gehören alle Regeln rein, die auf ein Terminal (unsere Eingabe im Automaten) und ein Nonterminal (unser Zustand im Automaten) zeigen. Das ist dann unser Zustandsübergang. Am besten ein Beispiel, oder? Nehmen wir dazu doch einfach die Grammatik, die wir im vorherigen Beitrag verwendet haben.
Beispiel: mit , , Startsymbol und den Regeln :
Wir müssen also aus der rechtslinearen Normalformgrammatik einen endlichen Automaten basteln. Weder am Alphabet , noch an den Zuständen (Nonterminalen) oder am Startzustand haben wir was zu kamellen. Wir brauchen die Menge der Endzustände und unsere Überführungsrelationen .
Fangen wir mit dem Endzustand an. Schaut noch einmal die Definition von oben an. Wir suchen also in den Regeln unserer Grammatik nach der Regel von der Form . Die einzige Regel, die so aussieht ist die Regel für . Damit haben wir den Endzustand der Grammatik nun in unserer Automaten-Menge . Hätten wir mehr Regeln, die auf ein zeigen, so hätten wir auch mehr Endzustände.
Jetzt die Überführungsrelationen : wir transformieren alle Regeln der Grammatik mit der Form in die Überführungsrelation für dem Automaten mit der Form :
That's it. Wie sieht der Automat nun aus? So:
Fertig! Wir sehen auch hier, dass er nicht vollständig ist: es fehlt im Zustand der Folgezustand für die Eingabe eines . Aber er ist determiniert, da wir nicht mehrere Folgezustände für eine Eingabe haben.
Nachdem das nun geklärt ist, kümmern wir uns um die Überführung von nichtdeterminierten Automaten in determinierte. Der Vorteil von letzteren liegt darin, dass diese sich mittels Boole'schen Schaltwerken realisieren lassen. Wäre doch schön wenn wir dazu die nichtdeterminierten Automaten in determinierte überführen könnten...
Beispiel: der Automat aus dem ersten Beispiel mit mit
(Eingabealphabet)
(Zustände)
(Startzustand)
(Endzustand)
und dem zugehörogen Graphen
Die Menge der neuen Zustände ist maximal . Wobei wir nicht alle benötigen werden. Dazu stellen wir eine Tabelle auf, die uns am Ende zeigt welche Übergänge und welche Zustände wir haben. Wir fangen einfach mal an, die Inhalte der Spalten erschließen sich dann direkt:
V | W | W\V | |
P | a | b | |
{0} | {0,1} | {0} | {0,1} |
In der ersten Zeile, in Spalte steht der Startzustand. In Spalte und stehen die jeweils erreichbaren Zustände bei der jeweiligen Eingabe, ausgehend vom Zustand in Spalte . D.h. ausgehend von Startzustand erreichen wir bei der Eingabe von Folgezustand und und bei der Eingabe von nur Zustand . In der Spalte befindet sich die Elemente der Menge ohne die Elemente der Menge , also nur . Damit haben wir die erste Zeile aufgebaut.
Für die Spalte in der zweite Zeile nehmen wir ein Element aus der Menge . Viel Auswahl haben wir hier nicht (hätten wir eine, so wäre die Auswahl willkürlich, sie würde nur die Reihenfolge der Zeilen beeinflussen). Nun werden wieder die erreichbaren Folgezustände, ausgehend von Startzustand und bei der Eingabe von und in den folgenden Spalten notiert und in der letzten Spalte wieder eingetragen. Das machen wir solange, bis die Menge leer () ist. Am Ende haben wir die folgende Tabelle:
V | W | W\V | |
P | a | b | |
{0} | {0,1} | {0} | {0,1} |
{0,1} | {0,1} | {0,2} | {0,2} |
{0,2} | {0,1,2} | {0,2} | {0,1,2} |
{0,1,2} | {0,1,2} | {0,2} |
Aus dieser können wir nun alle notwendigen Zustände (Spalte ) und die Folgezustände (Spalten und ) ableiten. Alle Zustände aus Spalte , die die Zahl eines Endzustandes () des ursprünglichen Automaten beinhalten, werden ebenfalls zu Endzuständen. Am Ende kommt daher folgender Graph raus:
Wenn wir die Wertetabelle dazu aufstellen sehen wir auch, dass wir einen Zustand wegkürzen können (wie in Computersysteme 1 und 2).
Zustand | Folgezustand bei Eingabe von „a“ | Folgezustand bei Eingabe von „b“ |
0 | 01 | 0 |
01 | 01 | 02 |
02 | 012 | 02 |
012 | 012 | 02 |
Zustand und sind äquivalent und damit kürzbar (wenn man zur -Kante von noch hinzufügt).
Antwort zum Lernziel: zu einem nichtdeterminierten Automaten kann man einen determinierten Automaten konstruieren, der dieselbe Sprache erkennt, indem man eine neue Zustandsmenge definiert, die maximal aus der Potenzmenge der ursprünglichen Zustände führt. Die Menge der benötigten Zustände ergibt sich aus allen erreichbaren Zuständen.
Diese neuen Automaten werden Potenzautomaten genannt. Damit lässt sich festhalten, dass man zu jedem endlichen, nicht-deterministischen Automaten einen deterministischen Automaten angeben kann, der die selbe Sprache erkennt.
Da die Namen der neuen Zustände aus den Namen der Ursprungszustände bestehen, können die gerichteten Kanten auch zu den neuen Zuständen problemlos gezogen und so die Zustandsübergänge im neuen Graphen modelliert werden. Durch die Benennung lassen sich auch die Endzustände im neuen, deterministischen Graphen identifizieren: jeder neue Zustand, der in seinem neuen Namen den Namen eines ursprünglichen Endzustands beinhaltet, wird ebenfalls ein Endzustand.
Das war der erste Teil von KE6. Wer Fehler findet: ab in die Kommentare.
Sie können zum Ende springen und ein Kommentar hinterlassen. Pingen ist im Augenblick nicht erlaubt.