Beispiel Produktautomat 0 1 p 0 p 1 p 2 q 0 q 1 445
Vereinfachte Konstruktion f. NFAs Seien M 1,M 2 NFAs f. die Sprachen L 1 und L 2. Konstruktion eines NFAs für L 1 L 2 : Erzeuge Kopien von M 1 und M 2. Erzeuge neuen Startzustand q 0 (akzeptierend, falls q 0,1 oder q 0,2 akzept.). Für alle a Σ erzeuge a-übergänge von q 0 zu den a-nachfolgern der Startzustände von M 1 und M 2. - Funktioniert aber nicht für Durchschnitt. 446
Symmetrische Differenz Definition: L 1 L 2 ={w w L 1 L 2 w L 1 L 2 } heißt symmetrische Differenz von L 1 und L 2. Beispiel: L 1 ={00,11,01}, L 2 ={00,10}. Dann ist L 1 L 2 ={11,01,10} Satz: Seien M 1 und M 2 DFAs für L 1 und L 2. Dann kann ein DFA für L 1 L 2 in Zeit O( Q 1 Q 2 Σ ) konstruiert werden. 447
Abschluss unter symm. Differenz Satz: Seien M 1 und M 2 DFAs für L 1 und L 2. Dann kann ein DFA für L 1 L 2 in Zeit O( Q 1 Q 2 Σ ) konstruiert werden. Beweis: Benutze Produktautomatenkonstruktion mit F = {(q 1,q 2 ) (q 1 F 1 q 2 F 2 ) (q 1 F 1 q 2 F 2 )}. Übungsaufgabe: Überlege, woran diese Konstruktion für NFAs scheitert. 448
Äquivalenztest für DFAs Gegeben: DFAs M 1 und M 2 für Sprachen L 1 und L 2. Konstruiere DFA für L 1 L 2. Wende darauf den Leerheitstest an. Rechenzeit: O( Q 1 Q 2 Σ ). 449
Produktsprache (Konkatenation) Definition T4.6.9: Seien L 1 und L 2 Sprachen über Σ. Die Konkatenation von L 1 und L 2 ist definiert durch Beispiel: L 1 ={0 n 1 n n 0}, L 2 ={1 n 0 n n 0}. Dann L 1 L 2 ={0 n 1 n+m 0 m }. 450
Abschluss gegen Konkatenation Satz T4.6.10: Seien M 1 und M 2 DFAs für L 1 und L 2. Dann kann ein NFA für L 1 L 2 in Zeit O(( Q 1 + Q 2 ) Σ ) konstruiert werden. Insbesondere ist L 1 L 2 regulär, d.h., die regulären Sprachen sind gegen Konkatenation abgeschlossen. 451
Beweis Seien M 1 und M 2 gegeben, o.b.d.a Q 1 Q 2 =. Idee: In akzept. Zuständen kann M 1 raten, dass sein Teilwort zu Ende ist. M 1 M 2 q 0 452
Formalere Beschreibung Zustandsmenge: Q 1 Q 2. Startzustand: Startzustand von M 1. Akz. Zustände: F 2 (bzw. F 1 F 2, falls ε L 2 ). Zustandsübergänge: Zustandsübergänge aus M 1 und M 2 Für q F 1 und a Σ zusätzlich: δ(q,a)=δ 2 (q 0,2,a). 453
Kleenescher Abschluss Definition T4.6.11: L i : i-fache Produkt von L mit sich selbst. (L 0 ={ε}, L 1 =L, L 2 =LL, L 3 =LLL, ) Beispiel: L={00,11}. Dann: L*= {w 1 w n mit n gerade und w 2i-1 =w 2i }. 454
Abschluss unter kleeneschen A. Satz T4.6.12: Sei M ein DFA für L. Aus M kann in Zeit O( Q Σ ) ein NFA für L* konstruiert werden. Insbesondere ist L* regulär und die regulären Sprachen sind unter dem kleeneschen Abschluss abgeschlossen. Beweis: Idee: Rate die Stellen, wo die Teilwörter aus L zu Ende sind. 455
Idee: q 0 Neuer akzept. Startzustand Fortsetzen der Rechnung an Nachf. des Startzust. ermögl. 456
Formalere Beschreibung Sei (Q,Σ,q 0,δ,F) DFA für L. NFA (Q,Σ,q 0,δ,F ) für L*: Zustandsmenge: Q =Q {q 0 }. Startzustand: q 0. Akz. Zustände: F = {q 0 } F. Zustandsübergänge in δ : Zustandsübergänge aus δ. Für q {q 0 } F und a Σ zusätzlich: δ (q,a)=δ(q 0,a). 457
Quotientensprache Definition T4.6.7: Seien L 1,L 2 Sprachen über Σ. Die Quotientensprache L 1 /L 2 ist definiert durch L 1 /L 2 = {w Σ* z L 2 : wz L 1 }. Beispiel: L 1 ={w w enthält gerade Anzahl von Nullen und Einsen} L 2 ={000,111} L 1 /L 2 ={w w enthält gerade Anzahl von Nullen u. ungerade Anzahl von Einsen oder umgekehrt} 458
Abschluss u. Quotientenbildung Satz T.4.6.8: Wenn L 1 und L 2 regulär sind, ist auch L 1 /L 2 regulär. Ein DFA für L 1 /L 2 kann aus DFAs für L 1 und L 2 in Zeit O( Q 1 Q 2 Σ ) konstruiert werden. 459
Beweis Konstruktion eines DFAs für L 1 /L 2 : Modifiziere DFA für L 1 : Ersetze die Menge F 1 der akzep. Zustände durch F ={q Q 1 z L 2 : δ 1 (q,z) F 1 }. Korrektheit klar. Frage: Wie berechnen wir F? F ={q Q 1 z: δ 1 (q,z) F 1 δ 2 (q 0,2,z) F 2 } L 1 /L 2 = {w Σ* z L 2 : wz L 1 }. 460
Berechnung von F Berechne Produktautomaten von M 1 und M 2 (wie bei Abschluss gegen Durchschnitt). Dann ist q F Von (q,q 0,2 ) ist akzeptierender Zustand des Produktautomaten erreichbar. Startzustand von M 2 L 1 /L 2 = {w Σ* z L 2 : wz L 1 }. F ={q Q 1 z: δ 1 (q,z) F 1 δ 2 (q 0,2,z) F 2 } 461
Beispiel L 1 ={w w enthält gerade Anzahl von Nullen und Einsen} L 2 ={000,111} L 1 L 1 /L 2 1 1 q 0 1 q 1 q 0 1 q 1 0 0 0 0 0 0 0 0 1 1 q 2 q 3 1 q 2 q 3 1 462
Reguläre Ausdrücke [K5.3] Im folgenden Teil 4 der Vorlesung: Regelsysteme, die Sprachen erzeugen Grammatiken Hier: einfaches Regelsystem für reguläre Sprachen: reguläre Ausdrücke 463
Def. von regulären Ausdrücken Definition T5.3.2: Rekursionsende: : leere Sprache ε: leeres Wort a Σ: Wörter aus einem Buchstaben sind reguläre Ausdrücke. Rekursion: Wenn A und B reguläre Ausdrücke sind, dann auch (A)+(B), (A) (B) und (A)*. Vereinigung Konkatenation Kleenescher 464A.
Beispiele für reguläre Ausdrücke Menge aller Wörter, die mit 0 beginnen und 1 enden: (0) ((0)+(1))* (1) Vereinfachung: 0(0+1)*1 Menge aller Wörter mit einer geraden Anzahl Nullen: 1* ((0) (1)* (0) (1)*)* Vereinfachung: 1*(01*01*)* 465
Vereinfachungen Klammern um, ε, a weglassen +, assoziativ Klammern weglassen Prioritäten der Operationen: Addition/Vereinigung + Multiplikation/Konkatenation Potenzbildung/kleenescher Abschluss * Klammern entsprechend weglassen Zeichen für Konkatenation weglassen 466
Beispiele für reguläre Ausdrücke L k ={w {0,1}* In w ist der k-te Buchstabe von hinten eine 1}. Regulärer Ausdruck: (0+1)* 1 (0+1) (0+1) (k-1)-mal Zum Vergleich: Ein DFA für L k benötigt 2 k Zustände (Satz T4.4.3). 467
grep Befehl zur Suche von Mustern in den Zeilen einer Textdatei Beschreibung der Muster: reguläre Ausdrücke [abc] entspricht a+b+c? entspricht jedem Buchstaben \ entspricht + Hintereinanderschreiben entspricht * entspricht kleeneschen Abschluss Klammern: \(, \) 468
grep (Fortsetzung) grep PATTERN FILE gibt die Zeilen von FILE aus, die das durch den reg. Ausdruck PATTERN beschriebene Muster enthalten. grep x PATTERN FILE gibt die Zeilen von FILE aus, die (als ganze Zeilen gesehen) durch den reg. Ausdruck PATTERN beschrieben sind. 469
Beispiele für grep-syntax Menge aller Wörter, die mit 0 beginnen und 1 enden: vorher: 0(0+1)*1 grep: [0][01]*[1] Menge aller Wörter mit gerader Anzahl Nullen oder gerader Anzahl Einsen vorher: 1*(01*01*)* + 0*(10*10*)* grep: [1]*\([0][1]*[0][1]*\)*\ [0]*\([1][0]*[1][0]*\)* 470
Zshg. reg Ausdrücke reg. Spr. Satz T5.3.3: Genau die regulären Sprachen lassen sich durch reguläre Ausdrücke beschreiben. Beweis: 1. Alle regulären Ausdrücke beschreiben reguläre Sprachen. 2. Alle regulären Sprachen können durch reguläre Ausdrücke beschrieben werden. 471
Reg. Ausdr. beschr. reg. Sprachen Betrachte rekursive Def. der reg. Ausdrücke:, {ε}, {a} sind reguläre Sprachen. Die regulären Sprachen sind gegen Vereinigung (+), Konkatenation ( ) und kleeneschen Abschluss (*) abgeschlossen. Alle regulären Ausdrücke beschreiben reguläre Sprachen. 472
Umformung DFA reg. Ausdruck Sei M DFA für reg. Sprache L. Sei Q={1,,n} u. Zustand 1 der Startzustand. dynamische Programmierung Definiere: R i,jk : Menge aller Wörter, für die M beginnend mit Zustand i den Zustand j erreicht, wobei die Zwischenzustände aus {1,,k} sind. Idee: Zeige, dass sich alle R i,jk durch reguläre Ausdrücke beschreiben lassen. 473
Konstr. von reg. Ausdr. für R i,j k k=0 keine Zwischenzustände erlaubt. R i,j0 : kann nur aus einem Buchstaben a bestehen, nämlich dem a mit δ(i,a)=j. R i,i0 : enthält zusätzlich ε. Reguläre Ausdrücke für R i,j0 : R i,jk : Menge aller Wörter, für die M beginnend mit Zustand i den Zustand j erreicht, wobei die Zwischenzustände aus {1,,k} sind. 474
Rekursive Bestimmung von R i,j k Rekursionsformel: R i,jk = R i,j k-1 + R i,k k-1 (R k,k k-1 )*R k,j k-1 Wörter, bei deren Rechnung der Zwischenzustand k ev. mehrfach benutzt wird. Wörter, bei deren Rechnung Zwischenzustand k nicht benutzt wird. R i,jk : Menge aller Wörter, für die M beginnend mit Zustand i den Zustand j erreicht, wobei die Zwischenzustände aus {1,,k} sind. 475
Rekursionsformel erzeugt aus reg. Ausdrücken für R i,j k-1 reg. Ausdrücke für R i,jk. Wir können reguläre Ausdrücke für R i,j n berechnen. Dann gilt für die von M akzeptierte Sprache: L = +i F R 1,i n regulärer Ausdruck R i,jk : Menge aller Wörter, für die M beginnend mit Zustand i den Zustand j erreicht, wobei die Zwischenzustände aus {1,,k} sind. 476
Endliche Sprachen Folgerung: Alle endlichen Sprachen sind regulär. Beweis: Sei L={w 1,,w n } Σ*. Dann ist w 1 + +w n ein regulärer Ausdruck für L. 477