It looks like you're new here. If you want to get involved, click one of these buttons!

- All Categories 2.4K
- Chat 505
- Study Groups 21
- Petri Nets 9
- Epidemiology 4
- Leaf Modeling 2
- Review Sections 9
- MIT 2020: Programming with Categories 51
- MIT 2020: Lectures 20
- MIT 2020: Exercises 25
- Baez ACT 2019: Online Course 339
- Baez ACT 2019: Lectures 79
- Baez ACT 2019: Exercises 149
- Baez ACT 2019: Chat 50
- UCR ACT Seminar 4
- General 75
- Azimuth Code Project 111
- Statistical methods 4
- Drafts 10
- Math Syntax Demos 15
- Wiki - Latest Changes 3
- Strategy 113
- Azimuth Project 1.1K
- - Spam 1
- News and Information 148
- Azimuth Blog 149
- - Conventions and Policies 21
- - Questions 43
- Azimuth Wiki 718

## Comments

I'd rather clean it up by taking Cheuk Man Hwang's lead,

`I'd rather clean it up by taking Cheuk Man Hwang's lead, >There's a functor >\[ \text{Ob}: \mathbf{Cat} \to \mathbf{Set} \] >that forgets everything about a category except its objects. In other words, it sends any **small** category \\(\mathcal{C}\\) to its set of objects \\(\mathrm{Ob}(\mathcal{C})\\), and sends any functor \\(F: \mathcal{C} \to \mathcal{D}\\) to the function it defines on objects, which I've been calling just \\(F : \mathrm{Ob}(\mathcal{C}) \to \mathrm{Ob}(\mathcal{D})\\). A more systematic name for it is \\(\mathrm{Ob}: \mathrm{Ob}(\mathcal{C}) \to \mathrm{Ob}(\mathcal{D})\\).`

@Keith Like I said, I suspect that John left out some technicality so that we can focus on the essential features of category theory. To be fully precise, we should define \(\mathbf{Cat}\) as the category of all

small categories, which means the members of \(\mathbf{Cat}\) should be categories with their collections of objects to be sets. As a result, the large categories \(\mathbf{Cat}\) and \(\mathbf{Set}\) do not belong to \(\mathbf{Cat}\) because their collections of objects are proper classes. This should resolve the problem. You may consult pp39 - 41 of the book "Abstract and Concrete Categories - The Joy of Cats" by Jiří Adámek, et al.`@Keith Like I said, I suspect that John left out some technicality so that we can focus on the essential features of category theory. To be fully precise, we should define \\(\mathbf{Cat}\\) as the category of all **small categories**, which means the members of \\(\mathbf{Cat}\\) should be categories with their collections of objects to be sets. As a result, the large categories \\(\mathbf{Cat}\\) and \\(\mathbf{Set}\\) do not belong to \\(\mathbf{Cat}\\) because their collections of objects are proper classes. This should resolve the problem. You may consult pp39 - 41 of the book "Abstract and Concrete Categories - The Joy of Cats" by Jiří Adámek, et al.`

Cat is a category but its not an object of itself. That's why you need the modifier "small".

Though if you are willing to use type theory instead of set theory you can find a bigger Cat to put any Cat in.

But this is all set theory / type theory issues not category theory issues really.

`Cat is a category but its not an object of itself. That's why you need the modifier "small". Though if you are willing to use type theory instead of set theory you can find a bigger Cat to put any Cat in. But this is all set theory / type theory issues not category theory issues really.`

@Anindya

Thanks for the explanation. I still haven't wrapped my head around it but I think something clicked because I have more questions.

Since \(R_1, R_2, R_3\) are forgetful functors, going the other way would be injective in nature, right? Then will there not always be the obvious left adjoint where you send everything back with leftovers? As with the right adjoint, since all the categories in the problem have a terminal object, can we not always have the obvious right adjoint sending to the terminal object?

`@Anindya Thanks for the explanation. I still haven't wrapped my head around it but I think something clicked because I have more questions. Since \\(R_1, R_2, R_3\\) are forgetful functors, going the other way would be injective in nature, right? Then will there not always be the obvious left adjoint where you send everything back with leftovers? As with the right adjoint, since all the categories in the problem have a terminal object, can we not always have the obvious right adjoint sending to the terminal object?`

Alright, I'm thinking out loud here, trying to cook up the functor \(\mathbf{Cat}\overset{R_1}\longrightarrow\mathbf{Preord}\) in

Puzzle 163. Currently I am only thinking about how \(R_1\) acts on the objects. So let's pick a random category \(\mathcal{C}\) from \(\mathbf{Cat}\), \(R_1(\mathcal{C})\) must be a preorder. \(R_1\) should preserve the set of objects of \(\mathcal{C}\), i.e. \(\mathrm{Ob}(\mathcal{C})=\mathrm{Ob}(R_1(\mathcal{C}))\) as sets.Next, let's consider the effect of \(R_1\) on the \(\mathbf{Hom}\) sets. Notice that we have to be careful of level slip here because we are concerning the \(\mathbf{Hom}\) set in the category \(\mathcal{C}\), not the \(\mathbf{Hom}\) sets in \(\mathbf{Cat}\), so we are still considering the action of \(R_1\) on the object level. To this end, we have to pick two objects \(x\) and \(y\) in \(\mathrm{Ob}(\mathcal{C})=\mathrm{Ob}(R_1(\mathcal{C}))\) and consider \(\mathcal{C}(x,y)\) and \(R_1(\mathcal{C})(x,y)\). Since \(R_1(\mathcal{C})\) is a preorder, \(R_1(\mathcal{C})(x,y)\) must be either an empty set or a singleton. I only have an idea of what to do in the following situations:

If \(x=y\), \(R_1(\mathcal{C})(x,y)\) must be a singleton which contains the identity;

If \(\mathcal{C}(x,y)\) contains an isomorphism in the original category \(\mathcal{C}\), then both \(R_1(\mathcal{C})(x,y)\) and \(R_1(\mathcal{C})(y,x)\) should be singletons;

If \(\mathcal{C}(x,y)\) is empty, then \(R_1(\mathcal{C})(x,y)\) should be empty.

However, I am not sure when to decide if \(R_1(\mathcal{C})(x,y)\) should be empty or not in general. Any ideas?

`Alright, I'm thinking out loud here, trying to cook up the functor \\(\mathbf{Cat}\overset{R_1}\longrightarrow\mathbf{Preord}\\) in **Puzzle 163**. Currently I am only thinking about how \\(R_1\\) acts on the objects. So let's pick a random category \\(\mathcal{C}\\) from \\(\mathbf{Cat}\\), \\(R_1(\mathcal{C})\\) must be a preorder. \\(R_1\\) should preserve the set of objects of \\(\mathcal{C}\\), i.e. \\(\mathrm{Ob}(\mathcal{C})=\mathrm{Ob}(R_1(\mathcal{C}))\\) as sets. Next, let's consider the effect of \\(R_1\\) on the \\(\mathbf{Hom}\\) sets. Notice that we have to be careful of level slip here because we are concerning the \\(\mathbf{Hom}\\) set in the category \\(\mathcal{C}\\), not the \\(\mathbf{Hom}\\) sets in \\(\mathbf{Cat}\\), so we are still considering the action of \\(R_1\\) on the object level. To this end, we have to pick two objects \\(x\\) and \\(y\\) in \\(\mathrm{Ob}(\mathcal{C})=\mathrm{Ob}(R_1(\mathcal{C}))\\) and consider \\(\mathcal{C}(x,y)\\) and \\(R_1(\mathcal{C})(x,y)\\). Since \\(R_1(\mathcal{C})\\) is a preorder, \\(R_1(\mathcal{C})(x,y)\\) must be either an empty set or a singleton. I only have an idea of what to do in the following situations: * If \\(x=y\\), \\(R_1(\mathcal{C})(x,y)\\) must be a singleton which contains the identity; * If \\(\mathcal{C}(x,y)\\) contains an isomorphism in the original category \\(\mathcal{C}\\), then both \\(R_1(\mathcal{C})(x,y)\\) and \\(R_1(\mathcal{C})(y,x)\\) should be singletons; * If \\(\mathcal{C}(x,y)\\) is empty, then \\(R_1(\mathcal{C})(x,y)\\) should be empty. However, I am not sure when to decide if \\(R_1(\mathcal{C})(x,y)\\) should be empty or not in general. Any ideas?`

You want R1(C)(x,y) to be empty exactly when C(x,y) is empty. In fact you can make R1(C)(x,y)

bethe proposition \(\exists f, f\in C(x,y)\).`You want R1(C)(x,y) to be empty exactly when C(x,y) is empty. In fact you can make R1(C)(x,y) _be_ the proposition \\(\exists f, f\in C(x,y)\\).`

just had a thought – if we define \(R_1\) to be the functor sending a category \(C\) to the codiscrete preorder on \(\textrm{Ob}(C)\), and define \(L_1\) to the functor sending a preorder \(P\) to the discrete category on the elements of \(P\), then an arrow \(L_1 (P) \rightarrow C\) just picks out one \(C\)-object for every \(P\)-element, which is the same thing as an arrow \(P \rightarrow R_1 (C)\). I think these are the functors we're looking for.

`just had a thought – if we define \\(R_1\\) to be the functor sending a category \\(C\\) to the codiscrete preorder on \\(\textrm{Ob}(C)\\), and define \\(L_1\\) to the functor sending a preorder \\(P\\) to the discrete category on the elements of \\(P\\), then an arrow \\(L_1 (P) \rightarrow C\\) just picks out one \\(C\\)-object for every \\(P\\)-element, which is the same thing as an arrow \\(P \rightarrow R_1 (C)\\). I think these are the functors we're looking for.`

John can probably talk more about this, but this is just under the view of conventional ZF-Set theory.

It's inconvenient to always have to worry if a category is small, and I've seen some authors disregard this detail completely.

In 1977 Sol Feferman began a research program to formulate category theory in Quine's New Foundations, rather than ZF-Set theory. In New Foundations, Quine solves Russell's paradox by having a modified axiom schema of restriction. One feature of New Foundations is the existence of a universal set or set of all sets. By the same token, there is also a category of all categories which includes itself as a member.

However \(\mathbf{Set}\) in New Foundations

is notCartesian Closed, so it is not a Topos. There are proofs of this in McClarty (1992) and Forster (2007).I understand Homotopy Type Theory, while based in Coq rather than ZF-Set theory, uses small categories as per convention. See Gross (2014) for a discussion about this.

`> The key phrase is "it sends any category C to its set of objects". But the objects of **Cat** do not form a set. Neither do the objects of **Set**. John can probably talk more about this, but this is just under the view of conventional ZF-Set theory. It's inconvenient to always have to worry if a category is [small](https://en.wikipedia.org/wiki/Category_(mathematics)#Small_and_large_categories), and I've seen some authors disregard this detail completely. In 1977 [Sol Feferman](https://math.stanford.edu/~feferman/papers/Cat_founds.pdf) began a research program to formulate category theory in [Quine's New Foundations](https://plato.stanford.edu/entries/quine-nf/), rather than ZF-Set theory. In New Foundations, Quine solves Russell's paradox by having a modified [axiom schema of restriction](https://en.wikipedia.org/wiki/Axiom_schema_of_specification). One feature of New Foundations is the existence of a [universal set](https://en.wikipedia.org/wiki/New_Foundations#Admissibility_of_useful_large_sets) or set of all sets. By the same token, there is also a category of all categories which includes itself as a member. However \\(\mathbf{Set}\\) in New Foundations *is not* Cartesian Closed, so it is not a Topos. There are proofs of this in [McClarty (1992)](http://www.cwru.edu/artsci/phil/FCCinNF.pdf) and [Forster (2007)](https://www.dpmms.cam.ac.uk/~tf/cartesian-closed.pdf). I understand Homotopy Type Theory, while based in Coq rather than ZF-Set theory, uses small categories as per convention. See [Gross (2014)](https://arxiv.org/pdf/1401.7694.pdf) for a discussion about this.`

good point @Matthew – I've often idly wondered what category theory would look like in set theories with \(V\in V\).

`good point @Matthew – I've often idly wondered what category theory would look like in set theories with \\(V\in V\\).`

In comment #37 Christopher wrote:

Right. Anyone who gets confused about such things should remember: "an ant colony is not an ant". \(\mathbf{Preord}\) is a big thing with all the preorders in the universe crawling around inside it. There's no reason it itself should be a preorder. It

couldbe, but you can check it's not.The surprising thing is when an ant colony

isan ant, or something like a giant ant. The set of all sets, the category of all categories - this is where things get interesting. We could discuss this a lot.Basically to avoid logical contradictions we need to use some trick like Grothendieck's axiom of universes, which allows one to say the set of all ordinary sets is a "large" set, the set of all large sets is an "extra-large" set, etc. I am never going to discuss this stuff in lectures, because it's distracting, technical, and ultimately irrelevant to the material in the course. But people who care about the foundations of math eventually need to tackle this material.

`In comment #37 Christopher wrote: > \\(\mathbf{Preord}\\) is not a preorder. Right. Anyone who gets confused about such things should remember: "an ant colony is not an ant". \\(\mathbf{Preord}\\) is a big thing with all the preorders in the universe crawling around inside it. There's no reason it itself should be a preorder. It _could_ be, but you can check it's not. The surprising thing is when an ant colony _is_ an ant, or something like a giant ant. The set of all sets, the category of all categories - this is where things get interesting. We could discuss this a lot. Basically to avoid logical contradictions we need to use some trick like Grothendieck's [axiom of universes](https://en.wikipedia.org/wiki/Grothendieck_universe), which allows one to say the set of all ordinary sets is a "large" set, the set of all large sets is an "extra-large" set, etc. I am never going to discuss this stuff in lectures, because it's distracting, technical, and ultimately irrelevant to the material in the course. But people who care about the foundations of math eventually need to tackle this material.`

It it self isn't really an interesting problem in proof assistant design, but automating the logic that extracts and solves the problem is.

It helps that the type theory version requires a more complex paradox then Russell's. So in practical programming it's hard to run into.

`It it self isn't really an interesting problem in proof assistant design, but automating the logic that extracts and solves the problem is. It helps that the type theory version requires a more complex paradox then Russell's. So in practical programming it's hard to run into.`

Anindya wrote:

For the purposes of my puzzles in this lecture, one should ignore all this. But for those who are interested, I'll say a bit...

Okay, now we're getting into the foundations of mathematics. If all we have at our disposal is the usual ZFC axioms, which suffice for most ordinary math, we have to say the collection of all sets is a proper class, not a set. This makes it annoying, though not impossible, to rigorously study the category

Set: it has not a set of objects but a proper class of objects. For the same reason it's difficult to reason aboutCat: it has a proper class of objects.To deal with this problem, these days in category theory we add an extra axiom to ZFC: Grothendieck's axiom of universes.

This says that every set is an element of some set called a Grothendieck universe, which acts like the collection of

allsets. In other words, a Grothendieck universe is a set closed under all the usual operations of set theory, so we can work inside it and act like we're working withallsets, even though we're not really!Using this axiom we can easily generate an infinite sequences of Grothendieck universes \(U_1, U_2, \dots\) with \(U_i \in U_{i+1}\).

Elements of \(U_1\) are called

small sets, elements of \(U_2\) are calledlarge sets, and sometimes one needs to go further and work with elements of \(U_3\), which I jokingly call 'extra-large sets', and so on. Since \(U_1 \in U_2\), the set of all small sets is a large set, and so on.We define \(\mathbf{Set}\) to be the category of

smallsets and functions between these. Then \(\mathbf{Set}\) has alargeset of objects and a large set of morphisms, so we call it alarge category.Similarly, we define

Catto be the category ofsmall categories: categories with a small set of objects and a small set of morphisms.Catis not itself a small category: it's a large category.You can play this game starting with sets of any size and get categories \(\mathbf{Set}_1, \mathbf{Set}_2, \dots \), with \(\mathbf{Set}_1\) being our friend \(\mathbf{Set}\) and \(\mathbf{Set}_n\) being the category of all sets that are members of \(U_n\). The set of objects of \(\mathbf{Set}_n\) is \(U_n\), which is an element of \(U_{n+1}\), so the set of objects of \(\mathbf{Set}_n\) is an object of \(\mathbf{Set}_{n+1}\).

Similarly you can define \(\mathbf{Cat}_n \) to be the category of all categories whose set of objects and set of morphisms are elements of \(U_n\).

If you want to study the categories \(\mathbf{Set}_n\) and \(\mathbf{Cat}_n\), you can do so by treating them as objects of \(\mathbf{Cat}_{n+1}\).

So, it's perfectly fine to talk about the 'category of all categories' as long as we realize we're secretly talking about the category of size \(n+1\) whose objects are all categories of size \(n\).The good thing about this baloney is that you can easily prove theorems about \(\mathbf{Cat}_n\) for all \(n\) at once: they all work the same way! So whenever you run into a 'size issue', like wanting to talk about the category of all categories of a given size, you can just increase \(n\) by one and nothing bad happens: all your theorems about the category of small categories will still apply!

In the end, these issues usually matter very little, so we can usually ignore them, which is what I intend to do this in this course. There aresometheorems in category theory where you really need to think about this stuff, but humble 'applied category theorists' are probably safe.`Anindya wrote: > The key phrase is "it sends any category C to its set of objects". But the objects of **Cat** do not form a set. Neither do the objects of **Set**. For the purposes of my puzzles in this lecture, one should ignore all this. But for those who are interested, I'll say a bit... <img width = "100" src = "http://math.ucr.edu/home/baez/mathematical/warning_sign.jpg"> Okay, now we're getting into the foundations of mathematics. If all we have at our disposal is the usual [ZFC axioms](https://en.wikipedia.org/wiki/Zermelo%E2%80%93Fraenkel_set_theory), which suffice for most ordinary math, we have to say the collection of all sets is a [proper class](https://en.wikipedia.org/wiki/Class_(set_theory)), not a set. This makes it annoying, though not impossible, to rigorously study the category **Set**: it has not a set of objects but a proper class of objects. For the same reason it's difficult to reason about **Cat**: it has a proper class of objects. To deal with this problem, these days in category theory we add an extra axiom to ZFC: Grothendieck's [axiom of universes](https://ncatlab.org/nlab/show/Grothendieck+universe#axiom_of_universes). This says that every set is an element of some set called a [Grothendieck universe](https://en.wikipedia.org/wiki/Grothendieck_universe), which acts like the collection of _all_ sets. In other words, a Grothendieck universe is a set closed under all the usual operations of set theory, so we can work inside it and act like we're working with _all_ sets, even though we're not really! Using this axiom we can easily generate an infinite sequences of Grothendieck universes \\(U_1, U_2, \dots\\) with \\(U_i \in U_{i+1}\\). Elements of \\(U_1\\) are called **small sets**, elements of \\(U_2\\) are called **large sets**, and sometimes one needs to go further and work with elements of \\(U_3\\), which I jokingly call 'extra-large sets', and so on. Since \\(U_1 \in U_2\\), the set of all small sets is a large set, and so on. We define \\(\mathbf{Set}\\) to be the category of _small_ sets and functions between these. Then \\(\mathbf{Set}\\) has a _large_ set of objects and a large set of morphisms, so we call it a **large category**. Similarly, we define **Cat** to be the category of **small categories**: categories with a small set of objects and a small set of morphisms. **Cat** is not itself a small category: it's a large category. You can play this game starting with sets of any size and get categories \\(\mathbf{Set}\_1, \mathbf{Set}\_2, \dots \\), with \\(\mathbf{Set}\_1\\) being our friend \\(\mathbf{Set}\\) and \\(\mathbf{Set}\_n\\) being the category of all sets that are members of \\(U\_n\\). The set of objects of \\(\mathbf{Set}\_n\\) is \\(U\_n\\), which is an element of \\(U\_{n+1}\\), so the set of objects of \\(\mathbf{Set}\_n\\) is an object of \\(\mathbf{Set}\_{n+1}\\). Similarly you can define \\(\mathbf{Cat}\_n \\) to be the category of all categories whose set of objects and set of morphisms are elements of \\(U\_n\\). If you want to study the categories \\(\mathbf{Set}\_n\\) and \\(\mathbf{Cat}\_n\\), you can do so by treating them as objects of \\(\mathbf{Cat}\_{n+1}\\). **So, it's perfectly fine to talk about the 'category of all categories' as long as we realize we're secretly talking about the category of size \\(n+1\\) whose objects are all categories of size \\(n\\).** The good thing about this baloney is that you can easily prove theorems about \\(\mathbf{Cat}\_n\\) for all \\(n\\) at once: they all work the same way! So whenever you run into a 'size issue', like wanting to talk about the category of all categories of a given size, you can just increase \\(n\\) by one and nothing bad happens: all your theorems about the category of small categories will still apply! **In the end, these issues usually matter very little, so we can usually ignore them, which is what I intend to do this in this course**. There are _some_ theorems in category theory where you really need to think about this stuff, but humble 'applied category theorists' are probably safe.`

Christopher wrote in comment #8:

Anindya wrote in comment #42

Yes, there's a mistake in Puzzle 163, which I will fix now. Sorry!

Let me write down the original version here, so everyone can see what the fuss was about. I will also include a copy in your posts.

The functor \(R_2 : \mathbf{Preord} \to \mathbf{Poset}\) I had in mind

skeletalizesany preorder, by choosing a representative for each isomorphism class. But this would mean that the composite \(R_3 R_2 R_1: \mathbf{Cat} \to \mathbf{Set} \) sends any category to its set ofisomorphism classesof its objects, not its set of objects. So, this composite could not equal our friend$$ \text{Ob}: \mathbf{Cat} \to \mathbf{Set} .$$ Furthermore, the 'skeletalizing' functor \( \mathbf{Preord} \to \mathbf{Poset}\) is not really a right adjoint! So it doesn't deserve to be called \(R_2\).

So, I will remove \(\mathbf{Poset}\) from the above chain of functors, and put it into another puzzle.

Here's a way to see that the skeletalizing functor \(\mathrm{Sk}: \mathbf{Preord} \to \mathbf{Poset}\) doesn't have a right adjoint. It uses ideas we haven't covered yet. Right adjoints preserve limits and in particular equalizers. But we can see that \(\mathrm{Sk}: \mathbf{Preord} \to \mathbf{Poset}\) doesn't preserve equalizers, by looking at an example.

Consider the preorder \(X\) consisting of two isomorphic objects. When we skeletalize it we get the terminal poset \(\mathbf{1}\) - that is, the poset with one element: \( \mathrm{Sk}(X) = \mathbf{1} \).

There are exactly two different monotone functions

$$ f,g : \mathbf{1} \to X, $$ and when we take their equalizer we get \(\mathbf{0}\) - the preorder with no elements. Then skeletalizing this we get the poset with no elements.

On the other hand, if we skeletalize first we get two monotone functions

$$ \mathrm{Sk}(f), \mathrm{Sk}(g) : \mathrm{Sk}(1) \to \mathrm{Sk}(X) ,$$ but \(\mathrm{Sk}(X) = \mathbf{1} \) has just one element so these two functions are equal! Thus, taking their equalizer we get all of \(\mathrm{Sk}(\mathbf{1}) = \mathbf{1}\).

So, we're seeing that \(\mathrm{Sk}\) can't be a right adjoint.

`Christopher wrote in [comment #8](https://forum.azimuthproject.org/discussion/comment/19785/#Comment_19785): > Wait, doesn't going to Poset skeletonise things? I.e. any connected* groupoid is taken to the poset \\(\\{\ast\\}\\)? So that the composition doesn't equal Ob? Anindya wrote in [comment #42](https://forum.azimuthproject.org/discussion/comment/19834/#Comment_19834) > Has anyone got anywhere on **Puzzle 163**? I'm thoroughly stuck. > The inclusion functors **Poset** → **Preord** and **Preord** → **Cat** have _left_ adjoints: we can send a preorder to its skeleton, and a category to its "thin-ification", but I don't think they have right adjoints, and I can't think of any other sensible functors between these categories. Yes, there's a mistake in Puzzle 163, which I will fix now. Sorry! <img src = "http://math.ucr.edu/home/baez/emoticons/doh20.gif"> Let me write down the original version here, so everyone can see what the fuss was about. I will also include a copy in your posts. > **Puzzle 163.** Show there are functors > \[ \mathbf{Cat} \stackrel{R_1}{\longrightarrow} \mathbf{Preord} \stackrel{R_2}{\longrightarrow} \mathbf{Poset} \stackrel{R_3}{\longrightarrow} \mathbf{Set} \] > with left adjoints going back: > \[ \mathbf{Set} \stackrel{L_3}{\longrightarrow} \mathbf{Poset} \stackrel{L_2}{\longrightarrow} \mathbf{Preord} \stackrel{L_1}{\longrightarrow} \mathbf{Cat} . \] > Hint: the composite \\( R_3 R_2 R_1 : \mathbf{Cat} \to \mathbf{Set} \\) is our friend > \[ \text{Ob}: \mathbf{Cat} \to \mathbf{Set} ,\] > and the composite \\(L_1 L_2 L_3 : \mathbf{Set} \to \mathbf{Cat} \\) is our friend > \[ \mathrm{Disc} : \mathbf{Set} \to \mathbf{Cat} .\] The functor \\(R_2 : \mathbf{Preord} \to \mathbf{Poset}\\) I had in mind **skeletalizes** any preorder, by choosing a representative for each isomorphism class. But this would mean that the composite \\(R_3 R_2 R_1: \mathbf{Cat} \to \mathbf{Set} \\) sends any category to its set of _isomorphism classes_ of its objects, not its set of objects. So, this composite could not equal our friend \[ \text{Ob}: \mathbf{Cat} \to \mathbf{Set} .\] Furthermore, the 'skeletalizing' functor \\( \mathbf{Preord} \to \mathbf{Poset}\\) is not really a right adjoint! So it doesn't deserve to be called \\(R_2\\). So, I will remove \\(\mathbf{Poset}\\) from the above chain of functors, and put it into another puzzle. <img width = "100" src = "http://math.ucr.edu/home/baez/mathematical/warning_sign.jpg"> Here's a way to see that the skeletalizing functor \\(\mathrm{Sk}: \mathbf{Preord} \to \mathbf{Poset}\\) doesn't have a right adjoint. It uses ideas we haven't covered yet. Right adjoints preserve limits and in particular equalizers. But we can see that \\(\mathrm{Sk}: \mathbf{Preord} \to \mathbf{Poset}\\) doesn't preserve equalizers, by looking at an example. Consider the preorder \\(X\\) consisting of two isomorphic objects. When we skeletalize it we get the terminal poset \\(\mathbf{1}\\) - that is, the poset with one element: \\( \mathrm{Sk}(X) = \mathbf{1} \\). There are exactly two different monotone functions \[ f,g : \mathbf{1} \to X, \] and when we take their equalizer we get \\(\mathbf{0}\\) - the preorder with no elements. Then skeletalizing this we get the poset with no elements. On the other hand, if we skeletalize first we get two monotone functions \[ \mathrm{Sk}(f), \mathrm{Sk}(g) : \mathrm{Sk}(1) \to \mathrm{Sk}(X) ,\] but \\(\mathrm{Sk}(X) = \mathbf{1} \\) has just one element so these two functions are equal! Thus, taking their equalizer we get all of \\(\mathrm{Sk}(\mathbf{1}) = \mathbf{1}\\). So, we're seeing that \\(\mathrm{Sk}\\) can't be a right adjoint.`

Michael wrote in comment #44

It's also not extremely important for what we're doing so far, which is why I put off talking about it to very end: the last puzzle in the last lecture on this chapter. I just felt guilty not talking about it.

Anindya answered this just the way I would:

In short, the naturality square is the very last thing to check. Much more important, if you're trying to determine if a functor \(L\) is (say) a left adjoint, is to find a

candidate\(R\) for its right adjoint. Then, see if you can find a bijection \(\mathcal{D}(L(X), Y) \cong \mathcal{C}(X, R(Y))\). If you succeed in finding one, and it's not too ridiculous, 99 times out of 100 it will make that naturality square commute.So,

the key skill to develop is. When you get good, you'll recognize the difference in flavors between left and right adjoints, and you can use that to guide you.guessingadjoints to functors that people hand youHere's an example of a ridiculous bijection: suppose you determine that both \(\mathcal{D}(L(X), Y)\) and \(\mathcal{C}(X, R(Y))\) are always countable infinite sets, and you say "okay, so pick any bijection". That's ridiculous: it's too random to make the naturality square commute. You need a

systematicchoice of bijection.`Michael wrote in [comment #44](https://forum.azimuthproject.org/discussion/comment/19841/#Comment_19841) > This naturality isomorphism for adjoint functors is really confusing. It's also not extremely important for what we're doing so far, which is why I put off talking about it to very end: the [last puzzle in the last lecture on this chapter](https://forum.azimuthproject.org/discussion/2277/lecture-54-chapter-3-tying-up-loose-ends/p1). I just felt guilty not talking about it. > I have no sense of intuition for this yet. Do you have a worked out example of how to use the naturality square to determine whether a functor is a left or right adjoint? Anindya answered this just the way I would: > Re the natural isomorphism \\(\mathcal{D}(LX, Y) \cong \mathcal{C}(X, RY)\\), I've found that you don't usually need to worry too much about naturality. The key thing is to look for a bijection between \\(\mathcal{D}\\)-arrows \\(LX \rightarrow Y\\) and \\(\mathcal{C}\\)-arrows \\(X \rightarrow RY\\). Usually something will "jump out" at you, and it will usually turn out to be natural. In short, the naturality square is the very last thing to check. Much more important, if you're trying to determine if a functor \\(L\\) is (say) a left adjoint, is to find a _candidate_ \\(R\\) for its right adjoint. Then, see if you can find a bijection \\(\mathcal{D}(L(X), Y) \cong \mathcal{C}(X, R(Y))\\). If you succeed in finding one, and it's not too ridiculous, 99 times out of 100 it will make that naturality square commute. So, **the key skill to develop is _guessing_ adjoints to functors that people hand you**. When you get good, you'll recognize the difference in flavors between left and right adjoints, and you can use that to guide you. Here's an example of a ridiculous bijection: suppose you determine that both \\(\mathcal{D}(L(X), Y)\\) and \\(\mathcal{C}(X, R(Y))\\) are always countable infinite sets, and you say "okay, so pick any bijection". That's ridiculous: it's too random to make the naturality square commute. You need a _systematic_ choice of bijection.`

Anindya wrote:

That's very clever, and it might even work, but I hadn't intended the puzzle to be so tricky! I just wanted to make people think about the most familiar functors between \(\mathbf{Cat}, \mathbf{Preord}, \mathbf{Poset}\) and \(\mathbf{Set}\).

`Anindya wrote: > just had a thought – if we define \\(R_1\\) to be the functor sending a category \\(C\\) to the codiscrete preorder on \\(\textrm{Ob}(C)\\), and define \\(L_1\\) to the functor sending a preorder \\(P\\) to the discrete category on the elements of \\(P\\), then an arrow \\(L_1 (P) \rightarrow C\\) just picks out one \\(C\\)-object for every \\(P\\)-element, which is the same thing as an arrow \\(P \rightarrow R_1 (C)\\). I think these are the functors we're looking for. That's very clever, and it might even work, but I hadn't intended the puzzle to be so tricky! I just wanted to make people think about the most familiar functors between \\(\mathbf{Cat}, \mathbf{Preord}, \mathbf{Poset}\\) and \\(\mathbf{Set}\\).`

I had worked out a solution of the original version of

Puzzle 163, even though it later turned out not to be intended as stated.Let \(R_1(C)\) be the discrete preorder on the objects of category \(C\). Let \(L_1(Q)\) be the discrete category on the connected components of \(Q\). Functors \(Q\to R_1(C)\) must map all objects in the same connected component of \(Q\) to the same object of \(C\) and map all arrows to the identity of that object. So they are just functions from connected components of \(Q\) to objects of \(C\). Monotonic functions \(L_1(Q)\to C\) are also just functions because \(L_1(Q)\) is discrete.

We can do the same thing again letting \(R_2(Q)\) be the discrete poset on the objects of \(Q\) and \(L_2(P)\) be the discrete preorder on the connected components of \(P\).

Finally, let \(R_3(P) = \mathrm{Ob}(P)\) be the object set of \(P\) and \(L_3(S)\) be the discrete poset on \(S\). This adjointness works the same way as the analogous one between \(\mathbf{Cat}\) and \(\mathbf{Set}\).

Now \(R_3R_2R_1=\mathrm{Ob}:\mathbf{Cat} \to \mathbf{Set}\) and \(L_1L_2L_3=\mathrm{Disc}:\mathbf{Set}\to\mathbf{Cat}\), as desired.

`I had worked out a solution of the original version of **Puzzle 163**, even though it later turned out not to be intended as stated. > **Puzzle 163.** Show there are functors > \[ \mathbf{Cat} \stackrel{R_1}{\longrightarrow} \mathbf{Preord} \stackrel{R_2}{\longrightarrow} \mathbf{Poset} \stackrel{R_3}{\longrightarrow} \mathbf{Set} \] > with left adjoints going back: > \[ \mathbf{Set} \stackrel{L_3}{\longrightarrow} \mathbf{Poset} \stackrel{L_2}{\longrightarrow} \mathbf{Preord} \stackrel{L_1}{\longrightarrow} \mathbf{Cat} . \] > Hint: the composite \\( R_3 R_2 R_1 : \mathbf{Cat} \to \mathbf{Set} \\) is our friend > \[ \text{Ob}: \mathbf{Cat} \to \mathbf{Set} ,\] > and the composite \\(L_1 L_2 L_3 : \mathbf{Set} \to \mathbf{Cat} \\) is our friend > \[ \mathrm{Disc} : \mathbf{Set} \to \mathbf{Cat} .\] Let \\(R_1(C)\\) be the discrete preorder on the objects of category \\(C\\). Let \\(L_1(Q)\\) be the discrete category on the connected components of \\(Q\\). Functors \\(Q\to R_1(C)\\) must map all objects in the same connected component of \\(Q\\) to the same object of \\(C\\) and map all arrows to the identity of that object. So they are just functions from connected components of \\(Q\\) to objects of \\(C\\). Monotonic functions \\(L_1(Q)\to C\\) are also just functions because \\(L_1(Q)\\) is discrete. We can do the same thing again letting \\(R_2(Q)\\) be the discrete poset on the objects of \\(Q\\) and \\(L_2(P)\\) be the discrete preorder on the connected components of \\(P\\). Finally, let \\(R_3(P) = \mathrm{Ob}(P)\\) be the object set of \\(P\\) and \\(L_3(S)\\) be the discrete poset on \\(S\\). This adjointness works the same way as the analogous one between \\(\mathbf{Cat}\\) and \\(\mathbf{Set}\\). Now \\(R_3R_2R_1=\mathrm{Ob}:\mathbf{Cat} \to \mathbf{Set}\\) and \\(L_1L_2L_3=\mathrm{Disc}:\mathbf{Set}\to\mathbf{Cat}\\), as desired.`

that's ingenious! I'd given up thinking a solution was possible.

`that's ingenious! I'd given up thinking a solution was possible.`

it's interesting how all the right adjoints say "throw away all the arrows!" and all the left adjoints say "identify any arrow-related things!".

`it's interesting how all the right adjoints say "throw away all the arrows!" and all the left adjoints say "identify any arrow-related things!".`

That's neat, Yoav! Thanks for presenting that solution!

`That's neat, Yoav! Thanks for presenting that solution!`

Bat, yes, and because \(L_1\) and \(L_2\) drop objects when acting on non-discrete things, I was worried the composition wouldn't end up giving back Disc, which doesn't drop objects. But it turned out the resolution is that \(L_3\) only spits out discrete posets.

To finish off the original problem, \(R_1\) does have a right adjoint: a monotone function \(R_1(C)\to Q\) is any function from the objects of \(C\) to the objects of \(Q\). So to make sure we can make it into a unique functor from \(C\) to a category based on \(Q\), call it \(F_1(Q)\), it seems like \(F_1(Q)\) should have the same objects as \(Q\) and a unique morphism from any object to any other object.

I think the same thing works for \(R_2\). That is, let \(F_2(P)\) be the complete preorder on the object of the poset \(P\)

We run into problems with the right adjoint for \(R_3\). We want \(F_3(S)\) to have arrows from any object to any other object, but then it's not a poset. I think this means that \(R_3\) doesn't have a right adjoint, but I'm not sure how one proves that.

`Bat, yes, and because \\(L_1\\) and \\(L_2\\) drop objects when acting on non-discrete things, I was worried the composition wouldn't end up giving back Disc, which doesn't drop objects. But it turned out the resolution is that \\(L_3\\) only spits out discrete posets. To finish off the original problem, \\(R_1\\) does have a right adjoint: a monotone function \\(R_1(C)\to Q\\) is any function from the objects of \\(C\\) to the objects of \\(Q\\). So to make sure we can make it into a unique functor from \\(C\\) to a category based on \\(Q\\), call it \\(F_1(Q)\\), it seems like \\(F_1(Q)\\) should have the same objects as \\(Q\\) and a unique morphism from any object to any other object. I think the same thing works for \\(R_2\\). That is, let \\(F_2(P)\\) be the complete preorder on the object of the poset \\(P\\) We run into problems with the right adjoint for \\(R_3\\). We want \\(F_3(S)\\) to have arrows from any object to any other object, but then it's not a poset. I think this means that \\(R_3\\) doesn't have a right adjoint, but I'm not sure how one proves that.`

I was doing some reading to catch up with the class and I learned about the Adjoint Functor Theorem in Lecture 16. So now I know how to prove that \(R_3 = \mathrm{Ob}:\mathbf{Poset}\to\mathbf{Set}\) doesn't have a right adjoint.

We need to show that it doesn't preserve colimits. Unfortunately, it does seem to preserve coproducts, so we need to come up with a fancier colimit. Let P be the discrete poset on {A, B}, let Q be the poset on the same set with A<B, and R have B<A. The pushout of \(\text{id}:P\to Q\) and \(\text{id}:P\to R\) as monotonic functions is the one-element poset, but the pushout of the same as plain functions is {A, B}.

`I was doing some reading to catch up with the class and I learned about the Adjoint Functor Theorem in Lecture 16. So now I know how to prove that \\(R_3 = \mathrm{Ob}:\mathbf{Poset}\to\mathbf{Set}\\) doesn't have a right adjoint. We need to show that it doesn't preserve colimits. Unfortunately, it does seem to preserve coproducts, so we need to come up with a fancier colimit. Let P be the discrete poset on {A, B}, let Q be the poset on the same set with A<B, and R have B<A. The pushout of \\(\text{id}:P\to Q\\) and \\(\text{id}:P\to R\\) as monotonic functions is the one-element poset, but the pushout of the same as plain functions is {A, B}.`

ah I was wondering about that but got as far as coproducts getting persevered and gave up. moral in here somewhere yeah...

`ah I was wondering about that but got as far as coproducts getting persevered and gave up. moral in here somewhere yeah...`

Yoav wrote:

Nice! I got mixed up for a minute, because in \(\mathbf{Preord}\) I believe this pushout is the preorder with two elements each less than or equal to the other... but that's not a poset, and yes, if we do the pushout in \(\mathbf{Poset}\) we get what you said.

My confusion at least has one benefit: it means the same argument can be used to show the forgetful functor \(\mathbf{Preord} \to \mathbf{Set}\) has no right adjoint.

`Yoav wrote: > Let P be the discrete poset on {A, B}, let Q be the poset on the same set with A<B, and R have B<A. The pushout of \\(\text{id}:P\to Q\\) and \\(\text{id}:P\to R\\) as monotonic functions is the one-element poset, Nice! I got mixed up for a minute, because in \\(\mathbf{Preord}\\) I believe this pushout is the preorder with two elements each less than or equal to the other... but that's not a poset, and yes, if we do the pushout in \\(\mathbf{Poset}\\) we get what you said. My confusion at least has one benefit: it means the same argument can be used to show the forgetful functor \\(\mathbf{Preord} \to \mathbf{Set}\\) has no right adjoint.`