20.07.2013 Aufrufe

Folien

Folien

Folien

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!