X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=advanced_topics%2Fmonads_in_category_theory.mdwn;h=aef5538a7d799aa4f5aa7e1e0412fe0b3aa6b58c;hp=0c139c6b1b5901b3b69c0578747b23b8a3814409;hb=3900b155388b440877c55e853989c21e79a01248;hpb=9eef3614ecbf18d8f4713ec5c8eec4674ef65c4a;ds=sidebyside diff --git a/advanced_topics/monads_in_category_theory.mdwn b/advanced_topics/monads_in_category_theory.mdwn index 0c139c6b..aef5538a 100644 --- a/advanced_topics/monads_in_category_theory.mdwn +++ b/advanced_topics/monads_in_category_theory.mdwn @@ -21,12 +21,13 @@ Monoids ------- A **monoid** is a structure `(S, *, z)` consisting of an associative binary operation `*` over some set `S`, which is closed under `*`, and which contains an identity element `z` for `*`. That is: -
-for all `s1`, `s2`, `s3` in `S`:
-(i) `s1*s2` etc are also in `S`
-(ii) `(s1*s2)*s3` = `s1*(s2*s3)`
-(iii) `z*s1` = `s1` = `s1*z`
-
+ +
+	for all s1, s2, s3 in S:
+	(i) s1*s2 etc are also in S
+	(ii) (s1*s2)*s3 = s1*(s2*s3)
+	(iii) z*s1 = s1 = s1*z
+
Some examples of monoids are: @@ -43,11 +44,11 @@ When a morphism `f` in category **C** has source `C1` and target `C2`, we'll wri To have a category, the elements and morphisms have to satisfy some constraints: -
-(i) the class of morphisms has to be closed under composition: where `f:C1->C2` and `g:C2->C3`, `g o f` is also a morphism of the category, which maps `C1->C3`.
-(ii) composition of morphisms has to be associative
-(iii) every element `E` of the category has to have an identity morphism 1E, which is such that for every morphism `f:C1->C2`: 1C2 o f = f = f o 1C1
-
+
+	(i) the class of morphisms has to be closed under composition: where f:C1->C2 and g:C2->C3, g o f is also a morphism of the category, which maps C1->C3.
+	(ii) composition of morphisms has to be associative
+	(iii) every element E of the category has to have an identity morphism 1E, which is such that for every morphism f:C1->C2: 1C2 o f = f = f o 1C1
+
These parallel the constraints for monoids. Note that there can be multiple distinct morphisms between an element `E` and itself; they need not all be identity morphisms. Indeed from (iii) it follows that each element can have only a single identity morphism. @@ -72,10 +73,12 @@ Functors -------- A **functor** is a "homomorphism", that is, a structure-preserving mapping, between categories. In particular, a functor `F` from category **C** to category **D** must: +
 	(i) associate with every element C1 of **C** an element F(C1) of **D**
 	(ii) associate with every morphism f:C1->C2 of **C** a morphism F(f):F(C1)->F(C2) of **D**
 	(iii) "preserve identity", that is, for every element C1 of **C**: F of C1's identity morphism in **C** must be the identity morphism of F(C1) in **D**: F(1C1) = 1F(C1).
 	(iv) "distribute over composition", that is for any morphisms f and g in **C**: F(g o f) = F(g) o F(f)
+
A functor that maps a category to itself is called an **endofunctor**. The (endo)functor that maps every element and morphism of **C** to itself is denoted `1C`.