Category Theory for Programmers:

Categories Great and Small

Smallest Category => No Objects

Is this Void in the Category of All Categories?

Generate Categories from Graphs

=> Free Categories

1. Add Identity Arrows

2. Compose Morphisms

Generate a free category from: 

A graph with one node and no edges

Generate a free category from: 

A graph with one node and one (directed) edge (hint: this edge can be composed with itself)

Generate a free category from: 

A graph with two nodes and a single arrow between them

Generate a free category from: 

A graph with a single node and 26 arrows marked with the letters of the alphabet: a, b, c ... z.

Orders

minimum order to be a category?

Partial order:

Preorder:

every two objects need to relate to each other

Example: reachability in a directed graph with cycles

Example: numbers <=

a <= b & b <= c       =>       a <= c

Total order:

a <= b & b <= a        =>       a == b

What kind of order is this?

 A set of sets with the inclusion relation: A is included in B if every element of A is also an element of B.

=> Partial order

Not all sets are related.  For example: {1} and {2,3}

A \subseteq A
AAA \subseteq A
A \subseteq B\ \&\ B \subseteq C \Rightarrow A \subseteq C
AB & BCACA \subseteq B\ \&\ B \subseteq C \Rightarrow A \subseteq C
A \subseteq B\ \&\ B \subseteq A \Rightarrow A = B
AB & BAA=BA \subseteq B\ \&\ B \subseteq A \Rightarrow A = B

What kind of order is this?

C++ types with the following subtyping relation: T1 is a subtype of T2 if a pointer to T1 can be passed to a function that expects a pointer to T2 without triggering a compilation error.

=> Partial order

Not all types are subtypes.

A \subseteq A
AAA \subseteq A
A \subseteq B\ \&\ B \subseteq C \Rightarrow A \subseteq C
AB & BCACA \subseteq B\ \&\ B \subseteq C \Rightarrow A \subseteq C
A \subseteq B\ \&\ B \subseteq A \Rightarrow A = B ???
AB & BAA=B???A \subseteq B\ \&\ B \subseteq A \Rightarrow A = B ???

Monoids

set with a binary operation

associative

neutral element

(a - b) - c = a - (b - c)
0 - a = a
a - 0 = a

Not a Monoid

not associative

no neutral element

(a - b) - c = a - (b - c)
(5 - 4) - 1 = 5 - (4 - 1)
0 = 2
0 - a = -a
a - 0 = a

Considering that Bool is a set of two values True and False, show that it forms two (set-theoretical) monoids with respect to, respectively, operator & (AND) and | (OR).

a & (b & c) = (a & b) & c
a | (b | c) = (a | b) | c

a & true = a
true & a = a

a | false = a
false | a = a

Monoids as a Category

Monoid => Mono => Single object Category

mappend maps from integers to adders

mappend : Int -> (Int -> Int)

Homset

Morphisms => Set (HomSet)

only for locally small categories

Represent the Bool monoid with the AND operator as a category: List the morphisms and their rules of composition.

id = (AND True)
id . (AND False) = (AND False)
(AND False) . (AND False) = (AND False)
(AND False) . id = (AND False)
id . id = id

Represent addition modulo 3 as a monoid category.

category-theory-for-programmers-103

By Walter Schulze

category-theory-for-programmers-103

  • 73
Loading comments...

More from Walter Schulze