A Lösung

Werbung
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
Herunterladen