Technische Universität München Institut für Informatik Prof. Dr. M. Broy Dr. A. Malkis, V. Bauer, D. Marmsoler WiSe 2013/14 Übungsblatt 11 Ausgabe: 8. Januar 2014 Besprechung: 20. Januar 2014 Übungen zu „Grundlagen von Programm- und Systementwicklung“ Aufgabe 1 Rekursive Funktionen auf unendlichen Sequenzen Für eine unendliche Sequenz seq von natürlichen Zahlen, dargestellt als eine Funktion Nat → Nat (diese Funktion bildet die Position in der Sequenz auf den Eintrag ab), und eine Position x definieren wir search(x, seq) als das erste Vorkommen von x in seq: fct search = (x : Nat, seq: Nat -> Nat) Nat: search_from_index (x, seq, 0); fct search_from_index = (x : Nat, seq: Nat -> Nat, start : Nat) Nat: if (seq(start)=x) then start else search_from_index (x, seq, start+1); (a) Sei τ das der Deklaration von search_from_index zugeordnete Funktional. Geben Sie eine explizite äquivalente Definition für die Funktion search_from_index i = τ i (λ x : Nat, seq : Nat → Nat, start : Nat. ⊥) für alle i ∈ N an, so dass ihre Definition nichtrekursiv ist, und in der τ nicht vorkommt. (b) Geben Sie sup{search_from_index i | i ∈ N} an. (c) Ist das Supremum der kleinste Fixpunkt von τ ? Zeige oder widerlege. (d) Für welche Werte der Eingabeparameter terminiert search? Stellen Sie für diese Werte eine Abstiegsfunktion auf und beweisen Sie, dass es sich dabei tatsächlich um eine Abstiegsfunktion handelt. Aufgabe 2 wp- und wlp-Semantik Betrachten Sie die folgende Erweiterung von NAT: SPEC EXT_NAT = { based_on NAT, ≤: Nat,Nat→Bool, ÷: Nat,Nat→Nat, even: Nat→Bool, 0 ≤ x = true, succ(x) ≤ 0 = false, succ(x) ≤ succ(y) = x ≤ y, x 6= 0 ⇒ x ∗ (y ÷ x) ≤ y = true ∧ x ∗ succ(y ÷ x) ≤ y = false, even(0) = true, even(succ(0)) = false, even(succ(succ(x))) = even(x) } Seien im folgenden die Variablen x, y und z von der Sorte Nat und 1, 2, 3 wie üblich als succ(0), succ(succ(0)) und succ(succ(succ(0))) definiert. Geben Sie für jedes der folgenden Prädikate eine in jedem Modell von EXT_NAT äquivalente quantorenfreie Formel ohne wp und wlp an. (a) wp(x := x + 1, x ≤ 1). (b) wp if y ≤ x then z := x [] x ≤ y then z := y fi , z = max{x, y} , wobei z = max{x, y} eine Abkürzung für (x ≤ y ∧ z = y) ∨ (y ≤ x ∧ z = x) ist. (c) wlp if y ≤ x then z := x [] x ≤ y then z := y fi , z + 1 = y . (d) (Optionale Aufgabe) wlp((y := 1; z := 3; do y ≤ x then y := y + z; z := z + 2 od; z := √ z ÷ 2 − 1) , z = b xc) √ Hierbei ist b√ ·c : Nat √ → Nat wie üblich spezifiziert: √ √ ∀ x ∈ Nat : b xc ∗ b xc ≤ x ∧ not(succ(b xc) ∗ succ(b xc) ≤ x). (e) (Optionale Aufgabe, erhöhter Schwierigkeitsgrad) wp((do even(x) then x := x ÷ 2 [] not(even(x)) then x := 3 ∗ x + 1 od), x = 1). Lösungen dieser optionalen Aufgaben können bis zur Besprechung abgegeben werden, sie werden korrigiert. Musterlösungen wird es dazu nicht geben.