Mathematisch-
Naturwissenschaftliche Fakultät
Programmiersprachen Prof. Klaus Ostermann
Leitung des Seminars David Binder Ingo Skupin
Kategorientheorie für Programmierer
Hausaufgabenblatt 10 – WS19
Tübingen, 16. Januar 2020Aufgabe 1: Lektüre
Für die nächste Sitzung lesen Sie bitte Kapitel 24 im Buch (ohne das Unterkapitel 24.6).
Aufgabe 2: Natural Number Object (NNO)
In einer KategorieCmit terminalem Objekt 1lässt sich die kategorielle Variante von natürlichen Zahlen defi- nieren: ein natural number object. (Wie immer gilt, dass nicht jede Kategorie natural number objects besitzt.)
Ein natural number object ist gegeben durch ein ObjektNund Morphismenz: 1→Nsowies:N→Nmit folgender universeller Eigenschaft: Für jedes ObjektAund Morphismenq : 1→ A undf : A → Aexistiert exakt ein Morphismusc:N→Asodass das folgende Diagramm kommutiert:
1 N N
A A
z
q
s
c c
f
1. Programmieren Sie in Haskell die Funktionc, welchequndf als Argumente erhält.
2. Wie müssen A, qund f inHaskaussehen, damitc die Funktion ist, welche eine Zahln auf ihre unär kodierte Darstellung abbildet?
3. Die im obigen Diagramm enthaltene Information lässt sich in einer Kategorie mit Koprodukten auch an- ders anordnen. Übersetzen Sie das obige Diagramm in folgendes Schema und tragen die fehlenden Informationen nach.
+ +
Aufgabe 3: Programmieren mit Catamorphismen
Gegeben sei der folgende Datentyp für einfache arithmetische Ausdrücke.
data ExprF e = L i t I n t
| Var S t r i n g
| Add e e
| M u l t e e type E x p r e s s i o n = F i x ExprF zusammen mit
type Env = [ (String,I n t) ]
lookupEnv : : Env −> S t r i n g −> Maybe I n t lookupEnv [ ] _ = Nothing
lookupEnv ( ( x , v ) : xs ) s = i f s == x then Just v
else lookupEnv xs s
Geben Sie eine Funktor-Instanz fürExprFan und definieren Sie eineeval-, eine pretty- sowie einesubst- Funktion fürExpression mithilfe voncata :: (ExprF a -> a) -> Expression -> a. Dabei werteteval ::
Env -> Expression -> Maybe Inteinen Ausdruck aus,pretty :: Expression -> Intpretty-printet einen Ausdruck und subst :: String -> Int -> Expression -> Expressionersetzt innerhalb eines Ausdrucks alle Vorkommen einer Variable durch einen Wert.
Aufgabe 4: Bäume als F-Algebren
Der induktive Typ von Listen mit Elementen inaist in Haskell durch folgende Definition gegeben:
data L i s t F a r = Empty | Cons a r type L i s t a = F i x ( L i s t F a )
Der FunktorListFlässt sich formal auch schreiben alsFa(r) = 1+(a×r). Anstelle vonFix (ListF a)benutzt man die alternative Schreibweiseµr.Fa(r).
Geben Sie zwei Funktoren Ba(r) und Ka(r) an, sodass die initialen Ba(r)- und Ka(r)-Algebren gerade jeweils Binärbäumen mit blatt- beziehungsweise knotenorienterter Speicherung entsprechen.
Seite 2/2