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