Monade (Kategorientheorie)
Eine Monade ist im mathematischen Teilgebiet der Kategorientheorie eine Struktur, die gewisse formale Ähnlichkeit mit den Monoiden der Algebra aufweist.
Inhaltsverzeichnis |
[Bearbeiten] Definition
Eine Monade ist ein Tripel
aus
- einem Funktor T von einer Kategorie K in sich selbst, d.h.
- einer natürlichen Transformation
(dabei steht
für den Identitätsfunktor
) - einer natürlichen Transformation
(dabei steht
für
),
so dass die folgenden Bedingungen erfüllt sind:
, d. h. das folgende Diagramm kommutiert:
, d. h. das folgende Diagramm kommutiert:
Explizit bedeutet die Kommutativität der Diagramme, dass für jedes Objekt
in
die beiden Diagramme
| und |
kommutieren. Die erste Bedingung ist analog zum Assoziativgesetz bei Monoiden, die zweite zur Existenz eines neutralen Elementes.
[Bearbeiten] Beispiele
[Bearbeiten] Adjungierte Funktoren
Ist ein Funktor
zu einem Funktor
linksadjungiert, und sind
bzw. 
Einheit bzw. Koeinheit der Adjunktion, so ist
mit

also
für Objekte 
eine Monade.
Dies ist im gewissen Sinn auch schon das einzige Beispiel, da jede Monade auf diese Weise entsteht, jedenfalls bis auf Isomorphie: Wir betrachten dazu für eine Monade
die Kategorie
der sogenannten
-Algebren. Objekte dieser Kategorie sind Paare
wobei
ein Objekt von
und
ein Morphismus in
ist. Ein Morphismus
ist ein Morphismus
in
so, dass
gilt. Wir haben Funktoren
- den Vergissfunktor, der die Zusatzstruktur vergisst - und
- den "freie Algebra"-Funktor - der auf Objekten durch
und auf Morphismen durch
wirkt (
ist wegen der Monadeneigenschaften wirklich ein Morphismus
).
und
sind adjungiert, die Einheit der Adjunktion ist durch die Einheit
gegeben, die Koeinheit durch
. Die durch diese Adjunktion induzierte Monade
ist gerade die Ausgangsmonade, denn wir haben
.
[Bearbeiten] Listen
Ein Beispiel für eine Monade sind Listen. Wenn
die Liste mit den Elementen
bis
bezeichnet, dann stellt das folgende Tripel
eine Monade über der Kategorie der Mengen dar:
- Listen-Funktor:
- Auf der Objektebene ergibt
die Menge aller Listen, deren Elemente aus
kommen, für eine beliebige Menge
. - Für eine Abbildung
zwischen zwei Mengen ergibt
die entsprechende Abbildung
zwischen den Listenmengen mit ![T(f)([x_1, ..., x_n]) = [f(x_1), ..., f(x_n)]](//upload.wikimedia.org/wikipedia/de/math/a/d/9/ad9f5a6f18e8b7cb4168678c89ee9da0.png)
- Auf der Objektebene ergibt
- Konstruktor für einelementige Listen:
![\eta_X(x) = [x]](//upload.wikimedia.org/wikipedia/de/math/0/6/9/0691d3aa8fd43c0cf70b5d3a83b43e06.png)
- Konkatenation von Listen:
, also
- dies ist gewissermaßen das (einstufige) Flachklopfen einer Liste von Listen.
Die Aussage der Axiome lassen sich entsprechend auf das Listenbeispiel übertragen:
- Wird das Axiom
auf das Beispiel angewandt, ergibt sich für eine Menge
zunächst
. Auf das Listenbeispiel übertragen ergibt sich für
auch
), d.h. dass es bei mehrfach verschachtelten Listen egal ist, ob von innen oder von außen flachgeklopft wird, was bei Listen offensichtlich erfüllt ist. - Das zweite Axiom sagt in diesem Beispiel aus, dass es beim Hinzufügen einer Listenebene egal ist, ob dies innen oder außen passiert, sofern danach flachgeklopft wird - es ist
.
Diese Monade gehört zu einem adjungierten Funktorpaar
(wie oben) zwischen den Kategorien der Mengen bzw. Halbgruppen.
ordnet einer Menge die freie Halbgruppe über dieser Menge zu,
einer Halbgruppe die zugrundeliegende Menge.
[Bearbeiten] Anwendung
Monaden werden in der Informatik, besonders in funktionalen Programmiersprachen u.a. zur Abstraktion von Nebeneffekten verwendet. Es ist Haskell hervorzuheben, wo Monaden zur Integration von Ein- und Ausgabe in die sonst komplett reine Sprache verwendet werden. Siehe dazu auch Monade (Informatik).
[Bearbeiten] Literatur
- Saunders Mac Lane, Categories for the Working Mathematician. Springer-Verlag, Berlin 1971. ISBN 3-540-90035-7

(dabei steht
für den Identitätsfunktor
)
(dabei steht
für
),
, d. h. das folgende Diagramm
, d. h. das folgende Diagramm kommutiert:
bzw. 

also
für Objekte 
.
die Menge aller Listen, deren Elemente aus
zwischen den Listenmengen mit ![T(f)([x_1, ..., x_n]) = [f(x_1), ..., f(x_n)]](http://upload.wikimedia.org/wikipedia/de/math/a/d/9/ad9f5a6f18e8b7cb4168678c89ee9da0.png)
![\eta_X(x) = [x]](http://upload.wikimedia.org/wikipedia/de/math/0/6/9/0691d3aa8fd43c0cf70b5d3a83b43e06.png)
, also
- dies ist gewissermaßen das (einstufige) Flachklopfen einer Liste von Listen.
auf das Beispiel angewandt, ergibt sich für eine Menge
. Auf das Listenbeispiel übertragen ergibt sich für
auch
), d.h. dass es bei mehrfach verschachtelten Listen egal ist, ob von innen oder von außen flachgeklopft wird, was bei Listen offensichtlich erfüllt ist.
.