Technische Universität München Institut für Informatik Prof. Manfred Broy Dr. K. Spies and A. Fleischmann Dr. M. Spichkova and D. Ratiu WS 2007/08 16. Januar 2008 Übungsblatt 10 Übungen zu Grundlagen der Programm- und Systementwicklung“ ” Den Schein über die erfolgreiche Teilnahme an der Vorlesung und den Übungen erhalten Sie mit dem Bestehen der Semestralklausur. Der Klausurtermin ist Mittwoch, 6. Februar 2008, von 14:00 - 15:30 Uhr im Raum 01.11.018 Konrad Zuse“. ” Bitte melden Sie sich verbindlich zu der Klausur durch eine Mail (mit Vorname, Name und Matrikelnummer; Betreff: “Anmeldung: Grupsy Klausur“ ) an [email protected] und [email protected] an. An die bereits angemeldeten Teilnehmer wurde eine Bestätigung verschickt. Wer sich angemeldet, aber keine Bestätigung erhalten hat, soll sich noch einmal anmelden. Aufgabe 1 Funktionen höherer Stufe und Unterspezifikation Schreiben Sie eine Sortierfunktion für eine Liste mit folgenden Eigenschaften: Der Typ der Listenelemente ist unterspezifiziert. Die Eigenschaft, nach der die Liste sortiert sein soll, ist unterspezifiziert. Aufgabe 2 Rekursive Funktionen auf unendlichen Sequenzen Gegeben sei eine unendliche Sequenz von natürlichen Zahlen, dargestellt als eine Funktion Nat → Nat. (Diese Funktion bildet die Position in der Sequenz auf den Eintrag ab.) Wir definieren die Funktion search, die das erste Vorkommen einer gegebener Zahl in der Sequenz findet: 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) fi; 1 (a) Stellen Sie die Funktionen search from index0 , search from index1 , search from index2 , . . . auf, die die Funktion search from index approximieren. (b) Stellen Sie eine Hypothese auf, wie der Grenzwert search from index∞ aussieht. (c) Beweisen Sie, dass dieser Grenzwert tatsächlich der kleinste Fixpunkt ist. (d) Für welche Werte der Eingabeparameter terminiert die Funktion? Stellen Sie für diese Werte eine Abstiegsfunktion auf und beweisen Sie, dass es sich dabei tatsächlich um eine Abstiegsfunktion handelt. Aufgabe 3 Funktionen höherer Stufe Seien die Funktionen f , g und add gegeben: f : ((N at → N at), N at → Bool), Bool → (N at → N at) g : (N at → Bool), (N at → N at → Bool) → Seq α → Bool add : (N at → N at) → N at (a) Welche Stufen haben diese funktionalen Sorten? (b) Besprechen Sie die Anwendungen der curry-Funktion zu den Funktionen f , g und add. Auf welche der Funktionen kann die curry-Funktion angewandt werden bzw. wann macht eine solche Anwendung überhaupt Sinn? 2