UNIVERSITÄT LEIPZIG Priv.-Doz. Dr. Stefan Milius Abteilung Algebraische und logische Grundlagen der Informatik Leipzig, 14. Oktober 2015 Algebra des Programmierens Aufgabenblatt Nr. 1 – Abgabetermin: 21. Oktober 2013 Aufgabe 1 Definieren Sie eine Funktion uncurry und beweisen Sie, dass die Funktionen curry und uncurry zueinander invers sind, d.h. curry · uncurry = id und uncurry · curry = id . Aufgabe 2 Geben Sie eine “elementfreie” Definition der Funktion mult : Nat × Nat → Nat, die natürliche Zahlen multipliziert. Hinweis: Schreiben Sie curry mult : Nat → (Nat → Nat) als foldn(c, h) für geeignete c und h. Aufgabe 3 Geben Sie eine “elementfreie” Definition der Fakultätsfunktion fac : Nat → Nat mit foldn. Hinweis: es ist einfacher, erst die Funktion n 7→ (n, n!) zu definieren. Aufgabe 4 Geben Sie eine “elementfreie” Definition der Funktion take n : list A → list A, die eine gegebene Liste auf Länge n kürzt (und kürzere Listen so lässt). Aufgabe 5 Beweisen Sie, dass die Familie der Funktion list : (A → B) → (list A → list B) (indiziert durch die Datentypen A und B) funktoriell ist, d. h. (a) list id = id (b) list g ◦ list f = list (g ◦ f ) für alle Funktionen f : A → B und g : B → C. 1 Letzte Änderung: 13. Oktober 2015