Automaten und formale Sprachen Notizen zu den Folien

Automaten und formale Sprachen Notizen zu den Folien 13 Kellerautomaten Warum ein Automatenmodell fu ¨ r kontextfreien Sprachen (zu Folie 233) Manc...
Author: Sophie Lange
8 downloads 0 Views 190KB Size
Automaten und formale Sprachen Notizen zu den Folien

13

Kellerautomaten

Warum ein Automatenmodell fu ¨ r kontextfreien Sprachen (zu Folie 233) Manche Konstruktionen und Verfahren lassen sich besser mit Hilfe des Automatenmodells durchf¨ uhren (anstatt auf Grammatiken). Dazu geh¨ort: • das Wortproblem (wir werden herausfinden, dass das Wortproblem unter bestimmten Umst¨anden effizienter als in Zeit O(n3 ) gel¨ ost werden kann) • Abschlusseigenschaften (Abschluss von kontextfreien Sprachen unter Schnitt mit regul¨aren Sprachen l¨ asst sich gut mit Kellerautomaten zeigen)

Zu Folie 234 Ein endlicher Automat kann diese Sprache deshalb nicht erkennen, weil er sich keine beliebig langen W¨ orter der Form a1 a2 . . . an merken“ kann. Er m¨ usste sich aber solche W¨orter merken, ” ¨ um die Ubereinstimmung mit dem Wortteil nach dem $ zu u ufen. ¨berpr¨

¨ Bedeuten der Uberf u ¨ hrungsfunktion eines Kellerautomaten (zu Folien 240– 241) • Σ ∪ {} ist das Alphabet mit einem zus¨atzlichem Symbol . • Z × (Σ ∪ {}) × Γ ist die Menge von 3-Tupeln, die aus einem Zustand, einem Alphabetsymbol oder , und aus einem Kellersymbol bestehen. • Z × Γ∗ ist die Menge von Paaren, die aus einem Zustand und aus einer Folge von Kellersymbolen bestehen. • Das heißt, δ ist eine Funktion, die als Eingabe einen Zustand (den aktiven Zustand), ein Alphabetsymbol oder  (das eingelesene Symbol, wobei  angibt, dass nichts eingelesen werden soll) und einen Kellersymbol (das oberste Symbol auf dem Keller) nimmt, und einen Zustand (den Nachfolgezustand) und eine Folge von Kellersymbolen ausgibt.

¨ Notation der Uberf u ¨ hrungsfunktion Sei M = (Z, Σ, Γ, δ, z0 , #) ein Kellerautomat. F¨ ur z ∈ Z, a ∈ Σ ∪ {} und A ∈ Γ, ist δ(z, a, A) eine endliche Menge von Paaren. Zum Beispiel, Z = {z0 , z1 }, Σ = {a, b} und Γ = {A, #}. Dann k¨onnte δ folgendermaßen definiert sein: δ(z0 , a, #) = {(z0 , #), (z0 , A#)}

δ(z1 , a, #) = ∅

δ(z0 , a, A) = {(z0 , A), (z0 , AA)}

δ(z1 , a, A) = ∅

δ(z0 , b, #) = ∅

δ(z1 , b, #) = ∅

δ(z0 , b, A) = {(z1 , )}

δ(z1 , b, A) = {(z1 , )}

δ(z0 , , #) = ∅

δ(z1 , , #) = {(z1 , )}

δ(z0 , , A) = ∅

δ(z1 , , A) = ∅ 1

Es sei angemerkt, dass δ eine vollst¨ andige Funktion ist, und deswegen muss sie f¨ ur alle Kombinationen von Zustand, Alphabetsymbol (oder ) und Kellersymbol definiert sein. ¨ Aus Klarheitsgr¨ unden werden wir die Uberf¨ uhrungsfunktion aber folgendermaßen angegeben: δ(z0 , a, #) 3 (z0 , #)

δ(z1 , b, A) 3 (z1 , )

δ(z0 , a, #) 3 (z0 , A#)

δ(z1 , , #) 3 (z1 , )

δ(z0 , a, A) 3 (z0 , A) δ(z0 , a, A) 3 (z0 , AA) δ(z0 , b, A) 3 (z1 , ) oder noch k¨ urzer selbst folgendermaßen: (z0 , a, #) → (z0 , #)

(z1 , b, A) → (z1 , )

(z0 , a, #) → (z0 , A#)

(z1 , , #) → (z1 , )

(z0 , a, A) → (z0 , A) (z0 , a, A) → (z0 , AA) (z0 , b, A) → (z1 , ). Dabei werden wir davon ausgehen, dass wenn δ(z, a, A) 3 (z 0 , γ) bzw. (z, a, A) → (z 0 , γ) nicht angegeben ist (f¨ ur z ∈ Z, a ∈ Σ ∪ {}, γ ∈ Γ∗ ), dann (z 0 , γ) ∈ / δ(z, a, A) gemeint ist. ¨ Wir werden auch eine graphische Darstellung verwenden. Ein Ubergang (z, a, A) 3 (z 0 , B1 . . . Bn ) wird dann wie folgt angegeben: a, A → B1 . . . Bn

z

z0

Kellerautomat-Beispiel 1 (Folie 250) Geben Sie einen Kellerautomaten M f¨ ur die Sprache L(M ) = {w$wR | w ∈ {a, b}∗ } an. Antwort: M = ({z1 , z2 }, {a, b, $}, {#, A, B}, δ, z1 , #), wobei δ folgendermaßen definiert ist (wir schreiben (z, a, A) → (z 0 , x), falls (z 0 , x) ∈ δ(z, a, A)). (z1 , a, #) (z1 , b, #) (z1 , $, #) (z2 , a, A)

→ → → →

(z1 , A#) (z1 , B#) (z2 , #) (z2 , )

(z1 , a, A) (z1 , b, A) (z1 , $, A) (z2 , b, B)

→ → → →

(z1 , AA) (z1 , BA) (z2 , A) (z2 , )

(z1 , a, B) (z1 , b, B) (z1 , $, B) (z2 , , #)

→ → → →

(z1 , AB) (z1 , BB) (z2 , B) (z2 , )

Graphisch dargestellt sieht der Kellerautomat folgendermaßen aus: a, #→A#, b, #→B#, a, A→AA, b, A→BA, a, B→AB, b, B→BB

z1

a, A→, b, B→, , #→ $, #→#, $, A→A, $, B→B

z2

Wenn ein Pfeil zwei Beschriftungen hat (z.B. angegeben als $, #→#, $, A→A, $, B→B“) heißt ” ¨ das, dass er zwei Uberg¨ ange repr¨ asentiert (genauso haben wir das auch bei endlichen Automaten gemacht).

2

Zu Folie 245 `∗ bezeichnet die reflexive und transitive H¨ ulle von `. Das heißt, dass (z, w, γ) `∗ (z 0 , w0 , γ 0 ), wenn 0 0 0 (z , w , γ ) in keinem, einem oder mehreren Schritten aus (z, w, γ) erreicht werden kann. In anderen Worten: (z, w, γ) `∗ (z 0 , w0 , γ 0 ) genau dann, wenn es Konfigurationen k1 , . . . , kn gibt, so dass k1 = (z, w, γ), kn = (z 0 , w0 , γ 0 ) und ki ` ki+1 , f¨ ur 0 < i < n gilt.

Kellerautomat-Beispiele Beispiel 1. (Folie 254) Aufgabe: Sei Σ = {a, b} das Alphabet. Geben Sie einen Kellerautomaten an, der die folgende Sprache akzeptiert: L = {wwR | w ∈ {a, b}∗ }. Antwort: M = ({z1 , z2 }, {a, b}, {#, A, B}, δ, z1 , #), wobei δ wie folgt definiert ist: (z1 , a, #) (z1 , b, #) (z1 , , #) (z2 , a, A)

→ → → →

(z1 , A#) (z1 , B#) (z2 , #) (z2 , )

(z1 , a, A) (z1 , b, A) (z1 , , A) (z2 , b, B)

→ → → →

(z1 , AA) (z1 , BA) (z2 , A) (z2 , )

(z1 , a, B) (z1 , b, B) (z1 , , B) (z2 , , #)

→ → → →

(z1 , AB) (z1 , BB) (z2 , B) (z2 , )

Ein Ablauf dieses Kellerautomaten, wobei der Automat mit einem leeren Keller endet: (z1 , aabbaa, #) ` (z1 , abbaa, A#) ` (z1 , bbaa, AA#) ` (z1 , baa, BAA#) ` (z2 , baa, BAA#) ` (z2 , aa, AA#) ` (z2 , a, A#) ` (z2 , , #) ` (z2 , , ) Es gibt aber auch Abl¨ aufe, die nicht in den leeren Keller enden: (z1 , aabbaa, #) ` (z1 , abbaa, A#) ` (z1 , bbaa, AA#) ` (z1 , baa, BAA#) ` (z1 , aa, BBAA#) ` (z1 , a, ABBAA#) ` (z2 , a, ABBAA#) ` (z2 , , BBAA#) Ein Wort wird von dem Kellerautomaten akzeptiert, falls es mindestens einen Ablauf gibt, der mit einem leeren Keller endet (und das ganze Eingabewort eingelesen hat). In diesem Fall wird aabbaa also von dem Automaten akzeptiert. Beispiel 2. (Folie 255, oben) Aufgabe: Sei Σ = {a, b} das Alphabet. Geben Sie einen Kellerautomaten an, der die folgende Sprache akzeptiert: L1 = {an bm | 1 ≤ n ≤ m} L¨ osung: Wir brauchen zwei Zust¨ ande: • z1 : Einlesen der a’s (Anfangszustand) In diesem Zustand liest der Automat die a’s ein, und speichert die Anzahl der a’s auf den Keller (in un¨ arer Darstellung, das heißt die Anzahl der Symbolen auf dem Keller entspricht der Anzahl der gelesenen a’s). • z2 : Einlesen der b’s In diesem Zustand baut der Automat den Keller ab. F¨ ur jedes Kellersymbol, das auf dem Keller liegt, muss ein b eingelesen werden. Weil es nur gefordert ist, dass die Anzahl der b’s gr¨oßer oder gleich der Anzahl der a’s ist, k¨onnen auch b’s eingelesen werden, ohne den Keller zu ¨ andern. 3

Formal dargestellt, l¨ asst sich der Kellerautomat M1 folgendermaßen definieren: M1 = (Z, Σ, Γ, δ, z1 , #), wobei Z = {z1 , z2 }, Σ = {a, b}, Γ = {A, #} und δ folgendermaßen definiert ist: (z1 , a, #) → (z1 , A#) (z1 , a, A) → (z1 , AA) (z1 , , #) → (z2 , #) (z1 , , A) → (z2 , A) (z2 , b, #) → (z2 , )

wenn das einzulesene Symbol ein a ist push A auf den Keller oder springe nicht-deterministisch zu Zustand z2 um den Keller abzubauen lese ein b ein, und pop optional

(z2 , b, #) → (z2 , #)

das oberste Symbol (A oder #) vom Keller

(z2 , b, A) → (z2 , )

(ein a soll in z2 nie eingelesen werden)

(z2 , b, A) → (z2 , A) (z2 , , #) → (z2 , )

sorgt daf¨ ur, dass der PDA aufh¨oren kann, wenn n = m

Beispiel 3. (Folie 255, unten) Aufgabe: Sei Σ = {a, b, $}. Geben Sie einen Kellerautomaten an, der die folgende Sprache akzeptiert: L2 = {x$y | x ∈ {a, b}∗ , y ∈ {a, b}∗ , x 6= y} L¨ osung: Die Sprache besteht aus W¨ ortern der Form x$y, wobei x und y nicht gleich sind. Weil wir nur das oberste Kellerzeichen betrachten k¨onnen, reicht es nicht den Teil des Wortes vor dem $ auf dem Keller zu speichern: das Wort befindet sich dann in umgekehrter Reihenfolge auf dem Keller. Wir m¨ ussen uns also u ufen k¨onnen, dass die zwei Teilen des ¨berlegen, wie wir u ¨berpr¨ Wortes (x und y) ungleich sind ohne den ganzen ersten Teil (x) auf den Keller zu pushen. Es gibt zwei m¨ ogliche Gr¨ unde, warum x und y ungleich sind: entweder gibt es eine nat¨ urliche Zahl i, so dass das i-te Symbol vom x ungleich dem i-ten Symbol vom y ist, oder x und y haben eine unterschiedliche L¨ ange. Wir versuchen jetzt einen Automaten zu bauen, der w¨ahrend dem Einlesen von x nichtdeterministisch entweder eine Position w¨ahlt, in der sich x und y unterscheiden, oder die L¨ ange u uft. Im ersten Fall wird die Position auf den Keller gespeichert, im zweiten Fall ¨berpr¨ die L¨ ange von x. Unser Automat besteht aus den folgenden Zust¨anden: • z1 : x und Stelle oder L¨ ange w¨ ahlen Wenn ein a eingelesen wird, kann nichtdeterministisch entschieden werden, zu z3 zu gehen (um zu u ufen, ob das entsprechende Symbol von y ein b ist). ¨berpr¨ Wenn ein b eingelesen wird, kann nichtdeterministisch entschieden werden, zu z5 zu gehen (um zu u ufen, ob das entsprechende Symbol von y ein a ist). ¨berpr¨ In beiden F¨ allen kann man auch in z1 bleiben und ein 1 auf den Keller pushen, so dass eine andere Position oder die L¨ ange gew¨ahlt werden kann. Wenn $ eingelesen wird, geh zu z2 um die L¨ ange zu u ufen. ¨berpr¨ • z2 : L¨ ange von y u ufen ¨berpr¨ Dieser Zustand u uft, ob y eine andere Anzahl von Symbolen hat, als es Symbolen auf ¨berpr¨ dem Keller gibt. Ein Wort wird akzeptiert, sobald entweder der Keller leer ist (in diesem Fall wird in z7 gewechselt um den Rest der Eingabe einzulesen), oder das Eingabewort vollst¨ andig gelesen wurde (in diesem Fall wird in z8 gewechselt um den Keller zu leeren), aber nicht gleichzeitig.

4

• z3 : Rest von x einlesen 1 Zusammen mit z4 u uft dieser Zustand, ob die entsprechende Position von y ein b enth¨alt. ¨berpr¨ Insbesondere, liest dieser Zustand die restlichen Symbole von x ein, ohne den Keller zu andern, und wechselt dann in z4 . ¨ • z4 : Position u ufen 1 ¨berpr¨ Wenn es noch Symbole auf dem Keller gibt, wird ein Symbol von der Eingabe eingelesen und das oberste Kellersymbol gepopt. Sonst, wird b eingelesen und in den Akzeptanzzustand z7 gewechselt. (Es gibt in diesem Fall ¨ keine Uberg¨ ange, wo ein a eingelesen wird.) • z5 und z6 : Anolog zu z4 und z5 , aber es wird auf a gepr¨ uft und nicht auf b. • z7 : Akzeptanzzustand 1 Der Rest des Eingabewortes wird eingelesen und schließlich das Kellerbodenzeichen vom Keller entfernt. • z8 : Akzeptanzzustand 2 In diesem Zustand wird den Keller abgebaut, aber kein Teil der Eingabe gelesen. Der Automat M2 wird formal wie folgt dargestellt: M2 = (Z, Σ, Γ, δ, z1 , #)

5

¨ wobei Z = {z1 , z2 , z3 , z4 , z5 , z6 , z7 }, Σ = {a, b, $}, Γ = {1, #} und δ enth¨alt die folgende Uberg¨ ange: Zustand z 1

Zustand z 2

(z1 , a, #) → (z1 , 1#)

(z2 , a, 1) → (z2 , )

(z1 , a, 1) → (z1 , 11)

(z2 , b, 1) → (z2 , )

(z1 , a, #) → (z3 , #)

(z2 , a, #) → (z7 , #)

(z1 , a, 1) → (z3 , 1)

(z2 , b, #) → (z7 , #)

(z1 , b, #) → (z1 , 1#)

(z2 , , 1) → (z8 , )

(z1 , b, 1) → (z1 , 11) (z1 , b, #) → (z5 , #) (z1 , b, 1) → (z5 , 1) (z1 , $, #) → (z2 , #) (z1 , $, 1) → (z2 , 1) Zustand z 3

Zustand z 5

(z3 , a, #) → (z3 , #)

(z5 , a, #) → (z5 , #)

(z3 , a, 1) → (z3 , 1)

(z5 , a, 1) → (z5 , 1)

(z3 , b, #) → (z3 , #)

(z5 , b, #) → (z5 , #)

(z3 , b, 1) → (z3 , 1)

(z5 , b, 1) → (z5 , 1)

(z3 , $, #) → (z4 , #)

(z5 , $, #) → (z6 , #)

(z3 , $, 1) → (z4 , 1)

(z5 , $, 1) → (z6 , 1)

Zustand z 4

Zustand z 6

(z4 , a, 1) → (z4 , )

(z6 , a, 1) → (z6 , )

(z4 , b, 1) → (z4 , )

(z6 , b, 1) → (z6 , )

(z4 , b, #) → (z7 , #)

(z6 , a, #) → (z7 , #)

Zustand z 7

Zustand z 8

(z7 , a, #) → (z7 , #)

(z8 , , 1) → (z8 , )

(z7 , b, #) → (z7 , #)

(z8 , , #) → (z8 , )

(z7 , , #) → (z7 , )

Kontextfreie Grammatik → PDA (Folie 258/259) Kellerautomaten k¨ onnen in einem Konfigurations¨ ubergang ein Symbol auf dem Keller durch mehrere verschiedene ersetzen. Deswegen k¨onnen wir den Keller verwenden, um das ableiten eines Wortes zu simulieren. Weil wir u ¨ber kontextfreie Grammatiken reden, k¨onnen Terminalsymbole nicht mehr durch etwas anderes ersetzt werden (nur einzelne Variablen k¨onnen ersetzt werden). Das heißt, dass Terminalsymbolen, die links von der ersten Variable vorkommen (¨ uber der h¨ochsten Variable auf dem Stack) und die mit der Eingabe u ¨bereinstimmen, ohne Probleme entfernt werden k¨onnen, damit eine Variable wieder das erste Symbol ist. Beispiel von Folie 259: Wenn wir die Konstruktion auf die Beispielgrammatik anwenden, kommt folgender Kellerautomat M raus: M = ({z}, {[, ]}, {S, [, ]}, δ, z, S),

6

wobei δ wie folgt gegeben ist: (z, [, [) → (z, ) (z, ], ]) → (z, ) (z, , S) → (z, [S]S) (z, , S) → (z, )

PDA → kontextfreie Grammatik (Folien 262–269) Produktionformen: • S → (z0 , #, z) f¨ ur alle z ∈ Z. Aus (z0 , #, z) k¨ onnen, nach Beweisidee, die W¨orter abgeleited werden, die der Kellerautomat einliest, wenn er im Anfangszustand startet, in z (der beliebig ist) endet, und dabei das Kellerbodenzeichen abbaut. Das heißt, dass aus S alle W¨orter der Sprache abgeleitet werden k¨ onnen, wie gew¨ unscht. • (z, A, z 0 ) → a falls (z 0 , ) ∈ δ(z, a, A). Der Kellerautomat kann, wenn er sich im Zustand z befindet, bei Einlesen von a und Abbauen von A, in Zustand z 0 wechseln. • (z, A, z 0 ) → a(z1 , B1 , z2 )(z2 , B2 , z3 ) . . . (zk , Bk , z 0 ) falls (z1 , B1 . . . Bk ) ∈ δ(z, a, A), wobei z2 , . . . , zk ∈ Z. Der Kellerautomat kann, bei Einlesen von a, von Zustand z den Zustand z1 erreichen, indem das oberste Kellerzeichen A durch B1 . . . Bk ersetzt wird. Um den Keller um ein Symbol zu verringern, m¨ ussen nun die Kellersymbolen B1 , . . . , Bk entfernt werden. Wir haben die folgende Situation:

A z

a

B1 B2

B2

Bk

Bk

z1

x1

Bk

z2

x2 . . . xk−1

zk

xk

z0

Wenn wir annemen, dass, f¨ ur 1 ≤ i ≤ k, (zi , Bi , zi+1 ) ⇒∗ xi (mit z 0 = zk ), dann kann der Kellerautomat bei Einlesen von ax1 . . . xk und Entfernen von A von dem Keller von Zustand z in Zustand z 0 kommen.

Beispiel von Folie 268: Wenn wir die Konstruktion auf den Beispielautomaten anwenden, kommt folgende kontextfreie Grammatik G raus: G = (V, Σ, P, S) wobei V = {S} ∪ Z × Γ × Z (d.h., dass V aus S und 3-Tupeln von Zustand, Kellersymbol und Zustand besteht) und P aus den folgenden Produktionen besteht: Produktionen der ersten Form: S → (z1 , #, z1 ) S → (z1 , #, z2 ) 7

Produktionen der zweiten Form: (z1 , A, z2 ) → b (z2 , A, z2 ) → b (z2 , #, z2 ) →  Produktionen der dritten Form: (z1 , #, z1 ) → a(z1 , A, z1 )(z1 , #, z1 ) (z1 , #, z2 ) → a(z1 , A, z1 )(z1 , #, z2 ) (z1 , #, z1 ) → a(z1 , A, z2 )(z2 , #, z1 ) (z1 , #, z2 ) → a(z1 , A, z2 )(z2 , #, z2 ) (z1 , A, z1 ) → a(z1 , A, z1 )(z1 , A, z1 ) (z1 , A, z2 ) → a(z1 , A, z1 )(z1 , A, z2 ) (z1 , A, z1 ) → a(z1 , A, z2 )(z2 , A, z1 ) (z1 , A, z2 ) → a(z1 , A, z2 )(z2 , A, z2 )

Als ein Hinweis darauf, dass die Ergebnisgrammatik tats¨achlich die richtige Sprache akzeptiert, folgt hier ein Syntaxbaum f¨ ur das Wort aabb: S (z1 , #, z2 ) a

(z1 , A, z2 ) a

(z2 , #, z2 )

(z1 , A, z2 ) (z2 , A, z2 ) b

b

8