The problems with math is people lack of easy to understand examples to explain definitions. It is like u learn design pattern without undrrstanding when to apply them.
You probably mean set theory instead of graph theory, since set theory and category theory are kind of seen as two foundations for math.
Both category theory and set theory use sets. But set theory tries to make absolutely everything into a set. It takes on a little complexity in this quest, because of Russel's paradox. Category theory can be seen as studying set theory, among other things, so it is "bigger" or more all-encompassing than set theory. Many things studied in category theory aren't possibly sets.
Set theory is more immediately intuitive, but category theory organizes things in a way that are ultimately more insightful, I think. Meaning that once you can get into the category theory headspace and learn to navigate it, it becomes a much better environment for thinking without mistakes. In my personal opinion.
I wouldn't have described graph theory that way. But category theory seeks to formalise and generalise mathematics itself. Another popular branch of mathematics that does this is set theory, which you may have been thinking of rather than graph theory.
Set theory is generally taught before category theory at universities. "Simpler" is very subjective, but set theory is often seen as more intuitive because some of the concepts start getting taught much earlier in school.
Set theory is basically a study of the formation of single sets of objects and the study of various infinities. Typically mathematical objects are sets with operations on them so set theory is useful for understanding them, but the vast majority of set theory is not necessary for the rest of mathematics.
Category theory is the study of collections of mathematical of a give type. The category of groups, the category of sets, the category of vector spaces. The key facet of category theory is that you can have "functions" (called functors) between categories and the power of category theory is the study of these functors. I put "functions" in parentheses because most categories are not sets in the set-theoretic sense because they do not have a well-defined cardinality. Of course, some categories called "small categories" are sets.
I always find it a bit weird, when people compare set theory to category theory like this. When talking about set theory as a foundation for mathematics, I always think of Zermelo-Fraenkel[1] set theory (possibly with Choice), which is an axiomatic system, from which you can build a lot of maths (at some point one might want to introduce universes[2], but whatever). I'm not aware of a similar axiomatic system using category theory, are you?
Yeah, I deliberately avoided using the word "foundation" as I wasn't too confident about that. But I believe it makes sense to say that category theory and set theory both seek to formalise and generalise much of mathematics? Even if the first is more of a sort of framework than a foundation.
I'm not an expert so I write this comment to ask for help. Do you know if there is any relationship between category theory or set theory? I mean is it like category theory is a more general concept and set theory emerges as a specific case of the more general category theory.
I know sets well because well that's what I was taught in school. I'm just trying to understand where set theory fits in category theory or if they are two totally different things.
I would treat them as totally different things. There is a Category of Sets, but a Set of Categories would be a bit harder to define. So axomatic set theory could be a specific case of category theory, I suppose. But you can probably do a Class of all categories. (A Class is sort of a set-theoretic way to get around Russel's paradox, incidentally, you usually use a Class to define categories, so...) Though that's actually quite an irrelevant point. It's a completely different language for describing mathematics. I think describing category theory as an alternative foundation for mathematics (you really mean topos theory here) is a bit of an exaggeration. it's technically true, but most mathematicians I know are using it as a powerful device to prove things in algebraic topology or geometry, etc.
Category theory and set theory are deeply interconnected, as both are foundational areas of mathematics but with different focuses. Set theory studies collections of elements and their relationships, serving as the groundwork for much of mathematics, while category theory abstracts and generalizes these ideas to focus on structures and their relationships.
One key connection is that the category of sets, called "Set," is a fundamental example in category theory. Its objects are sets, and its morphisms are functions between them. This shows how set theory can be seen as a special case of category theory. At the same time, many categories studied in category theory have underlying set structures. For example, groups, rings, or vector spaces are often built on sets with additional structure.
Another connection lies in how category theory generalizes set-theoretic ideas. Concepts like products, coproducts, limits, and colimits in category theory extend the familiar notions of Cartesian products or unions in set theory. The Yoneda Lemma, a cornerstone of category theory, relies heavily on set-theoretic intuition, as it connects abstract categorical concepts to concrete representations in terms of sets.
Topoi, a concept in category theory, also bridge the two fields. A topos generalizes set theory by providing a categorical framework that behaves like the category of sets but with additional logical structure. This allows set-theoretic reasoning to be carried out in a more abstract setting. For instance, the category of sets itself is the prototypical example of a topos.
However, there are also differences. Set theory often grapples with "size" issues, such as distinguishing between sets and proper classes. In category theory, similar concerns arise, especially with large categories, like the category of all sets, which cannot itself be a set. Set-theoretic tools are often used to handle these size issues by defining notions like small and large categories.
And there’s a philosophical aspect. Set theory forms the traditional foundation of mathematics with its ZFC axioms, focusing on elements and collections. Category theory offers an alternative foundation by emphasizing relationships and structures, often referred to as "structural mathematics." These perspectives aren’t in opposition but rather complementary, with each offering tools to understand mathematics from different angles.
In essence, category theory builds on and extends set theory while also relying on it for foundational concepts. The two fields are tightly intertwined, with set theory providing a concrete framework and category theory offering an abstract, flexible way to study and generalize mathematical structures.
Venting: I'm so tired of this. I've countless times learned that something something monoid of endofunctors. And yet, I've never been able to make that knowlwdge more useful than "do a flatMap here".
Not looking for solutions. Ok with emotional support.
I work with a bunch of functional programmers. We went through most of “category theory for programmers.” We had support from a math PhD.
Broad consensus was it was a waste of time. Functional programming has taken the useful bits, and some of the less useful bits. The rest is arcanum, and as useful to programming as astronomy
I'm a PhD in math. I love category theory and it's very useful for studying abstract algebra at the research mathematics level because it clarifies concepts and even provides algorithmic ways for computation at that level (e.g. adjoint functors and cotriples to compute homology). But to be honest, except for computer science researchers, I would not recommend it to programmers. I am also a programmer (at least a part-time one sometimes, and previously full-time), and I can say with absolute confidence that a deep understanding of category theory is 100% useless for programming.
Again, with a few exceptions, but if you are one of these exceptions, you will already know it.
Hey there! I'm the author, so I suppose I ought to address this :)
First I'll say that I absolutely get this head-banging-on-desk feeling of no progress. Monads got me like that for a while but F-Algebras/recursion schemes got me like that much more, so make sure you keep your distance from them haha. I'm sorry to have contributed to your frustration.
It actually sounds like you've grasped monads quite well. flatMap is the essence. I won't try to explain it though, because I know that's not what you're looking for, and I don't want to contribute to your frustration even more!
I will say that my usual readership includes a lot of people who like designing type systems for programming languages. Category theory helps make sure you don't make mistakes in this process, though there are other techniques of course. I also find it helps my ability to think formally a lot, which has helped me a ton in studying and discussing philosophy, a separate interest of mine. Hopefully you can see from my post that I didn't really make an effort to justify or explain category theory for regular programmers much. Category theory is overhyped for that use case. I personally really hate reading overly mathematical Haskell code!! But if you just enjoy math or philosophy or learning or thinking, I hope you can have some fun with the beauty of these ideas. And since authoring the post I've added a wiki https://ryanbrewer.dev/wiki that can give more accessible background on things like monoids.
I could be wrong but I don't think I mentioned a monoid of endofunctors or flatMap a single time in the post. I did mention monads, as an example of natural transformations, but completely from the perspective of beautiful math, not from a programming perspective at all. And once you learn about adjunctions, monads get even more gorgeous! https://ryanbrewer.dev/wiki/adjunction
But all of this math takes a ton of patience. I'm someone who loves programming because the feeling of solving a hard bug is exhilarating and satisfying. The emotional payoff is bigger the longer it takes, and math is the same way for me. Don't beat yourself up about it, and don't feel bad if category theory just isn't helpful or enjoyable for you and your particular way of thinking! :)
I read a book on category theory that described how to model databases using category theory.
My conclusion was that the goal was not to provide insight into databases but rather into category theory, which seemed backwards to me.
Instead I picked up some books on the relational algebra/logic for databases, and those books were actually useful — you could show that some set of transformations would be mathematically identical.
At some point, too high level of abstraction is not useful. For category theory, it seemed that the point was to show how all these different things were “similar” but in a way that didn’t allow you to do anything with it.
I love category theory, but I think there's a secret category of "high effort programming things" that programmers who have done them love to say that "Everyone should do x because it will make them a better programmer".
Here's the kind of things I'm thinking of:
- Learn category theory
- Build an interpretter/compiler
- Develop your own programming language
- Learn about and built distributed systems
- Learn to write code for the GPU
- Understand assembly code
- Learn about CPU architecture
I think, especially since it's the holiday season, maybe lets take a step back and just accept these things probably will make you a better programmer, but there are lots of them. If you do all of them, you'll maybe become a very good programmer, but you'll definitely become a very tired human being.
If you have an interest in the mathematical underpinnings behind some of the ideas in Haskell et al, you might love category theory, but if you just want to do effective functional programming effectively, you're fine just doing that
Every other item in your list is actually used to produce technology except one.
Compilers? Used to produce executables form source code.
Programming language? Allows us to write code using higher abstraction.
Distributed systems? Allows us to build systems across multiple machines, users, continents, etc.
GPU? Allows us to speed up heavily parallel code for graphics and scientific applications.
Assembly? Allows us to write closer to the hardware.
CPU architecture? Allows us to understand what our code runs on.
If anything, this list shows how category theory is not like the other things programmers could spend time on. If the goal is “learn a bunch of math to expand your math skill”, then maybe category theory makes sense. If the goal is to become a better programmer then I think there are better uses of time.
I suppose that's true - but then I would suggest that type systems are (at least to some extent) the application of category theory.
It's hard to see how learning about Hindley-Milner type inference isn't academic type theory (which I'd argue is a category theory subfield) but applying Hindley-Milner type inference is clearly practical and related to producing technology.
I'm not saying all branches of category theory have a section that relates to directly producing technology, but I'd definitely argue that some do.
You are not alone. Composition and the general idea of type is enough for most of us. You do not need Schopenhauer to discover that life is hard, or Hegel to know that opposites exist and sometimes their relation creates something different “not in the middle”.
Just gonna unecessarily jump in to defend Schopenhauer, and maybe Hegel! (I'll leave category theory to look after itself)
I think especially in our fast moving, low attention society, there's a tendency to reduce philosophers like Schopenhauer to a few bullet points. I definitely was really guilty of doing this when I studied philosophy in university a while back. But you get so much more out of spending time reading Schopenhauer than just those bullet points- you get insight into a whole person's way of seeing things. That's such a great thing to spend time doing!
I do realise I'm mostly arguing against a point that you didn't make, or at best, made only tangentially, but, as a pedant on the internet, I couldn't turn down the opportunity to give my unsolicited opinion.
Right you are, indeed. I was first annoyed by your comment but (miraculously) I stepped aside for a few seconds!
Of course. But nevertheless, Category Theory or Schopenhauer are good ways to get interesting insight which may (emphasis) be useful. But not as a tool (which is how CT is usually sold in those tutorials), but as a (long) path to knowledge. Only some times and some people get "useful" results from studying them.
Trying to sell CT as a means to a utilitarian end is prostituting it. Like selling Hegel to learn how to body-build.
I'm glad I did- I think the utilitarian distinction you made is such a good point.
Interesting as category theory is, and even while it does have applications, I think claiming that it's value is somehow in helping you learn Haskell/Elm/Gleam etc is just dishonest and misleading.
I compiled a list of Category Theory resources that might be helpful for beginners to gain an overview of what's available in the field: https://github.com/madnight/awesome-category-theory
The problems with math is people lack of easy to understand examples to explain definitions. It is like u learn design pattern without undrrstanding when to apply them.
Thanks for this illuminating Work!
Thanks for taking the time haha, let me know if I can improve my exposition!
Isn't that one of the basis of maths? Namely you choose graph theory or category theory and you can rebuilt the whole maths?
If yes, which one is the "simpler", category or graph?
You probably mean set theory instead of graph theory, since set theory and category theory are kind of seen as two foundations for math.
Both category theory and set theory use sets. But set theory tries to make absolutely everything into a set. It takes on a little complexity in this quest, because of Russel's paradox. Category theory can be seen as studying set theory, among other things, so it is "bigger" or more all-encompassing than set theory. Many things studied in category theory aren't possibly sets.
Set theory is more immediately intuitive, but category theory organizes things in a way that are ultimately more insightful, I think. Meaning that once you can get into the category theory headspace and learn to navigate it, it becomes a much better environment for thinking without mistakes. In my personal opinion.
Also, morphisms from A to B form a set.
I wouldn't have described graph theory that way. But category theory seeks to formalise and generalise mathematics itself. Another popular branch of mathematics that does this is set theory, which you may have been thinking of rather than graph theory.
Set theory is generally taught before category theory at universities. "Simpler" is very subjective, but set theory is often seen as more intuitive because some of the concepts start getting taught much earlier in school.
Set theory is basically a study of the formation of single sets of objects and the study of various infinities. Typically mathematical objects are sets with operations on them so set theory is useful for understanding them, but the vast majority of set theory is not necessary for the rest of mathematics.
Category theory is the study of collections of mathematical of a give type. The category of groups, the category of sets, the category of vector spaces. The key facet of category theory is that you can have "functions" (called functors) between categories and the power of category theory is the study of these functors. I put "functions" in parentheses because most categories are not sets in the set-theoretic sense because they do not have a well-defined cardinality. Of course, some categories called "small categories" are sets.
I always find it a bit weird, when people compare set theory to category theory like this. When talking about set theory as a foundation for mathematics, I always think of Zermelo-Fraenkel[1] set theory (possibly with Choice), which is an axiomatic system, from which you can build a lot of maths (at some point one might want to introduce universes[2], but whatever). I'm not aware of a similar axiomatic system using category theory, are you?
[1] https://en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_t... [2] https://en.wikipedia.org/wiki/Grothendieck_universe
I've found the best layman's grounding for Category theory's relationship to axioms to be in Bartosz's post here:
https://www.quora.com/Are-there-any-axioms-for-category-theo...
That's a nice post, and it actually reinforces my thoughts: You already need a foundational theory before coming to category theory.
Well... then set theory with core logic still THE foundation then.
Yeah, I deliberately avoided using the word "foundation" as I wasn't too confident about that. But I believe it makes sense to say that category theory and set theory both seek to formalise and generalise much of mathematics? Even if the first is more of a sort of framework than a foundation.
I'm not an expert so I write this comment to ask for help. Do you know if there is any relationship between category theory or set theory? I mean is it like category theory is a more general concept and set theory emerges as a specific case of the more general category theory.
I know sets well because well that's what I was taught in school. I'm just trying to understand where set theory fits in category theory or if they are two totally different things.
I would treat them as totally different things. There is a Category of Sets, but a Set of Categories would be a bit harder to define. So axomatic set theory could be a specific case of category theory, I suppose. But you can probably do a Class of all categories. (A Class is sort of a set-theoretic way to get around Russel's paradox, incidentally, you usually use a Class to define categories, so...) Though that's actually quite an irrelevant point. It's a completely different language for describing mathematics. I think describing category theory as an alternative foundation for mathematics (you really mean topos theory here) is a bit of an exaggeration. it's technically true, but most mathematicians I know are using it as a powerful device to prove things in algebraic topology or geometry, etc.
Category theory and set theory are deeply interconnected, as both are foundational areas of mathematics but with different focuses. Set theory studies collections of elements and their relationships, serving as the groundwork for much of mathematics, while category theory abstracts and generalizes these ideas to focus on structures and their relationships.
One key connection is that the category of sets, called "Set," is a fundamental example in category theory. Its objects are sets, and its morphisms are functions between them. This shows how set theory can be seen as a special case of category theory. At the same time, many categories studied in category theory have underlying set structures. For example, groups, rings, or vector spaces are often built on sets with additional structure.
Another connection lies in how category theory generalizes set-theoretic ideas. Concepts like products, coproducts, limits, and colimits in category theory extend the familiar notions of Cartesian products or unions in set theory. The Yoneda Lemma, a cornerstone of category theory, relies heavily on set-theoretic intuition, as it connects abstract categorical concepts to concrete representations in terms of sets.
Topoi, a concept in category theory, also bridge the two fields. A topos generalizes set theory by providing a categorical framework that behaves like the category of sets but with additional logical structure. This allows set-theoretic reasoning to be carried out in a more abstract setting. For instance, the category of sets itself is the prototypical example of a topos.
However, there are also differences. Set theory often grapples with "size" issues, such as distinguishing between sets and proper classes. In category theory, similar concerns arise, especially with large categories, like the category of all sets, which cannot itself be a set. Set-theoretic tools are often used to handle these size issues by defining notions like small and large categories.
And there’s a philosophical aspect. Set theory forms the traditional foundation of mathematics with its ZFC axioms, focusing on elements and collections. Category theory offers an alternative foundation by emphasizing relationships and structures, often referred to as "structural mathematics." These perspectives aren’t in opposition but rather complementary, with each offering tools to understand mathematics from different angles.
In essence, category theory builds on and extends set theory while also relying on it for foundational concepts. The two fields are tightly intertwined, with set theory providing a concrete framework and category theory offering an abstract, flexible way to study and generalize mathematical structures.
Venting: I'm so tired of this. I've countless times learned that something something monoid of endofunctors. And yet, I've never been able to make that knowlwdge more useful than "do a flatMap here".
Not looking for solutions. Ok with emotional support.
I work with a bunch of functional programmers. We went through most of “category theory for programmers.” We had support from a math PhD.
Broad consensus was it was a waste of time. Functional programming has taken the useful bits, and some of the less useful bits. The rest is arcanum, and as useful to programming as astronomy
I'm a PhD in math. I love category theory and it's very useful for studying abstract algebra at the research mathematics level because it clarifies concepts and even provides algorithmic ways for computation at that level (e.g. adjoint functors and cotriples to compute homology). But to be honest, except for computer science researchers, I would not recommend it to programmers. I am also a programmer (at least a part-time one sometimes, and previously full-time), and I can say with absolute confidence that a deep understanding of category theory is 100% useless for programming.
Again, with a few exceptions, but if you are one of these exceptions, you will already know it.
Hey there! I'm the author, so I suppose I ought to address this :)
First I'll say that I absolutely get this head-banging-on-desk feeling of no progress. Monads got me like that for a while but F-Algebras/recursion schemes got me like that much more, so make sure you keep your distance from them haha. I'm sorry to have contributed to your frustration.
It actually sounds like you've grasped monads quite well. flatMap is the essence. I won't try to explain it though, because I know that's not what you're looking for, and I don't want to contribute to your frustration even more!
I will say that my usual readership includes a lot of people who like designing type systems for programming languages. Category theory helps make sure you don't make mistakes in this process, though there are other techniques of course. I also find it helps my ability to think formally a lot, which has helped me a ton in studying and discussing philosophy, a separate interest of mine. Hopefully you can see from my post that I didn't really make an effort to justify or explain category theory for regular programmers much. Category theory is overhyped for that use case. I personally really hate reading overly mathematical Haskell code!! But if you just enjoy math or philosophy or learning or thinking, I hope you can have some fun with the beauty of these ideas. And since authoring the post I've added a wiki https://ryanbrewer.dev/wiki that can give more accessible background on things like monoids.
I could be wrong but I don't think I mentioned a monoid of endofunctors or flatMap a single time in the post. I did mention monads, as an example of natural transformations, but completely from the perspective of beautiful math, not from a programming perspective at all. And once you learn about adjunctions, monads get even more gorgeous! https://ryanbrewer.dev/wiki/adjunction
But all of this math takes a ton of patience. I'm someone who loves programming because the feeling of solving a hard bug is exhilarating and satisfying. The emotional payoff is bigger the longer it takes, and math is the same way for me. Don't beat yourself up about it, and don't feel bad if category theory just isn't helpful or enjoyable for you and your particular way of thinking! :)
I read a book on category theory that described how to model databases using category theory.
My conclusion was that the goal was not to provide insight into databases but rather into category theory, which seemed backwards to me.
Instead I picked up some books on the relational algebra/logic for databases, and those books were actually useful — you could show that some set of transformations would be mathematically identical.
At some point, too high level of abstraction is not useful. For category theory, it seemed that the point was to show how all these different things were “similar” but in a way that didn’t allow you to do anything with it.
I love category theory, but I think there's a secret category of "high effort programming things" that programmers who have done them love to say that "Everyone should do x because it will make them a better programmer".
Here's the kind of things I'm thinking of:
- Learn category theory
- Build an interpretter/compiler
- Develop your own programming language
- Learn about and built distributed systems
- Learn to write code for the GPU
- Understand assembly code
- Learn about CPU architecture
I think, especially since it's the holiday season, maybe lets take a step back and just accept these things probably will make you a better programmer, but there are lots of them. If you do all of them, you'll maybe become a very good programmer, but you'll definitely become a very tired human being.
If you have an interest in the mathematical underpinnings behind some of the ideas in Haskell et al, you might love category theory, but if you just want to do effective functional programming effectively, you're fine just doing that
Every other item in your list is actually used to produce technology except one.
Compilers? Used to produce executables form source code.
Programming language? Allows us to write code using higher abstraction.
Distributed systems? Allows us to build systems across multiple machines, users, continents, etc.
GPU? Allows us to speed up heavily parallel code for graphics and scientific applications.
Assembly? Allows us to write closer to the hardware.
CPU architecture? Allows us to understand what our code runs on.
If anything, this list shows how category theory is not like the other things programmers could spend time on. If the goal is “learn a bunch of math to expand your math skill”, then maybe category theory makes sense. If the goal is to become a better programmer then I think there are better uses of time.
I suppose that's true - but then I would suggest that type systems are (at least to some extent) the application of category theory.
It's hard to see how learning about Hindley-Milner type inference isn't academic type theory (which I'd argue is a category theory subfield) but applying Hindley-Milner type inference is clearly practical and related to producing technology.
I'm not saying all branches of category theory have a section that relates to directly producing technology, but I'd definitely argue that some do.
You are not alone. Composition and the general idea of type is enough for most of us. You do not need Schopenhauer to discover that life is hard, or Hegel to know that opposites exist and sometimes their relation creates something different “not in the middle”.
Just gonna unecessarily jump in to defend Schopenhauer, and maybe Hegel! (I'll leave category theory to look after itself)
I think especially in our fast moving, low attention society, there's a tendency to reduce philosophers like Schopenhauer to a few bullet points. I definitely was really guilty of doing this when I studied philosophy in university a while back. But you get so much more out of spending time reading Schopenhauer than just those bullet points- you get insight into a whole person's way of seeing things. That's such a great thing to spend time doing!
I do realise I'm mostly arguing against a point that you didn't make, or at best, made only tangentially, but, as a pedant on the internet, I couldn't turn down the opportunity to give my unsolicited opinion.
Right you are, indeed. I was first annoyed by your comment but (miraculously) I stepped aside for a few seconds!
Of course. But nevertheless, Category Theory or Schopenhauer are good ways to get interesting insight which may (emphasis) be useful. But not as a tool (which is how CT is usually sold in those tutorials), but as a (long) path to knowledge. Only some times and some people get "useful" results from studying them.
Trying to sell CT as a means to a utilitarian end is prostituting it. Like selling Hegel to learn how to body-build.
Thanks for taking the time!
I'm glad I did- I think the utilitarian distinction you made is such a good point.
Interesting as category theory is, and even while it does have applications, I think claiming that it's value is somehow in helping you learn Haskell/Elm/Gleam etc is just dishonest and misleading.
[dead]