¨Ubungen zu “Grundlagen der Programm

Werbung
Technische Universität München
Institut für Informatik
Prof. Manfred Broy
Dr. M. Spichkova
V. Bauer, V. Koutsoumpas
WS 12/13
14. Dez. 2012
Übungsblatt 8
Übungen zu
“Grundlagen der Programm- und Systementwicklung”
Aufgabe 1 Striktheit, Sequentielle Erweiterung
Wir betrachten flach geordnete Sorten A⊥ = A ∪ {⊥} mit kleinstem Element ⊥.
Eine Funktion f : An → B heißt sequentiell, wenn f konstant ist oder ein i ∈ [1, n]
existiert, sodass f (x1 , . . . , xi−1 , ⊥, xi+1 , . . . , xn ) = ⊥ und fa (x1 , . . . , xi−1 , xi+1 , . . . , xn ) =
f (x1 , . . . , xi−1 , a, xi+1 , . . . , xn ) eine sequentielle Funktion ist, für jedes a ∈ A.
Nicht sequentielle Funktionen heißen parallel.
Die boolesche Funktion < sei definiert durch (a < b) = (¬a ∧ b).
(a) Geben Sie alle nicht-strikten, sequentiellen Erweiterungen der durch (a < b) =
(¬a ∨ b) auf Bool definierten Funktion < an.
(b) Welche Beziehungen (im Sinne der Ordnung v) gelten zwischen den Funktionen?
(c) Lassen sich die booleschen Funktionen <, = und ∨ derart nicht-strikt und monoton
erweitern, dass (a ≤ b) = ((a < b) ∨ (a = b)) auf Bool⊥ gilt?
(d) Geben Sie jeweils eine bzgl. v maximale und monotone Erweiterung der booleschen
Funktion ≤ und der arithmetischen Funktion ∗ : N, N → N auf den natürlichen
Zahlen mit Null an. Welche dieser Erweiterungen sind parallel?
(e) Gibt es eine strikte, zweistellige boolesche Funktion, die zwar eine nicht-strikte,
monotone Erweiterung hat, aber keine parallele, monotone Erweiterung?
Aufgabe 2 Funktionale Programmierung
Ein Geldwechselautomat soll modelliert werden. Die Aufgabe besteht darin, einen Geldbetrag als Summe von Münzen vorgegebenen Wertes auszugeben. Dabei kann davon
ausgegangen werden, dass zu jedem Münzwert unbeschränkt viele Münzen zur Verfügung
stehen.
Sind die Münzwerte 10, 5, 2 vorhanden und ist der Betrags 36 zu wechseln, ist beispielsweise die Sequenz < 10 10 10 2 2 2 > eine mögliche Ausgabe. Der Betrag 3 läßt sich mit
diesen Münzwerten nicht wechseln.
1
Schreiben Sie ein funktionales Programm in der Notation der Vorlesung oder in einer beliebigen anderen funktionalen Programmiersprache (z.B. Haskell, ML), das diese Aufgabe
löst.
Überlegen Sie sich weiter, wie Sie die Fälle abdecken, dass
(a) ein Geldbetrag nicht gewechselt werden kann, und
(b) die minimale Zahl von Münzen ausgegeben werden.
Testen Sie Ihr Programm mit den Münzen 9, 6, 5, 3, 1 und dem Betrag 377.
Aufgabe 3 Terminierungsbeweis, Abstiegsfunktion
Wir wollen beweisen, dass die folgende Rechenvorschrift (Sortieralgorithmus Quicksort)
für beliebige Argumente terminiert.
qsort : Seq Nat → Seq Nat
qsort(hi) = hi
qsort(hpi ◦ l) = qsort(less(p, l)) ◦ hpi ◦ qsort(geq(p, l))
Geben Sie dazu eine geeignete Abstiegsfunktion an und führen Sie mit dieser den Terminierungsbeweis.
2
Herunterladen