# The Unapologetic Mathematician

## The Opposite Category

One of the most interesting general facts about categories is how ubiquitous the notion of duality is. Pretty much everything has a “mirror image”, and the mirror is the opposite category.

Given a category $\mathcal{C}$, with objects ${\rm Ob}(\mathcal{C})$ and morphisms ${\rm Mor}(\mathcal{C})$, we can construct the “opposite category” $\mathcal{C}^{\rm op}$ simply enough. In fact, it has the exact same objects and morphisms as $\mathcal{C}$ does. The difference comes in how they relate to each other.

Remember that we had two functions, $s(m)$ and $t(m)$ assigning the “source” and “target” objects to any arrow. To get the opposite category we just swap them. Given a morphism, its source in $\mathcal{C}^{\rm op}$ is its target in $\mathcal{C}$, and vice versa. Of course, now we have to swap the order of composition. If we have $f:A\rightarrow B$ and $g:B\rightarrow C$ in $\mathcal{C}$, then we get $f:B\rightarrow A$ and $g:C\rightarrow B$ in $\mathcal{C}^{\rm op}$. In $\mathcal{C}$ the composition $g\circ f:A\rightarrow C$ is defined, but in $\mathcal{C}^{\rm op}$ the composition $f\circ g:C\rightarrow A$ is defined.

Most definitions we give will automatically come with a “dual” definition, which we get by reversing all the arrows like this. For example, monos and epis are dual notions, as are subobjects and quotient objects. Just write down one definition in terms of morphisms, reverse all the morphisms (and the order of composition), and you get the other.

Theorems work this way too. If you dualize the hypotheses and the conclusions, then you can dualize each step of the proof to prove the dual theorem. I can prove that any injection is monic, so it follows immediately by duality that any surjection is epic. Many texts actually completely omit even the statements of dual notions and theorems once they define the opposite category, but I’ll try to be explicit about the duals (though of course I won’t need to give the proofs).

Another place duality comes up is in defining “contravariant” functors. This is just a functor $F:\mathcal{C}^{\rm op}\rightarrow\mathcal{D}$. It sends each object of $\mathcal{C}$ to an object of $\mathcal{D}$, and sends a morphism $f:A\rightarrow B$ in $\mathcal{C}$ to a morphism $F(f):F(B)\rightarrow F(A)$ in $\mathcal{D}$. See how the direction of the image morphism flipped? Early on, contravariant and regular (“covariant”) functors were treated somewhat separately, but really they’re just the same thing once you take the opposite category into account. Sometimes, though, it’s easier to think in terms of contravariant functors rather than mentally flipping all the arrows.

I’ll close with an example of a contravariant functor we’ve seen before. Consider a ring $R$ with unit and a left module $M$ over $R$. That is, $M$ is an object in the category $R-{\bf mod}$. We can construct the dual module $M^*$, which is now an object in the category ${\bf mod}-R$ of right $R$-modules. I say that this is a contravariant functor. We’ve specified how the dual module construction behaves on objects, but we need to see how it behaves on morphisms. This is what makes it functorial.

So let’s say we have two left $R$-modules $M$ and $N$, and an $R$-module homomorphism $f:M\rightarrow N$. Since we want this to be a contravariant functor we need to find a morphism $f^*:N^*\rightarrow M^*$. But notice that $M^*=\hom_{R-{\bf mod}}(M,R)$, and similarly for $N$. Then we have the composition of $R$-module homomorphisms $\circ:\hom_{R-{\bf mod}}(N,R)\otimes\hom_{R-{\bf mod}}(M,N)\rightarrow\hom_{R-{\bf mod}}(M,R)$. If $\nu$ is a linear functional on $N$, then we get $\nu\circ f:M\rightarrow R$ as a linear functional on $M$. We can define $f^*(\nu)=\nu\circ f$.

Now, is this construction functorial? We have to check that it preserves identities and compositions. For identities it’s simple: $1_N^*(\nu)=\nu\circ1_N=\nu$, so every linear functional on $N$ gets sent back to itself. For compositions we have to be careful. The order has to switch around because this is a contravariant functor. We take $f:M\rightarrow N$ and $g:N\rightarrow L$ and check $(g\circ f)^*(\lambda)=\lambda\circ g\circ f=g^*(\lambda)\circ f=f^*(g^*(\lambda))=(f^*\circ g^*)(\lambda)$, as it should.

### Like this:

Posted by John Armstrong | Category theory

## 7 Comments	»

1. [...] I should have mentioned this before, but usually dual notions are marked by the premix “co-”. As an example, we have [...]

Pingback by | May 31, 2007 | Reply

2. There’s something that disturbs me with dual categories.

Consider the category of sets, with functions as arrows. What are arrows in the dual category?

For instance, let f be the absolute value fonction, mapping from Z to N. What is f^op? The _same_ function, but with its arrow written backwards? Or a relation from N to Z? But in this case, which one is it? Indeed, to a relation from Z to N, one can associate many relations from N to Z… There is a “natural” one (obtained by reversing individual mappings), but why would f^op be this one? Which axiom of categroy theory does state that?

Thanks in advance if you can give me a hint. It would really help me understand category theory.

Comment by ChrisJ | January 14, 2009 | Reply

3. Well, usually we don’t talk about “the opposite arrow”, because the arrows in the opposite category are exactly the same.

Look at it this way. You’re talking about a certain $f\in\hom_\mathbf{Set}(\mathbb{Z},\mathbb{N})$. What does this mean? I means we have $f\in\mathrm{Mor}(\mathbf{Set})$ with $s(f)=\mathbb{Z}$ and $t(f)=\mathbb{N}$.

Now when we consider the opposite category, $\mathrm{Mor}(\mathbf{Set}^\mathrm{op})=\mathrm{Mor}(\mathbf{Set})$. The collection of all morphisms is the same as in $\mathbf{Set}$. And so we still have $f\in\mathrm{Mor}(\mathbf{Set}^\mathrm{op})$. So what’s the difference? Now we have $s(f)=\mathbb{N}$ and $t(f)=\mathbb{Z}$. We just swap which set we consider to be the source and which we consider to be the target.

Comment by | January 14, 2009 | Reply

4. Thanks for the answer.

Do you mean that in Set^op, we have s(f) = N and t(f) = Z (that is, with arrow notation, f: N -> Z), BUT f is still the same function from Z to N (that is, with functional notation, f: Z -> N)?

Comment by ChrisJ | January 14, 2009 | Reply

5. Yes, that’s it. It’s the exact same function (morphism), but we swap which set (object) we think of as its source and target.

Comment by | January 14, 2009 | Reply

6. Okay, so I was confused by the similarity of the “arrow” and “functional” notations. Thanks a lot!

Comment by ChrisJ | January 14, 2009 | Reply

7. I was wondering about the question of finding a category equivalent to Set^op, but with its own meaning for the morphisms. From Johnstone’s Topos Theory, Set^op is equivalent to the category of complete atomic boolean algebras, abbreviated CABA, where the objects are the sets of Set and the morphisms are boolean homomorphisms that have the additional property that they preserve arbitrary meets and joins, called complete boolean homomorphisms.
All this works because Set is a topos, and Set^op is therefore equivalent to the category of algebras over the Set’s powerset monad.
I don’t know yet how the sub-structure of mappings in Set translates to describe the sub-structure of mappings in CABA, but it seems like an interesting approach for studying CABA.

Comment by | August 22, 2011 | Reply

« Previous | Next »

## About this weblog

This is mainly an expository blath, with occasional high-level excursions, humorous observations, rants, and musings. The main-line exposition should be accessible to the “Generally Interested Lay Audience”, as long as you trace the links back towards the basics. Check the sidebar for specific topics (under “Categories”).

I’m in the process of tweaking some aspects of the site to make it easier to refer back to older topics, so try to make the best of it for now.
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 0, "mathjax_display_tex": 0, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 63, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9426491856575012, "perplexity_flag": "head"}