Einen wunderschönen guten Morgen zur frühen Dienstagsveranstaltung. Gestern hatten wir ja die grundlegenden Notationen,
die wir brauchten, zu Mengen, Monoinen von malen Sprachen.
Und heute noch mal ganz offiziell, die Vorlesung wird mitgeschnitten,
wird dann irgendwann auch ein Portal von Lection to Go der Uni Hamburg erscheinen.
Da kann man sich das dann noch mal angucken.
Wenn man das hinterher noch mal gehen will. Worum es heute
nochmal gehen soll, nach einer kurzen Wiederholung, ist das Verhältnis von deterministischen und nicht deterministischen Automatenmodellen. Und ich wiederhole das nochmal ganz kurz,
was war das, der deterministische Automat,
der hat da eine Eingabe endlicher Länge,
die er nur lesen konnte und eine Steuerung,
eine Steuerung, die aus verschiedenen Zuständen bestand,
mit Zustandsübergängen, an den Zustandsübergängen,
befanden sich Symbole des Eingabealphabetes und wir unterschieden jetzt danach,
ob wir mit dem komplett gelesenen Wort uns in einem Endzustand befanden haben oder nicht oder vielleicht sogar gar nirgendwo definiert uns befanden, weil es irgendwelche Zwischenübergänge nicht gegeben hat.
Das heißt, wenn ich anfange, das A zu lesen,
beginne ich wie immer im Staatszustand, der ist eindeutig definiert,
man sieht ihn hier, dieser kleine Pfeil,
das ist der Staatszustand, dann lese ich das A,
B, bleibe ich im Zustand, noch ein B,
bleibe auch im Zustand, Z1, noch ein A,
führt mich in Zustand,
Set 2.
Damit ist das Eingabewort komplett gelesen und am Ende des Lesevorgangs
befinden wir uns im Endzustand und daher
wird dieses Wort akzeptiert
Und das zweite Beispiel war ja für ein nicht akzeptierendes Wort,
wenn ich starte und mit einem A anfange, ist alles in Ordnung.
B, bleibe ich in diesem Zustand. Wenn ich jetzt
ein A lese, gehe ich in den nächsten Zustand.
Bin zwar im Endzustand, nützt aber nichts,
denn danach kommt ja noch eins zu lesenes B auf der Eingabe.
Und dieser Zustand hat für das Eingabesymbol keinen Übergang mehr definiert.
Das heißt, wir können das Wort gar nicht erst komplett einlesen,
gar nicht erst komplett einlesen können,
bedeutet erst recht nicht akzeptieren können.
Also dieses Wort wird nicht akzeptiert. Und was wir jetzt machen wollen,
wir wollen schlichtweg mit einem Automaten eine Menge von Worten charakterisieren,
nämlich die Wortmenge,
die Sprache aller Worte
Die von diesem Automaten akzeptiert werden. Und dazu mussten wir
zwei Dinge definieren. Zum einen müssen wir überhaupt definieren,
was wir jetzt intuitiv in dieser grafischen Darstellung hatten,
nämlich was ist ein deterministischer, endlich Automat?
Und wesentliche Bestandteile waren die Zustände, die wir gemalt hatten,
das Alphabet, was die Eingabesymbole, die an den Kanten vorkommen, beschreibt.
Dass ein Alphabet endlich ist, das hatten wir mal so definiert,
hier steht es zur Wiederholung,
dass die Zustände eine endliche Menge sein sollen,
das müssen wir erst fordern.
Das ist aber ganz wichtig für die Endlichkeitseigenschaft,
dieses Automaten
Dann haben wir hier einen deterministischen Automaten. Das sieht man daran,
dass zu jedem Zustand und jedem Eingabesymbol ein Nachfolgezustand definiert wird.
Naja, eigentlich höchstens ein Nachfolgezustand.
Denn diese Funktion, die muss nicht total sein.
Und wenn sie partiell ist, ist eben gar keiner definiert.
Aber es sind nie mehrere möglich. Gut,
das ist also die Möglichkeit mit diesem Delta,
den Nachfolgezustand für ein Symbol zu bestimmen.
Da muss ich noch sagen, wo ich beginne,
Q0 wird mein Staatszustand sein.
Das ist ein speziell ausgezeichneter Zustand. Und dann
habe ich eine gewisse Menge an Endzuständen,
die beschreiben sollen,
wann dieser Automat akzeptiert
Jetzt wissen wir, was ein Automat ist.
Jetzt müssen wir noch das akzeptieren eines Wortes weiter definieren.
Dieses deterministische ist hier nochmal hervorgehoben. Wir müssen jetzt schauen,
was ist das Akzeptieren eines Wortes. Bislang wissen wir eigentlich nur,
wie man von einem Zustand zum nächsten kommt, wenn man genau ein Zeichen einliest.
Und diese Definition erweitern wir jetzt von Delta auf die erweiterte Überführungsfunktion Delta Stern.
Und Delta Stern, das ist eine Funktion,
die sagt mir zu einem Startzustand, typischerweise ist es Q0,
aber muss nicht sein. Für irgendeinen Zustand,
bei dem ich beginnen möchte und ein Board,
das ich jetzt lesen möchte, berechnet es mir, den Nachfolgezustand,
der sich nach allen Lesen ergibt, wenn es überhaupt eingibt.
Denn die Funktion kann ja partiell sein,
Delta und dann gibt es keinen solchen Nachfolgezustand unter Umständen.
Und das Ganze wird rekursiv definiert, wir haben zwei Fälle,
ein hier oben, ein hier unten und sie sagen,
für alle Z gibt es zwei Möglichkeiten,
entweder das Wort hat vorne ein Symbol und dann kommt
ein Rest oder es hat eben nichts
Besteht also aus dem leeren Wort, dem Äpstel.
Und die beiden Fälle gibt es. Und jetzt hangeln wir
uns rekursiv letztendlich durch das Zustandsdiagramm. Wir sagen, okay,
wenn vorne die Symbolfolge, das Wort mit X beginnt,
dann rechne ich mal aus, wo komme ich hin,
zu welchem Zustand, wenn ich bei Z starte,
mit einem X-Übergab.
Was da rauskommt, das weiß ich schon, das gibt mir
meine Delta-Funktion an. Das ist der Nachfolgezustand bezüglich dieses X.
Und wenn ich da denn weiterrechne und sage,
bei diesem neuen Zustand beginnend, da frage ich mich jetzt,
wo komme ich jetzt mit dem Restwort weh hin?
Und das rechnet mir die Funktion Delta Stern aus
Und analog sieht man ja unten, stellt der Stern für das leere Wort,
wenn ich in Kuh starte, naja, dann bleibe ich in Kuh,
das leere Wort verändert den aktuellen Zustand nicht.
Und das ist eine wohlgeformte Definition, wenn man sieht hier,
das Ganze führt in endlich vielen Schritten zu einem wohldefinierten Wert,
weil das Eingabewort hier vorne ist, ist X-W,
hier hinten ist es nur weh, es wird also immer kürzer,
führt also nach endlich vielen Schritten,
nämlich genauso vielen Schritten, wie das Wort lang ist,
zu dem Abbruchfall.
Also algorithmisch gesehen macht das
auch Sinn
So, das heißt, wir haben Delta,
die Funktion, die gegeben war zu einer Funktion Delta,
Stern erweitert und können jetzt damit die akzeptierte Sprache definieren.
Wir fragen uns nämlich, was sind das für Worte weh,
die die Eigenschaft haben, vom Staatszustand Q0 in ein Endzustand zu führen?
Alle diese Worte und genau diese Worte sammle ich jetzt zusammen mit dieser Mengennotation und nenne das,
die akzeptierte Sprache, Englisch, Language des Automaten A,
L von A. So, und dann gibt es dann eben noch technische Kleinigkeiten,
es kann sein, dass diese Funktion Delta,
die ich hier benutze, partiell ist, das hatten wir erlaubt,
das heißt, dieser Ausdruck muss gar nicht definiert sein,
das führt dazu,
dass dieser Gesamtausdruck nicht definiert ist.
Das heißt, bei einer partiellen Funktion Delta ist auch
Delta Sterne im Allgemeinen partiell, was dazu führt,
dass hier unten unter Umständen ein undefinierter Wert stehen kann.
Aber in diesem Fall hatten wir vereinbart, das bedeutet dann,
naja, ein undefinierter Wert ist auf jeden Fall nicht Element der Endzustandsmenge.
Gut. Und dann haben wir gesagt, ja,
jetzt wissen wir die Menge aller Worte,
die ein Automat akzeptiert
Viel spannender ist es jetzt, eine Menge von Sprachen zu charakterisieren.
Also eine Menge von Wortmengen. Und das hatten wir dann
nicht Menge von Mengen genannt, sondern eine Familie von Mengen.
Und diese Familie, die wir da betrachten wollen,
wird als die Familie der regulären Mengen oder regulären Sprachen bezeichnet.
Sprachen sind ja spezielle Mengen, nämlich Mengen,
Teilmengen von Sigma Stern bezeichnen wir als Sprachen.
So. Das heißt, wann immer es ein DFA gibt,
der diese Sprache akzeptiert,
bezeichne ich
diese Sprache als regulär
Und jetzt kann ich noch unterscheiden, ob ich das über
einen beliebigen Alphabet oder einem festen Alphabet mache.
Hier mit DFA-Index, Sigma, wird die Familie aller Sprachen
über einem fest vorgegebenen Alphabet Sigma beschrieben. Das heißt,
ich gebe ein Alphabet vor und sage jetzt alle möglichen Sprachen L,
Teilmenge von Sigma Stern, da kommt es vor,
die irgendein DFA, der dieses Sigma als Eingabealphabet benutzt, akzeptieren kann.
Die alle zusammengepackt ergeben jetzt die Sprachfamilie DFA Sigma
Ein mathematischer Notation steht hier nochmal, dass
diese Familie sich folgendermaßen ergibt. DFA Sigma ist gleich,
die Familie oder Menge aller Sprachen L, eben über Sigma.
Für die gilt das L, genau die akzeptierte Sprache ist,
für irgendeinen DFA A. Und irgendein bedeutet in diesem Zusammenhang,
dass ich letztendlich über alle möglichen Automaten vereinige.
Das heißt, alle Automaten auf einen Haufen packe,
schaue, welche Sprachen die so generieren und das dann als
DFA Sigma bezeichnen
Dieses Vorgehen ist natürlich nicht praktikabel. Es gibt unendlich viele
endliche Automaten. Von daher ist das ein reines Gedankenexperiment,
wenn ich sage, ich packe die alle auf einen Haufen alle DFAs.
Gut, und in dieser Sprechweise hier oben hatten wir definiert,
dass die Mengen, die DFAs akzeptieren, Regulärmengen sind.
Deswegen, das ziehen wir hier nochmal formal nach.
Wir definieren die regulären Mengen über Sigma,
genau als die von DFAs erkannten Mengen über Sigma.
Und wenn wir jetzt noch die Vereinigung über alle möglichen endlichen Alphabete machen,
davon gibt es auch unendlich viele,
da über alle Recksigma vereinigen,
dann bekomme ich die Gesamtmenge aller regulären Sprachen heraus
Gut. Jetzt gibt es so ein, zwei Kleinigkeiten,
die einem täglichen Arbeiten mit diesen Maschinen stören.
Mir hatten wir festgestellt, die erste Tatsache war,
ich musste immer unterscheiden, ist jetzt Delta eine partielle oder totale Funktion?
Ist also der Funktionswert definiert oder undefiniert?
Das ist von der Sprechweise manchmal ein wenig zäh,
weil das ein bisschen verhindert, möchte man eigentlich davon ausgehen,
könnte es wäre zumindest sehr nett, dass Delta eine totale Funktion ist.
Na gut, wenn ich das erstmal nicht gefordert habe,
darf ich das
jetzt nicht annehmen
Aber ich kann mir zumindest mal folgendes angucken.
Ich kann mir alle solchen deterministischen, endlichen Automaten angucken,
die vollständig sind, vollständig, wie ein VDFA abgekürzt.
Die haben genau die Eigenschaft, dass für jedes Argument-Element,
also jedes Pärchen aus Zustand und Eingabe,
ist genau ein Nachfolgezustand Q gibt.
Das heißt, Delta ist für alle P,6 definiert.
Das heißt, jedes Symbol führt zu einem Nachfolgezustand,
wenn das für jedes Symbol gilt, dann gilt das auch für jedes Eingabewort.
Delta Stern wird dann auch eine totale Funktion sein.
Gut, das heißt, einige Automaten sind vollständig,
andere sind es nicht
So, und jetzt hätten wir natürlich gerne, dass wir immer davon ausgehen können,
dass ein Automat vollständig ist. Wir würden also sagen,
okay, wann immer ich einen nicht vollständigen Automaten habe,
dann kann ich ihn zu einem vollständigen Automaten machen,
ohne da etwas Großartig Relevantes zu ändern.
Was heißt in diesem Zusammenhang großartig relevant? Naja,
das Relevante, zumindest in unserem Kontext,
an einem endlichen Automaten, ist nur die Sprache,
die er akzeptiert, aber nicht wie er aufgebaut ist.
Das heißt, was uns interessiert, ob die beiden Automaten sprachgleich sind,
wenn da so zwei Automaten die gleiche Sprache akzeptieren,
dann nennen wir sie Äquivalent.
Und für uns ist jetzt nur die Frage,
eigentlich gibt es zu jedem Automaten A, der vielleicht nicht vollständig ist,
einen da zu äquivalenten Automaten B, der jetzt vollständig ist.
Aus Perspektive der akzeptierten Sprache hat sich da nichts geändert,
aber die Darstellung des Automaten ist für uns im täglichen Arbeiten mit diesem Automaten einfacher geworden,
weil jetzt die Funktion Delta total ist.
Also das ist unser Sinn und Trachten. Wir hätten gerne
stets die Eigenschaft mit Vollständigen automatisch arbeiten zu dürfen.
Die zweite Eigenschaft in diesem Zusammenhang genannt werden soll,
ist, dass der Automat initial zusammenhängend sein soll.
Das ist eine wünschenswerte Eigenschaft, initial zusammenhängt, heißt,
dass jeder Zustand überhaupt mit irgendeinem Wort erreichbar ist.
Das heißt, zu jedem P gibt es ein Wort,
sodass ich vom Staatszustand mit diesem Wort zu dem P kommen kann.
Das heißt, für irgendeine Eingabe ist dieser Zustand relevant.
In der Umkehrung heißt das, es gibt keinen Zustand,
der irrelevant, während er also mit keinem Wort erreicht werden könnte.
Wenn es kein Wort gibt, für das ein Zustand P
irgendwie nützlich wäre, dann können wir ihn auch weglassen.
Das ist genau die Grundidee, Ja,
wir wollen nur die initiale Zusammenhangskomponente eigentlich haben von einem Automaten.
Also nur die Menge der Zustände,
die überhaupt erreichbar sind, die anderen sind vollständig ignorierbar.
Gut, hatten wir ein kleines Beispiel.
Nochmal der Zusammenhang zwischen grafischer und mathematischer Notation.
Wir sehen hier also einen Automaten, er hat vier Zustände.
Das hier soll der Staatszustand sein, erkenntlich am Pfeil.
Gut, heißt Z0, was haben wir denn für ein Alphabet?
Im Prinzip weiß man das nie so genau,
was für ein Alphabet es ist.
Es ist auf jeden Fall wohl ein Alphabet,
in dem
A und B vorkommen
Prinzipiell könnte auch noch wohl ein C vorkommen,
dass ich einfach nur nicht benutze, ja,
um dieser Problematik aus dem Weg zu gehen,
wird das hier nochmal explizit aufgeschrieben, also das Alphabet ist A,
B. Ja, nur wenn ich das Alphabet kenne,
kann ich auch feststellen, ob ein Automat vollständig ist oder nicht.
Denn wenn das C im Alphabet wäre,
dann wäre dieser Automat unter gar keinen Umständen vollständig,
wenn ein C hat er ja gar nicht.
Gut, die N-Zuständsmenge ist auch sehr einfach,
das ist nämlich eine Menge, die nur genau einen Zustand
hat und durch einen Zufall ist es hier genau der Startzustand.
So, das heißt, damit habe ich
die Zustandsmenge definiert
Das Alphabet, denn ein Staatszustand habe ich definiert,
die Menge der Endzustände, bleibt noch die Überführungsfunktion zu definieren.
Das heißt, die kannten, wie sie ihr grafisch dargestellt
sind und in dieser Darstellung ist, dass dieser Bereich,
in dem alle Funktionswerte tabelliert sind, die es so gibt.
Und wenn welche nicht aufgeführt sind,
gehen wir davon aus, dass der Funktionswert undefiniert ist.
Also was man nicht hinschreibt, bedeutet automatisch undefinierter Wert für
dieses Argument. So was sehen wir als erstes,
dass es ein Beispiel dafür ein Automatter initial zusammenhängt ist,
ganz klar diese drei Zustände.
Jeder kann hier jeden erreichen, weil das so einen schönen Kreis bildet.
Und dieser Zustand ist vom Staat auch zu erreichen.
Gut, haben wir zwei schöne Animationen.
Nichts ist für die Ewigkeit. Dies ist ein Automat,
bei dem haben wir hier die obere B-Kante umgedreht.
Der ist nicht mehr initial zusammenhängt, weil der Zustand Z3
überflüssig ist. Der kann nicht erreicht werden.
Das heißt, in keiner Eingabe spielt er
eine Rolle
Den können wir also einfach streichen. Ja, nicht erreichbaren Zustände
kann man einfach weglassen, ohne die akzeptierte Sprache zu ändern.
So, dann wäre er wenigstens initial zusammenhängt.
Dass er nicht vollständig ist, sieht man auch. Ja,
aus verschiedenen Zuständen hier, aus dem fehlt ein Ausgang für B.
Ich muss ja nur durchzählen, wie viele Kanten gehen aus
jedem Zustand raus. In diesem Kreis sehe ich,
naja, aus jedem geht genau eine Kante raus.
Wenn ich aber ein Alphabet mit zwei Symbolen habe,
müssen immer genau zwei rausgehen.
Also durch stumpfes Grafen überprüfen kann ich feststellen,
ob dieser Automat
zusammen vollständig ist
Muss ich einfach für jeden Knoten die ausgehenden Kanten zählen.
So, wir haben schon gesehen, es ist sehr einfach,
ein initial zusammenhängenden Automaten zu konstruieren und in die Sprache zu ändern.
Es ist auch nicht weiter schwierig, einen Automaten zu vervollständigen.
Das Einzige, was ich tun muss,
also hier sehen wir wieder den Kreis, den wir eben hatten.
Das Einzige, was ich machen muss,
ich muss gewissermaßen Rudis Resterampe einführen, also eine Falle,
wo alles das, was vorher undefiniert war, jetzt hineingelagert wird.
Also alle Worte, für die das vorher undefiniert war,
führen jetzt in diesen neuen Zustand Z4.
Der hat auch noch eine Schleife, das heißt,
Wenn ich hier einmal reinkomme, komme ich da auch nicht wieder raus.
Das Wort ist da gefangen. Das heißt,
was vorher zu einem undefinierten Nachfolgezustand führte, das führt jetzt
zu einem wohldefinierten Nachfolgezustand Z4. Undefiniert haben wir ersetzt, jetzt durch diesen Fallenzustand.
So, und an diesen Beispielen sieht man schon ganz gut,
dass ich aus jedem Automaten sofort einen äquivalenten Automaten basteln kann,
der die Eigenschaften hat, sowohl initial zusammenhängend zu sein,
als auch vollständig.
In diesem Beispiel ist das so,
aber im Allgemeinen ist das auch immer
Gut. Gucken wir uns jetzt mal an, wenn wir einen Automaten gegeben haben,
was sind da so die Sprachen, wie kann man das grob beschreiben?
Zwei Beispiele für Automaten. Ja, der obere Automat A,
den hatten wir ja schon ganz am Anfang als Beispiel für die beiden Eingabenworten.
Wenn wir da beschreiben wollen, was kann der machen?
Dann will ich ja nicht nur für ein Wort überprüfen,
akzeptierter wirst du dann nicht,
sondern ich versuche die Gesamtheit aller akzeptierten Worte zu charakterisieren.
Und da muss ich im Zweifelsfall ja immer über unendlich viele Worte sprechen.
Gut, also muss ich eine Mengennotation wählen,
die irgendwie abstrakt sagt, wie die Worte aussehen,
die diese Automaten akzeptiert
Und dann stellen wir erst mal fest, dass es hier
zwei getrennte Zweige gibt, den oberen und den unteren.
Das heißt, wir werden auch zwei Sprachmengen bekommen,
die wir im Prinzip nur vereinigen müssen.
Und wie sieht die erste aus? Wenn man da so draufguckt,
stellt man fest, ein Wort,
das bis hierhin gelesen wird und da akzeptiert wird,
das hat schon mal die Eigenschaft,
es beginnt offensichtlich mit einem A und es endet mit einem A,
das sind schon mal zwei Eigenschaften.
Und die weitere Eigenschaft, die noch wichtig ist,
in der Zwischenzeit,
kann ich beliebig viele Bs lesen,
indem ich einfach vom Zustand Sit1 schleifend wieder
zum Zustand Sit1 komme
Das heißt, alle Worte haben die Form A, dann beliebig viele Bs und dann ein A.
Der untere Zweig ist gewissermaßen spiegelsymmetrisch. Erst kommt ein B,
dann schleife ich hier ganz oft, so oft wie ich möchte,
mit einem A und dann kommt ein B. Gut,
also weiß ich schon mal, wie die Worte aussehen.
Hier steht der Text, alle Wörter, die mit einem A
beginnen und enden und dazwischen nur Bs haben und umgekehrt.
Gut, und wem das nicht formal exakt genug ist,
der findet hier die mathematische Darstellung,
wo genau das Gleiche steht, nur halt anders notiert,
die Menge aller Wörter über dem Alphabet AB, also W-Element A-B-Stern.
Das macht mir die Menge aller Wörter beim Alphabet,
die die Eigenschaft haben,
dass eine natürliche Zahl N existiert, sodass gilt,
dass das Wort entweder oder eine der beiden folgenden Formen hat.
Entweder ist W von der Form A B hoch
N A. Wir hatten ja die Konvention
B hoch N bedeutet N mal das B als Sequenz hintereinander
Das heißt A,
N mal das BA oder wie hat die Form B,
N mal das A, B. Die beiden Möglichkeiten gibt es nur,
die erste Möglichkeit ergibt sie aus dieser Schleife,
die zweite Möglichkeit aus der unteren Schleife und die Wahl,
wie oft ich diese Schleife durchlaufe, ist völlig frei,
deswegen steht hier nur, es existiert ein Ende,
also irgendein N nehmen.
So, das ist also die Sprache dieses Automaten A.
Der zweite Automat, den wir auch schon betrachtet haben,
wie sieht dessen Sprache aus
Da stelle ich erst mal fest, diesen Zweig hier oben,
den könnten wir ja getrost ignorieren.
Denn da wird zwar irgendwas getan,
aber sobald ich hier mit einem B anfange,
gibt es in diesem Zweig kein Zurück mehr erstens und hier auch keinen Endzustand.
Das heißt, sobald ich mal anfange, diese Kante zu überqueren,
wird das Wort Garantie nie mehr akzeptiert werden können,
egal was da noch kommt.
Das heißt, wir können uns hier auf diesen Kreis konzentrieren.
Was passiert, das kürzeste Wort, das ich akzeptieren kann,
ist das leere Wort, weil Z0 ja schon ein Endzustand ist.
Das nehmen wir hier an dieser Stelle Epsilons
breit drin
Was können wir dann machen? Na, jetzt frage ich
mich, wie komme ich vom Staatszustand zum Endzustand?
Indem ich einmal diesen Zyklus durchlaufe. Also einmal das Wort A,
B, A führt mich in den Enzel statt.
Das ist schon mal drin. Aber ich kann natürlich den Zyklus
auch zweimal durchlaufen. Dann bekomme ich das Wort A,
B, A, A. Ich kann es auch dreimal durchlaufen.
Ich kann es beliebig häufig durchlaufen. Und für beliebig häufig durchlaufen,
das könnte ich auch wieder in so einer Notation notieren,
aber ich kann es sogar ganz kurz notieren,
wir hatten ja schon diese Notation, die bedeutet, Beliebig häufig mit sich selbst konkatinieren.
Und jetzt habe ich hier die ein Elemente Gemenge, die das Wort ABA enthält.
Und dieses Wort wird jetzt mit sich selbst beliebig oft konkatiniert.
Wobei das Sternchen auch nullmal mit sich selbst konkatinieren erlaubt.
Einmal ist klar, dann kommt ABA raus. Nullmal ist
per Konvention Äpstelon und zweimal, dreimal ist hier noch aufgemalt.
Und jetzt für alle möglichen Anzahlen, die ich das häufig machen kann.
Gut, so kann man sich ungefähr die Sprache
Er raten langsam, man muss also irgendwie gucken,
was für Möglichkeiten gibt es vom Staatszustand, wieder zum Angel-Stand zu kommen.
Wir werden auch noch einen systematischen Weg sehen,
wie man sich das erarbeiten kann,
aber erstmal so für die kleinen Automaten mit vier,
fünf Zuständen geht das noch auf diese Zu-Fuß-Methode.
So, das waren jetzt deterministische Automaten, wir haben schon gesehen,
dass es auch nicht deterministisch Automaten gibt, sie sind leicht zu zeichnen,
ich muss nur an zwei Ausgangskanten in gleichen Buchstaben zeichnen.
In diesem Fall erhalte ich sofort etwas, wo ein Übergang
irgendwie gewünscht geraten orakelt wird, was auch immer.
Auf jeden Fall, wo nicht mehr deterministisch klar ist,
was der Nachfolgeszustand sein soll.
Wozu kann man das gebrauchen? Das kann man gebrauchen,
wenn man sich nicht zu sehr zu früh festlegen will.
So ein Beispiel, es gibt viele Beispiele,
ist bei der Syntax-Analyse von irgendwelchen Zeichenketten hat man verschiedene Möglichkeiten,
dieses Diagramm, ich fange mit der Eins an.
Jetzt kann ich hier irgendwelche Abzweigung nehmen, kann also wieder
zurückgehen oder ich kann weitergehen oder ich kann hier rausgehen.
Das heißt, es gibt da gar nicht so die festgelegte Pfade meinetwegen,
wie ich da durchkomme, sondern ich spezifiziere das Neue,
jetzt könnte das kommen oder jenes, schau doch einfach mal, ob was passt.
Und dieses, schau doch einfach mal, ob was passt,
ist sehr angenehm für denjenigen, der spezifizieren will, was er gerne hat.
Also wer schon mal mit regulären Ausdrücken gearbeitet hat,
die sind relativ kompakt zu beschreiben, was eine Wortmenge zum Pattern-Matching bedeuten soll,
aber die sind für den Computer, der das nachher deterministisch machen soll,
nicht ganz so einfach.
Wir schauen uns jetzt das Verhältnis von dem Nicht-Determinismus,
der ganz angenehm ist für den Medizifizierenden,
aber nicht so einfach für den Ausführenden,
wie dieses Verhältnis gestaltet ist, ob einem der Nicht-Determinismus etwas bringt,
ob das das wirklich komplizierter macht und so weiter und so fort.
Erstmal definieren wir uns jetzt formal nach, was bedeutet es
eigentlich, dass ein endlicher Atomat nicht deterministisch ist.
Also im englischen NFA für Non-Deterministic Fine Atomaton.
Das sieht fast genauso aus, also fast alle Komponenten,
dieses Fünfer-Tubels, das wir im deterministischen Fall haben, bleiben unverändert.
Wir haben mich weiterhin eine Endliche Menge von Zuständen.
Wir haben weiterhin ein endliches Alphabet von Eingabesymbolen. Wir haben weiterhin
eine Menge von Endzuständen. Die drei Dinge bleiben gleich.
Aber zwei Dinge verändern sich. Die erste kleinere Erweiterung ist,
dass wir jetzt nicht mehr den Staatszustand erlauben,
sondern gleich eine ganze Menge von Staatszuständen.
Das heißt, wir können uns am Anfang gewissermaßen schon aussuchen,
wo wir starten wollen. Das ist der Nicht-Determinismus,
der sagt, ich könnte da anfangen oder dort anfangen.
Das ist so die erste Eigenschaft. Die zweite Eigenschaft ist,
dass ich jetzt erlauben will mit diesem Delta, Für einen Eingabezustand,
ein Eingabesymbol, jetzt nicht mehr den Nachfolgezustand zu haben,
sondern eine Menge von möglichen Nachfolgezuständen.
Mathematisch gesehen ist das, wenn ich sagen will,
das Ergebnis einer Funktion, also der Bildbereich ist eine Menge,
dann ist der Bildbereich hier durch eine Potenzmenge zu beschreiben.
Das heißt, was rauskommt, ist ein Element der Potenzmenge der Zustände.
Das heißt, was rauskommt für einen Zustand und ein Eingabesymbol
, ist eine Teilmenge der Zustandsmenge.
Und das ist genau die Menge der Zustände,
die ich für einen Kleinkuh,
einen Klein
X erreichen kann
Und jetzt müssen wir nachziehen, was wollen wir jetzt eigentlich damit spezifizieren?
Was bedeutet das eigentlich, welche Zustände kann ich erreichen?
Gut, welche Zustände man erreichen kann,
das können wir noch halbwegs klar definieren. Wir sagen einfach,
naja, wenn ich irgendwo in einem Staatszustand,
habe ja mehrere Staate und jetzt alle möglichen Wege,
die ich nehmen könnte überhaupt mit diesem Eingabewort.
Wohin führen die mich? Naja, mehr oder weniger
große Menge von Zuständen typischerweise
Gut, das ist uns nur halbwegs klar.
Das ist dieser obere Teil, das kann ich auch definieren.
Kommen wir gleich dazu, wie das definiert wird.
Aber prinzipiell ist mein Sinn und Trachten nur die Menge,
der überhaupt jetzt von Staatszuständen mit diesem Wort erreichbaren Zuständen zu notieren.
Gut, und dafür gibt es dann wieder gleich eine Funktion Delta Stern.
So, wenn ich die aber jetzt schon hätte,
diese Funktion, die mir sagt, welche Zustände sind erreichbar.
Dann könnte ich jetzt verschiedentlich definieren, wann ein Wort akzeptiert wird.
Denn wenn ich in der Menge von Zuständen landen werde,
sind im Allgemeinen Paar davon Endzustände und Paar davon eben keine Endzustände.
Und jetzt muss ich mir überlegen, wann will ich denn eigentlich akzeptieren?
Will ich akzeptieren, wenn alle erreichbaren Zustände ein Endzustand sind?
Oder reicht es mir, wenn ein Endzustand dabei ist?
Was meint ihr,
was wollen wir
Ja, es wünscht dir was. Es ist in
dem Sinne nichts, was ihr falsch beantworten könnt.
Warum? Warum einer? Bescheidenheit. Irgendjemand für alle.
Keiner für alle
Keiner, alle sind bescheiden. Gut, also die Idee,
warum man mit einem zufrieden sein kann, ist ungefähr die Folgende.
Man sagt, ich habe nicht den perministisch verschiedene Auswahlmöglichkeiten.
Und wenn ich sagen will, okay,
das spezifiziere ich jetzt, dann gehe ich davon aus,
dass ich nur die prinzipiellen Möglichkeiten in diesem Automaten spezifiziere.
Und prinzipiell bedeutet,
dass es irgendjemand aus einer höheren Warte,
aus der Gottperspektive darauf aufschaut und schon die
irgendwie beste Auswahl treffen wird
Und wenn er mit der schlaustmöglichen Wegewahl es schafft,
in einen Endzustand zu kommen, dann mit dieses Wort akzeptiert.
Wenn er aber auch durch kein gutes Warten überhaupt es schaffen kann,
überhaupt irgendwie einen Endzustand zu kommen, dann wollen wir es auf jeden Fall verwerfen.
So, das ist die Perspektive, die er einnehmen will,
glauben, dass ein Wort dann akzeptiert werden soll,
wenn es überhaupt die Möglichkeit gibt,
durch geschicktes Raten in einem Endzustand zu kommen und es dadurch zu akzeptieren.
Das heißt, in diesem Sinne reicht einer,
wenn ich überhaupt das Potenzial zum Akzeptieren habe.
Das meinen wir mit akzeptieren. Ich könnte akzeptieren. Gut. Und das sieht man ja unten,
wir ziehen Delta Stern gleich nach, aber hier sieht man schon,
wenn Delta Stern in einer Menge von Zuständen gestartet,
hier also den Startzustandsmängel, S-0, mit dem Wort,
da kommt jetzt eine Menge von Zuständen raus,
nämlich die Zustände, die ich erreichen kann.
Und das schneide ich jetzt mit der Menge der Endzustände.
So, wenn hier also mindestens ein Endzustand drin ist in
dieser Menge, dann ist der Schnitt mit den Endzuständen
nicht leer
Dann ist das Wort drin. Wenn hier
nur Zustände drin sind, die keine Enzlstände sind,
dann ist der Schnitt leer und das Wort wird nicht akzeptiert.
Auf diese Art und Weise mit dieser Notation spezifizieren wir
mindestens ein Endzustand, muss drin sein.
Gut. Und jetzt müssen wir die Notation nacharbeiten,
mit der wie die Menge der potenziell prinzipiell erreichbaren Zustände definieren.
Also wir haben ja schon unseren NFAA und der hat auch die Zustandsüberführungsfunktion Delta.
Die ist auch, die nimmt eine Menge von Zuständen.
Nee, die nimmt nur einen Zustand
Nimmt auch nur ein Symbol, aber liefert schon eine Menge von Zuständen zurück.
Und wenn ich jetzt mich frage, angenommen,
ich starte in einer Menge von Zuständen, nennen sie er,
und habe jetzt ein Wort, das mit einem A beginnt.
Jetzt sammle ich fleißig alle Zustände auf,
die ich erreichen kann, nämlich mit diesem Ausdruck,
sage ich, wenn ich einen Zustand P habe,
der in dieser Menge eher enthalten ist.
Und ich komme mit einem A in eine Menge von Zuständen. Okay,
wenn ich diese Menge von Zuständen mit allen anderen Mengen von Zuständen für einige,
alle Ps, die in dieser Menge R drin sind,
dann kriege ich die Menge aller Zustände,
die ich mit einem A aus der Zustandsmenge R überhaupt erreichen kann.
Ich starte in R und gucke jetzt nach mit einem A-Schritt,
welche Zustandsmenge kann ich da erreichen.
Das ist dieser Ausdruck, der unter dieser hellblauen Klammer steckt.
Mit einem A-Schritt komme ich aus R zu dieser Menge. So,
und der Rest, die Restidee ist genauso wie vorher,
ich gehe rekursiv weiter und verfahren mit dem Restwort W genauso,
gib also der Funktion Delta Stern,
der Erweiterung,
jetzt dieses Restwort
Und weil das immer kürzer wird, jetzt von A,
B zu W, komme ich früher oder später auf das Wort Epstilon.
Und da sage ich,
Delta Stern kommt von einer Zustandsmenge R mit Epstilon, eigentlich nirgendwo hin,
bleibt also bei R. Diese Art und Weise definiere ich die Menge der erreichbaren Zustände.
Aber letztendlich nichts weitergemacht als die mathematische Definition von Grafensuche,
wo ich in Wellen durch den Graf wandere.
Gut, also wissen wir, wir haben einen nicht deterministischen Automaten.
Wir müssen auch, was seine Sprache ist
Wir haben einen deterministischen Automaten, dessen Sprache. Und jetzt
wüssten wir irgendwie gerne wieder Zusammenhang da aussieht bei den beiden.
Und man könnte jetzt vermuten, dass der Nicht-Determinismus irgendwie einem was schenkt.
Ja, der Determinismus, den kann man relativ schnell als
Spezialfall des Nicht-Determinismus erkennen. Denn Determinismus bedeutet nichts weiter,
als dass ich höchstens einen Zustandsübergang habe. Das heißt,
die Menge der möglichen Nachfolgezustände ist die leere Menge oder
die Menge, die höchstens ein Element hat
Von daher kann ich jeden deterministischen Automaten als speziellen Unterfall,
das nicht die terministischen betrachten. Aber wie sieht das aus
mit einem NFA, von dessen akzeptierter Menge?
Kann man da Sprache jetzt neu akzeptieren, die ein deterministischer Automaten nicht kann?
So ein Allgemeinen kann man das nicht sagen.
Man muss immer auf das Automaten kriegen,
in dieser Vorlesung werden wir uns einige Automatenmodelle angucken,
die es in beiden Varianten gibt, deterministisch, nicht deterministisch.
Bei manchen ist es so,
dass nicht die Terminismus nicht mehr bringt,
bei manchen bringt nicht den Terminismus
ein bisschen mehr
In unserem speziellen Fall ist es so, dass es nicht mehr bringt.
Und das sagt dieser Satz, der sagt nämlich,
wenn ich ein NFA habe und mir dessen akzeptierte Menge anschaue,
dann kann die auch immer von einem DFA akzeptiert werden.
So, und dieser DFA, den können wir auch so konstruieren,
dass er sogar initial zusammenhängt und vollständig sein wird.
Aber das ist gar nicht so wichtig, denn wir wissen ja,
wir können jeden DFA zu einem Initial zusammenhängen und einen vollständigen Automaten machen.
Also das Wichtige ist, zu jedem NFA Gibt es einen DFA,
der die gleiche Sprache spricht? So, das heißt aber auch,
weil wir wissen, DFAs, die definieren ja die regulären Mengen.
Wenn aber die Sprache, die ein NFA akzeptiert,
auch von einem DFA akzeptiert wird, folgt daraus,
dass NFAs insgesamt auch nur reguläre Mengen akzeptieren können.
Das heißt, die Sprachfamilie der regulären Mengen,
die wir anhand des deterministischen Modells definiert haben,
die verändert sich nicht, wenn wir den nicht deterministischen Fall auch zulassen.
Wir hätten auch gleich sagen können, dass die regulären Mengen genau die Mengen sind,
die von irgendwelchen endlichen Automaten, sei es deterministisch,
sei es nicht deterministisch, akzeptiert werden.
Dieser Satz sagt, es spielt keine Rolle, welches Modell ich mir anschaue,
von der Familie der akzeptierten Sprachen sind sie also gleich.
Natürlich ist nicht jeder nicht deterministische Automat auch gleichzeitig deswegen deterministisch,
logisch, aber zu jedem nicht deterministischen kriege ich einen,
der das Gleiche kann, einen Äquivalenten.
So, und jetzt müssen wir gucken,
wie beweisen wir das und dieser Beweis ist sogar konstruktiv,
in dem Beweis steckt ein Verfahren drin,
wie wir diesen Automaten bauen müssen, damit er die gleiche Sprache akzeptieren wird.
Ja, und diese konstruktive Art und Weise,
mit der wir beweisen werden, da konstruieren wir einen speziellen Automaten,
der heißt Potenzautomat, der ist deshalb so,
weil dessen Zustandsmenge, die Potenzmenge der Zustände des Originalautomaten sind.
Und da liegt folgende Idee zugrunde. Ich weiß ja,
wenn ich in der Zustandsmenge starte, dann kann ich in
einem Schritt mit einem Eingabesymbol nur endlich viele neue Zustände erreichen.
Ist logisch. Der ganze Automat hat nur endlich
viele Zustände
Gut. Also mache ich folgendes, weil es nur endlich
viele Teilmengen der Zustandsmenge gibt und nicht bei einer Menge starte,
kann ich in jedem Schritt auch nur neue Teilmengen von Kuh erreichen.
Und dieses potenziell erreichen können,
also ich starte in der Menge und rechne dann die potenziell erreichbare Menge von Zuständen aus,
also genau das, was älter Sternfunktion macht,
das nutze ich jetzt aus,
muss mir aber in dem neuen deterministischen Automaten nicht nur einen Zustand merken,
sondern gleich die gesamte Menge aller Zustände,
die hätten
erreicht werden können
Dieser Automat ist also sehr fleißig, der merkt sich alle Zustände,
gerade die bis jetzt hätten erreicht werden können.
Der alte Automat war vielleicht im Zustand Z5, weil er
nicht deterministisch hätte dorthin kommen können mit der Eingabe bislang.
Dein neuer Automat wird jetzt im Zustand Set 5,
Z7, Z3, Z18 sein,
weil das genau die Menge aller Zustände ist,
in denen er hätte sein können, mit dem bislang eingelesenen Wort.
Das ist die Grundidee. So, und damit er sich das merken kann,
in welchen Zuständen er bislang hätte sein können,
machen wir jetzt Teilmengen von Kuh zu neuen Zuständen.
So mathematisch gesehen sieht das so aus. Gleich kommt mal
ein Beispiel. Gehen wir doch gleich zum Beispiel.
Wir können ja nochmal zurückgehen. Wie sollen wir uns
das vorstellen? Also hier oben ist ein Automat.
Sehr einfach. Nicht Determinismus, den kennen wir auch schon.
Hier vorne ist ein A und hier ist eine A-Kante.
Hier hinten ist kein Nicht-Determinismus und hinten ging gar keine Kanten
raus.
Passiert also auch
nichts Schlimmes
Das heißt, diese einzige Stelle, die gewissermaßen uns das
deterministisch sein versaut, ist hier vorne. Gut,
und jetzt müssen wir uns merken,
von welchen Zuständen oder von welchen Zustandsmengen, ja,
hier stehen alle möglichen Zustandsmengen, Teilmengen,
die ich so haben kann, könnte ich wohin kommen.
Und wo starte ich da? Naja,
am Anfang kann ich nur in diesem Staatszustand sein.
Aber ich mache das trotzdem ganz brav und rechne jetzt für
jede Teilmenge aus, wo ich da hinkommen kann.
Also da kriegen wir erstmal das sehr artificielle von der leeren Teilmenge,
komme ich auch nirgendwo hin und das für alle Symbole
Das sagt uns die Mathematik. Das wollen wir jetzt gar nicht
verstehen. Was jetzt wirklich spannend ist, hier ist ja
der Startzustand. Und da sehen wir mit einem B,
bleibe ich bei Z0, komm nirgendwo anders hin.
Also ist die Menge, die Z0 enthält,
genau die Menge aller von Z0 aus erreichbaren Zuständen.
Beim A ist das anders. Da kann ich nämlich zwei
Zustände reichen. Entweder Z0 oder Z1, deswegen sage ich,
mit einem A gehe ich zu der Menge zur 0Z1. Gut.
Und so mache ich das jetzt brav weiter
Z1, schaue ich mal nach. Na gut, kein
Nicht-Dterminismus in Sicht. Deswegen komme ich da nur zu C2
mit A und B. Ich habe die Kante einfach nur kopiert.
Jetzt ist die hier unten. Mit Z2,
allerdings komme ich nirgendwo hin. Also zu keinem Zustand,
also zu der leeren Menge. Ich kann null Zustände erreichen.
Das ist genau die leere Menge, die das beschreibt.
So, jetzt kommt hier der spannende Fall,
arbeiten wir uns daran weiter ab.
Ich hätte ja mit einem A und Z 0Z1 sein können.
Jetzt schaue ich nach, wenn ich ein A habe,
kann ich von Z0 zu
Oder zu Z1, aber von Z21, könnte ich auch zu Z2 kommen.
Das heißt, wenn ich in diesen beiden hätte sein können,
dann kann ich hinterher in allen drei sein.
Deswegen mache ich den Übergang von Z0, Z1 zu der Menge Z0,
Z1, Z2. Für B ist es ein bisschen einfacher,
B war ja relativ deterministisch, da bleibe ich NZ0,
aber bei Z1 mache ich hier diesen Übergang, naja,
da muss ich Z1 zu C2 machen,
habe also die beiden als potenzielle Kandidaten,
Z0 zu
Das rechne ich jetzt brav weiter aus. Wenn ich das
alles hier voll mache, ja, dann stelle ich fest,
gut, alle Diagrammarten da, was muss ich noch machen?
Ich muss feststellen, was sind Endzustände? Und wir hatten ja gesagt,
Endzustände sind dafür da, potenzielles Akzeptieren zu beschreiben.
Also wenn ein Wort in einen Endzustand hätte gelangen können,
damit das Wort ja akzeptiert. Also picke ich mir jetzt
alle Mengen raus, die einen Endzustand enthalten. Ja,
Z0 ist zwar kein Endzustand, aber Z2. Und dieser Zustand beschreibt ja,
dass ich nach dem bislang eingelesenen Wort In einem Endzustand hätte sein können,
nämlich in Z2. Deswegen ist es sinnvoll,
dass sie als Endzustand zu machen.
Es gibt hier nur einen Endzustand,
deswegen muss ich nur überall gucken, wo kommt Z2 vor.
Hier, hier, hier, hier. Wenn ich in
diesen beiden Zuständen bin oder noch schlimmer in den Desen hier,
dann ist es auf jeden Fall so,
dann hätte ich nicht in einem Endzustand sein können,
Z2 kommt ja nicht vor.
So, jetzt stellen wir Folgendes fest,
dass dieser Automat in zwei Teilkomponenten zerlegt ist.
Wir haben einmal diese Teilkomponente, die vom Staatszustand erreichbare Zustände enthält.
Dieser Teil. Und wir haben den Teil hier hinten,
der überhaupt für nichts zu gebrauchen ist, den wir also wieder wegschmeißen können.
Das heißt, wenn wir diesen DFA gerne initial zusammenhängen hätten,
dann müssen wir jetzt zum Schluss diese Knoten wieder entfernen.
Was bekommen wir dann? Einer Konstruktion vollständigen Automaten,
der initial zusammenhängt ist. Vollständig ist, weil die Konstruktion
für jede Zustandsmenge eine Nachfolgemenge generieren kann. Das haben wir gesehen,
im schlimmsten Fall ist die Menge halt die leere Menge.
Wenn es eine Zweifel A oder B keinen Nachfolgezustand hat,
dann ist der Nachfolgezustand immer noch definiert.
Das ist halt die leere Menge. Deswegen Vollständigkeit kriegen wir
schon mal geschenkt. Was wir nicht geschenkt kriegen,
ist halt die Tatsache, dass er initial zusammenhängt ist,
wenn wir es so konstruieren.
Denn wir sind ja so gestartet, dass wir erstmal brav
alle Potenzmengen aufgeschrieben haben. Hier die Null-Elementige, einzelementigen,
zwei Elementigen, drei Elementigen Timing. So,
und weil das vielleicht ein bisschen blöd ist, dieses Verfahren,
das ist algorithmisch vielleicht nicht ganz so schlau,
erstmal alle Potenz
So, wach sind alle. Ich habe auch neue Batterien
. Ich war stehen geblieben bei der Tatsache,
dass diese Art und Weise ein Potenzautomaten zu konstruieren.
Also für die, die mich noch hören,
dass diese Art und Weise einen Automaten zu konstruieren,
algorithmisch vielleicht nicht ganz so schlau ist.
Denn Für den Rechner ist es vielleicht nicht das Argument,
aber wenn ihr das macht, ihr feststellt,
in der initialen Zusammenhangskomponent sind von den 256 Zuständen nur 4 drin gewesen,
ärgert ihr euch vielleicht.
Von daher ist es ein bisschen cleverer,
gleich ein Verfahren zu wählen, wo alle Zustände enthalten sind.
Also alle erreichbar sind. Und dieses Verfahren hangelt sich vom
Staatszustand oder von der Menge der Staatszustände beginnt einfach vorwärts.
Das heißt, wir beginnen mit genau dieser Menge aller Staatszustände,
das ist in diesem Fall nur die Menge, die Z0 enthält,
und konstruieren damit gleich einen vollständigen in die sozial zusammenhängenden DFA.
Und wir stellen eben fest, wenn man so vorgeht,
Z0, ja, okay, mit einem B bleibe ich in dieser Menge,
mit einem A, habe ich jetzt die beiden Alternativen, Z0, Z1.
Damit sind beide ausgehenden Kanten abgearbeitet, also bei diesen Potenzautomaten
ist es immer wichtig, streng nach Schema vorzugehen.
Erster Zustand, zwei Kanten gehen raus,
fein ist man fertig mit diesem Zustand,
solange bei irgendeinem noch nicht alle beiden Kanten da sind,
wenn man zwei Elementiges Alphabet hat,
muss man wohl noch
was tun
Jetzt gehen wir brav weiter. Also das Layout ist wie vorher.
Bei Z0, Z1 mit einem A kriege ich wieder drei Möglichkeiten.
Mit einem B eben beide Möglichkeiten. Sieht man hier,
Z0 bleibt ja bei Z0 oder Z1, Z1 mit einem
A zu C2. Das heißt, alle drei sind erreichbar.
Wenn ich ein Z0, Z1 starte, mit einem Bedienübergang mache,
bleibe ich entweder ein Z0 oder Wechsel von Z1 auf Z2.
Also erreicht den Zustand Z0, C2.
Damit ist dieser Zustand auch abgearbeitet.
Gehe ich zum nächsten Zustand,
den ich abarbeiten muss
Also Z0, Z2 mit einem B bleibe ich in Z0.
Und in Z2 kann ich gar nichts machen. Also nur
die Menge Z0. Genauso, fast sieht es aus mit einem A.
Für Z2 sieht man hier oben keinen Nachfolger.
Also nur die Nachfolger von Z0 mit einem A sind relevant.
Und das sind, so wissen wir schon, Z0,
Z1. Gut, damit verlassen auch diesen Zustand zwei Kanten.
Jetzt muss ich hier noch nachsehen. Wo komme ich denn
von irgendeinem dieser drei Zustände mit einem B hin?
Naja, zu Z0 wieder oder zu Z2
Z1 kann ich von diesen Dingern mit einem B nicht erreichen.
Also zu dem Zustand. Wenn ich in allen dieser drei Zustände bin und jetzt ein A einlese,
kann ich hinterher immer noch in einem dieser drei Zustände gewesen sein.
Also bleibe ich hier unten mit einer Schleife an diesem Zustand,
Z01 und 2 dran. Was ich dann noch machen muss,
ist, wieder die Endzustände zu annotieren,
genau mit der gleichen Logik,
sobald mindestens sein Endzustand vorkommt, bin ich fein raus,
dann weiß ich ja, aha, ich hätte jetzt,
wenn ich hier angekommen bin,
in einem Endzustand gewesen sein können
Wunderbar, muss ich also sagen, ich akzeptiere und in den Zuständen,
wo kein Endzustand vorkommt, das sind eben ganz normale Zustände,
keine Endzustände, wie die hier.
Und das hier ist eben die Startzustandsmenge, mit der habe
ich ja angefangen, mich in diesem Grafensuchverfahren vorwärts zu hangeln.
Und damit habe ich dann den vollständigen Initialzusammenhängenden Automaten.
So, jetzt wissen wir ungefähr, wie es funktionieren soll.
Springen nochmal die ganzen Folien zurück
Jetzt wissen wir, was wir haben wollen,
jetzt müssen wir es nur noch mathematisch aufschreiben.
So. Wie schreiben wir das auf? Wir sagen,
wir gehen aus, konstruktiv,
wir definieren uns jetzt zu einem Automaten A, ein Potentautomat.
Und dazu müssen wir erst mal sagen, wie sieht der Automat A aus?
Also es ist ein NFA mit Zuständen Alphabet, Zustandsüberführungsfunktionen,
der Menge von Staatszuständen und Endzuständen.
Und wie wir eben gesehen haben,
wenn ich den neuen Potenzautomaten B konstruiere,
dann kriege ich als Zustandsmenge
die Menge aller Potenzmengen
Zwei Hochkuh. Also die Menge, nein, die Potenzmengen,
die Menge aller Timingen suchen. Zwei Kuh ist die Potenzmenge.
Das heißt, ein Zustand ist eine Teilmenge von Kuh.
So wie in dem Beispiel eben. Das Alphabet ist unverändert,
an der Überführungsfunktion muss ich noch ein bisschen basteln.
In einem deterministischen Automaten brauche ich jetzt den Startzustand.
Ein deterministischer Automat hat genau einen Start zu starten.
Hier steht jetzt S-0. Das ist zwar eine Menge von Zuständen
, aber es ist eine Menge von Zuständen in A.
Eine Menge von Zuständen ist für B
ein Zustand
Das heißt, S0 ist aus Perspektive dieses Automat mit dieser Zustandsmenge genau ein Zustand.
Deswegen passt das hier. Das heißt, in dieser Startzustandsmenge,
das ist eigentlich keine richtige Menge, sondern für ihn ein Zustand.
Und dann muss ich an den Endzuständen auch noch was drehen.
Bei den Ernstzustandsmengen, das ist ganz einfach,
da sage ich, wenn ich eine Menge M habe,
also eine Teilmenge der Zustände oder ein Element der Potenzmenge,
wie es hier steht, also M besteht aus Zuständen,
ist eine Menge davon.
Wenn die mit den Endzuständen etwas gemeinsam hat,
also der Schnitt nicht leer ist,
dann packe ich das in die Menge der Endzuständen
So, und wenn der Schnitt leer ist,
also gar kein Ernstzustand vorkommt, dann ist es eben kein Endzustand.
So, und jetzt muss sie noch ausrechnen,
wo komme ich hin für eine Zustandsmenge und welche neue Zustandsmenge komme ich da?
Und das läuft so ähnlich, wie wir Parfolien zuvor
Data Stern definiert haben. Wir schauen nach, angenommen,
ich bin in einem Zustand M, der ist jetzt eine Zustandsmenge.
Und ich will wissen, wo komme ich mit einem X
hin? Naja, dann schaue ich mir Folgendes an.
Ich nehme einen Zustand raus aus diesem Groß-M,
einen Zustand
Und schaue jetzt nach, wo kommt der mit einem X
hin? Das schaue ich nach mit der Delta-Funktion.
Delta ist die Funktion des NFAs hier oben. Das heißt,
was hier rauskommt, ist, weil es in NFA ist,
eine Menge von Zuständen. Die Menge aller Zustände,
die ich von P aus mit einem X hätte erreichen können.
So, diese Menge vereinige ich mit allen anderen Mengen,
wenn ich hier das P variiere, aus dem ich gestartet bin.
Also schaue ich wieder,
ich nehme diese Grundmenge M und lasse jetzt alle Zustände einen X-Schritt machen,
also gehe über alle X-Kanten und die Menge aller Zustände,
die ich so erreichen kann,
die sammle ich
zusammen mit dieser großen Vereinigung
Und was da rauskommt, ist eine große Menge von Zuständen im Allgemeinen.
Und das ist jetzt genau ein Nachfolgezustand, in dem deterministischen Automaten.
Also das ist der Nachfolgezustand von M bezüglich X. So,
jetzt haben wir die Konstruktion des Potenzautomaten und streng genommen müssen wir jetzt beweisen,
dass dieser Potenzautomat auch die Eigenschaft hat,
die wir gerne hätten,
nämlich dass er äquivalent ist zum Ausgangsautomaten A.
Bislang haben wir nur irgendwie einen zweiten Automaten konstruiert,
was jetzt wichtig ist,
um den Satz zu beweisen ist,
dass sie
die gleiche Sprache sprechen
Also, zwei Dinge sind im Prinzip zu beweisen.
Wir skizzieren hier das nur ganz kurz. Details sind in
jedem Lehrbuch nachzulesen, zum Beispiel im Hauptgravel Ironman.
Wir zeigen einerseits, wenn ich eine akzeptierende Rechnung im Automaten B habe,
also im Potenzautomaten. Was gilt dann im Ursprungsautomaten? Das heißt,
wenn da Potenzautomat akzeptiert, damit er nicht mehr akzeptiert oder nicht weniger,
sollte er dann auch genauso akzeptieren.
Also, wenn Automat B akzeptiert, dann will ich,
dass vorher der Automat A auch akzeptiert hätte.
Wenn dem nichts so wäre, würde Automat B jetzt plötzlich mehr akzeptieren.
Also der Neue akzeptiert, dann hat auch der Alte vorher akzeptiert,
genau dieses Wort. Das ist auch so,
denn wenn er neue Automat B auf einem Wort eine akzeptierende Rechnung habt,
dann guckt man sich an, wie ist das mit Delta,
dann hätte der ja auch eine Erfolgsfahrt auf diesem Wort B gehabt.
Das sehen wir daran, dass die Eigenschaft,
ich merke mir alle Zustände, die ich erreichen kann und
ich komme in einen Endzustand
Das heißt, wenn B, der Potenzautomat in einen Zustand kommt,
in dem mindestens ein Endzustand drin ist,
dann hätte es einen solchen Erfolgsrechnung auch in dem nicht deterministischen Automaten gegeben,
in dem ich genau diesen Pfad,
der mich in diesen Endzustand darin vorkommt, geführt hätte.
So, das ist die eine Sache. Und da muss ich noch umgekehrt sagen,
es darf nicht zu wenig akzeptiert werden, wenn der nicht deterministische
ein Erfolgsfahrt hat, dann muss auch der Potenzautomat akzeptieren können.
So, da ist es aber so, wenn A,
Zustände besucht, dann kommen die auf jeden Fall in diesen Zustandsnamen,
die in den Mengen vorkommen, auch vor.
Das heißt, wenn es einen Pfad gibt,
der irgendwie ein A durchlaufen wird,
dann kommen alle durchlaufenden Zustände immer auch als Element in den durchlaufenden Zustandsmengen des Potensautomaten vor.
So und weil das so ist, ja,
und es gibt einen Erfolgspfad, ein A, das heißt,
es gibt einen Pfad in A, der in einem Endzustand endet.
Und da ich gesagt habe,
jeder Zwischenzustand ist in den Mengen im Potenzautomaten enthalten,
weiß ich genau dieser von A erreichte Endzustand,
ist jetzt auch zum Schluss in dieser Menge enthalten
Und deswegen, weil ich die Endzustände so definiert habe,
dass ein Endzustand in dieser Menge reicht,
wird der neue Potenzautomat dieses Wort deswegen auch akzeptieren.
Also, er akzeptiert nicht zu viel,
er akzeptiert auch nicht zu wenig, akzeptiert genau die Worte,
die vorher der alte nicht deterministische Automat A akzeptiert hat.
Oder anders formuliert der neue Automat B ist vollständig. Ja,
und das Wichtigste ist äquivalent zum nicht deterministischen Automat nah.
Und das war genau die Aussage,
die wir beweisen wollten
Das zu jedem NFA ein DFA konstruierbar ist,
der die gleiche Sprache akzeptiert. Das heißt,
von diesem Gesichtspunkt gibt es zu der ganz großen Menge aller NFAs stets immer schon ein,
das ist wie bei Hase und Igel,
einer war schon immer da,
nicht Determinismus bringt in diesem Fall nichts,
wir hatten das alles
schon mal
Naja. Diese Konstruktionsmöglichkeit erlaubt uns also zu zeigen,
egal wie der Automat ausgesehen hat,
wir bekommen hinterher auf jeden Fall etwas, was deterministisch ist.
Was ist wohl der Nachteil dieser Konstruktion? Also wenn ihm so wäre,
warum zeige ich denn überhaupt nicht die terministische Automaten?
Er ist ja gleich lassen können
Der Potenzautomat hat einen großen Nachteil.
Übersichtlichkeit ist immer relativ
Das ist, also ich kann auch
einen sehr übersichtlichen durch Verschieben der Zustände unübersichtlich machen.
Das ist so ein bisschen Geschmackssache. Da war noch was
. Das weiß ich weder beim deterministischen noch beim nicht-deterministischen.
Bei beiden habe ich diese Information nicht.
Das konnte ich beim nicht-deterministischen
erst recht nicht
Da sehe ich es noch nicht mal. Ja,
da weiß ich, beim Eingabewort ja gar nicht,
in welchem Zustand ich bin oder noch hätte sein können.
Wenn ich im Z2 bin, ja, dann weiß ich nicht,
ist das jetzt so ein Zustand gewesen,
wo ich auch noch in Z0 hätte sein können?
Oder ist es eigentlich so ein Zustand,
wo ich in Z0 oder Z1 hätte auch noch sein können?
So gesehen ist dieses Diagramm viel informativer.
Das sagt mir nämlich noch die Alternativen gleich mit.
Ja, im Allgemeinen ist das Ding
deutlich größer
Was heißt in diesem Fall deutlich? Also ein exponentielles Aufblähen,
weil die Potenzmenge einer en-elementigen Menge zwei hochend viele Zustände hat.
Das ist ein sehr gewichtiges Argument, denn es heißt ja,
wenn ich nicht deterministisch etwas modelliere,
dann kann das um Umständen nur meinen exponentiellen Faktor kleiner sein,
als das korrespondierende, deterministische Konstrukt.
Und für einen Menschen ist es dann unter Umständen einfacher,
den Nicht-Determinismus, das Raten zu akzeptieren,
Wenn das ein schön kleiner Automat ist oder er kann vielleicht sehr schnell einen nicht deterministischen Automaten entwerfen.
Und man kann dann halbwegs sicher sein,
dass er auch das tut, was man haben möchte.
Ja, wenn man gleich aber einen exponentiell für größeren hätte aufmalen müssen,
dann wäre er einfach aus statistischen Gründen die Fehlerwahrscheinlichkeit für größer gewesen.
Bei irgendeinem der Zustände, die mich vermutlich vertan. Das heißt,
aus dieser Perspektive ist es für den Modellierer,
der mit diesem Konstrukt arbeitet, natürlich sehr angenehm,
Determinismus zwar im Hintergrund bekommen zu können, also diesen Algorithmus,
das kann ja der Computer nachher machen,
aber Er möchte es nicht unbedingt so,
wenn er am Rechner etwas modelliert, aufmalen müssen.
Da ist nicht die Terminismus ganz nett.
Das erleichtert das Teil bis Handwerk. Gut. Wobei das
so eine Sache ist, man muss ja schon hoffen,
dass der Automat tatsächlich nicht alle zwei Euro-Endzustände tatsächlich ausreizt.
Denn angenommen man modelliert etwas und sagt, konvertiere mir das
mal in ein deterministisches Format und speicher das mal auf der Platte ab.
Man kann aus einem relativ handsamen Automaten mit, sagen wir mal,
100 Zuständen plötzlich ein Monstrom mit 2 hoch 100 Zuständen,
werden nicht alle auf die Platte schreiben müsste.
Das kann unter Umständen etwas dauern. Vielleicht gibt es auch gar keine Platte,
die jemals diese Größe haben wird, wer weiß.
Was können wir noch mehr machen mit endlichen Automaten,
wenn wir die mal von vorne basteln müssten, dann wäre das ja doof.
Also wir erhalten erstmal ein paar wichtige Dinge fest und machen ein paar wichtige Konstruktionen.
Die erste wichtige Dinge, die wir festhalten, ist,
dass wenn wir die regulären Sprachen betrachten möchten,
das ist also keinen Unterschied macht,
ob ich sie durch deterministische Automaten definiere oder durch nicht deterministische.
Die Sprachfamilie, die von deterministischen akzeptiert werden kann,
ist wegen der Potenzautomatenkonstruktion genau die gleiche Familie, die von nicht deterministischen akzeptiert wird.
Das macht keinen Unterschied. Gut, erste wichtige Schlussfolgerung. Das,
was jetzt kommt, ist eine nette Konstruktionsmethode,
wenn man Automaten hat, dann kann man sagen,
angenommen, ich habe schon zwei Automaten,
kann ich mir neue daraus zusammenbasteln.
Welche Sprachen akzeptieren die dann? Und hier sieht man,
In diesem gestrichelten Bereich, ich habe schon mal zwei Automaten hier angedeutet.
Wir starten hier, dann machen sie irgendwelche Übergänge und haben irgendwelche Endzustände.
Und der Automat A2 ganz genauso. Und jetzt will ich
aus diesen beiden Automaten einen neuen Automaten konstruieren,
der mir die Vereinigung der beiden akzeptierten Sprachen akzeptiert.
Wenn ich das so mache, dass ich einfach,
naja, was mache ich?
Ich sage, du bist nicht mehr Staatsanstand und du
auch nicht.
Ich habe jetzt
einen neuen Staatzustand
Und jetzt mache ich folgendes,
der alte Staatszustand konnte ja mit einem X oder mit einem Y irgendwo hingehen und dann sage ich,
na gut, du darfst mit dem X dahin gehen,
wo der alte Zustand hinkam oder dahin gehen,
wo der alte mit einem Y hinging.
Das machen wir jetzt für alle XYZ, dieser Vorkommen.
Und umgekehrt auf der rechten Seite gucken wir auch der Staatszustand,
kann mit meinem Y irgendwo hin, na gut,
verbinden wir das hier, mit einem Set genauso.
Was dazu führt, dass als Ergebnis dieser Konstruktion etwas nicht Deterministisches herauskommt. Was ist ja ganz praktisch,
dass wir mit nichtdeterministischen Automaten hantieren dürfen,
Dann ist es für uns einfacher, dann können wir sagen,
ja gut, da kommt zwar nicht deterministischer Automat raus,
aber wir wissen ja, es gibt immer Möglichkeiten,
wenn wir es unbedingt haben wollen, ihn deterministisch zu machen.
Das müssen wir jetzt nicht tun. Das kann jemand anders von uns erledigen. So,
was man denn sieht, wenn man diesen neuen großen Automaten hat,
ist jetzt ein neuer Automat, wie man formal folgendermaßen definieren kann.
Erstmal packe ich beide Zustände des Jung zusammen.
Dieses Symbol heißt Vereinigen, das Plus deutet an,
dass die beiden Zustandsmengen des Jung vereinigt, Kein Zustand,
der hier drin ist, auch gleichzeitig durch Zufall,
durch einen blöden Zufall, auch ein Zustand da drin ist.
Das heißt, ich möchte erzwingen, dass die Zustandsnamen unterschiedlich sind.
Das ist keine Einschränkung, denn die Wahl der Zustandsnamen
ist ja völlig egal. Und um das zu erzwingen,
kann man hier den ersten Automaten hier überall mit dem Subskript 1
und im zweiten Automaten über einen Subrip 2 versehenen, heißen alle Zustände unterschiedlich.
So, dann kann ich das Disjugend vereinigen und dann sage ich,
ich packe noch einen frischen Zustand QAF,
das soll der Staatszustand sein, hinzu,
der soll auch neu sein,
kommt also weder links nach rechts vor
Die Alphabete, wenn sie nicht ohnehin schon gleich sind,
die schmeißen wir zusammen. Der Staatsschuh stand klar,
dass das QA, die Endzustandsmenge vereinige ich,
die müssen ja desjungt sein, das hatte ich ja vorne gefordert.
Jetzt muss ich also nur noch die Übergangsfunktion definieren.
Da sage ich folgendes für einen Zustand P, der aus Q1 kommt,
da nehme ich die Funktion Delta 1 und gucke nach,
wo kommst du mit X von P aus startend hin.
Und das nehme ich als Funktionswert. Wenn P aus Q2 kommt,
dann sage ich, okay, mit einem X,
Und dann sagt mir Delta 2, wo du hinkommst.
Also ich nehme sowohl die Tanten hier links als auch die
Kanten rechts. Da hat die Zustände des Jungds sind,
ist das kein Problem, gibt es keine Verwirrung.
Und dann muss ich noch für den Zustand der neue Staatszustand
sagen, wo gehst du hin?
Naja, dann packe ich das für alle zusammen.
Das ist nicht deterministisch. Das sieht man ja hier zum Beispiel,
habe ich für Y zwei Zustände, die ich erreichen kann.
Also gucke ich nach, wo komme ich mit X im ersten Automaten hin,
wo komme ich mit X im zweiten Automaten hin,
jeweils im eigenen Staatszustand gestartet.
Das vereinige ich für alle Elemente des Alphabets
und da komme ich dann hin
Gut. Wenn ich das so mache,
dann habe ich einen Automaten konstruiert, das ist relativ einsichtlich,
kann man noch beweisen, wenn man möchte,
der jetzt die Vereinigung der beiden akzeptierten Sprachen akzeptiert.
Und das kann man auch ein bisschen vornehmer ausdrücken,
weil man das ja für jeden Automaten machen kann,
führt das dazu, wenn ich zwei reguläre Mengen habe,
dann wurden ja von Automaten akzeptiert.
Die kann ich jetzt so zusammenfassen. Wenn ich sie so
zusammenfasse, wird auch deren Vereinigung von einem Automaten akzeptiert,
ist also wieder regulär.
Das heißt, zwei reguläre Mengen vereinigt,
ergibt wieder eine reguläre Menge
Oder noch Vornehmer, sind El und L1 und L2 reguläre Sprachen,
dann ist auch L1, L2 vereinigt, regulär.
Und manchmal gibt es auch die Sprechweise dafür,
dass Vereinigung bezüglich der regulären Mengen eine Abschlussoperation ist.
Das heißt, durch Vereinigung verlasse ich dicht die Menge der regulären Mengen.
Das ist ein Abschlussbereich, da komme ich nicht raus durch Vereinigung.
Es gibt noch andere Dinge,
die ich mit regulären Mengen machen kann,
ohne dass da etwas
nicht reguläres rauskäme
Ich kann folgendes tun, ich kann, das haben wir eben gesehen,
ich kann sie vereinigen, ja, haben wir eben konstruiert.
Ich kann das Komplexprodukt bilden, das heißt,
ich kann eine Sprache nehmen und sag,
hinter alle Wörter dieser Sprache hänge ich jetzt in jeder Kombination die Wörter dieser Sprache.
Wenn die beiden vorher regulär sind, dann ist auch das,
was da rauskommt, hinterher regulär. Was ich noch machen kann,
ist, ich kann nicht nur vereinigen,
ich kann auch den Durchschnitt bilden, zweier regulären Mengen,
das ist schon spannender,
das ist eine relativ rare Eigenschaft,
dass der Schnitt zweier Mengen wieder die gleiche Eigenschaft hat
wie die Ausgangsmengen,
hier ist das so
Das Kompliment, wenn eine Sprache regulär ist,
hat ja meistens unendlich viele Worte, die dazugehören.
Meistens auch unendlich viele Worte, die nicht dazugehören.
Also das Kompliment, wenn ich mir das jetzt betrachte,
ist auch wieder regulär. Okay. Und dann gibt es
auch noch so etwas, das sind Hommamaphismen.
Das sind Ersetzungsoperationen, die Struktur erhalten sind.
Also die einfachste Form der Hommaphismen sind welche,
die jedes