Theoretische Informatik
Transcription
Theoretische Informatik
Was bisher geschah Maschinenmodelle: I Definition: I I I Steuerelement externer Speicher (Ein- und Ausgabe) interner Speicher I Konfiguration (Start-, akzeptierend, Übergänge) I Berechnung I akzeptierte Sprache einer Maschine I akzeptierte Sprachklasse eines Maschinenmodells PDA (Kellerautomat) A = (X , Q, Γ, δ, q0 , F , ⊥) I nichtdeterministisch (PDA) I deterministisch (DPDA) Menge aller durch DPDA akzeptierbaren Sprachen ist eine echte Teilmenge der Menge aller durch PDA akzeptierbaren Sprachen. Beispiel: L = {waw R | w ∈ {a, b}∗ } ∈ REC(PDA) \ REC(DPDA) 194 Schnitt PDA-akzeptierbarer mit regulären Sprachen Satz I Sind L eine PDA-akzeptierbare und L0 eine reguläre Sprache, dann ist die Sprache L ∩ L0 PDA-akzeptierbarer. I Sind L eine durch einen DPDA-akzeptierbare und L0 eine reguläre Sprache, dann ist die Sprache L ∩ L0 durch einen DPDA akzeptierbarer. gegeben: PDA A = (X , QA , Γ, δA , iA , FA , ⊥) mit L = L(A) (akzeptiert mit Zuständen) DFA B = (X , QB , δB , iB , FB ) mit L0 = L(B) N Beispiel: Dyck-Sprache ∩ a∗ b∗ = {an bn | n ∈ } Produktkonstruktion: PDA C = (X , QA × QB , Γ, δ, (iA , iB ), FA × Fb , ⊥) mit (pA , qA , G, k ) ∈ δA (a) ∀a ∈ X : δ(a) = ((pA , pB ), (qA , qB ), G, k ) | ∧(pB , qB ) ∈ δB (a) δ(ε) = {((pA , pB ), (qA , pB ), G, k ) | (pA , qA , G, k ) ∈ δA (ε)} 195 PDA – Akzeptanz durch leeren Keller alternative Akzeptanzbedingung akzeptierende Konfigurationen: (q, ε, ε) mit q ∈ Q beliebig Angabe akzeptierender Zustände überflüssig Beispiel: L = {an bn | n ∈ } ist PDA-akzeptierbar durch PDA A = ({a, b}, {q0 , p}, {⊥, x}, δ, q0 , ⊥) mit δ(a) = {(q0 , q0 , K , xK )} für K ∈ Γ δ(b) = {(p, p, x, ε)} δ(ε) = {(q0 , p, K , K ), (q0 , p, ⊥, ε), (p, p, ⊥, ε)} für K ∈ {x, ⊥} N b: ε: a : K | xK start q0 ε: ε: K |K ⊥|ε x |ε ⊥|ε p für K ∈ {x, ⊥} 196 Akzeptanzbedingungen für PDA zwei Möglichkeiten zur Definition akzeptierender Konfigurationen: 1. Akzeptanz durch akzeptierenden Zustand (analog NFA): (q, ε, k ) mit q ∈ F und k ∈ Γ∗ beliebig 2. Akzeptanz durch leeren Keller: (q, ε, ε) mit q ∈ Q beliebig Beispiel: Die Sprache L = {an bn | n ∈ durch akzeptierende Zustände akzeptiert durch den PDA A = ({a, b}, {q0 , p, q}, {⊥, x}, δ, q0 , {q}, ⊥) mit a : K | xK start q0 b:x |ε ε:K |K p ε:⊥|⊥ q N} wird mit leerem Keller akzeptiert durch den PDA B = ({a, b}, {q0 , p, q}, {⊥, x}, δ, q0 , ⊥) mit a : K | xK ε: ε: q0 start b: ε: K |K ⊥|ε x |ε ⊥|ε p für K ∈ {x, ⊥} 197 Äquivalenz beider Akzeptanzbedingungen Satz 1. Zu jedem PDA mit akzeptierenden Zuständen existiert ein äquivalenter PDA, der mit leerem Keller akzeptiert. 2. Zu jedem PDA, der mit leerem Keller akzeptiert, existiert ein äquivalenter PDA mit akzeptierenden Zuständen. Idee (PDA-Transformationen): 1. PDA mit akzeptierenden Zuständen → PDA mit leerem Keller: neues Kellerboden-Symbol und neuen Endzustand hinzufügen, ursprünglicher Automat arbeitet „darüber“, nach Übergang in einen akzeptierenden Zustand ε-Übergänge in diesem akzeptierenden Zustand zum Entfernen aller restlichen Kellersymbole 2. PDA mit leerem Keller → PDA mit akzeptierenden Zuständen: neuen (einzigen) akzeptierenden Zustand hinzufügen, für jeden Übergang in eine Konfiguration mit leerem Keller einen Übergang in diesen akzeptierenden Zustand hinzufügen. 198 Kontextfreie Grammatiken und PDA Satz Die Menge aller kontextfreien (d.h. durch eine kontextfreie Grammatik erzeugten) Sprachen ist genau die Menge aller PDA-akzeptierbaren Sprachen. (Konstruktionen auf den folgenden Folien) 199 Kontextfreie Grammatik → PDA Beispiel: Łukasiewicz-Sprache erzeugt durch die Grammatik G = ({S}, {a, b}, P, S) mit P = {S → a, S → bSS} Lemma Zu jeder kontextfreien Grammatik G existiert ein PDA A mit L(A) = L(G). gegeben: kontextfreie Grammatik G = (N, X , P, S) Idee: Tiefensuche im Ableitungsbaum (Linksableitung) PDA A = (X , {q}, N ∪ X , δ, q, S) mit δ(ε) ∀a ∈ X : δ(a) = {(q, q, B, w) | B → w ∈ P} = {(q, q, a, ε)} akzeptiert mit leerem Keller Für den so konstruierten PDA A gilt L(A) = L(G). Nachweis: Eindeutige Zuordnung zwischen Linksableitungen S → u 1 A1 v 1 → u 1 u 2 A2 v 2 → · · · → u 1 . . . u m−1 Am−1 v m−1 → w = u 1 . . . u m und akzeptierenden Berechnungen für w = u 1 . . . u m (q, w, S) ` (q, u 1 . . . u m , u 1 A1 v 1 ) ` · · · ` (q, u 2 . . . u m , A1 v 1 ) ` (q, u 2 . . . u m , u 2 A2 v 2 ) ` · · · ` (q, u m , u m ) ` · · · ` (q, ε, ε) 200 PDA → kontextfreie Grammatik Beispiel: PDA A = ({a, b}, {q}, {X , ⊥}, δ, q, ⊥} (LK-Akzeptanz) mit δ(a) = {(q, q, X , XX )(q, q, ⊥, X ⊥)}, δ(b) = {(q, q, X , ε)} und δ(ε) = {(q, q, ⊥, ε)} Lemma Zu jedem PDA A existiert eine kontextfreie Grammatik G mit L(A) = L(G). Nacheinanderausführung der Konstruktionen PDA → kontextfreie Grammatik → PDA führt zur folgenden Aussage: Folgerung Zu jedem PDA existiert ein äquivalenter PDA mit einem Zustand, der mit leerem Keller akzeptiert. 201 PDA → kontextfreie Grammatik (Vorbereitung) Fakt Jeder PDA A = (X , Q, Γ, δ, q0 , ⊥) (LK-Akzeptanz) ist äquivalent zu einem PDA B = (X , Q 0 , Γ0 , δ 0 , q00 , ⊥0 ) (LK-Akzeptanz) mit der Eigenschaft ∀a ∈ X ∪ {ε} ∀(p, q, G, w) ∈ δ 0 (a) : |w| ≤ 2 Konstruktion: für jedes a ∈ x ∪ {ε} Ersetzung jedes Überganges (p, q, G, w) ∈ δ(a) für w = w1 . . . wn mit n > 2 durch die Regeln (p, p1 , G, wn−1 wn ) ∈ δ(a) (p1 , p2 , wn−1 , wn−2 wn−1 ) ∈ δ(ε) .. . (pn−1 , q, w2 , w1 w2 ) ∈ δ(ε) mit neu hinzugefügten Zuständen p1 , . . . , pn−1 202 PDA → kontextfreie Grammatik (Idee) gegeben: PDA A = (X , Q, Γ, δ, q0 , ⊥) (LK-Akzeptanz) mit ∀a ∈ X ∪ {ε} ∀(p, q, G, w) ∈ δ(a) : |w| ≤ 2 Ziel: Konstruktion einer kontextfreien Grammatik G = (N, X , P, S), so dass die Linksableitungen in G genau den akzeptierenden Berechnungen in A entsprechen. akzeptierende Berechnung für w in A: (q0 , w, ⊥) ` · · · ` (q, ε, ε) mögliche Konfigurationsübergänge in A: I oberes Kellersymbol löschen (p, q, A, ε) ∈ δ(a) für a ∈ X ∪ {ε} entspricht Grammatikregel (p, A, q) → a I oberes Kellersymbol durch genau ein neues ersetzen (p, q, A, B) ∈ δ(a) für a ∈ x ∪ {ε} entspricht Grammatikregel (p, A, q 0 ) → a(q, B, q 0 ) für alle q 0 ∈ Q I oberes Kellersymbol durch genau zwei neue ersetzen (p, q, A, BC) ∈ δ(a) für a ∈ x ∪ {ε} entspricht Grammatikregel (p, A, q 0 ) → a(q, B, r )(r , C, q 0 ) für alle q0, r ∈ Q 203 PDA → kontextfreie Grammatik (Konstruktion) gegeben: PDA A = (X , Q, Γ, δ, q0 , ⊥) (LK-Akzeptanz) mit ∀a ∈ X ∪ {ε} ∀(p, q, G, w) ∈ δ(a) : |w| ≤ 2 Konstruktion kontextfreier Grammatik G = (N, X , P, S) mit N = (Q × Γ × Q) ∪ {S} P = {S → (q0 , ⊥, q) | q ∈ Q} ∪ {(p, B, q) → a | (p, q, B, ε) ∈ δ(a)} ∪ {(p, B, q) → a(p0 , C, q) | (p, p0 , B, C) ∈ δ(a) ∧ q ∈ Q} ∪ {(p, B, q) → a(p0 , C, q)(q, D, q 0 ) | (p, p0 , B, CD) ∈ δ(a) ∧ q, q 0 ∈ Q} Für die so konstruierte Grammatik G gilt L(A) = L(G). 204 PDA → kontextfreie Grammatik (Beispiel) PDA A = ({a, b}, {q}, {X , ⊥}, δ, q, ⊥} (LK-Akzeptanz) mit δ(a) = {(q, q, X , XX )(q, q, ⊥, X ⊥)}, δ(b) = {(q, q, X , ε)}, δ(ε) = {(q, q, ⊥, ε)} G = (N, X , P, S) zu A mit N = {S, (q, ⊥, q), (q, X , q)} S → (q, ⊥, q) (q, X , q) → b (q, ⊥, q) → ε P = (q, X , q) → a(q, X , q)(q, X , q) (q, ⊥, q) → a(q, X , q)(q, ⊥, q) wegen (q, q, X , ε) ∈ δ(b) wegen (q, q, ⊥, ε) ∈ δ(ε) wegen (q, q, X , XX ) ∈ δ(a) wegen (q, q, ⊥, X ⊥) ∈ δ(a) 205 Nicht-kontextfreie Sprachen Die Grammatik G = ({A, B, C}, {a, b, c}, P, A) mit A → aABC, A → aBC, CB → BC, aB → ab, P= bB → bb, bC → bc, cC → cc erzeugt die Sprache L(G) = {an bn c n | n > 0}. (Chomsky-Typ 1, kontextsensitiv) Fakt Die Sprache L = {an bn c n | n > 0} ist nicht kontextfrei. 206 Pumping-Lemma für kontextfreie Sprachen Sprache L ⊆ X ∗ hat die Pump-Eigenschaft gdw. ∃n ∈ ∀w ∈ L (|w| ≥ n → ∃u, v , x, y , z ∈ X ∗ (w = uvxyz ∧ |vxy | ≤ n ∧ |vy | ≥ 1 → i i ∀i ∈ : uv xy z ∈ L n heißt hier Pumping-Konstante. N N Satz (Pumping-Lemma für CF) Jede kontextfreie Sprache hat die Pump-Eigenschaft. Ausführlichere Formulierung desselben Satzes: Satz (Pumping-Lemma für CF) Für jede kontextfreie Sprache L existiert eine Zahl n ∈ (Pumping-Konstante), so dass für jedes Wort w ∈ L mit |w| ≥ n eine Zerlegung w = uvxyz existiert mit u, v , x, y , z ∈ X ∗ , |vy | ≥ 1, |vxy | ≤ n und für jede Zahl i ∈ gilt uv i xy i z ∈ L. N N 207 Beispiele nicht-kontextfreier Sprachen I {an bm an bm | m, n ∈ {a, b}∗ I {w ∈ I {ww | w ∈ {a, b}∗ } I {a2 | k ∈ k N} | |w|a = |w|b = |w|c } N} Das Pumping-Lemma ist geeignet, um zu zeigen, dass eine Sprache nicht kontextfrei ist. ABER: Es gibt nicht-kontextfreie Sprachen mit Pump-Eigenschaft, z.B. L = {aj bk c l d m | j = 0 ∨ k = l = m} 208 Abschlusseigenschaften von CF Sind L1 und L2 kontextfreie Sprachen, dann sind auch I L1 ∪ L2 I L1 ◦ L2 I L∗1 I L1 ∩ L0 für jede reguläre Sprache L0 kontextfreie Sprachen. Die Menge aller kontextfreien Sprachen ist nicht abgeschlossen unter I Schnitt Beispiel: L1 = {ai bi c k | i, k > 0} ∈ CF und L2 = {ai bk c k | i, k > 0} ∈ CF, aber L1 ∩ L2 = {ai bi c i | i > 0} 6∈ CF nicht. I Komplement (Warum ?) 209 CF: Entscheidbarkeit von Problemen algorithmisch entscheidbar sind Wortproblem: Eingabe (G, w) Ausgabe: ja, falls w ∈ L(G), sonst nein (CYK, Akzeptanz durch PDA) I Leerheit: Eingabe G, Ausgabe: ja, falls L(G) = ∅, sonst nein (ja, falls Startsymbol der Grammatik nicht erzeugend) I Endlichkeit: Eingabe G, Ausgabe: ja, falls L(G) endlich, sonst nein (Gilt ∃w ∈ L : n ≤ |w| < 2n für Pumping-Konstante n ?) I nicht algorithmisch entscheidbar sind Inklusion: Eingabe G1 , G2 , Ausgabe: ja, falls L(G1 ) ⊆ L(G2 ), sonst nein I Gleichheit: Eingabe G1 , G2 , Ausgabe: ja, falls L(G1 ) = L(G2 ), sonst nein I Disjunktheit: Eingabe G1 , G2 , Ausgabe: ja, falls L(G1 ) ∩ L(G2 ) = ∅, sonst nein I Kontextfreiheit des Schnittes: Eingabe G1 , G2 , Ausgabe: ja, falls L(G1 ) ∩ L(G2 ) kontextfrei, sonst nein I 210