<p>Note that most of the categories you considered are 'abstract', i.e., they require structure or properties of an abstract category. As computer scientists we should also be familiar several concrete categories which turn out to be useful:</p>

<h2>Concrete categories</h2>

<ul>
<li>Set</li>
<li>Set$_{\mathcal P}$ (objects are sets, morphisms are relations)</li>
<li>Rel (objects are relations, morphisms are functions preserving these relations)</li>
<li>Pred (objects are predicates (= subsets) morphisms are functions preserving these relations.</li>
<li>Posets</li>
<li>$\omega$-CPOs</li>
<li>Nominal sets</li>
<li>Lawvere theories</li>
</ul>

<h2>Abstract categories</h2>

<ul>
<li>Functor categories</li>
<li>Presheaf categories, in particular, monoid actions, which are equivalent to finite automata iianm</li>
<li>Locally presentable categories</li>
<li>Monads</li>
<li>Enriched categories (in particular, O-categories)</li>
<li>Kleisli and Eilenberg-Moore categories</li>
<li>Embedding-projection categories</li>
<li>Profunctors</li>
</ul>

<p>Also, sometimes properties don't commute on the nose, and the structure under consideration is of higher-dimensional (i.e., 2-categorical).</p>

<p>As to your question 3: you can define a category without mentioning objects at all (though it's conceptually clearer if we do mention the objects).</p>

CC BY-SA 3.0
2014-09-12T15:10:08.310Z
2014-09-12T15:16:23.627Z
2014-09-12T15:16:23.627Z
Ohad Kammar
<p>If $F$ is an endofunctor in a category $C$, then the category of $F$-algebras is pretty important in the study of datatypes. In particular, initial objects in this category correspond closely to finite datastructures. See <a href="http://en.wikipedia.org/wiki/Initial_algebra" rel="nofollow">this page on Wikipedia</a> for more details, including examples of how the types of natural numbers, cons-lists and binary trees arise in this way.</p>

<p>Also, a monad is just a monoid in the category of endofunctors :-) Highly tongue-in-cheek, but the category of endofunctors is important nevertheless, if you want a better theoretical understanding of (Haskell's) monads.</p>

CC BY-SA 3.0
2014-09-16T13:20:43.047Z
2014-09-16T13:20:43.047Z
yatima2975
<p>This is not a complete answer (as I'd be surprised if any answer will complete given the disparate nature of your research), but when I was going to do a PhD in re-representation of mathematical issues one of the constructs that was suggested was Sober Spaces. They underlie schemes, which connect algebraic topology, number theory and commutative algebra. This may help with the theorem prover side of things.</p>

CC BY-SA 3.0
2014-07-08T11:04:29.690Z
Thanks. Yes trying to identify how to get unstuck in self-learning CT is hard as I don't know enough CT to explain my problem. One "ahh" moment came when watching this [video](https://www.youtube.com/watch?v=-on4FbL7VSA&list=PLwuUlC2HlHGe7vmItFmrdBLn6p0AS8ALX&index=10) by Mike Stay. Also working through [Category Theory for Computing Science](http://www.math.mcgill.ca/triples/Barr-Wells-ctcs.pdf) and doing the exercises is most beneficial.
Guy Coder
CC BY-SA 3.0
2014-07-08T12:41:13.890Z
Is it really right to say that sober spaces "underlie" schemes? Most introductions to schemes and books that talk about schemes that I've seen don't even mention sober spaces (or perhaps they do, but only in passing). I would think it's more that sober spaces *generalize* schemes, but I'm not so familiar with this part of topology...
Joshua Grochow
CC BY-SA 3.0
2014-07-08T09:57:43.493Z
2014-07-08T09:57:43.493Z
David Boshton
<p>I am a computer scientist with a CS degree from the 80's.
<strong>I am learning category theory by myself.</strong>
I am looking for advice about learning category theory.
E.g. it is quite helpful in learning category theory
to have examples from a familiar topic like logic or programming languages.</p>
<h3>What I know</h3>
<p>I have read the answers to <a href="https://cstheory.stackexchange.com/q/19869/8739">this question</a> and the paper
<a href="http://arxiv.org/pdf/0903.0340v3.pdf" rel="nofollow noreferrer">Physics, Topology, Logic and Computation: A Rosetta Stone</a>
which builds up concepts with parallels between category theory,  logic, and theory of computation.</p>
<p>I know about the following categories:</p>
<p>• categories<br />
• monoidal categories<br />
• braided monoidal categories<br />
• closed monoidal categories<br />
• symmetric monoidal categories<br />
• closed braided monoidal categories<br />
• compact monoidal categories<br />
• cartesian categories<br />
• closed symmetric monoidal categories<br />
• compact braided monoidal categories<br />
• cartesian closed categories<br />
• compact symmetric monoidal categories</p>
<h3>Questions</h3>
<ol>
<li><p>Are there any other major categories that a computer scientist should know about?</p>
</li>
<li><p>Were there any that have fallen out of favor?
If yes, why?
Have they been replaced with other categories?</p>
</li>
<li><p>When thinking about categories should I
focus on the arrows first before the objects?</p>
</li>
</ol>

CC BY-SA 3.0
2014-07-01T15:25:42.287Z
For what purrpose are you learning category theory? Is it for logic and semantics, or something else?
David Boshton
CC BY-SA 3.0
2014-07-01T15:33:01.277Z
Obviously a good question to my open ended question. I presently tinker with theorem provers of the HOL variety and functional programming, so logic, languages, BDD, term rewriting, lambda calculus and unification are everyday concepts for me. I am also trying to learn more about SMT solvers.
Guy Coder
CC BY-SA 3.0
2014-07-02T15:30:23.050Z
You could try something completely different to get some feel for the other 90% of category theory. For instance, you could have a look at the basic setup of algebraic topology. That would give you some perspective.
Andrej Bauer
CC BY-SA 3.0
2014-07-02T15:36:28.280Z
@AndrejBauer How I wish I knew algebraic topology? It seems to be the typical way to introduce category theory. I will keep this as plan C as it seems to be more of a mountain than a hill for me to learn. Thanks.
Guy Coder
CC BY-SA 3.0
2014-07-02T15:44:58.437Z
I dunno. There are CS students our there who learnt algebraic topology from a computational point of view in one semester. Look up things like "persistent homology".
Andrej Bauer
CC BY-SA 3.0
2014-07-08T13:22:21.963Z
Since this question was stared, I will add info as comments that I find of use. If these items get to long I will hopefully edit them back into the question.
Guy Coder
CC BY-SA 3.0
2014-07-08T13:23:06.177Z
[relation between type theory and category theory](http://ncatlab.org/nlab/show/relation+between+type+theory+and+category+theory)
Guy Coder
CC BY-SA 3.0
2014-07-09T06:37:09.953Z
You are asking too many questions in one place. It makes the post unfocused. I would suggest putting each in its own question. I would suggest making this one focus on categories that all computer scientists should know about would drop the list of categories you know about and your background from the post to make it more useful also for other readers. I think the first and second questions can potentially be interesting for lots of other users. Though I don't think the 3rd one is good one. You can also ask a separate soft-question about general advice on learning category theory.
Kaveh
CC BY-SA 3.0
2014-07-09T06:44:58.807Z
@Kaveh I don't think there's any such thing as a "category that all computer scientists should know about". I don't think any of my current work (algorithms and complexity) or previous work (finite model theory) required or would even have benefited from any knowledge of category theory. I can't even think of a conference talk I've seen in those areas that has used category theory.
David Richerby
CC BY-SA 3.0
2014-07-09T06:48:46.910Z
@David, I think you are interpreting "should" in a different way than I do. I use should in the sense of similar questions (e.g. what papers should everyone read? etc.). Even if we haven't or may not use them doesn't mean we should not know about them. There are lots of stuff that we never use but still we should know about. :)
Kaveh
CC BY-SA 3.0
2014-07-09T10:44:08.763Z
@Kaveh Thanks for the edits. As this is CC I don't mind. I have thought about deleting the this question and starting again with more basic questions but this question seems to be a focal point for others with the same interest. I also think that these comments should continue as a discussion which can be used to formulate questions that could help others self-learning CT. I also believe that more CS people should know CT and these Q&A can help them gain the knowledge.
Guy Coder
CC BY-SA 3.0
2014-07-09T15:01:06.293Z
[solid applications of category theory in TCS](http://cstheory.stackexchange.com/questions/944/solid-applications-of-category-theory-in-tcs)
vzn
<ct.category-theory>
Categories a computer scientist should know about
Guy Coder
# Categories a computer scientist should know about

(Asked by: username_0 on 2014-07-01)

I am a computer scientist with a CS degree from the 80's.
**I am learning category theory by myself.**
I am looking for advice about learning category theory.
E.g. it is quite helpful in learning category theory
to have examples from a familiar topic like logic or programming languages.

### What I know

I have read the answers to [this question](https://cstheory.stackexchange.com/q/19869/8739) and the paper
[Physics, Topology, Logic and Computation: A Rosetta Stone](http://arxiv.org/pdf/0903.0340v3.pdf)
which builds up concepts with parallels between category theory, logic, and theory of computation.

I know about the following categories:

• categories  
• monoidal categories  
• braided monoidal categories  
• closed monoidal categories  
• symmetric monoidal categories  
• closed braided monoidal categories  
• compact monoidal categories  
• cartesian categories  
• closed symmetric monoidal categories  
• compact braided monoidal categories  
• cartesian closed categories  
• compact symmetric monoidal categories

### Questions

1. Are there any other major categories that a computer scientist should know about?
2. Were there any that have fallen out of favor?
   If yes, why?
   Have they been replaced with other categories?
3. When thinking about categories should I
   focus on the arrows first before the objects?

**Tags:** ct.category-theory
> **Comments:**
> **username_1**: For what purrpose are you learning category theory? Is it for logic and semantics, or something else?  
> **username_0**: Obviously a good question to my open ended question. I presently tinker with theorem provers of the HOL variety and functional programming, so logic, languages, BDD, term rewriting, lambda calculus and unification are everyday concepts for me. I am also trying to learn more about SMT solvers.  
> **username_2**: You could try something completely different to get some feel for the other 90% of category theory. For instance, you could have a look at the basic setup of algebraic topology. That would give you some perspective.  
> **username_0**: @AndrejBauer How I wish I knew algebraic topology? It seems to be the typical way to introduce category theory. I will keep this as plan C as it seems to be more of a mountain than a hill for me to learn. Thanks.  
> **username_2**: I dunno. There are CS students our there who learnt algebraic topology from a computational point of view in one semester. Look up things like "persistent homology".  
> **username_0**: Since this question was stared, I will add info as comments that I find of use. If these items get to long I will hopefully edit them back into the question.  
> **username_0**: [relation between type theory and category theory](http://ncatlab.org/nlab/show/relation+between+type+theory+and+category+theory)  
> **username_3**: You are asking too many questions in one place. It makes the post unfocused. I would suggest putting each in its own question. I would suggest making this one focus on categories that all computer scientists should know about would drop the list of categories you know about and your background from the post to make it more useful also for other readers. I think the first and second questions can potentially be interesting for lots of other users. Though I don't think the 3rd one is good one. You can also ask a separate soft-question about general advice on learning category theory.  
> **username_4**: @Kaveh I don't think there's any such thing as a "category that all computer scientists should know about". I don't think any of my current work (algorithms and complexity) or previous work (finite model theory) required or would even have benefited from any knowledge of category theory. I can't even think of a conference talk I've seen in those areas that has used category theory.  
> **username_3**: @David, I think you are interpreting "should" in a different way than I do. I use should in the sense of similar questions (e.g. what papers should everyone read? etc.). Even if we haven't or may not use them doesn't mean we should not know about them. There are lots of stuff that we never use but still we should know about. :)  
> **username_0**: @Kaveh Thanks for the edits. As this is CC I don't mind. I have thought about deleting the this question and starting again with more basic questions but this question seems to be a focal point for others with the same interest. I also think that these comments should continue as a discussion which can be used to formulate questions that could help others self-learning CT. I also believe that more CS people should know CT and these Q&A can help them gain the knowledge.  
> **username_5**: [solid applications of category theory in TCS](http://cstheory.stackexchange.com/questions/944/solid-applications-of-category-theory-in-tcs)  

---

## 3 answers

### Answer by username_6 on 2014-09-12. Score: 8 | Accepted answer

Note that most of the categories you considered are 'abstract', i.e., they require structure or properties of an abstract category. As computer scientists we should also be familiar several concrete categories which turn out to be useful:

## Concrete categories

* Set
* Set$\_{\mathcal P}$ (objects are sets, morphisms are relations)
* Rel (objects are relations, morphisms are functions preserving these relations)
* Pred (objects are predicates (= subsets) morphisms are functions preserving these relations.
* Posets
* $\omega$-CPOs
* Nominal sets
* Lawvere theories

## Abstract categories

* Functor categories
* Presheaf categories, in particular, monoid actions, which are equivalent to finite automata iianm
* Locally presentable categories
* Monads
* Enriched categories (in particular, O-categories)
* Kleisli and Eilenberg-Moore categories
* Embedding-projection categories
* Profunctors

Also, sometimes properties don't commute on the nose, and the structure under consideration is of higher-dimensional (i.e., 2-categorical).

As to your question 3: you can define a category without mentioning objects at all (though it's conceptually clearer if we do mention the objects).


---

### Answer by username_7 on 2014-09-16. Score: 2

If $F$ is an endofunctor in a category $C$, then the category of $F$-algebras is pretty important in the study of datatypes. In particular, initial objects in this category correspond closely to finite datastructures. See [this page on Wikipedia](http://en.wikipedia.org/wiki/Initial_algebra) for more details, including examples of how the types of natural numbers, cons-lists and binary trees arise in this way.

Also, a monad is just a monoid in the category of endofunctors :-) Highly tongue-in-cheek, but the category of endofunctors is important nevertheless, if you want a better theoretical understanding of (Haskell's) monads.


---

### Answer by username_1 on 2014-07-08. Score: 0

This is not a complete answer (as I'd be surprised if any answer will complete given the disparate nature of your research), but when I was going to do a PhD in re-representation of mathematical issues one of the constructs that was suggested was Sober Spaces. They underlie schemes, which connect algebraic topology, number theory and commutative algebra. This may help with the theorem prover side of things.

> **Comments:**
> **username_0**: Thanks. Yes trying to identify how to get unstuck in self-learning CT is hard as I don't know enough CT to explain my problem. One "ahh" moment came when watching this [video](https://www.youtube.com/watch?v=-on4FbL7VSA&list=PLwuUlC2HlHGe7vmItFmrdBLn6p0AS8ALX&index=10) by Mike Stay. Also working through [Category Theory for Computing Science](http://www.math.mcgill.ca/triples/Barr-Wells-ctcs.pdf) and doing the exercises is most beneficial.  
> **username_8**: Is it really right to say that sober spaces "underlie" schemes? Most introductions to schemes and books that talk about schemes that I've seen don't even mention sober spaces (or perhaps they do, but only in passing). I would think it's more that sober spaces *generalize* schemes, but I'm not so familiar with this part of topology...  

---

