2.0 VO Theorie der Informatik (Wirtschaftsinformatik) 2.0 VO Einführung in die Theorie der Informatik (Datentechnik) 28. Juni 2002 Kennzahl Matrikelnummer Familienname Vorname Lösung Gruppe A 1.) Geben Sie einen minimalen deterministischen Automaten an, der die durch den egrepAusdruck (BC?)*[AC]?[BA]+ beschriebene Sprache akzeptiert. Überprüfen Sie die Minimalität mit einer Unterscheidbarkeitstabelle. (12 Punkte) Lösung: Indeterministischer Automat: 2m A,B B C, 6 ? m m A,C, - 3m A,B - 4j - 1l δ∗ 1 2 3 4 A B C {3, 4} {1, 2, 3, 4} {3} {3, 4} {1, 2, 3, 4} {1, 3} {4} {4} {} {4} {4} {} • • • • δ̂ A B C {1} {3, 4} {1, 2, 3, 4} {3} {3, 4} {4} {4} {} {1, 2, 3, 4} {3, 4} {1, 2, 3, 4} {1, 3} {3} {4} {4} {} {4} {4} {4} {} {} {} {} {} {1, 3} {3, 4} {1, 2, 3, 4} {3} . . . Endzustand Die Zustände {1} und {1, 3} sind offenbar ununterscheidbar: beides sind keine Endzustände (also nicht durch das Leerwort unterscheidbar) und jedes der drei möglichen Eingabesymbole führt in denselben Folgezustand. Analoges gilt für {3, 4} und {4}: beides sind Endzustände (also nicht durch das Leerwort unterscheidbar) und jedes der drei möglichen Eingabesymbole führt in denselben Folgezustand. Durch Zusammenfassen dieser beiden Zustandspaare ergibt sich folgende einfachere Übergangsfunktion: δ̂ 0 {1} {3} • {4} • {1, 2, 3, 4} {} {3} CA A B C {4} {1, 2, 3, 4} {3} {4} {4} {} {4} {4} {} {4} {1, 2, 3, 4} {1} {} {} {} {4} {1, 2, 3, 4} CA {} A A {1} {3} {4} {1, 2, 3, 4} Wie die Unterscheidbarkeitstabelle zeigt, sind die verbleibenden Zustände voneinander unterscheidbar. Als minimalen deterministischen Automaten erhalten wir somit h{{1}, {3}, {4}, {1, 2, 3, 4}, {}}, {A, B, C}, δ̂ 0 , {1}, {{4}, {1, 2, 3, 4}}i oder graphisch: m C {3} @ @ A,B @ ? l m {1} A @ ? R @ j m {4} 6 A,B C B - j m B {1, 2, 3, 4} A 2.) Sei M folgende Teilmenge der Anweisungen in Modula. Eine Anweisung ist entweder eine Zuweisung, ein Block, ein Konditional, eine Exit-Anweisung oder eine Schleife. Eine Zuweisung besteht aus einem Bezeichner und einem Ausdruck, getrennt durch :=. Ein Block ist eine Anweisungsfolge zwischen BEGIN und END. Ein Konditional besteht aus einem If-Teil, gefolgt von einer beliebigen Anzahl von Elsif-Teilen (auch null), optional gefolgt von einem Else-Teil, und beendet mit dem Schlüsselwort END. Ein If-Teil beginnt mit IF, gefolgt von einem Ausdruck, dem Wort THEN und einer Anweisungsfolge. Ein Elsif-Teil sieht ebenso aus, beginnt aber mit ELSIF statt mit IF. Ein Else-Teil besteht aus einer Anweisungsfolge, der das Wort ELSE vorangeht. Eine Exit-Anweisung besteht lediglich aus dem Wort EXIT. Eine Schleife ist eine Anweisungsfolge zwischen LOOP und END. Eine Anweisungsfolge ist eine nicht-leere Folge von Anweisungen, die durch Strichpunkte getrennt sind. Ein Bezeichner ist eine Folge von Buchstaben und Ziffern, die mit einem Buchstaben beginnt. Geben Sie eine kontextfreie Grammatik in Ebnf an, die die Sprache M erzeugt. Nehmen Sie an, dass bereits ein Nonterminalsymbol hAusdrucki mit geeigneten Produktionen existiert, das die Menge der Ausdrücke erzeugt. Verwenden Sie so weit als möglich Ebnf-Notationen, um die Grammatik übersichtlich zu halten. (10 Punkte) Lösung: Eine mögliche Lösung ist hV, T, P, Anweisungi mit V T P = {Anweisung, Zuweisung, Block , Konditional , If , Elsif , Else, Exit, Loop, Anweisungsfolge, Bezeichner , Buchst, Ziff , Ausdruck} , = {:=, BEGIN, END, IF, THEN, ELSIF, ELSE, EXIT, LOOP, ;, A, . . ., Z, a, . . ., z, 0, . . ., 9} , = {Anweisung ⇒ Zuweisung | Block | Konditional | Exit | Loop , Zuweisung ⇒ Bezeichner := Ausdruck , Block ⇒ BEGIN Anweisungsfolge END , Konditional ⇒ If { Elsif } [ Else ] END , If ⇒ IF Ausdruck THEN Anweisungsfolge , Elsif ⇒ ELSIF Ausdruck THEN Anweisungsfolge , Else ⇒ ELSE Anweisungsfolge , Exit ⇒ EXIT , Loop ⇒ LOOP Anweisungsfolge END , Anweisungsfolge ⇒ Anweisung { ; Anweisung } , Bezeichner ⇒ Buchstabe { Buchstabe | Ziffer } , Buchstabe ⇒ A | ··· | Z | a | ··· | z , Ziffer ⇒ 0 | ··· | 9 , Ausdruck ⇒ ··· } . 3.) Zeigen Sie mit Hilfe des Hoare-Kalküls die Gültigkeit der folgenden partiellen Korrektheitsaussage über dem Datentyp N. y = 7 {begin x ← y + 1; while 3 ∗ x 6= 4 ∗ y do begin y ← y + 2; x ← x + 3 end end} y = 15 (10 Punkte) Lösung: Mit der Abkürzung B ≡ 3x 6= 4y erhalten wir durch Anwendung der Regeln T1, H3, T2 und H1 folgende Ableitung: h (2) ih i 3 y+2 (I ∧ B) ⊃ I x + x y i h 3 (I ∧ B) {y ← y + 2} I x + x (1) (3) (y = 7 ∧ x = y + 1) ⊃ I (I ∧ B) {begin y ← y + 2; x ← x + 3 end} I (I ∧ ¬B) ⊃ y = 15 (y = 7 ∧ x = y + 1) {while B do begin y ← y + 2; x ← x + 3 end} y = 15 y = 7 {begin x ← y + 1; while 3x 6= 4y do begin y ← y + 2; x ← x + 3 end end} y = 15 Für die Invariante I wählen wir den Ansatz 3y = 2x + c, wobei wir c noch geeignet wählen müssen. Damit lässt sich die Gültigkeit der drei Endformeln nachweisen. (1) (y = 7 ∧ x = y + 1) ⊃ 3y = 2x + c (Äquivalenzumformung links) (y = 7 ∧ x = 8) ⊃ 3y = 2x + c Damit die rechte Seite wahr wird, wenn die linke es ist, wenn also y = 7 ∧ x = 8 gilt, muss für c der Wert 3 · 7 − 2 · 8 = 5 gewählt werden. (2) (3y = 2x + 5 ∧ 3x 6= 4y) ⊃ 3(y + 2) = 2(x + 3) + 5 (3y = 2x + 5 ∧ 3x 6= 4y) ⊃ 3y + 6 = 2x + 6 + 5 (Kürzen) (3y = 2x + 5 ∧ 3x 6= 4y) ⊃ 3y = 2x + 5 Die letzte Formel ist eine Tautologie, daher ist die ursprüngliche Formel (2) gültig in N. (3) (3y = 2x + 5 ∧ ¬3x 6= 4y) ⊃ y = 15 (3y = 2x + 5 ∧ 3x = 4y) ⊃ y = 15 Die linke Seite besteht aus zwei Gleichungen in zwei Variablen, die eindeutig lösbar sind: (9y = 6x + 15 ∧ 6x = 8y) ⊃ y = 15 (9y = 8y + 15 ∧ 6x = 8y) ⊃ y = 15 (y = 15 ∧ x = 20) ⊃ y = 15 Da die Umformungen, die zu dieser Tautologie geführt haben, alle gültig in N sind, ist Formel (3) auch gültig. 4.) Erweitern Sie die imperative Sprache AL(N) um eine for-Schleife, d.h., definieren Sie die formale Syntax und Semantik des Konstrukts for v ← t1 to t2 do α . Diese Schleife initialisiert die Variable v mit dem Wert des Terms t1 und vergleicht sie mit dem momentanen Wert des Terms t2 . Solange v nicht größer als t2 ist, wird das AL-Programm α ausgeführt, der Wert von v um eins erhöht und erneut mit t2 verglichen. Die Schleife terminiert, sobald der Wert von v den aktuellen Wert von t2 übersteigt. Es genügt, die neu zur Definition von AL hinzukommenden Regeln anzugeben. (8 Punkte) Lösung: Syntax: (AL5) for v ← t1 to t2 do α ∈ AL(N) wenn v ∈ IVS , t1 , t2 ∈ T (N) und α ∈ AL(N). oder verbal: (AL5) for v ← t1 to t2 do α ist eine Anweisung der Sprache AL über dem Datentyp N, falls v ein Variablensymbol ist, t1 und t2 Terme über N sind und α eine AL-Anweisung ist. Semantik: Es gibt (mindestens) zwei äquivalente Varianten. Entweder Rückführung auf die whileSchleife: (MAL5) MAL (I, for v ← t1 to t2 do α) = MAL (I, begin v ← t1 ; while v ≤ t2 do begin α; v ← v + 1 end end) Oder eigenständige Definition: (MAL5) 0 MAL (I, for v ← t1 to t2 do α) I falls MT (I, t1 ) > MT (I, t2 ) = MAL (MAL (I 0 , α), for v ← t1 +1 to t2 do α) falls MT (I, t1 ) ≤ MT (I, t2 ) wobei I 0 = MAL (I, v ← t1 ). 5.) Schreiben Sie ein Programm in EXP (L) mit Funcδ (FLACH) = f zur Abflachung von Listen. Das heißt: ist l eine Liste von Listen, liefert f (l) jene Liste, die durch Aneinanderhängen der Listen in l entsteht; formal: f ( ( ( l1,1 l1,2 · · · ) ( l2,1 l2,2 · · · ) ( l3,1 l3,2 · · · ) · · · ) ) = ( l1,1 l1,2 · · · l2,1 l2,2 · · · l3,1 l3,2 · · · ) ˜˜ ˜˜ ˜˜ ˜ ˜ ˜ ˜ Ist l ein Atom, liefert f die leere Liste. Listenelemente in l, die keine geklammerten Listen, also Atome sind, werden ignoriert. Beispiele: f ( ( ( A B C ) ( x ) ( 0 1 ) ) ) = ( A B C x 0 1 ) , f ( ( ( A B ) C ( x ) ( 0 ) 1 ) ) = ( A B x 0 ) , eee e ee e e e e ee ee e e e e e ee ˜ ˜ ePunkte) f ( ( ( () B ) ()˜(˜x ) ( (˜0 )˜ 1 ˜) )˜) =˜ (˜() B x˜( 0 ) 1 ) , f˜(A) =˜(˜) ˜ ˜ ˜ ˜ ˜ ˜ (10 e e e e e e e e e ˜˜ ˜ ˜ ˜ ˜ ˜˜ ˜ ˜ ˜˜ ˜ ˜˜ ˜ ˜ ˜ ˜ ˜ ˜ ˜ Lösung: δFLACH = if atom? ( x1 ) then nil else if eq? ( x1 , nil ) then nil else if atom? ( first ( x1 ) ) then FLACH ( rest ( x1 ) ) else APPEND ( first ( x1 ) , FLACH ( rest ( x1 ) ) ) δAPPEND = if eq? ( x1 , nil ) then x2 build ( first ( x1 ) , APPEND ( rest ( x1 ) , x2 ) ) Beurteilungsschema: 0–24 nicht genügend, 25–30 genügend, 31–37 befriedigend, 38–44 gut, 45–50 sehr gut