Was bisher geschah Für jede Sprache L X sind die folgenden Aussagen äquivalent: Es existiert ein NFA A mit L = L(A) (L REC(NFA)). Es existiert ein vollständiger NFA B mit L = L(B). Es existiert ein ε-nfa C mit L = L(C). Es existiert ein DFA D mit L = L(D). Die Menge aller NFA-akzektierbaren Sprachen ist abgeschlossen unter Mengenoperationen,,, \ und Sprachoperationen,, R Jede durch einen regulären Ausdruck definierte Sprache ist NFA-akzektierbar. 120
DFA-Minimierung Ein vollständiger DFA A heißt genau dann minimal für die Sprache L(A), wenn kein vollständiger DFA B mit L(A) = L(B) und weniger Zuständen als A existiert. Beispiel: DFA A = ({a, b}, {1, 2, 3, 4, 5, 6, 7}, δ, {7}, {3, 4}) mit δ(a) = {(1, 1), (2, 4), (3, 1), (4, 1), (5, 3), (6, 3), (7, 1)} und δ(b) = {(1, 1), (2, 2), (3, 6), (4, 6), (5, 2), (6, 5), (7, 6)} Idee (für vollständigen DFA A = (X, Q, δ, I, F)): für jedes Paar (p, q) von Zuständen in Q: Suche nach einem (kürzesten) unterscheidenden Wort Zerlegung von Q Klassen zueinander äquivalenter Zustände (für die kein unterscheidendes Wort gefunden wurde), diese Klassen sind die Zustände des minimalen DFA. 121
Äquivalente Zustände in einem DFA Beispiel: A = ({a, b}, {0, 1, 2, 3}, δ, {0}, {3}) mit δ(a) = {(0, 1)} und δ(b) = {(0, 2), (1, 3), (2, 3)} allgemein: DFA A = (X, Q, δ, I, F) und Zustand q Q definieren einen DFA A q = (X, Q, δ, {q}, F) Zustände p, q Q heißen genau dann äquivalent in A, wenn L(A p ) = L(A q ) gilt. Ein Wort w X unterscheidet die Zustände p Q und q Q, falls w (L(A p ) L(A q )) \ (L(A p ) L(A q )). (symmetrische Differenz von L(A p ) und L(A q )) 122
Er existiert ein n N, so dass T n = T n+1 gilt. Für jedes Paar {p, q} T n sind p und q äquivalent in A. 123 Algorithmus zur Bestimmung äquivalenter Zustände gegeben: DFA A = (X, Q, δ, I, F ) Falls das Wort w X die Zustände p, q Q in A unterscheidet und für ein a X gilt (p, p ) δ(a) und (q, q ) δ(a), dann unterscheidet das Wort aw X die Zustände p, q Q in A. Induktive Berechnung einer Folge T i von Mengen von unterscheidbaren Zustandspaaren (Beispiel Tafel): T 0 = {{p, q} p F, q F } T i+1 = T i {p, q} a X p, q Q : {p, q } T i (p, p ) δ(a) (q, q ) δ(a) (T i : Menge aller durch ein w mit w i unterscheidbaren Paare) Alternative Darstellung: Folge von Äquivalenzrelationen i Q 2 mit p i q gdw. w X : w i (w A p w A q )
Minimalautomat gegeben: DFA A = (X, Q A, δ A, I A, F A ) Minimalautomat für L(A): DFA B = (X, Q B, δ B, I B, F B ) mit Q B = {[q] A q Q} Äquivalenzklassen in A a X : δ B (a) = {([p] A, [q A ]) (p, q) δ A (a)} I B = {[q] A q I A } F B = {[q] A q F A } Satz Zu jeder NFA-akzeptierbaren Sprache L X existiert ein (bis auf Isomorphie) eindeutiger äquivalenter vollständiger DFA A mit L = L(A) und einer minimalen Anzahl von Zuständen (Minimalautomat für L). 124
Entscheidung der Äquivalenz von NFA Eingabe: NFA A, B Ausgabe: falls A und B äquivalent (also L(A) = L(B)): ja sonst: nein Algorithmus: 1. Konstruktion der DFA A und B mit L(A ) = L(A) und L(B ) = L(B) (Potenzmengenkonstruktion), 2. Konstruktion der Minimalautomaten A zu A und B zu B, 3. Test, ob A und B isomorph sind (Isomorphietest für Graphen). Die NFA A und B sind genau dann äquivalent, wenn die Automaten A und B isomorph sind. 125
Entscheidung der Äquivalenz regulärer Ausdrücke Eingabe: Reguläre Ausdrücke E, F Ausgabe: falls E und F äquivalent: ja sonst: nein Algorithmus: 1. Bestimmung von NFA A E und A F mit L(A E ) = L(E) und L(A F ) = L(F), 2. Berechnung der DFA A E und A F mit L(A E ) = L(E) und L(A F ) = L(F ) (Potenzmengenkonstruktion), 3. Berechnung der Minimalautomaten A E zu A E und A F zu A F (Minimierungsalgorithmus), 4. Test, ob A E und A F isomorph sind (Isomorphietest für Graphen). Die regulären Ausdrücke E und F sind genau dann äquivalent, wenn die Automaten A E und A F isomorph sind. Beispiel: (ab) + a und a(ba) ba 126
Erweiterte reguläre Ausdrücke auch Operationen \,, R, erlaubt BNF E ::= ε a E E E R E + E EE E \ E E E mit a A Beispiel: (a + b) \ ((a + b) (ba)(a + b) ) = (a + b) (ba)(a + b) Jede durch einen erweiterten regulären Ausdruck definierte Sprache ist NFA-akzeptierbar. (wegen Abschluss der Menge aller NFA-akzeptierbaren Sprachen bezüglich der Operationen \,, R, ) Zu jedem erweiterten regulären Ausdruck existiert ein äquivalenter (einfacher) regulärer Ausdruck. 127
DFA regulärer Ausdruck Beispiel: A = ({a, b}, {1, 2}, δ, {1}, {1}) mit δ(a) = {(1, 2)} und δ(b) = {(1, 1)(2, 1)} gegeben: DFA A = (X, Q, δ, I, F) mit Q = {1,..., n} und I = {1} schrittweise Konstruktion regulärer Ausdrücke (Dynamische Programmierung): R(k, i, j) beschreibt die Menge aller Wörter, für die ein Pfad von i zu j nur über (Zwischen-)Zustände k existiert R(0, i, j) = { {a X (i, j) δ(a)} falls i j ε + {a X (i, j) δ(a)} falls i = j R(k + 1, i, j) = R(k, i, j) + (R(k, i, k + 1)R(k, k + 1, k + 1) R(k, k + 1, j)) Für den so konstruierten regulären Ausdruck E = f F R(n, 1, f ) gilt L(E) = L(A). 128
NFA und reguläre Ausdrücke Schon gezeigt: Jede NFA-akzeptierbare Sprache wird durch einen regulären Ausdruck definiert. Jede durch einen regulären Ausdruck definierte Sprache ist NFA-akzeptierbar. Das ergibt zusammen: Satz Eine Sprache ist genau dann NFA-akzeptierbar ( REC(NFA)), wenn sie durch einen regulären Ausdruck definiert wird. 129