Algebra des Programmierens - Informatik Uni Leipzig

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