Folien
Folien
Folien
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Formale Sprachen und Automaten<br />
Kapitel 2: Typ 3<br />
Vorlesung an der DHBW Karlsruhe<br />
Thomas Worsch<br />
Karlsruher Institut für Technologie, Fakultät für Informatik<br />
Wintersemester 2012
Kapitel 2 Typ 3<br />
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Inhalt 2/124
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Deterministische endliche Automaten 3/124
Ziel<br />
Kennenlernen des einfachsten Automatentyps<br />
◮ Definition<br />
◮ Notationen<br />
◮ Arbeitsweise<br />
◮ Beispiele und Nichtbeispiele<br />
Deterministische endliche Automaten 4/124
2.1 Beispiel: Parkplatz mit 5 Stellplätzen<br />
◮ Schranke an der Einfahrt,<br />
Induktionsschleifen an Ein- und Ausfahrt<br />
◮ vereinfachende Annahme: nicht gleichzeitig Signal von beiden<br />
Induktionsschleifen<br />
◮ elektrisches System soll Schranke steuern und<br />
Zähler mit der Anzahl geparkter Autos verwalten.<br />
◮ Einfahrschranke:<br />
◮ soll nur aufgehen, wenn noch ein Parkplatz frei ist;<br />
◮ sonst rote Ampel an der Einfahrt<br />
◮ Operateur:<br />
◮ Warnsignal, wenn Parkplatz leer, aber Signal von<br />
Ausfahrtsschleife<br />
◮ sonst Mitteilung, dass Anzahl Autos erniedrigt<br />
Deterministische endliche Automaten 5/124
2.1 Beispiel: Parkplatz mit 5 Parkplätzen (2)<br />
Formalisierung:<br />
◮ Eingabesignale für System:<br />
Eingabealphabet X = {E, A}<br />
◮ Ausgabesignale von System:<br />
Ausgabealphabet Y = {↑, ⊗, −, ?!}<br />
◮ Zähler mit Wert in Z = {0, 1, 2, 3, 4, 5}:<br />
(Belegungs-)Zustand des Parkplatzes<br />
Deterministische endliche Automaten 6/124
2.1 Beispiel: Parkplatz mit 5 Parkplätzen (3)<br />
Arbeitsweise<br />
◮ Änderungen des Zählers:<br />
Eingabe<br />
◮ erzeugte Ausgabesignale:<br />
Eingabe<br />
alter Zählerstand<br />
0 1 2 3 4 5<br />
E 1 2 3 4 5 5<br />
A 0 0 1 2 3 4<br />
alter Zählerstand<br />
0 1 2 3 4 5<br />
E ↑ ↑ ↑ ↑ ↑ ⊗<br />
A ?! − − − − −<br />
Deterministische endliche Automaten 7/124
2.1 Beispiel: Parkplatz mit 5 Parkplätzen (4)<br />
Grafische Darstellung:<br />
E/ ↑ E/ ↑ E/ ↑ E/ ↑ E/ ↑<br />
A/?! 0 1 2 3 4 5 E/⊗<br />
A/− A/− A/− A/− A/−<br />
◮ Knoten: Zustand des Zählers<br />
◮ Kante von Knoten i zu Knoten j, mit x/y beschriftet<br />
◮ Übergang von Zustand i bei Eingabe von x in Zustand j<br />
◮ dabei die Ausgabe y erzeugt<br />
Deterministische endliche Automaten 8/124
2.2 Definition<br />
Ein endlicher Automat ist festgelegt durch<br />
◮ eine endliche Zustandsmenge Z<br />
◮ einen Anfangszustand z0 ∈ Z<br />
◮ ein Eingabealphabet X<br />
◮ eine Überführungsfunktion f : Z × X → Z<br />
Ausgaben: kommen später dazu<br />
Deterministische endliche Automaten 9/124
2.3 Beispiel<br />
◮ Zustandsmenge Z = {A, B, M, Q},<br />
◮ Anfangszustand A<br />
◮ Eingabealphabet X = {0, 1, -}<br />
◮ Überführungsfunktion: A B M Q<br />
0 B B B Q<br />
A<br />
0,1<br />
0,1<br />
B<br />
1<br />
-<br />
B<br />
M<br />
B<br />
Q<br />
B<br />
Q<br />
Q<br />
Q<br />
- 0,1<br />
M<br />
-<br />
-<br />
Q<br />
0,1,-<br />
Deterministische endliche Automaten 10/124
2.4 Definition<br />
Endlicher Automat mit f : Z × X → Z<br />
Erweiterungen für Eingabe eines ganzen Wortes w ∈ X ∗ :<br />
◮ f ∗ (z, w) zuletzt erreichter Zustand<br />
f ∗ : Z × X ∗ → Z<br />
f ∗ (z, ε) = z<br />
∀w ∈ X ∗ ∀x ∈ X : f ∗ (z, wx) = f (f ∗ (z, w), x)<br />
◮ f ∗∗ (z, w) alle durchlaufenen Zustände<br />
f ∗∗ : Z × X ∗ → Z ∗<br />
f ∗∗ (z, ε) = z<br />
∀w ∈ X ∗ ∀x ∈ X : f ∗∗ (z, wx) = f ∗∗ (z, w)f (f ∗ (z, w), x)<br />
Deterministische endliche Automaten 11/124
2.5 (induktive Definitionen)<br />
Definitionen wie in 2.4 nennt man auch rekursiv oder induktiv.<br />
Z. B. Funktionswerte einer Funktion festgelegt durch<br />
◮ einen (oder evtl. mehrere) Funktionswerte für den (oder evtl.<br />
mehrere) „kleinste“ Argumentwerte und<br />
◮ Vorschrift, wie sich<br />
◮ aus Funktionswert(en) für „kleinere“ Argumentwerte<br />
◮ der Funktionswert für einen „größeren“ Argumentwert<br />
ergibt.<br />
Oben: „Größe“ des zweiten Arguments ist seine Länge<br />
◮ Kleinster Argumentwert: leeres Wort<br />
◮ von längeren Argumentwerten wird letztes Symbol abgespalten<br />
der kürzere Rest wird als kleinerer Argumentwert benutzt<br />
Deterministische endliche Automaten 12/124
2.5 (induktive Beweise)<br />
Beweis einer Eigenschaft einer so definierten Funktion<br />
◮ kann unter Umständen dieser Struktur folgen<br />
◮ z. B. vollständige Induktion, wenn die Größe eine natürliche<br />
Zahl ist.<br />
Deterministische endliche Automaten 13/124
2.6 Beispiel<br />
Zeige: Für alle z ∈ Z und alle w ∈ X ∗ gilt:<br />
|f ∗∗ (z, w)| = 1 + |w| .<br />
Es sei z ∈ Z beliebig.<br />
Wir führen eine Induktion über die Länge n = |w| von w:<br />
◮ Induktionsanfang n = 0:<br />
◮ Dann muss w = ε sein. Folglich:<br />
◮ |f ∗∗ (z, w)| = |f ∗∗ (z, ε)| = |z| = 1 = 1 + 0 = 1 + |ε| wie<br />
behauptet.<br />
Deterministische endliche Automaten 14/124
2.6 Beispiel (Forts.)<br />
◮ Induktionsschritt n − 1 ❀ n:<br />
◮ Induktionsannahme oder Induktionsvoraussetzung:<br />
Für Wörter w ′ der Länge n − 1 gilt:<br />
|f ∗∗ (z, w ′ )| = 1 + |w ′ | = 1 + (n − 1) = n.<br />
◮ Wort w habe Länge n ≥ 1, also<br />
w = w ′ x mit |w ′ | = n − 1 und x ∈ X .<br />
◮ Laut Def.: f ∗∗ (z, w ′ x) = f ∗∗ (z, w ′ )f (f ∗ (z, w ′ ), x). Folglich<br />
◮ |f ∗∗ (z, w ′ x)| = |f ∗∗ (z, w ′ )f (f ∗ (z, w ′ ), x)|<br />
= |f ∗∗ (z, w ′ )| + |f (f ∗ (z, w ′ ), x)|.<br />
◮ Induktionsvoraussetzung: |f ∗∗ (z, w ′ )| = n.<br />
◮ Außerdem: |f (f ∗ (z, w ′ ), x)| = |f (. . . , x)| = 1<br />
◮ Insgesamt: |f ∗∗ (z, w ′ x)| = n + 1 wie behauptet.<br />
Deterministische endliche Automaten 15/124
2.7 Beobachtung<br />
Für alle Wörter w1, w2 ∈ X ∗ und alle Zustände z gilt:<br />
f ∗ (z, w1w2) = f ∗ (f ∗ (z, w1), w2) .<br />
Das ist inhaltlich völlig banal.<br />
Trotzdem müsste man es genau genommen beweisen . . .<br />
Deterministische endliche Automaten 16/124
2.9 Definition<br />
◮ Ausgabealphabet Y<br />
◮ Ausgabefunktion g: zwei Varianten<br />
◮ Mealy-Automat: g : Z × X → Y<br />
für jede Eingabe bekommt man eine Ausgabe<br />
◮ Moore-Automat: g : Z → Y<br />
in jedem Zustand bekommt man eine Ausgabe<br />
Deterministische endliche Automaten 17/124
2.10 Beispiel (Fortsetzung von 2.3)<br />
◮ Zustandsmenge Z = {A, B, M, Q},<br />
◮ Anfangszustand A<br />
◮ Eingabealphabet X = {0, 1, -}<br />
A<br />
0,1<br />
B<br />
- 0,1<br />
M<br />
0,1<br />
-<br />
-<br />
Q<br />
0,1,-<br />
Deterministische endliche Automaten 18/124
2.10 Beispiel (Fortsetzung von 2.3)<br />
◮ Zustandsmenge Z = {A, B, M, Q},<br />
◮ Anfangszustand A<br />
◮ Eingabealphabet X = {0, 1, -}<br />
◮ Y = {0, 1}<br />
A<br />
0,1<br />
B<br />
- 0,1<br />
M<br />
0,1<br />
-<br />
-<br />
Q<br />
0,1,-<br />
Deterministische endliche Automaten 18/124
2.10 Beispiel (Fortsetzung von 2.3)<br />
◮ Zustandsmenge Z = {A, B, M, Q},<br />
◮ Anfangszustand A<br />
◮ Eingabealphabet X = {0, 1, -}<br />
◮ Y = {0, 1}<br />
◮ g(B) = 1 und g(z) = 0 für alle z ∈ {A, M, Q}<br />
A<br />
0,1<br />
B<br />
- 0,1<br />
M<br />
0,1<br />
-<br />
-<br />
Q<br />
0,1,-<br />
Deterministische endliche Automaten 18/124
2.10 Beispiel (Fortsetzung von 2.3)<br />
◮ Zustandsmenge Z = {A, B, M, Q},<br />
◮ Anfangszustand A<br />
◮ Eingabealphabet X = {0, 1, -}<br />
◮ Y = {0, 1}<br />
◮ g(B) = 1 und g(z) = 0 für alle z ∈ {A, M, Q}<br />
A<br />
0,1<br />
B<br />
- 0,1<br />
M<br />
0,1<br />
-<br />
-<br />
Q<br />
0,1,-<br />
Deterministische endliche Automaten 18/124
2.12 Festlegung<br />
◮ Sei Y = {0, 1} und nur das letzte Ausgabesymbol von<br />
Interesse<br />
◮ Zu Y und g äquivalente Spezifikation:<br />
Teilmenge F ⊂ Z der Zustände z mit Ausgabe g(z) = 1<br />
◮ in F : akzeptierende Zustände<br />
◮ So ein Automat heißt auch ein Akzeptor.<br />
Deterministische endliche Automaten 19/124
2.13 Definition<br />
Von endlichem Akzeptor M = (Z, z0, X , f , F ) erkannte Sprache:<br />
L(M) = {w ∈ X ∗ | f ∗ (z0, w) ∈ F }<br />
Deterministische endliche Automaten 20/124
2.13 Definition<br />
Von endlichem Akzeptor M = (Z, z0, X , f , F ) erkannte Sprache:<br />
L(M) = {w ∈ X ∗ | f ∗ (z0, w) ∈ F }<br />
Frage: Welche Sprachen kann man mit endlichen Akzeptoren<br />
erkennen?<br />
Deterministische endliche Automaten 20/124
2.14 Beispiel<br />
Gesucht: endlicher Akzeptor für die formale Sprache<br />
L = {0 k 1 ℓ | k, ℓ ∈ N0}<br />
= {w ∈ {0, 1} ∗ | in w kommen alle 0 vor allen 1 }<br />
Deterministische endliche Automaten 21/124
2.14 Beispiel<br />
Gesucht: endlicher Akzeptor für die formale Sprache<br />
L = {0 k 1 ℓ | k, ℓ ∈ N0}<br />
= {w ∈ {0, 1} ∗ | in w kommen alle 0 vor allen 1 }<br />
0<br />
1<br />
0,1<br />
1 0<br />
A B C<br />
Zustand A: noch keine 1 in der Eingabe<br />
Zustand B: schon mindestens eine 1 in der Eingabe, aber danach<br />
noch keine 0,<br />
Zustand C: Zeichenfolge 10 kam in der Eingabe vor<br />
Deterministische endliche Automaten 21/124
2.15 Beispiel<br />
Gesucht: endlicher Akzeptor für die formale Sprache<br />
L = {w ∈ {0, 1} ∗ | in w kommen vor jeder 1 mindestens zwei 0 vor }<br />
Deterministische endliche Automaten 22/124
2.15 Beispiel<br />
Gesucht: endlicher Akzeptor für die formale Sprache<br />
L = {w ∈ {0, 1} ∗ | in w kommen vor jeder 1 mindestens zwei 0 vor }<br />
0 0<br />
0 1 2<br />
1<br />
1<br />
Q<br />
1<br />
0,1<br />
Deterministische endliche Automaten 22/124<br />
0
2.16 Grenzen endlicher Akzeptoren<br />
Es gibt eine formale Sprache, die von keinem endlichen Akzeptor<br />
erkannt werden kann. Selbst dann, wenn man nur X = {0} erlaubt.<br />
Verschiedene Beweise; z. B.:<br />
1. Es gibt abzählbar unendlich viele („N viele“) endliche<br />
Akzeptoren.<br />
2. Es gibt überabzählbar unendlich viele („R viele“) formale<br />
Sprachen über {0}.<br />
3. Es gibt keine surjektive Abbildung von N auf R (Cantor).<br />
Man lernt aber auch etwas an konkreten Beispielen . . .<br />
Deterministische endliche Automaten 23/124
2.17 Lemma<br />
Die formale Sprache<br />
L ={0 k 1 k | k ∈ N0}<br />
={000 · · · 0111 · · · 1 | Anzahl der 0 und Anzahl der 1 sind gleich}<br />
wird von keinem endlichen Akzeptor erkannt.<br />
Deterministische endliche Automaten 24/124
2.17 Lemma<br />
Die formale Sprache<br />
L ={0 k 1 k | k ∈ N0}<br />
={000 · · · 0111 · · · 1 | Anzahl der 0 und Anzahl der 1 sind gleich}<br />
wird von keinem endlichen Akzeptor erkannt.<br />
◮ L = {ε, 01, 0011, 000111, . . .}<br />
◮ z. B. 00111 /∈ L und 1010 /∈ L<br />
Deterministische endliche Automaten 24/124
2.18 Beweisidee<br />
Mit endlich vielen Zuständen kann man sich nicht jede mögliche<br />
Länge des 0-Blockes merken, und das müsste man ja „irgendwie“<br />
. . .<br />
Deterministische endliche Automaten 25/124
2.19 Beweis<br />
◮ Beweis indirekt<br />
◮ Annahme, es gäbe doch einen endlichen Akzeptor<br />
M = (Z, z0, X , f , F ) mit L(M) = L.<br />
◮ Ziel: Widerspruch<br />
◮ Anzahl Zustände |Z| = m.<br />
Deterministische endliche Automaten 26/124
2.19 Beweis<br />
◮ Beweis indirekt<br />
◮ Annahme, es gäbe doch einen endlichen Akzeptor<br />
M = (Z, z0, X , f , F ) mit L(M) = L.<br />
◮ Ziel: Widerspruch<br />
◮ Anzahl Zustände |Z| = m.<br />
◮ Drei Schritte:<br />
1. Betrachte spezielle Eingabe w = 0 m 1 m .<br />
2. Was genau macht der Automat für diese Eingabe . . . ?<br />
3. Aha! Dann können wir ihn doch „reinlegen“ . . .<br />
Deterministische endliche Automaten 26/124
2.19 Beweis (2)<br />
1. Offensichtlich ist w = 0 m 1 m ∈ L.<br />
Da L(M) = L ist, muss M bei Eingabe w in einen Endzustand<br />
gelangen: f ∗ (z0, w) = zf ∈ F .<br />
Deterministische endliche Automaten 27/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
◮ f ∗∗ (z0, 0 m ) = z0z1 · · · zm.<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
◮ f ∗∗ (z0, 0 m ) = z0z1 · · · zm.<br />
◮ Offensichtlich: f ∗ (zm, 1 m ) = zf ∈ F .<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
◮ f ∗∗ (z0, 0 m ) = z0z1 · · · zm.<br />
◮ Offensichtlich: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Liste z0z1 · · · zm besteht aus m + 1 Zuständen.<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
◮ f ∗∗ (z0, 0 m ) = z0z1 · · · zm.<br />
◮ Offensichtlich: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Liste z0z1 · · · zm besteht aus m + 1 Zuständen.<br />
◮ Aber M hat nur m verschiedene Zustände.<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
◮ f ∗∗ (z0, 0 m ) = z0z1 · · · zm.<br />
◮ Offensichtlich: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Liste z0z1 · · · zm besteht aus m + 1 Zuständen.<br />
◮ Aber M hat nur m verschiedene Zustände.<br />
◮ Also kommt mindestens ein Zustand doppelt vor.<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (3)<br />
2. Betrachte durchlaufene Zustände für Eingabe 0 m :<br />
◮ das sind<br />
◮ z0<br />
◮ f (z0, 0) = z1<br />
◮ f (z1, 0) = z2<br />
◮ . . .<br />
◮ f (zm−1, 0) = zm<br />
◮ f ∗∗ (z0, 0 m ) = z0z1 · · · zm.<br />
◮ Offensichtlich: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Liste z0z1 · · · zm besteht aus m + 1 Zuständen.<br />
◮ Aber M hat nur m verschiedene Zustände.<br />
◮ Also kommt mindestens ein Zustand doppelt vor.<br />
◮ Automat befindet sich in einer Schleife.<br />
Deterministische endliche Automaten 28/124
2.19 Beweis (4)<br />
2. (Forts.) Automat befindet sich in einer Schleife.<br />
◮ Sei zi das erste und zj das zweite Auftreten des ersten<br />
doppelten Zustandes.<br />
◮ Länge der Schleife: ℓ = j − i ≥ 1.<br />
◮ Automat bleibt in Schleife, solange Eingabesymbol 0.<br />
◮ Also ist auch zm−ℓ = zm.<br />
zf<br />
1<br />
· · ·<br />
1<br />
zm+1<br />
· · ·<br />
zj−1<br />
1<br />
0<br />
zm−ℓ = zm<br />
0 0<br />
z0<br />
0<br />
z1<br />
0<br />
· · ·<br />
0<br />
zi = zj<br />
0<br />
0<br />
· · ·<br />
0<br />
zi+1 = zj+1<br />
Deterministische endliche Automaten 29/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m )<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
= f ∗ (zm, 1 m )<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
= f ∗ (zm, 1 m )<br />
= zf ∈ F .<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
= f ∗ (zm, 1 m )<br />
= zf ∈ F .<br />
◮ Also akzeptiert M Eingabe w ′ = 0 m−ℓ 1 m<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
= f ∗ (zm, 1 m )<br />
= zf ∈ F .<br />
◮ Also akzeptiert M Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Aber w ′ /∈ L !<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
= f ∗ (zm, 1 m )<br />
= zf ∈ F .<br />
◮ Also akzeptiert M Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Aber w ′ /∈ L !<br />
◮ Also ist L(M) = L.<br />
Deterministische endliche Automaten 30/124
2.19 Beweis (5)<br />
3. Durchlaufe die Schleife einmal weniger:<br />
◮ betrachte Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Was macht der Akzeptor?<br />
◮ Nach Präfix 0 m−ℓ ist er in Zustand zm−ℓ und zm−ℓ = zm.<br />
◮ Wir wissen: f ∗ (zm, 1 m ) = zf ∈ F .<br />
◮ Also:<br />
f ∗ (z0, 0 m−ℓ 1 m ) = f ∗ (f ∗ (z0, 0 m−ℓ ), 1 m )<br />
= f ∗ (zm−ℓ, 1 m )<br />
= f ∗ (zm, 1 m )<br />
= zf ∈ F .<br />
◮ Also akzeptiert M Eingabe w ′ = 0 m−ℓ 1 m<br />
◮ Aber w ′ /∈ L !<br />
◮ Also ist L(M) = L.<br />
◮ Widerspruch!<br />
Deterministische endliche Automaten 30/124
2.20 Beispiel<br />
Die formale Sprache<br />
L = {0 k 1 i 0 k 1 j | i, j, k ∈ N}<br />
wird von keinem endlichen Akzeptor erkannt.<br />
Deterministische endliche Automaten 31/124
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Reguläre Ausdrücke 32/124
Ziel<br />
◮ Definition regulärer Ausdruck<br />
◮ Definition der dadurch beschriebenen formalen Sprache<br />
◮ Zusammenhang mit endlichen Akzeptoren, Teil 1<br />
Reguläre Ausdrücke 33/124
2.21 Definition<br />
◮ Alphabet A enthalte keines der fünf Zeichen aus<br />
Z = {|, (, ), *, O/}<br />
◮ regulärer Ausdruck über A: Zeichenfolge über Alphabet A ∪ Z,<br />
die gewissen Vorschriften genügt.<br />
◮ Die Menge der regulären Ausdrücke ist wie folgt festgelegt:<br />
◮ O/ ist ein regulärer Ausdruck.<br />
◮ Für jedes a ∈ A ist a ein regulärer Ausdruck.<br />
◮ Wenn R1 und R2 reguläre Ausdrücke sind,<br />
dann auch (R1|R2) und (R1R2).<br />
◮ Wenn R ein regulärer Ausdruck ist, dann auch (R*).<br />
◮ Nichts anderes sind reguläre Ausdrücke.<br />
(Nur das, was man in<br />
◮ endlich vielen Schritten<br />
◮ aus den atomaren regulären Ausdrücken<br />
◮ gemäß obigen Regeln<br />
konstruieren kann.)<br />
Reguläre Ausdrücke 34/124
Reguläre Ausdrücke (Forts.)<br />
Klammervereinfachungsregeln:<br />
◮ „Stern vor Punkt“ und „Punkt vor Strich“:<br />
R1|R2R3* statt (R1|(R2(R3*)))<br />
◮ „links vor rechts“:<br />
R1|R2|R3 statt ((R1|R2)|R3)<br />
Reguläre Ausdrücke 35/124
2.22 Beispiele<br />
• O/ • 0 • 1<br />
• (01) • ((01)0) • (((01)0)0) • ((01)(00))<br />
• (O/|1) • (0|1) • ((0(0|1))|1) • (0|(1|(0|0)))<br />
• (O/*) • (0*) • ((10)(1*)) • (((10)1)*)<br />
• ((0*)*) • (((((01)1)*)*)|(O/*))<br />
Mit Klammereinsparungsregeln:<br />
• 01 • 010 • 0100 • 01(00)<br />
• O/|1 • 0|1 • 0(0|1)|1 • (0|(1|(0|0)))<br />
• O/* • 0* • 101* • (101)*<br />
• 0** • (011)**|O/*<br />
Reguläre Ausdrücke 36/124
2.22 Nicht-Beispiele<br />
Das sind z. B. alles keine regulären Ausdrücke über {0, 1}:<br />
◮ (|1)<br />
◮ |O/|<br />
◮ ()01<br />
◮ ((01)<br />
◮ *(01)<br />
◮ 2*<br />
Reguläre Ausdrücke 37/124
2.23 Definition<br />
Von regulärem Ausdruck R beschriebene formale Sprache 〈R〉:<br />
◮ 〈O/〉 = ∅ (leere Menge).<br />
◮ Für a ∈ A ist 〈a〉 = {a}.<br />
◮ Sind R1 und R2 reguläre Ausdrücke, so ist<br />
〈R1|R2〉 = 〈R1〉 ∪ 〈R2〉.<br />
◮ Sind R1 und R2 reguläre Ausdrücke, so ist<br />
〈R1R2〉 = 〈R1〉 · 〈R2〉.<br />
◮ Ist R ein regulärer Ausdruck, so ist 〈R*〉 = 〈R〉 ∗ .<br />
Falls w ∈ 〈R〉 ist, sagt man auch<br />
„w passt zu dem Muster R“ oder „R matcht w“.<br />
Reguläre Ausdrücke 38/124
2.24 Beispiele<br />
◮ R = 0|1: Dann ist<br />
〈R〉 = 〈0|1〉 = 〈0〉 ∪ 〈1〉 = {0} ∪ {1} = {0, 1}.<br />
◮ R = (0|1)*: Dann ist<br />
〈R〉 = 〈(0|1)*〉 = 〈0|1〉 ∗ = {0, 1} ∗ .<br />
◮ R = (0*1*)*: Dann ist<br />
〈R〉 = 〈(0*1*)*〉 = 〈0*1*〉 ∗ = (〈0*〉〈1*〉) ∗ = (〈0〉 ∗ 〈1〉 ∗ ) ∗ =<br />
({0} ∗ {1} ∗ ) ∗ .<br />
NB: {0, 1} ∗ = ({0} ∗ {1} ∗ ) ∗ , aber die<br />
regulären Ausdrücke (0|1)* und (0*1*)* sind verschieden!<br />
Reguläre Ausdrücke 39/124
2.25<br />
Man kann eine formale Sprache durch verschiedene reguläre<br />
Ausdrücke beschreiben — wenn sie denn überhaupt so beschreibbar<br />
ist.<br />
Fragen:<br />
1. Welche formalen Sprachen sind denn durch reguläre Ausdrücke<br />
beschreibbar?<br />
2. Kann man algorithmisch von zwei beliebigen regulären<br />
Ausdrücken R1, R2 feststellen, ob sie die gleiche formale<br />
Sprache beschreiben, d. h. ob 〈R1〉 = 〈R2〉 ist?<br />
Reguläre Ausdrücke 40/124
2.26 Äquivalenz regulärer Ausdrücke<br />
◮ Das Problem ist PSPACE-vollständig (was auch immer das<br />
sei).<br />
◮ Alle bisher bekannten Algorithmen sind sehr sehr langsam: die<br />
Rechenzeit wächst „stark exponentiell“ (z. B. wie 2n2 o.ä.) mit<br />
der Länge n der regulären Ausdrücke.<br />
◮ Man weiß nicht, ob es signifikant schnellere Algorithmen für<br />
das Problem gibt, aber man sie „nur“ noch nicht gefunden hat.<br />
Reguläre Ausdrücke 41/124
2.27 Satz<br />
Für jede formale Sprache L sind die folgenden beiden Aussagen<br />
äquivalent:<br />
◮ L kann von einem endlichen Akzeptor erkannt werden.<br />
◮ L kann durch einen regulären Ausdruck beschrieben werden.<br />
Reguläre Ausdrücke 42/124
2.27 Satz<br />
Für jede formale Sprache L sind die folgenden beiden Aussagen<br />
äquivalent:<br />
◮ L kann von einem endlichen Akzeptor erkannt werden.<br />
◮ L kann durch einen regulären Ausdruck beschrieben werden.<br />
Die eine Hälfte beweisen wir gleich, die andere später.<br />
Reguläre Ausdrücke 42/124
2.28 Definition<br />
Eine reguläre Sprache ist eine formale Sprache, die die<br />
Eigenschaften aus Satz 2.27 hat.<br />
Reguläre Ausdrücke 43/124
2.29 Lemma<br />
Für jeden endlichen Akzeptor M ist L(M) durch einen regulären<br />
Ausdruck beschreibbar.<br />
Reguläre Ausdrücke 44/124
2.30 Beweisskizze<br />
Nun<br />
◮ M = (Z, z0, X , f , F ) endlicher Akzeptor mit m = |Z|<br />
Zuständen<br />
◮ Zustände: z0, z1, . . . , zm−1<br />
◮ Für 0 ≤ k ≤ m sei Zk = {zℓ | ℓ < k}<br />
◮ also ist z. B. Z0 = ∅ und Zm = Z<br />
◮ definiere für alle i, j ∈ {0, 1, . . . , m − 1} und alle<br />
k ∈ {0, 1, . . . , m} die formale Sprache<br />
L k <br />
ij = w ∈ X ∗<br />
<br />
<br />
f ∗∗ (zi, w) ∈ {zi}Z ∗ k {zj}<br />
<br />
∨ (i = j ∧ w = ε)<br />
Beachte: das hochgestellte k soll keine Potenz, sondern ein dritter<br />
„Index“ sein.<br />
Reguläre Ausdrücke 45/124
2.30 Beweisskizze (2)<br />
Es gilt:<br />
1. L(M) kann man als Vereinigung einiger L k ij ausdrücken.<br />
2. Jede Sprache L k ij kann man durch einen regulären Ausdruck Rk ij<br />
beschreiben.<br />
Das geht so:<br />
1. Bezeichnet IF die Menge der Indizes der akzeptierenden<br />
Zustände, so ist<br />
L(M) = <br />
L m 0j .<br />
2. Beweis durch Induktion über k.<br />
j∈IF<br />
Reguläre Ausdrücke 46/124
2.30 Beweisskizze (3)<br />
◮ Als erstes überlegt man sich, wie die Sprachen L 0 ij aussehen:<br />
L 0 ij = {w ∈ X ∗ | f ∗∗ (zi, w) ∈ {zi}Z ∗ 0 {zj} ∨ (i = j ∧ w = ε)}<br />
= {w ∈ X ∗ | f ∗∗ (zi, w) ∈ {zi}{zj} ∨ (i = j ∧ w = ε)}<br />
= {x ∈ X | f (zi, x) = zj} ∪<br />
<br />
{ε} falls i = j<br />
{} falls i = j<br />
◮ Das sind endliche Mengen von Eingabesymbole (und evtl. ε),<br />
◮ also durch reguläre Ausdrücke R 0 ij beschreibbar.<br />
Reguläre Ausdrücke 47/124
2.30 Beweisskizze (3)<br />
◮ Als erstes überlegt man sich, wie die Sprachen L 0 ij aussehen:<br />
L 0 ij = {w ∈ X ∗ | f ∗∗ (zi, w) ∈ {zi}Z ∗ 0 {zj} ∨ (i = j ∧ w = ε)}<br />
= {w ∈ X ∗ | f ∗∗ (zi, w) ∈ {zi}{zj} ∨ (i = j ∧ w = ε)}<br />
= {x ∈ X | f (zi, x) = zj} ∪<br />
<br />
{ε} falls i = j<br />
{} falls i = j<br />
◮ Das sind endliche Mengen von Eingabesymbole (und evtl. ε),<br />
◮ also durch reguläre Ausdrücke R 0 ij beschreibbar.<br />
◮ Und für k > 0 gilt folgende Gleichung:<br />
Also ist dann<br />
L k ij = L k−1<br />
ij<br />
R k ij = (R k−1<br />
ij<br />
∪ Lk−1<br />
i,k−1 (Lk−1<br />
k−1,k−1 )∗L k−1<br />
k−1,j<br />
| (R k−1<br />
i,k−1 (Rk−1<br />
k−1,k−1 )* Rk−1<br />
k−1,j ))<br />
und man kann ausgehend von den R0 ij sukzessive die R1 ij , die<br />
R2 ij , usw. bis zu den Rm ij konstruieren.<br />
Reguläre Ausdrücke 47/124
2.31 Warum so spartanisch?<br />
◮ Frage: Warum nicht auch Symbole für die<br />
mengentheoretischen Operationen Durchschnitt und<br />
Komplementbildung in regulären Ausdrücken?<br />
◮ Man könnte ja zum Beispiel Definition 2.22 um den Punkt<br />
◮ Wenn R ein regulärer Ausdruck ist, dann auch (^R).<br />
erweitern und Definition 2.24 um<br />
◮ Ist R ein regulärer Ausdruck, so ist 〈(^R)〉 = A ∗ 〈R〉.<br />
◮ Antwort: Das ist überflüssig.<br />
Reguläre Ausdrücke 48/124
2.32 Satz<br />
Sind L1 und L2 reguläre Sprachen über einem Alphabet A, dann<br />
sind auch A ∗ L1 und L1 ∩ L2 reguläre Sprachen.<br />
Reguläre Ausdrücke 49/124
2.33 Beweis<br />
Benutze die Charakterisierung über endliche Akzeptoren.<br />
Es seien M1 = (Z1, A, f1, F1, z01) resp. M2 = (Z2, A, f2, F2, z02)<br />
endliche Akzeptoren von L1 resp. L2.<br />
◮ Komplement:<br />
endlicher Akzeptor M ′ für A ∗ L1:<br />
muss genau dann akzeptieren, wenn M1 nicht akzeptiert.<br />
Reguläre Ausdrücke 50/124
2.33 Beweis<br />
Benutze die Charakterisierung über endliche Akzeptoren.<br />
Es seien M1 = (Z1, A, f1, F1, z01) resp. M2 = (Z2, A, f2, F2, z02)<br />
endliche Akzeptoren von L1 resp. L2.<br />
◮ Komplement:<br />
endlicher Akzeptor M ′ für A ∗ L1:<br />
muss genau dann akzeptieren, wenn M1 nicht akzeptiert.<br />
Also leistet M ′ = (Z1, A, f1, Z1 F1, z01) das Gewünschte.<br />
Reguläre Ausdrücke 50/124
2.33 Beweis (2)<br />
◮ Durchschnitt:<br />
◮ Konstruiere M = (Z, z0, A, f , F ) mit L(M) = L1 ∩ L2.<br />
◮ Idee: beide Akzeptoren M1 und M2 „parallel“ laufen lassen.<br />
◮ M „merkt sich“ immer sowohl den Zustand, in dem M1 nach<br />
einer Eingabe wäre, als auch den, in dem M2 danach wäre:<br />
◮ Z = Z1 × Z2 = {(z1, z2) | z1 ∈ Z1 ∧ z2 ∈ Z2};<br />
◮ z0 = (z01, z02).<br />
◮ für alle (z1, z2) ∈ Z und alle a ∈ A:<br />
f ((z1, z2), a) = (f1(z1, a), f2(z2, a)),<br />
denn M soll die Arbeit beider Akzeptoren Mi nachvollziehen;<br />
◮ F = F1 × F2, denn M soll genau dann akzeptieren, wenn ein<br />
Eingabewort in L1 ∩ L2 liegt, also wenn beide Akzeptoren Mi<br />
es akzeptieren.<br />
Reguläre Ausdrücke 51/124
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Grammatiken 52/124
2.34 Definition<br />
(erzeugende) Grammatik G = (N, T , S, P); dabei<br />
◮ N Alphabet der Nichtterminalsymbole,<br />
◮ T Alphabet der Terminalsymbole, zu N disjunkt,<br />
◮ S ∈ N ausgezeichnetes Startsymbol und<br />
◮ P ⊂ V ∗ NV ∗ × V ∗ endliche Menge von Produktionen.<br />
Abkürzung: V = N ∪ T .<br />
Produktion:<br />
◮ (v, w) ∈ P, meist geschrieben als v → w<br />
◮ linke Seite v ∈ V ∗ NV ∗ muss Nichtterminalsymbol enthalten<br />
◮ rechte Seite w ∈ V ∗ beliebig<br />
◮ gelesen: „v geht über in w“, „v wird ersetzt durch w“, o.ä.<br />
Grammatiken 53/124
2.35 Abkürzung<br />
◮ statt v → w1, v → w2, v → w3<br />
◮ kürzer v → w1|w2|w3<br />
Grammatiken 54/124
2.36 Beispiel<br />
G = (N, T , S, P) mit<br />
◮ N = {X }<br />
◮ T = {0, 1}<br />
◮ S = X<br />
◮ P = {X → 01, X → 0X 1} = {X → 01|0X 1}<br />
Grammatiken 55/124
2.37 Beispiel<br />
G = ({B, Q, S, X , Y , Z}, {a}, S, P) mit<br />
⎧<br />
⎫<br />
⎪⎨<br />
S → aXBZ,<br />
⎪⎬<br />
XB → Q, QB → Q, QZ → ε,<br />
P =<br />
⎪⎩<br />
XB → aXYB, YB → aaBY , YZ → BZ, ⎪⎭<br />
X a → aX , Ba → aB<br />
Wofür auch immer dieses Kauderwelsch gut sein mag . . .<br />
Grammatiken 56/124
2.38 Beispiel<br />
G = (N, T , S, P) mit<br />
◮ N = {Xz, Xm, Xv , Xn, Xe, Xb}<br />
◮ T = {0, 1, -, ., E}<br />
◮ S = Xz<br />
◮ P = { Xz → XmXv XnXe<br />
Xm → - | ε<br />
Xv → Xb<br />
Xn → .Xb | ε<br />
Xe → EXmXb | ε<br />
Xb → 0Xb | 1Xb | 0 | 1<br />
}<br />
Grammatiken 57/124
2.38 Beispiel: besser<br />
lesbare Form mit Folgen deutscher Buchstaben umgeben von<br />
spitzen Klammern als einzelnen Nichtterminalsymbolen:<br />
◮ N = { 〈zahl〉, 〈opt.minus〉, 〈vorkomma〉, 〈opt.nachkomma〉,<br />
〈opt.exponent〉, 〈bitfolge〉 }<br />
◮ T = {0, 1, -, ., E}<br />
◮ S = 〈zahl〉<br />
◮ P = { 〈zahl〉 → 〈opt.minus〉〈vorkomma〉·<br />
·〈opt.nachkomma〉〈opt.exponent〉<br />
〈opt.minus〉 → - | ε<br />
〈vorkomma〉 → 〈bitfolge〉<br />
〈opt.nachkomma〉 → .〈bitfolge〉 | ε<br />
〈opt.exponent〉 → E〈opt.minus〉〈bitfolge〉 | ε<br />
〈bitfolge〉 → 0〈bitfolge〉 | 1〈bitfolge〉 | 0 | 1<br />
}<br />
Grammatiken 58/124
2.39 Definition<br />
Es sei G = (N, T , S, P) eine Grammatik und w1, w2 ∈ V ∗<br />
◮ w1 ⇒ w2,<br />
falls es Wörter u, u ′ ∈ V ∗ und Produktion v → w gibt, so dass<br />
w1 = uvu ′ und w2 = uwu ′ ist.<br />
Gelegentlich deutlicher: uvu ′ ⇒ uwu ′ .<br />
◮ w1 ⇒ ∗ w2, falls<br />
Also:<br />
◮ w1 = w2 oder<br />
◮ es gibt ein w ∈ V ∗ mit w1 ⇒ ∗ w und w ⇒ w2<br />
◮ Wenn w1 ⇒ w2, dann w1 ⇒ ∗ w2<br />
◮ w1 ⇒ ∗ w2, falls man in endlich vielen Schritten<br />
mit ⇒ von w1 zu w2 kommt.<br />
◮ Wenn w1 ⇒ ∗ w2 und w2 ⇒ ∗ w3, dann auch w1 ⇒ ∗ w3.<br />
◮ ⇒ ∗ ist die reflexiv-transitive Hülle von ⇒.<br />
Grammatiken 59/124
2.40 Beispiel<br />
Grammatik aus 2.38:<br />
Xz ⇒ XmXv XnXe<br />
⇒ -Xv XnXe<br />
⇒ -Xv εXe<br />
⇒ -XbXe<br />
⇒ -1XbXe<br />
⇒ -10XbXe<br />
⇒ -101Xe<br />
⇒ -101<br />
und deswegen also Xz ⇒ ∗ -101<br />
Grammatiken 60/124
2.40 Beispiel (Fortsetzung)<br />
Was kann man aus Xb mit den Produktionen<br />
Xb → 0Xb | 1Xb | 0 | 1 ableiten?<br />
◮ Xb ⇒ 0 und Xb ⇒ 1.<br />
◮ Xb ⇒ 0Xb ⇒ 00 und Xb ⇒ 0Xb ⇒ 01 sowie<br />
Xb ⇒ 1Xb ⇒ 10 und Xb ⇒ 1Xb ⇒ 11.<br />
◮ „und so weiter“.<br />
Genauer gesagt:<br />
Für jedes k ∈ N und jedes Wort w ∈ {0, 1} k gilt Xb ⇒ ∗ w und<br />
Xb ⇒ ∗ wXb.<br />
Grammatiken 61/124
2.40 Beispiel (Fortsetzung)<br />
Behauptung:<br />
Für alle k ∈ N und alle w ∈ {0, 1} k gilt: Xb ⇒ ∗ w und<br />
Xb ⇒ ∗ wXb.<br />
◮ Induktionsanfang k = 1:<br />
„offensichtlich“ richtig.<br />
◮ Induktionsschritt k ❀ k + 1:<br />
betrachte beliebiges w = w ′ x ∈ {0, 1} k {0, 1}. Zeige:<br />
◮ Xb ⇒ ∗ w<br />
◮ Xb ⇒ ∗ wXb<br />
Induktionsvoraussetzung: Xb ⇒ ∗ w ′ Xb.<br />
◮ Da Xb → x Produktion, gilt auch w ′ Xb ⇒ w ′ x, also Xb ⇒ ∗ w.<br />
◮ Außerdem ist Xb → xXb Produktion. Folglich:<br />
Xb ⇒ ∗ w ′ Xb ⇒ w ′ xXb = wXb.<br />
Grammatiken 62/124
2.41 Definition<br />
Die von einer Grammatik G = (N, T , S, P) erzeugte Sprache ist<br />
L(G) = {w ∈ T ∗ | S ⇒ ∗ w}.<br />
Beachte: nur Wörter aus Terminalsymbolen werden aufgenommen.<br />
Grammatiken 63/124
2.42 Beispiel<br />
G = ({X }, {0, 1}, X , {X → 01, X → 0X 1}.<br />
◮ Ableitung eines Terminalwortes muss mit Produktion X → 01<br />
enden.<br />
◮ Vorher muss man (wenn überhaupt) stets Produktion<br />
X → 0X 1 anwenden.<br />
◮ Wenn das k − 1 mal geschieht, ergibt sich<br />
X ⇒ 0X 1 ⇒ 00X 11 ⇒ · · · ⇒ 0 k−1 X 1 k−1 ⇒ 0 k 1 k .<br />
◮ Also ist L(G) = {0 k 1 k | k ∈ N}.<br />
◮ Vgl. 2.17: Sprache wird von keinem endlichen Akzeptor<br />
erkannt.<br />
◮ Man kann mit Grammatiken formale Sprachen spezifizieren<br />
(erzeugen), die man mit endlichen Akzeptoren nicht<br />
spezifizieren (erkennen) kann.<br />
Grammatiken 64/124
2.43 Beispiel<br />
Grammatik aus 2.37<br />
Was kann man mit<br />
⎧<br />
⎫<br />
⎪⎨<br />
S → aXBZ,<br />
⎪⎬<br />
XB → Q, QB → Q, QZ → ε,<br />
P =<br />
ableiten?<br />
⎪⎩<br />
XB → aXYB, YB → aaBY , YZ → BZ, ⎪⎭<br />
X a → aX , Ba → aB<br />
Behauptungen:<br />
◮ Für alle k ∈ N gilt: XB k Z ⇒ ∗ ε.<br />
◮ Für alle k ∈ N gilt: XB k Z ⇒ ∗ a 2k+1 XB k+1 Z.<br />
◮ Für alle k ∈ N gilt: ak2XBk Z ⇒∗ a (k+1)2XBk+1Z.<br />
◮ L(G) = {a k2<br />
| k ∈ N}.<br />
Grammatiken 65/124
2.44 Beispiel<br />
Betrachte G = (N, T , S, P) mit<br />
◮ N = {X0, X1, X2, X3, X4, X5, X6, X7}<br />
◮ T = {0, 1, -, ., E}<br />
◮ S = X0<br />
◮ P = { X0 → -X1 | X1<br />
X1 → 0X2 | 1X2<br />
X2 → 0X2 | 1X2 | ε | X3<br />
X3 → .0X4 | .1X4 | X5<br />
X4 → 0X4 | 1X4 | ε | X5<br />
X5 → E-X6 | EX6<br />
X6 → 0X7 | 1X7<br />
X7 → 0X7 | 1X7 | ε<br />
}<br />
Grammatiken 66/124
Scharfes Hinsehen ergibt<br />
◮ Auch diese Grammatik erzeugt die formale Sprache gewisser<br />
Zahldarstellungen wie die Grammatik in Beispiel 2.38.<br />
◮ Unterschied zu vorhin:<br />
◮ auf der rechten Seite immer nur ein Nichtterminalsymbol<br />
◮ und außerdem immer am rechten Ende<br />
◮ Also werden bei jeder Ableitung eines terminalen Wortes die<br />
Symbole „der Reihe nach von links nach rechts“ erzeugt.<br />
Grammatiken 67/124
Scharfes Hinsehen ergibt<br />
◮ Auch diese Grammatik erzeugt die formale Sprache gewisser<br />
Zahldarstellungen wie die Grammatik in Beispiel 2.38.<br />
◮ Unterschied zu vorhin:<br />
◮ auf der rechten Seite immer nur ein Nichtterminalsymbol<br />
◮ und außerdem immer am rechten Ende<br />
◮ Also werden bei jeder Ableitung eines terminalen Wortes die<br />
Symbole „der Reihe nach von links nach rechts“ erzeugt.<br />
◮ Ein endlicher Akzeptor liest die Symbole des Eingabewortes<br />
„der Reihe nach von links nach rechts“.<br />
◮ Na?<br />
Grammatiken 67/124
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Typ-3-Grammatiken 68/124
Ziele<br />
◮ Definition des am weitesten eingeschränkten Grammatiktyps<br />
◮ Zusammenhang mit regulären Ausdrücken<br />
Typ-3-Grammatiken 69/124
2.45 Definition<br />
Eine Typ-3-Grammatik ist eine Grammatik, bei der jede Produktion<br />
◮ entweder von der Form X → w<br />
◮ oder von der Form X → wY<br />
ist, wobei w ∈ T ∗ und X , Y ∈ N.<br />
Sprechweisen: rechtslineare Produktionen und rechtslineare<br />
Grammatiken<br />
Typ-3-Grammatiken 70/124
2.48 Satz<br />
Für jede formale Sprache L sind die folgenden drei Aussagen<br />
äquivalent:<br />
1. L kann von einem endlichen Akzeptor erkannt werden.<br />
2. L kann durch einen regulären Ausdruck beschrieben werden.<br />
3. L kann von einer Typ-3-Grammatik erzeugt werden.<br />
Typ-3-Grammatiken 71/124
2.49 Lemma<br />
Wird eine formale Sprache L von einem endlichen Akzeptor erkannt,<br />
dann kann sie auch von einer Typ-3-Grammatik erzeugt werden.<br />
Typ-3-Grammatiken 72/124
2.50 Beweisskizze<br />
Es sei M = (Z, z0, X , f , F ) ein endlicher Akzeptor.<br />
Definiere G = (N, T , S, P) wie folgt:<br />
◮ N = {Xz | z ∈ Z}<br />
◮ T = X<br />
◮ S = Xz0<br />
◮ P = {Xz → xXz ′ | f (z, x) = z′ } ∪ {Xz → ε | z ∈ F }.<br />
Typ-3-Grammatiken 73/124
2.50 Beweisskizze<br />
Es sei M = (Z, z0, X , f , F ) ein endlicher Akzeptor.<br />
Definiere G = (N, T , S, P) wie folgt:<br />
◮ N = {Xz | z ∈ Z}<br />
◮ T = X<br />
◮ S = Xz0<br />
◮ P = {Xz → xXz ′ | f (z, x) = z′ } ∪ {Xz → ε | z ∈ F }. M.a.W.:<br />
◮ Wenn M bei Eingabe x von Zustand z in Zustand z ′ übergeht,<br />
Typ-3-Grammatiken 73/124
2.50 Beweisskizze<br />
Es sei M = (Z, z0, X , f , F ) ein endlicher Akzeptor.<br />
Definiere G = (N, T , S, P) wie folgt:<br />
◮ N = {Xz | z ∈ Z}<br />
◮ T = X<br />
◮ S = Xz0<br />
◮ P = {Xz → xXz ′ | f (z, x) = z′ } ∪ {Xz → ε | z ∈ F }. M.a.W.:<br />
◮ Wenn M bei Eingabe x von Zustand z in Zustand z ′ übergeht,<br />
◮ dann und nur dann<br />
Typ-3-Grammatiken 73/124
2.50 Beweisskizze<br />
Es sei M = (Z, z0, X , f , F ) ein endlicher Akzeptor.<br />
Definiere G = (N, T , S, P) wie folgt:<br />
◮ N = {Xz | z ∈ Z}<br />
◮ T = X<br />
◮ S = Xz0<br />
◮ P = {Xz → xXz ′ | f (z, x) = z′ } ∪ {Xz → ε | z ∈ F }. M.a.W.:<br />
◮ Wenn M bei Eingabe x von Zustand z in Zustand z ′ übergeht,<br />
◮ dann und nur dann<br />
◮ erlaubt die Grammatik die Erzeugung von x beim Übergang<br />
vom Nichtterminalsymbol Xz zum Nichtterminalsymbol Xz ′<br />
Typ-3-Grammatiken 73/124
2.50 Beweisskizze<br />
Es sei M = (Z, z0, X , f , F ) ein endlicher Akzeptor.<br />
Definiere G = (N, T , S, P) wie folgt:<br />
◮ N = {Xz | z ∈ Z}<br />
◮ T = X<br />
◮ S = Xz0<br />
◮ P = {Xz → xXz ′ | f (z, x) = z′ } ∪ {Xz → ε | z ∈ F }. M.a.W.:<br />
◮ Wenn M bei Eingabe x von Zustand z in Zustand z ′ übergeht,<br />
◮ dann und nur dann<br />
◮ erlaubt die Grammatik die Erzeugung von x beim Übergang<br />
vom Nichtterminalsymbol Xz zum Nichtterminalsymbol Xz ′<br />
Man müsste nun beweisen, dass L(G) = L(M) ist,<br />
Typ-3-Grammatiken 73/124
2.50 Beweisskizze<br />
Es sei M = (Z, z0, X , f , F ) ein endlicher Akzeptor.<br />
Definiere G = (N, T , S, P) wie folgt:<br />
◮ N = {Xz | z ∈ Z}<br />
◮ T = X<br />
◮ S = Xz0<br />
◮ P = {Xz → xXz ′ | f (z, x) = z′ } ∪ {Xz → ε | z ∈ F }. M.a.W.:<br />
◮ Wenn M bei Eingabe x von Zustand z in Zustand z ′ übergeht,<br />
◮ dann und nur dann<br />
◮ erlaubt die Grammatik die Erzeugung von x beim Übergang<br />
vom Nichtterminalsymbol Xz zum Nichtterminalsymbol Xz ′<br />
Man müsste nun beweisen, dass L(G) = L(M) ist, also<br />
◮ L(G) ⊇ L(M), d. h. G erzeugt alle „richtigen“ Wörter<br />
◮ L(G) ⊆ L(M), d. h. G erzeugt keine „falschen“ Wörter<br />
Typ-3-Grammatiken 73/124
2.52 Lemma<br />
Sind G1 = (N1, T1, X01, P1) und G2 = (N2, T2, X02, P2) zwei T3G,<br />
dann gibt es T3G GV , GK und GS, so dass gilt:<br />
a) L(GV ) = L(G1) ∪ L(G2)<br />
b) L(GK ) = L(G1)L(G2)<br />
c) L(GS) = L(G1) ∗<br />
Typ-3-Grammatiken 74/124
2.53 Beweisskizze<br />
O. B. d. A. seien N1 und N2 disjunkt.<br />
a) Man wählt ein „neues“ Nichtterminalsymbol XV und setzt<br />
GV = (NV , TV , XV , PV ) mit NV = N1 ∪ N2 ∪ {XV },<br />
TV = T1 ∪ T2, und PV = P1 ∪ P2 ∪ {X → X01|X02}.<br />
b) Man setzt GK = (NK , TK , X01, PK ) mit NK = N1 ∪ N2,<br />
TK = T1 ∪ T2, und<br />
PK = ((P1 ∪ P2) {X → w | w ∈ T ∗ 1 ∧ X → w ∈ P1})<br />
∧ X → w ∈ P1}.<br />
∪{X → wX02 | w ∈ T ∗ 1<br />
c) GS kann man nach einer ähnlichen Idee konstruieren wir GK :<br />
Übungsaufgabe.<br />
Beachte: Die Disjunktheit von N1 und N2 ist wichtig!<br />
Typ-3-Grammatiken 75/124
2.54 Korollar<br />
Zu jedem regulären Ausdruck R gibt es eine Typ-3-Grammatik G<br />
mit L(G) = 〈R〉.<br />
Typ-3-Grammatiken 76/124
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Nichtdeterministische endliche Automaten 77/124
Ziele<br />
◮ Definition dieser Verallgemeinerung von DEA<br />
◮ Zusammenhang mit T3G und DEA<br />
Nichtdeterministische endliche Automaten 78/124
2.56 Definition<br />
Für eine Menge Z bezeichne 2 Z die Potenzmenge von Z, d. h.<br />
die Menge, deren Elemente gerade die Teilmengen von Z sind.<br />
Nichtdeterministische endliche Automaten 79/124
2.57 Beispiel<br />
1. Ist Z = {0}, dann ist 2 Z = {∅, {0}}.<br />
2. Ist Z = {0, 1}, dann ist 2 Z = {∅, {0}, {1}, {0, 1}}.<br />
3. Ist Z = {0, 1, 2}, dann ist<br />
2 Z = {∅, {0}, {1}, {2}, {0, 1}, {0, 2}, {1, 2}, {0, 1, 2}}.<br />
4. Ist Z = ∅, dann ist 2 Z = {∅}.<br />
Schreibweise 2 Z :<br />
Für eine endliche Menge Z mit n Elementen<br />
hat ihre Potenzmenge gerade 2 n Elemente: 2 Z = 2 |Z| .<br />
Nichtdeterministische endliche Automaten 80/124
2.58 Definition<br />
Ein nichtdeterministischer endlicher Akzeptor (kurz NEA)<br />
N = (Z, z0, X , g, F ) ist festgelegt durch:<br />
◮ eine endliche Zustandsmenge Z,<br />
◮ einen Anfangszustand z0 ∈ Z,<br />
◮ ein Eingabealphabet X ,<br />
◮ eine Menge F ⊆ Z akzeptierender Zustände und<br />
◮ eine Überführungsfunktion g : Z × X ∗ → 2 Z ,<br />
wobei nur für endlich viele Paare (z, w) gilt: g(z, w) = ∅.<br />
Nichtdeterministische endliche Automaten 81/124
2.60 Interpretation<br />
Es sei g(z, w) = {z1, . . . , zk}.<br />
Dies bedeutet, dass der NEA von Zustand z bei Eingabe von w<br />
◮ in den Zustand z1 übergehen kann oder<br />
◮ in den Zustand z2 übergehen kann oder<br />
◮ usw. . . . oder<br />
◮ in den Zustand zk übergehen kann.<br />
Schreibweise: z w<br />
−→ zi<br />
Nichtdeterministische endliche Automaten 82/124
2.60 Interpretation (2)<br />
Beachte:<br />
◮ |g(z, w)| ≥ 2: neuer Zustand nicht eindeutig,<br />
nichtdeterministischer endlicher Akzeptor (NEA)<br />
◮ g(z, w) = ∅: NEA kann dann in keinen neuen Zustand<br />
übergehen.<br />
◮ |w| ≥ 2: Übergang nur für ganze Folge von Eingabezeichen<br />
◮ |w| = ε: „spontaner“ Zustandsübergang<br />
Nichtdeterministische endliche Automaten 83/124
2.61 Beispiel<br />
◮ Z = {0, 1, 2}<br />
◮ Anfangszustand 0<br />
◮ X = {0, 1}<br />
◮ F = Z<br />
◮ Überführungsfunktion:<br />
0 1 2<br />
0 {1} {2} {2}<br />
1 ∅ ∅ {0}<br />
1<br />
0 0<br />
0 1 2<br />
Nichtdeterministische endliche Automaten 84/124<br />
0
2.61 Beispiel<br />
◮ Z = {0, 1, 2}<br />
◮ Anfangszustand 0<br />
◮ X = {0, 1}<br />
◮ F = Z<br />
◮ Überführungsfunktion:<br />
0 1 2<br />
0 {1} {2} {2}<br />
1 ∅ ∅ {0}<br />
Beachte:<br />
◮ Alle Zustände sind akzeptierend,<br />
◮ aber es werden nicht alle Wörter akzeptiert!<br />
1<br />
0 0<br />
0 1 2<br />
Nichtdeterministische endliche Automaten 84/124<br />
0
2.64 Definition<br />
Für z1, z2 ∈ Z und w ∈ X ∗ schreibt man z1 w<br />
−→ ∗ z2 falls<br />
◮ z1 = z2 und w = ε ist oder<br />
◮ es z ′ ∈ Z und w ′ , w ′′ ∈ X ∗ gibt mit w = w ′ w ′′ und<br />
w ′<br />
z1 −→ ∗ z ′ w ′′<br />
−→ z2<br />
Damit ist g ∗ : Z × X ∗ → 2Z definiert durch<br />
g ∗ (z1, w) = {z2 | z1 w<br />
−→ ∗ z2} .<br />
Nichtdeterministische endliche Automaten 85/124
2.65 Definition<br />
Von nichtdeterministischem endlichen Automaten N erkannte<br />
Sprache:<br />
L(N) = {w ∈ X ∗ | g ∗ (z0, w) ∩ F = ∅}<br />
Das sind alle Wörter, bei deren Eingabe N vom Anfangszustand z0<br />
in einen akzeptierenden Zustand z ∈ F übergehen kann.<br />
Nichtdeterministische endliche Automaten 86/124
2.65 Definition<br />
Von nichtdeterministischem endlichen Automaten N erkannte<br />
Sprache:<br />
L(N) = {w ∈ X ∗ | g ∗ (z0, w) ∩ F = ∅}<br />
Das sind alle Wörter, bei deren Eingabe N vom Anfangszustand z0<br />
in einen akzeptierenden Zustand z ∈ F übergehen kann.<br />
Äquivalent ist<br />
L(N) = {w ∈ X ∗ | ∃zf ∈ F : z0 w<br />
−→ ∗ zf }<br />
Nichtdeterministische endliche Automaten 86/124
2.66 Beispiel<br />
◮ N = ({0, 2, 5}, 0, {0, 1}, g, {2, 5})<br />
◮ Überführungsfunktion:<br />
0 2 5<br />
ε {2, 5} ∅ ∅<br />
01 ∅ {2} ∅<br />
001 ∅ ∅ {5}<br />
Welche Eingabewörter akzeptiert N?<br />
Nichtdeterministische endliche Automaten 87/124<br />
0<br />
ε<br />
ε<br />
2<br />
5<br />
01<br />
001
2.68 Lemma<br />
Zu jeder T3G G gibt es einen NEA N mit L(N) = L(G).<br />
Nichtdeterministische endliche Automaten 88/124
2.69 Beweisskizze<br />
◮ Sei G = (N, T , X0, P) eine T3G, d. h.<br />
jede Produktion ist von einer der Formen X → w oder<br />
X → wY<br />
◮ Konstruiere NEA N = (Z, z0, X , g, F ) wie folgt:<br />
◮ Z = {zX | X ∈ N} ∪ {zf }; dabei ist zf ein „neuer“ Zustand;<br />
◮ z0 = zX0 ;<br />
◮ X = T ;<br />
◮ F = {zf };<br />
◮ g(zX , w) = {zY | X → wY ∈ P} ∪ {zf | X → w ∈ P}.<br />
Nichtdeterministische endliche Automaten 89/124
2.70 Lemma<br />
Zu jedem NEA N gibt es einen DEA M mit L(M) = L(N).<br />
Nichtdeterministische endliche Automaten 90/124
2.70 Lemma<br />
Zu jedem NEA N gibt es einen DEA M mit L(M) = L(N).<br />
Beweis konstruktiv in drei Schritten:<br />
1. Beseitigung von Übergängen z w<br />
−→ z ′ mit |w| ≥ 2;<br />
2. Beseitigung von Übergängen z<br />
ε<br />
−→ z ′ ;<br />
3. Beseitigung von Nichtdeterminismus, d. h. der Fälle<br />
|g(z, w)| ≥ 2 und g(z, w) = ∅.<br />
Nichtdeterministische endliche Automaten 90/124
2.71 Beweisskizze (Schritt 1)<br />
Für w = x1x2 · · · xk wähle man neue Zustände z1, . . . , zk−1 und<br />
ersetze<br />
z w<br />
−→ z ′<br />
durch z x1<br />
−→ z1<br />
x2<br />
−→ z2 · · · zk−1<br />
x k<br />
−→ z ′ :<br />
Nichtdeterministische endliche Automaten 91/124
2.71 Beweisskizze (Schritt 1)<br />
Für w = x1x2 · · · xk wähle man neue Zustände z1, . . . , zk−1 und<br />
ersetze<br />
z w<br />
−→ z ′<br />
0<br />
ε<br />
ε<br />
2<br />
5<br />
durch z x1<br />
−→ z1<br />
01<br />
001<br />
wird zu 0<br />
x2<br />
−→ z2 · · · zk−1<br />
x k<br />
−→ z ′ :<br />
1<br />
1 2<br />
ε<br />
0<br />
ε<br />
0 1<br />
3 4 5<br />
Nichtdeterministische endliche Automaten 91/124<br />
0
2.72 Beweisskizze (Schritt 2)<br />
ε ′ a<br />
−→z ′′ a<br />
füge Übergang z −→ z ′′ hinzu.<br />
◮ Für z ′′ a ε<br />
−→ z−→z ′ füge Übergang z ′′ a<br />
−→ z ′ hinzu.<br />
ε<br />
◮ Entferne z −→ z ′ aus dem NEA.<br />
◮ Für z −→ z<br />
Nichtdeterministische endliche Automaten 92/124
2.72 Beweisskizze (Schritt 2)<br />
ε ′ a<br />
−→z ′′ a<br />
füge Übergang z −→ z ′′ hinzu.<br />
◮ Für z ′′ a ε<br />
−→ z−→z ′ füge Übergang z ′′ a<br />
−→ z ′ hinzu.<br />
ε<br />
◮ Entferne z −→ z ′ aus dem NEA.<br />
◮ Für z −→ z<br />
Falsch! Falsch! Falsch! Falsch! Falsch! Falsch! Falsch! Falsch!<br />
Nichtdeterministische endliche Automaten 92/124
2.72 Beweisskizze (Schritt 2)<br />
ε ′ a<br />
−→z ′′ a<br />
füge Übergang z −→ z ′′ hinzu.<br />
◮ Für z ′′ a ε<br />
−→ z−→z ′ füge Übergang z ′′ a<br />
−→ z ′ hinzu.<br />
ε<br />
◮ Entferne z −→ z ′ aus dem NEA.<br />
◮ Für z −→ z<br />
Falsch! Falsch! Falsch! Falsch! Falsch! Falsch! Falsch! Falsch!<br />
0<br />
1<br />
1 2<br />
ε<br />
0<br />
ε<br />
0 1<br />
3 4 5<br />
0<br />
würde zu 0<br />
0<br />
0<br />
0<br />
1<br />
1 2<br />
0 1<br />
3 4 5<br />
Nichtdeterministische endliche Automaten 92/124<br />
0
2.72 Beweisskizze (Schritt 2): richtig gemacht<br />
Vor Entfernung der ε-Übergänge muss man F vergrößern:<br />
◮ Wenn z<br />
ε<br />
−→ z ′ ein Übergang mit z ′ ∈ F ist,<br />
◮ dann nehme man z zu F hinzu.<br />
0<br />
1<br />
1 2<br />
ε<br />
0<br />
ε<br />
0 1<br />
3 4 5<br />
0<br />
wird zu 0<br />
1<br />
1 2<br />
ε<br />
0<br />
ε<br />
0 1<br />
3 4 5<br />
Nichtdeterministische endliche Automaten 93/124<br />
0
2.72 Beweisskizze (Schritt 2): richtig gemacht<br />
Anschließend Entfernung der ε-Übergänge:<br />
0<br />
1<br />
1 2<br />
ε<br />
0<br />
ε<br />
0 1<br />
3 4 5<br />
0<br />
wird zu 0<br />
0<br />
0<br />
0<br />
1<br />
1 2<br />
0 1<br />
3 4 5<br />
Nichtdeterministische endliche Automaten 94/124<br />
0
2.73 Zum Nachdenken<br />
◮ Vergrößerung von F ändert nichts an der akzeptierten Sprache.<br />
◮ Es wäre falsch, auch die „umgekehrte“ Vergrößerung von F<br />
durchzuführen.<br />
ε<br />
Damit ist gemeint: Ist z −→ z ′ ein Übergang und ist z ∈ F ,<br />
dann kann die Hinzunahme von z ′ zu F dazu führen, dass sich<br />
die vom NEA akzeptierte Sprache ändert.<br />
◮ Entfernung der ε-Übergänge und deren Ersetzung durch<br />
andere Übergänge ändert nichts an der akzeptierten Sprache.<br />
Nichtdeterministische endliche Automaten 95/124
2.74 Beweisskizze (Schritt 3)<br />
◮ Gegeben NEA N = (ZN, z0N, X , g, FN), der schon obige<br />
„Normalisierungsschritte“ durchlaufen hat.<br />
◮ Alle Übergänge sind für einzelne Symbole.<br />
◮ Konstruiere äquivalenten DEA M = (ZM, z0M, X , f , FM)<br />
aber wie?<br />
Nichtdeterministische endliche Automaten 96/124
2.74 Beweisskizze (Schritt 3)<br />
◮ Gegeben NEA N = (ZN, z0N, X , g, FN), der schon obige<br />
„Normalisierungsschritte“ durchlaufen hat.<br />
◮ Alle Übergänge sind für einzelne Symbole.<br />
◮ Konstruiere äquivalenten DEA M = (ZM, z0M, X , f , FM)<br />
wie folgt:<br />
◮ ZM = 2ZN , also die Teilmengen S ⊆ ZN von Zuständen von N.<br />
◮ z0M = {z0N}.<br />
◮ FM = {S ⊂ ZN | S ∩ FN = ∅}.<br />
◮ f : ZM × X → ZM mit f (S, x) = <br />
g(z, x).<br />
z∈S<br />
◮ Es bliebe im wesentlichen zu zeigen, dass für alle S ⊆ ZN und<br />
alle w ∈ X ∗ gilt: g ∗ (S, w) = f ∗ (S, w).<br />
◮ Das ist wirklich nur noch langweilig, also . . .<br />
Nichtdeterministische endliche Automaten 96/124
2.75 Explosion<br />
◮ Bei der eben beschriebenen Konstruktion explodiert die<br />
Zustandszahl.<br />
◮ Wenn der NEA k Zustände hat, dann hat der zugehörige<br />
äquivalente DEA 2 k Zustände.<br />
◮ Für manche regulären Sprachen muss das so sein. Selbst der<br />
kleinste DEA hat für sie so viele Zustände mehr als der<br />
kleinste NEA.<br />
◮ Und solche Beispiele gibt es für beliebig „komplizierte“ reguläre<br />
Sprachen, soll heißen auch solche, die schon<br />
nichtdeterministisch sehr viele Zustände erfordern.<br />
Nichtdeterministische endliche Automaten 97/124
2.76 Zusammenfassung<br />
◮ Zu jedem DEA gibt es einen äquivalenten regulären Ausdruck.<br />
◮ Zu jedem regulären Ausdruck gibt es eine äquivalenten<br />
Typ-3-Grammatik.<br />
◮ Zu jeder Typ-3-Grammatik gibt es einen äquivalenten NEA.<br />
◮ Zu jedem NEA gibt es einen äquivalenten DEA.<br />
Nichtdeterministische endliche Automaten 98/124
Deterministische endliche Automaten<br />
Reguläre Ausdrücke<br />
Grammatiken<br />
Typ-3-Grammatiken<br />
Nichtdeterministische endliche Automaten<br />
Zustandsminimierung endlicher Automaten<br />
Zustandsminimierung endlicher Automaten 99/124
Ziel<br />
ein Algorithmus, der zu jedem DEA M einen DEA M ′ konstruiert,<br />
so dass<br />
◮ L(M) = L(M ′ ) und<br />
◮ unter allen solchen DEA M ′ minimale Zustandszahl hat.<br />
Zustandsminimierung endlicher Automaten 100/124
2.77 Mitteilung<br />
Man kann zeigen: Minimale DEA sind bis auf Isomorphie eindeutig,<br />
d.h. alle minimalen ergeben sich auseinander durch Umbenennung<br />
der Zustände.<br />
Zustandsminimierung endlicher Automaten 101/124
2.78 Beobachtung<br />
◮ Betrachte M = ({A, B, C, D}, A, {0, 1}, f , {A}) mit<br />
f (z, x) = z für alle z und alle x.<br />
Zustandsminimierung endlicher Automaten 102/124
2.78 Beobachtung<br />
◮ Betrachte M = ({A, B, C, D}, A, {0, 1}, f , {A}) mit<br />
f (z, x) = z für alle z und alle x.<br />
◮ Man kann sich auf jeden Fall auf die von z0 aus erreichbaren<br />
Zustände beschränken!<br />
Zustandsminimierung endlicher Automaten 102/124
2.79 Lemma<br />
Es sei M = (Z, z0, X , f , F ) DEA mit z, z ′ ∈ Z<br />
Ist z ′ von z durch Eingabe w erreichbar, d. h. f ∗ (z, w) = z ′ ,<br />
dann gibt es w ′ mit f ∗ (z, w ′ ) = z ′ und |w ′ | ≤ |Z| − 1.<br />
Zustandsminimierung endlicher Automaten 103/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
=⇒ Schleifen<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
=⇒ Schleifen<br />
◮ Vage formuliert: Entferne aus w alle Symbole, die zu Schleifen<br />
gehören.<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
=⇒ Schleifen<br />
◮ Vage formuliert: Entferne aus w alle Symbole, die zu Schleifen<br />
gehören.<br />
◮ Dann ergibt sich w ′ = x ′ 1 · · · x ′ k mit:<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
=⇒ Schleifen<br />
◮ Vage formuliert: Entferne aus w alle Symbole, die zu Schleifen<br />
gehören.<br />
◮ Dann ergibt sich w ′ = x ′ 1 · · · x ′ k mit:<br />
◮ f ∗ (z, w ′ ) = z ′<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
=⇒ Schleifen<br />
◮ Vage formuliert: Entferne aus w alle Symbole, die zu Schleifen<br />
gehören.<br />
◮ Dann ergibt sich w ′ = x ′ 1 · · · x ′ k mit:<br />
◮ f ∗ (z, w ′ ) = z ′<br />
), . . . ,<br />
) enthält keinen Zustand doppelt.<br />
◮ Folge z, z ′ 1 = f ∗ (z, x ′ 1 ), z′ 2 = f ∗ (z, x ′ 1x ′ 2<br />
z ′ n = f ∗ (z, x ′ 1 · · · x ′ k<br />
Zustandsminimierung endlicher Automaten 104/124
2.80 Beweisskizze<br />
◮ Es sei f ∗ (z, w) = z ′ .<br />
◮ Ist |w| < |Z|, dann ist man schon fertig.<br />
◮ Sonst: w = x1 · · · xn mit xi ∈ X und |w| = n ≥ |Z|.<br />
◮ Betrachte Folge z, z1 = f ∗ (z, x1), z2 = f ∗ (z, x1x2), . . . ,<br />
zn = f ∗ (z, x1 · · · xn).<br />
◮ Das sind n + 1 > |Z| Zustände, d. h. mindestens einer kommt<br />
doppelt vor<br />
=⇒ Schleifen<br />
◮ Vage formuliert: Entferne aus w alle Symbole, die zu Schleifen<br />
gehören.<br />
◮ Dann ergibt sich w ′ = x ′ 1 · · · x ′ k mit:<br />
◮ f ∗ (z, w ′ ) = z ′<br />
), . . . ,<br />
◮ Folge z, z ′ 1 = f ∗ (z, x ′ 1 ), z′ 2 = f ∗ (z, x ′ 1x ′ 2<br />
z ′ n = f ∗ (z, x ′ 1 · · · x ′ k ) enthält keinen Zustand doppelt.<br />
◮ Also muss 1 + k ≤ |Z| sein, d. h. |w ′ | < |Z|.<br />
Zustandsminimierung endlicher Automaten 104/124
2.81 Korollar<br />
◮ Um zu prüfen, ob ein Zustand z von z0 aus erreichbar ist,<br />
muss man nur<br />
◮ für die endlich vielen „kurzen“ Wörter<br />
w ∈<br />
|Z|−1<br />
<br />
i=0<br />
überprüfen, ob f ∗ (z0, w) = z ist.<br />
X i<br />
Der folgende Algorithmus ist noch „schlauer“.<br />
Zustandsminimierung endlicher Automaten 105/124
2.82 Algorithmus<br />
S und S ′ speichern jeweils eine Teilmenge aller Zustände des<br />
Automaten:<br />
S ← {z0}<br />
repeat<br />
S ′ ← S<br />
for each (z, x) ∈ S ′ × X do<br />
S ← S ∪ {f (z, x)}<br />
od<br />
until S ′ = S<br />
Achtung: Tippfehler in einer alten Version des Skripts!<br />
Es muss S ← S ∪ {f (z, x)} heißen<br />
(Ist behoben, richtig?)<br />
Zustandsminimierung endlicher Automaten 106/124
2.83 Überlegung<br />
◮ Ein DEA kann sich mit Hilfe seiner Zustände gewisse<br />
Unterschiede bei verarbeiteten Eingaben merken.<br />
◮ Beispiel:<br />
L = {0 k 1 ℓ | k, ℓ ∈ N0}<br />
= {w ∈ {0, 1} ∗ | in w sind alle 0 vor allen 1 }<br />
0<br />
1<br />
0,1<br />
1 0<br />
A B C<br />
◮ Welche Unterschiede muss sich ein DEA merken?<br />
Zustandsminimierung endlicher Automaten 107/124
2.83 Überlegung (2)<br />
◮ Erinnerung: L = {0 k 1 k | k ∈ N} ist nicht regulär.<br />
◮ Jeder hypothetische DEA kann zwei Eingaben w1 = 0m und<br />
w2 = 0m−ℓ nicht unterscheiden,<br />
◮ aber durch Anhängen von w = 1m erhält man<br />
◮ einerseits ein Wort w1w ∈ L und<br />
◮ andererseits ein Wort w2w /∈ L.<br />
◮ Diese Katastrophe ist nur so zu vermeiden:<br />
◮ Wenn es zu w1 und w2 ein w gibt, so dass<br />
w1w ∈ L und w2w /∈ L ist,<br />
◮ dann muss ein DEA, der L erkennt, w1 und w2 unterscheiden,<br />
◮ nämlich dadurch, dass f ∗ (z0, w1) = f ∗ (z0, w2) ist.<br />
Zustandsminimierung endlicher Automaten 108/124
2.83 Überlegung (3)<br />
Beispiel:<br />
L = {0 k 1 ℓ | k, ℓ ∈ N0}<br />
= {w ∈ {0, 1} ∗ | in w sind alle 0 vor allen 1 }<br />
0<br />
1<br />
0,1<br />
1 0<br />
A B C<br />
DEA unterscheidet w1 = 000 und w2 = 01, weil<br />
für w = 0 zwar w1w = 0000 ∈ L ist, aber w2w = 010 /∈ L.<br />
Zustandsminimierung endlicher Automaten 109/124
2.84 Definition<br />
Sind w1, w2 und w drei Wörter, so dass w1w ∈ L und w2w /∈ L,<br />
dann sagen wir, dass (bezüglich L) w1 und w2 von w getrennt<br />
werden.<br />
Zustandsminimierung endlicher Automaten 110/124
2.85 Beobachtung<br />
Es sei L reguläre Sprache, die von DEA M = (Z, . . .) erkannt wird.<br />
Wenn w1 und w2 von einem Wort w getrennt werden,<br />
dann auch von einem Wort w ′ mit einer Länge |w ′ | < |Z|.<br />
Zustandsminimierung endlicher Automaten 111/124
2.86 Definition<br />
Eine Relation R ⊆ M × M auf einer Menge M ist eine<br />
Äquivalenzrelation, falls gilt:<br />
◮ R ist reflexiv:<br />
für alle x ∈ M gilt: (x, x) ∈ R;<br />
◮ R ist symmetrisch:<br />
für alle x, y ∈ M gilt: Wenn (x, y) ∈ R ist, dann ist auch<br />
(y, x) ∈ R;<br />
◮ R ist transitiv:<br />
für alle x, y, z ∈ M gilt: Wenn (x, y) ∈ R und (y, z) ∈ R, dann<br />
auch (x, z) ∈ R.<br />
Zustandsminimierung endlicher Automaten 112/124
2.86 Definition (2)<br />
◮ Schreibweise: häufig Infixnotation mit Symbol wie<br />
z. B. ≡ (oder ≈, . . . ).<br />
Statt (x, y) ∈ R schreibt man also x ≡ y.<br />
◮ Äquivalenzrelation teilt Menge M in Äquivalenzklassen ein.<br />
◮ Äquivalenzklasse von x ∈ M ist [x] = {y | y ≡ x}.<br />
◮ Wenn x ≡ y ist, dann ist [x] = [y] und umgekehrt.<br />
◮ Für die Menge aller Äquivalenzklassen schreibt man auch M/≡.<br />
Zustandsminimierung endlicher Automaten 113/124
2.87 Beispiel<br />
Gleichheit ist Äquivalenzrelation (auf jeder beliebigen Menge), denn<br />
◮ es ist immer x = x,<br />
◮ wenn x = y ist, dann auch y = x, und<br />
◮ wenn x = y ist und y = z, dann ist auch x = z.<br />
In diesem Fall besteht jede Äquivalenzklasse aus nur einem<br />
Element: [x] = {x}.<br />
Zustandsminimierung endlicher Automaten 114/124
2.88 Beispiel<br />
Bezeichne zwei natürliche Zahlen als äquivalent, wenn sie die<br />
gleiche Anzahl von Primfaktoren haben.<br />
◮ Z.B. sind 6 = 2 · 3 und 77 = 7 · 11 äquivalent, weil beide<br />
Produkt zweier Primzahlen sind.<br />
◮ Z.B. sind 41 und 13 äquivalent, weil beide (das Produkt)<br />
eine(r) Primzahl sind.<br />
◮ Die Äquivalenzklasse von 2 ist die Menge aller Primzahlen:<br />
[2] = {2, 3, 5, 7, 11, 13, 17, . . .}<br />
M.a.W.: [2] = [3] = [5] = [7] = · · ·<br />
◮ unendlich viele Äquivalenzklassen: [2 1 ], [2 2 ], [2 3 ], [2 4 ], . . .<br />
denn verschiedene Zweierpotenzen haben verschieden viele<br />
Primfaktoren<br />
Zustandsminimierung endlicher Automaten 115/124
2.89 eine lange Überlegung<br />
◮ DEA M = (ZM, z0M, X , fM, FM) sei gegeben.<br />
◮ Zustandsminimierung: suche Einteilung der Zustände von M in<br />
möglichst wenige Äquivalenzklassen zu finden, so dass<br />
◮ man Zustände aus verschiedenen Klassen wirklich<br />
unterscheiden muss,<br />
◮ aber Zustände aus der gleichen Klasse nicht.<br />
◮ Algorithmus findet die geeignete Äquivalenzrelation in<br />
mehreren Schritten.<br />
◮ Er beginnt mit sehr grober Äquivalenzrelation ≡0 und<br />
◮ verfeinert diese zu Äquivalenzrelationen ≡1, ≡2, usw., bis das<br />
Ziel erreicht ist.<br />
Zustandsminimierung endlicher Automaten 116/124
2.89 eine lange Überlegung (2)<br />
Anschauliche Bedeutung von ≡i:<br />
◮ z, z ′ ∈ Z sind „i-äquivalent“, wenn gilt: Mit Hilfe von<br />
Eingabewörtern w der Länge |w| ≤ i können anhand der<br />
„Ausgaben“ des DEA (d. h. w akzeptiert oder nicht) die<br />
Zustände nicht unterschieden werden. Also:<br />
z ≡i z ′ ⇐⇒ für alle w ∈ A ∗ mit |w| ≤ i gilt:<br />
f ∗ (z, w) ∈ F ⇐⇒ f ∗ (z ′ , w) ∈ F<br />
◮ Betrachte i = 0:<br />
Zwei Zustände sind 0-äquivalent, wenn sie durch das leere<br />
Wort nicht zu unterscheiden sind, also wenn entweder beide<br />
Zustände akzeptierende Zustände sind oder beide nicht.<br />
Zustandsminimierung endlicher Automaten 117/124
2.89 eine lange Überlegung (3)<br />
◮ Angenommen, z, z ′ sind (i + 1)-äquivalent.<br />
◮ Dann sind sie auch i-äquivalent, und<br />
◮ für jedes x ∈ X sind ¯z = f (z, x) und ¯z ′ = f (z ′ , x) i-äquivalent.<br />
◮ Angenommen, z, z ′ sind nicht (i + 1)-äquivalent.<br />
◮ Dann sind sie nicht i-äquivalent,<br />
◮ oder es gibt x ∈ X , so dass<br />
¯z = f (z, x) und ¯z ′ = f (z ′ , x) nicht i-äquivalent sind.<br />
◮ Also:<br />
z ≡i+1 z ′ ⇐⇒ z ≡i z ′ und ∀x ∈ X gilt: f (z, x) ≡i f (z ′ , x).<br />
Zustandsminimierung endlicher Automaten 118/124
2.90 Algorithmus<br />
◮ Gegeben DEA M = (ZM, z0M, X , fM, FM).<br />
◮ Konstruiere minimalen äquivalenten DEA<br />
K = (ZK , z0K , X , fK , FK ) wie folgt.<br />
◮ Berechne so lange alle Äquivalenzklassen [z]i der<br />
Äquivalenzrelationen ≡0, ≡1, . . . bis sich nichts mehr ändert.<br />
◮ ≡0 hat zwei Äquivalenzklassen:<br />
<br />
FM<br />
[z]0 =<br />
falls z ∈ FM<br />
ZM FM falls z /∈ FM<br />
Zustandsminimierung endlicher Automaten 119/124
2.90 Algorithmus (2)<br />
i ← 0<br />
repeat<br />
for each 〈Paar (z, z ′ ) mit z ≡i z ′ 〉 do<br />
z ≡i+1 z ′ falls für alle x ∈ X gilt: f (z, x) ≡i f (z ′ , x)<br />
od<br />
until ≡i+1 stimmt mit ≡i überein<br />
Zustandsminimierung endlicher Automaten 120/124
2.90 Algorithmus (3)<br />
Definiere nun den reduzierten DEA so:<br />
◮ ZK ist die Menge der Äquivalenzklassen des zuletzt<br />
berechneten ≡i.<br />
◮ zOK = [z0M]i.<br />
◮ fK ([z]i, x) = [f (z, x)]i.<br />
◮ Fm = {[z]i | z ∈ FM}.<br />
Beachte: Alle Festlegungen sind repräsentanten-unabhängig.<br />
Zustandsminimierung endlicher Automaten 121/124
2.91 Mitteilung<br />
Obige Konstruktion liefert<br />
◮ einen wohl definierten DEA und<br />
◮ einen kleinsten DEA, der die gleiche formale Sprache<br />
akzeptiert wie der Ausgangsautomat.<br />
Zustandsminimierung endlicher Automaten 122/124
2.92 Beispiel<br />
Es sei der DEA M = ({A, B, . . . , G}, A, {a, b}, f , {C, D, G}) mit<br />
der folgenden Überführungsfunktion gegeben:<br />
A B C D E F G<br />
a B C D C E E G<br />
b F E D D E G C<br />
A<br />
a<br />
b<br />
a,b<br />
a<br />
B C D<br />
a<br />
b<br />
a<br />
E<br />
a,b<br />
b<br />
F G<br />
Zustandsminimierung endlicher Automaten 123/124<br />
b<br />
a<br />
b
2.92 Beispiel (2)<br />
Nach längerer Rechnung an der Tafel ergibt sich, dass der<br />
reduzierte DEA die folgende Form hat:<br />
A<br />
a<br />
b<br />
B<br />
F<br />
a<br />
b<br />
a<br />
E<br />
b<br />
a,b<br />
CDG<br />
Zustandsminimierung endlicher Automaten 124/124<br />
a,b