Functors and Natural Transformations!

Hello again!  Last time I got to talking about these mathematical things called “categories.”  If you’ve ever taken a class in higher math, whatever that means,  you should know by now that whenever we define a new mathematical object, the next step is to define what it means to talk about “functions” between them.  In abstract algebra, these are our “- homomorphisms;” in topology, our continuous functions, etc.  You get the idea.  What would it mean to then talk about a “structure-preserving function” between two categories, say and D?  Remember, we have to deal with the objects AND the morphisms in both categories.  A “function” from C to D should therefore send objects of C to objects of D, and morphisms in C to those in D.  Obviously, these “functions” of objects and arrows can’t be completely independent of each other.  If they’re going to be useful in any way (i.e. preserve stuff like function composition and things like the identity map).

Cutting to the chase, these categorical functions are called functors.  You’ve actually probably seen these before (if you’re a math/ physics major/ person who has played with abstract algebra).  Let’s play around in groups (i.e. Grp).  Recall that a group is a set with a certain operation defined on it, and that group homomorphisms are set functions that respect the group operations of the domain and codomain.  Thus for each group G, we can associate the set U(G) which is just the underlying set of G.  Similarly, we can associate to every group homomorphism \varphi: G \to H the set function U(\varphi) : U(G) \to U(H).  For example, if we take G = \mathbb{Z}/3\mathbb{Z} = \{0,1,2\} (technically I should write these as cosets, but it’s all the same up to isomorphism anyway), the cyclic group of order 3, Then U(G) = \{0,1,2\}.  Clearly, if f_1 : G \to H and f_2 : H \to K are two group homomorphisms, it follows that U(f_2 \circ f_1) = U(f_2) \circ U(f_1), so that U respects “compositions of arrows.” Also, remember those identity maps for every object?  If G is any group and 1_G: G \to G the identity homomorphism, U(1_G) = 1_{U(G)}, so that U respects the identity map.  Thus U is a pretty convenient thing.

Now specifically, a (covariant) functor F: \textbf{C} \to \textbf{D} associates to every object a of C an object F(a) of D, and to every morphism f: a \to b of a morphism F(f) of D.  Furthermore, we need to have for every pair of composable morphism f and g of C, F(f \circ g) = F(f) \circ F(g).   Lastly, for every object a in we have F(1_a) = 1_{F(a)}.  We say that F is contravariant if (for the same f and g in the last sentence) F(f \circ g) = F(g) \circ F(f).

Sooo now that we have this definition, it’s immediate that the “function” U : \textbf{Grp} \to \textbf{Set} is a covariant functor, which is called the underlying set functor or the forgetful functor (which is a much cooler name, let’s be honest).   One can, of course, do the same thing for the category of rings, of topological spaces, etc.

Some other interesting examples are

  • The fundamental group functor \pi_1: \textbf{Top}_\cdot \to \textbf{Grp} that sends each pointed topological space (X,x_0) to its fundamental group \pi_1(X,x_0).  If f: (X,x_0) \to (Y,y_0) is a continuous (basepoint preserving) function, then \pi_1(f) = f_* is just the pushfoward map, i.e. it sends loops \gamma in X based at x_0 to loops f \circ \gamma in Y with basepoint y_0 = f(x_0).
  • The dual vector space functor D : \textbf{Vect}_F \to \textbf{Vect}_F that sends each vector space (over some field F to its algebraic dual \text{Hom}_F(V,F).  If \varphi : V \to W is a linear transformation, then D(\varphi) = \varphi^* is the linear transformation that sends each functional f: V \to F to \varphi^*(f) = f \circ \varphi.

You can even compose functors, if the source/ target categories match up.  As an example, if D is the dual space functor from above, the functor D^2 = D \circ D: \textbf{Vect}_F \to \textbf{Vect}_F sends each vector space to its double dual.

As mathematicians are wont to do, whenever we define some kind of mathematical object, the next step is (just about always) to define some concept of morphisms between them.  E.g. groups and group homorphisms, smooth manifolds and smooth maps, topological spaces and continuous functions, etc.  So now suppose we have two functors F,G : \textbf{C} \to \textbf{D} between two categories C and D.  We say that \eta : F \rightsquigarrow G (always use the squiggle arrow, it’s much cooler) is a natural transformation if for every object a in Ob(C) there is a function \eta_a: F(a) \to G(a) such that for any morphism f: a \to b in C,

\eta_b \circ F(f) = G(f) \circ \eta_a

This is best shown with a commutative diagram (I guess I’ll have to do a post on those at some point too…).  Those maps \eta_a are called the components of the natural transformation.  If all the \eta_a are isomorphisms, then we say that $\latex \eta$ is a natural isomorphism.  

So I feel obliged to make a quick remark here. People often say that abstract algebra (and category theory) are especially hard because there are just sooo many definitions to remember.  This is in fact the case. Suck it up.  Reading a sophisticated piece of work requires a large vocabulary, regardless of the discipline.

If you think about it, for any category C, there is an identity functor that just sends every object to itself and every morphism to itself.  Usually, people just write this as Id: \textbf{C} \to \textbf{C} or as I : \textbf{C} \to \textbf{C}.

Ever heard that any (finite dimensional) vector space is naturally isomorphic to its double dual?  What’s really going on here is that there is a natural isomorphism of functors \delta : Id \rightsquigarrow D^2 on the full subcategory (of all vector spaces over a field F) of finite dimensional vector spaces over that field.  Here, the components of the natural transformation for any vector space V, \eta_V : V \to V^{**} is that linear transformation that sends V \ni v \mapsto v^{**}(f) = f(v) \in V^{**} (where f: V \to F) is a linear functional).  Just a bit of works shows that this is actually an isomorphism.

Stepping up the abstraction (again):

So we’ve defined functors, natural transformations, and categories.  We can actually go pretty meta and define categories like “the category of (small) categories” (I’ll define small at some other time; it’s a technical condition that let’s us get around things like Russell’s Paradox), and things like “the category of functors between two categories, functors which are paired in a really useful way (an adjunction), etc.  There’s a ton to explore.

Hello & Here we go

Hello!  I’m a terrible writer, so I’m going to dive right it. My selfish goal is to gain a thorough understanding of category theory, but that road is not a straight shot.  It requires a great deal of knowledge and experience from all of mathematics to really grok many of the abstract methods employed.  This blog is my way of keeping track of the myriad of examples and topics that motivate these ideas.


Setting the setting (prologue?).  If I’m going to talk about category theory, I should probably say what a category “is”.  A category C, intuitively, consists of a collection of “objects” with similar properties and a collection of “arrows” (also often called “morphisms”) between objects.  For some examples, think of:

  • The category Set with objects being sets and arrows being functions between sets.
  • The category Grp with objects being groups and arrows being group homomorphisms.
  • The category Top with objects being topological spaces and arrows being continuous functions between topological spaces.
  • If R is a ring, then the category R-Mod is the category with objects left R-modules and arrows R-module homomorphims. (This includes things like the category of vector spaces over a field)
  • Any partially ordered set (C,\leq) can be turned into a category as well.  We define the objects of this new category are the elements of C, and for any two objects x and y of C, there is one and only one arrow from x to y if and only if x \leq y.

and so on.  You get the idea.   Formally, C consists of a class Ob(C) of objects and a class Hom(C) of arrows, such that

  • Each arrow f has a unique source object a and final object b.  We write this as f: a \to b.
  • For any two objects a and b of C there is a set of arrows from a to b, called \text{Hom}_\textbf{C}(a,b).  If a' and b' are two objects (with a \neq a' and b \neq b'), then \text{Hom}(a,b) and \text{Hom}(a',b') are disjoint.
  • For any three objects a,b and c of C, there is a binary operation \text{Hom}(a,b) \times \text{Hom}(b,c) \to \text{Hom}(a,c) called “composition of arrows/ morphisms.”
  • Arrow composition is associative.
  • For any object a, there is a morphism 1_a : a \to a such that for any other arrow f: a \to b, we have f \circ 1_a = f = 1_a \circ f.

So that’s a bit of a mouthful.  Unwinding all these criteria basically yields the above “intuitive” explanation.  The criteria concerning arrows simply axiomatize this intuition (i.e. arrows basically act like we think functions “should” act).

We shall encounter many examples of categories in future posts.  The ones that will come up quite often (as they contain a host of interesting examples) are AbR-mod, and Top (which are the categories of abelian groups, left R-modules, and topological spaces, respectively).