# What is category theory?

Category theory *is* the mathematics of math—specifically, it’s a mathematical theory of mathematical structure. It turns out that every kind of mathematics you’re likely to encounter in a normal university education is just another kind of category—group theory falls under the category of groups, topology falls under the category of topological spaces, etc.

Specifically, category theory shows that all of the highly diverse mathematical structures that we know of can be broken down into nodes and arrows between nodes. Nodes and arrows define a category in a nutshell—plus something called composition, which basically says that if a bird can fly from Mexico to the USA to Canada, then the bird can also travel “directly” from Mexico to Canada in a way that is equal to the Mexico —> USA —> Canada path. (See “the right to use a name” section.)

Breaking any and every mathematical structure down to nodes and arrows between nodes is a super-general, super-abstract way of studying mathematics. It’s like trying to study Shakespeare by breaking down all of his sentences into nouns and verbs. Category theory has a reputation for being painfully abstract—in fact, it’s been called “abstract nonsense” by one of its founders. Because of this, it’s typically recommended that you have a few mathematical structures under your belt—algebra, groups, topology, etc.—before studying category theory so that you have specific examples to relate the abstractions to. (It would be tough to study verbs if you didn’t know about things like running and jumping!)

But while there’s only so much to learn about Shakespeare by breaking “to be or not to be” into infinitives, conjunctions, and adverbs, it turns out that the super-general perspective of category theory is incredibly useful in concrete ways. In particular, it turns out that pretty much every cool idea in math is something called an adjoint functor—a special construction that can only be accessed through category theory. A lot of category theorists will tell you that adjoint functors are kind of the *point* of category theory. Adjoints, or adjunction, generalizes *optimization itself*.

Then there is the Yoneda lemma, which is as deep as it is elegant and powerful. We will explore it in depth. (If this series works out.)

You might be wondering what success category theory has found in applications to the sciences. How can you even apply something so general and abstract to our highly specific and concrete reality?

Well, category theory is super general, so whenever you are studying super-general phenomena, it makes sense to think of category theory. What’s a super-general phenomenon? For example, the laws of physics! They govern everything, presumably. If you’re looking for fundamental rules that apply to everything from tiny particles to enormous planets and the complex living creatures in between, category theory immediately comes to mind.

Then there is biology, which less super-general, unless there really are Martians hiding from our rovers, but organisms have to survive and reproduce under wildly diverse conditions—the planet Earth can throw a lot of stuff at you, from volcanoes to Ice Ages. On some level, organic life clearly has the ability to adapt to all of these conditions—and adapting the same basic thing to lots of different contexts with powerful results is basically what category theory is.

Definitely the biggest applied success for category theory has been in programming. I’d encourage you to look up functional programming, lambda calculus, or just Google something like “programming category theory.” It’s fascinating, though I’m actually going to deemphasize the programming side of things if anything, as I don’t want to distract from the fundamentals.

So what is category theory? Nothing other than the formal generalization of everything. Why should you be interested in it? Because it gives you an incredible bird’s-eye view of all of mathematics, and a particular perch, adjunction, that can’t be found anywhere else.

This series will be *very* slow paced relative to other introductions—I will *not* assume you know what sets and functions are, to give just one example. If you’re comfortable with math or just want to plunge into things a little more, I strongly encourage you to look up the many fantastic introductions to category theory that already exist on the Internet for free as videos, textbooks, blog posts, and papers. This is a series meant for people who either have no exposure to mathematics beyond the high school level or actively want to avoid it! (I’ll put it this way: if there was a “Baby Rudin” for category theory, this series would be aiming to be a “Fetal Rudin.”)

There’s no schedule for these posts, which isn’t ideal for learning, but that’s just the reality of how this series is going to be made. Coming up is a sequence of posts on the most basic details of defining a category, with an emphasis on developing intuition at each step.

It seems a bit odd to offer lambda calculus as an example of how category theory is useful in computing, when lambda calculus predates category theory by about a decade (1932 to 1942).

Lambda calculus is though the internal language of a very common kind of category, so, in a sense, category theory allows lambda calculus to do computations not only with functions, but also sets, topological spaces, manifolds, etc.

Category theory is useful for understanding lambda calculus—I feel like anyone who studies the latter will certainly encounter the former soon enough.

Really looking forward to this sequence!

I’m curious if being a programmer is helpful to understanding category theory in the same way as having “a few mathematical structures under your belt” is.

I’d think so, although I’ve heard mixed reports from programmers about this. But give https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/ a shot. Why not?