cat theory tweaks
[lambda.git] / advanced_topics / monads_in_category_theory.mdwn
index 46c575c..8c5f4cd 100644 (file)
@@ -24,8 +24,8 @@ A **monoid** is a structure <code>(S,&#8902;,z)</code> consisting of an associat
 
 <pre>
        for all s1, s2, s3 in S:
-       (i) s1&#8902;s2 etc are also in S
-       (ii) (s1&#8902;s2)&#8902;s3 = s1&#8902;(s2&#8902;s3)
+         (i) s1&#8902;s2 etc are also in S
+        (ii) (s1&#8902;s2)&#8902;s3 = s1&#8902;(s2&#8902;s3)
        (iii) z&#8902;s1 = s1 = s1&#8902;z
 </pre>
 
@@ -45,13 +45,15 @@ When a morphism `f` in category <b>C</b> has source `C1` and target `C2`, we'll
 To have a category, the elements and morphisms have to satisfy some constraints:
 
 <pre>
-       (i) the class of morphisms has to be closed under composition:
-       where f:C1&rarr;C2 and g:C2&rarr;C3, g &#8728; f is also a
-       morphism of the category, which maps C1&rarr;C3.
-       (ii) composition of morphisms has to be associative
+         (i) the class of morphisms has to be closed under composition:
+             where f:C1&rarr;C2 and g:C2&rarr;C3, g &#8728; f is also a
+             morphism of the category, which maps C1&rarr;C3.
+
+        (ii) composition of morphisms has to be associative
+
        (iii) every element E of the category has to have an identity
-       morphism 1<sub>E</sub>, which is such that for every morphism
-       f:C1&rarr;C2: 1<sub>C2</sub> &#8728; f = f = f &#8728; 1<sub>C1</sub>
+             morphism 1<sub>E</sub>, which is such that for every morphism f:C1&rarr;C2:
+             1<sub>C2</sub> &#8728; f = f = f &#8728; 1<sub>C1</sub>
 </pre>
 
 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.
@@ -61,11 +63,11 @@ A good intuitive picture of a category is as a generalized directed graph, where
 
 Some examples of categories are:
 
-*      Categories whose elements are sets and whose morphisms are functions between those sets. Here the source and target of a function are its domain and range, so distinct functions sharing a domain and range (e.g., sin and cos) are distinct morphisms between the same source and target elements. The identity morphism for any element/set is just the identity function for that set.
+*      Categories whose elements are sets and whose morphisms are functions between those sets. Here the source and target of a function are its domain and range, so distinct functions sharing a domain and range (e.g., `sin` and `cos`) are distinct morphisms between the same source and target elements. The identity morphism for any element/set is just the identity function for that set.
 
 *      any monoid <code>(S,&#8902;,z)</code> generates a category with a single element `x`; this `x` need not have any relation to `S`. The members of `S` play the role of *morphisms* of this category, rather than its elements. All of these morphisms are understood to map `x` to itself. The result of composing the morphism consisting of `s1` with the morphism `s2` is the morphism `s3`, where <code>s3=s1&#8902;s2</code>. The identity morphism for the (single) category element `x` is the monoid's identity `z`.
 
-*      a **preorder** is a structure `(S, &le;)` consisting of a reflexive, transitive, binary relation on a set `S`. It need not be connected (that is, there may be members `x`,`y` of `S` such that neither `x&le;y` nor `y&le;x`). It need not be anti-symmetric (that is, there may be members `s1`,`s2` of `S` such that `s1&le;s2` and `s2&le;s1` but `s1` and `s2` are not identical). Some examples:
+*      a **preorder** is a structure <code>(S, &le;)</code> consisting of a reflexive, transitive, binary relation on a set `S`. It need not be connected (that is, there may be members `x`,`y` of `S` such that neither <code>x&le;y</code> nor <code>y&le;x</code>). It need not be anti-symmetric (that is, there may be members `s1`,`s2` of `S` such that <code>s1&le;s2</code> and <code>s2&le;s1</code> but `s1` and `s2` are not identical). Some examples:
 
        *       sentences ordered by logical implication ("p and p" implies and is implied by "p", but these sentences are not identical; so this illustrates a pre-order without anti-symmetry)
        *       sets ordered by size (this illustrates it too)
@@ -78,10 +80,17 @@ Functors
 A **functor** is a "homomorphism", that is, a structure-preserving mapping, between categories. In particular, a functor `F` from category <b>C</b> to category <b>D</b> must:
 
 <pre>
-       (i) associate with every element C1 of <b>C</b> an element F(C1) of <b>D</b>
-       (ii) associate with every morphism f:C1&rarr;C2 of <b>C</b> a morphism F(f):F(C1)&rarr;F(C2) of <b>D</b>
-       (iii) "preserve identity", that is, for every element C1 of <b>C</b>: F of C1's identity morphism in <b>C</b> must be the identity morphism of F(C1) in <b>D</b>: F(1<sub>C1</sub>) = 1<sub>F(C1)</sub>.
-       (iv) "distribute over composition", that is for any morphisms f and g in <b>C</b>: F(g &#8728; f) = F(g) &#8728; F(f)
+         (i) associate with every element C1 of <b>C</b> an element F(C1) of <b>D</b>
+
+        (ii) associate with every morphism f:C1&rarr;C2 of <b>C</b> a morphism
+             F(f):F(C1)&rarr;F(C2) of <b>D</b>
+
+       (iii) "preserve identity", that is, for every element C1 of <b>C</b>:
+             F of C1's identity morphism in <b>C</b> must be the identity morphism
+                 of F(C1) in <b>D</b>: F(1<sub>C1</sub>) = 1<sub>F(C1)</sub>.
+
+        (iv) "distribute over composition", that is for any morphisms f and g in <b>C</b>:
+             F(g &#8728; f) = F(g) &#8728; F(f)
 </pre>
 
 A functor that maps a category to itself is called an **endofunctor**. The (endo)functor that maps every element and morphism of <b>C</b> to itself is denoted `1C`.