- Pumping Lemma # Tupel ## DEA 5 Tupel: A = (Q, ∑, δ, q0, F) - Q: nichtleere, endliche Menge von Zuständen (Variablen: Kreise) - ∑: endliches Eingabealphabet (Alphabet: an den Pfeilen) - δ: Q×∑ → Q Übergangsfunktion (Regeln: Pfeile) - q0∈Q: Startzustand (Startvariable: Startpfeil) - F⊆Q: Menge von Endzuständen (ε-Regel: Doppelkreis) ## NEA 5 Tupel: A = (Q, ∑, δ, q0, F) - Q: nichtleere endliche Zustandsmenge - ∑: endliches Eingabealphabet - δ: Q×∑ → P(Q) Zustandsüberführungsfunktion (Übergangsfunktion) - q0∈Q: Startzustand (Anfangszustand) - F⊆Q: Menge von akzeptierenden Zuständen (Endzuständen) Hierbei ist P(Q) = {S| S ⊆ Q} die Potenzmenge von Q. ## ε-NEA 5 Tupel: A = (Q, ∑, δ, q0, F) - Q: nichtleere endliche Zustandsmenge - ∑: endliches Eingabealphabet - δ: Q×(∑U{ε})→P(Q) Zustandsüberführungsfunktion (Übergangsfunktion) - q0∈Q: Startzustand (Anfangszustand) - F⊆Q: Menge von akzeptierenden Zuständen (Endzuständen) Zusätzlich zum NEA ist das leere Wort als weiterer Übergang möglich. Am 5-Tupel kann man einen NEA nicht von einem ε-NEA unterscheiden! ## Mealy/Moore Automaten 6 Tupel: A = (Q, ∑, Γ, δ , θ, q0) - Q: nichtleere endliche Zustandsmenge - ∑: endliches Eingabealphabet - Γ: endliches Ausgabealphabet - δ: Q×∑→Q Zustandsüberführungsfunktion - θ: Q×∑→ Γ Ausgabefunktion - q0∈Q: Startzustand (Anfangszustand) ## PDA 7 Tupel: P = (Q, ∑, Γ, δ , q0, Z, F) - Q: nichtleere endliche Zustandsmenge - ∑: endliches Eingabealphabet - Γ: endliches Stackalphabet - δ: Q×(∑È{ε})×Γ→P(Q×Γ*) Überführungsfunktion - q0∈Q: Startzustand - Z∈Γ: Initialsymbol des Stacks - F⊆Q: Menge von akzeptierenden Zuständen # Abschlußeigenschaften ## Reguläre Sprachen - L1 ∪ L2 Die Vereinigung zweier regulärer Sprachen ist regulär. - L1 ∩ L2 Der Durchschnitt zweier regulärer Sprachen ist regulär. - L1 \ L2 Die Differenz zweier regulärer Sprachen ist regulär. - Lc Das Komplement einer regulären Sprache ist regulär. - LR Die Spiegelung einer regulären Sprache ist regulär. - L1 ◦ L2 Die Verkettung zweier regulärer Sprachen ist regulär. - L* Die Hülle einer regulären Sprache ist regulär. ## Kontextfreie Sprachen - L1 ∪ L2 Die Vereinigung zweier kf. Sprachen ist kf. . - LR Die Spiegelung einer kf. Sprache ist kf. . - L1 ◦ L2 Die Verkettung zweier kf. Sprachen ist kf. . - L* Die Hülle einer kf. Sprache ist kf. . NICHT: - L1 ∩ L2 Der Durchschnitt zweier kf. Sprachen muss nicht kf. sein: L1 = {0n1n2m | n,m∈N} und L2 = {0m1n2n | n,m∈N} sind kf., L1 Ç L2 = {0n1n2n | n∈N} ist aber nicht kf. (Beweis später). - Lc Das Komplement einer kf. Sprache muss nicht kf. sein: (dann wäre L1 Ç L2 = (L1c È L2c)c immer kf.) - L1 \ L2 Die Differenz zweier kf. Sprachen muss nicht kf. sein (dann wäre Lc = ∑*\L immer kf.) # Verfahren ## Table Filling Algorithmus 1. Generiere Tabelle von Zuständen. Die Tabelle ist am Anfang leer, d.h. wir nehmen an, dass alle Zustände äquivalent sind. 2. Trage alle Gegenbeispiele der Länge 0 (d.h. Wort ε) ein: Bei ε kommen Endzustände und Nicht-Endzustände zu einem anderen Ergebnis, d.h. markiere alle solche Kombinationen mit einem ε. 3. Trage alle Gegenbeispiele der Länge 1 ein, d.h. für alle offenen Zustands- Paare p und q: Ein Gegenbeispiel für p und q kann nur mit a oder b anfangen. Wohin gehen p und q bei a (b)? Probiere alle Buchstaben a, b, … nacheinander aus: - Falls p und q mit a (b) zu den Zuständen x und y gehen und für x/y ein Gegenbeispiel „w“ in der Tabelle ist, dann ist „aw“ („bw“) ein Gegenbeispiel für p und q. - Falls nicht, dann erst so lassen. 4. Trage in jeder weiteren Runde alle längeren Gegenbeispiele ein, d.h. für alle offenen p und q: Ein Gegenbeispiel für p und q kann nur mit a oder b anfangen. Wohin gehen p und q bei a (b)? Probiere alle Buchstaben a, b, … nacheinander aus: - Falls p und q mit a (b) zu den Zuständen x und y gehen und für x/y ein Gegenbeispiel „w“ in der Tabelle ist, dann ist „aw“ („bw“) ein Gegenbeispiel für p und q. - Falls nicht, dann erst so lassen. 5. Ende, wenn in einer Runde keine neuen Gegenbeispiele gefunden. ## Umwandlung NEA in DEA ![[2-3-NEA.pdf]] - Teilmengenkonstruktion - Umbenennung der Teilmengenkonstruktion - Optimierte Teilmengenkonstruktion: nicht erreichbare Zustände ## Wandlung ε-NEA in NEA 1. Endzustände: Alle Zustände, von denen man mit (einem oder mehreren) ε-Übergängen zu einem Endzustand kommen kann, werden selbst Endzustände. 2. ε-Zyklen (Ausschnitt): Alle Zyklen von ε-Übergängen (d.h. man kann von jedem Zustand in dem Zyklus jeden anderen Zustand durch ε-Übergänge erreichen) werden zu einem Zustand geschrumpft. Weitere Übergänge werden zu Schleifen. 3. ε –Übergänge werden nacheinander (in beliebiger Reihenfolge) ersetzt ε-Übergang q0 nach q1 wird gelöscht. Dafür werden alle Übergänge, die aus q1 rausgehen, verdoppelt und gehen zusätzlich auch aus q0. 4. Lösche alle nicht erreichbaren Zustände ## CNF 1. Eliminierung von ε-Produktionen A → ε falls A kein Startzustand (die Produktionen müssen rechts mindestens die Länge 1 haben) 2. Eliminierung von Einheitsproduktionen A → B (Produktionen der Länge 1 dürfen nicht aus einer Variablen bestehen) 3. Eliminierung unnützer Symbole (keine unnütze Variablen erlaubt) 4. Separieren von Terminalen und Variablen in Produktionen (X-Regel) (Produktionen haben rechts entweder Variablen oder Terminale) 5. Aufspalten von Produktionen A → α mit |α|>2 (Y-Regel) (Produktionen haben rechts höchstens die Länge 2) ## CYK 1. Sockel: Das Wort w 2. Unterste Ebene (I=J): VI,I = {A∈V | A→wI∈P} (hierfür braucht man nur die Regeln mit einem Terminal zu betrachten) 3. VI,I+1 = { A∈V | ∃ A→BC∈P mit B∈VI,I ∧ C∈VI+1,I+1} d.h. wenn B das Teilwort wI und C das Teilwort wI+1 erzeugt und es eine Regel A→BC gibt, dann erzeugt A das Teilwort wIwI+1. 4. VI,J = { A∈V | ∃ A→BC∈P mit B∈VI,K∧C∈VK+1,J für ein I≤K