<- ahri.net

## Misc

• `f . g` reads as “f after g”

## Definitions

#### Epimorphism (surjective)

A morphism that maps every object of its domain to every object of its co-domain.

#### Monomorphism (injective)

A morphism mapping a domain to a strict-subset of the objects in the co-domain, i.e. there are objects in the co-domain which cannot be mapped to.

When moving between categories via monomorphisms, we can simplify to make some compositions equal even if the morphisms are not actually equal, e.g. `f x = mod x 20`, `g1 x = x*2`, and `g2 x = if x < 20 then x*2 else x*3`, we can consider `g1` and `g2` to be equal if they are composed after `f`: `g1 . f = g2 . f => g1 = g2`.

In other circumstances `f . g1 = f . g2 => g1 = g2` might be a valid simplification.

#### Isomorphism

A morphism with an inverse morphism: we can jump back and forth between the domain and co-domain. NB. It may still be a monomorphism so the categories may not be “identical”.

## Types of Category

TODO: monad, functor, applicative, space
https://wiki.haskell.org/Category_theory

#### Sets

TODO: partial order (poset), preorder (proset), lattice

• Set

## Functor

Goes between categories. In Haskell terms, the Functor typeclass serves to “lift” a normal function into a Functor instance, thereby mapping a morphism in one (Hask sub-)category over to a morphism in another.