nLab
monoidal category

Context

Monoidal categories

Category theory

Contents

Idea

A monoidal category is a category equipped with some notion of ‘tensor product’. A good example is the category Vect, where we can take the tensor product, not only of vector spaces, but also of linear maps: given linear maps f:VW and f:VW, we get a linear map

ff:VVWWf \otimes f': V \otimes V' \to W \otimes W'

The same category can often be made into a monoidal category in more than one way. For example the category Set can be made into a monoidal category with cartesian product or disjoint union (i.e. coproduct) as the ‘tensor product’. We can also make Vect into a monoidal category with direct sum is the ‘tensor product’ — this may seem perverse, but it’s actually very useful.

For any monoidal category M, the operation of tensor product is actually a functor

:M×MM\otimes : M \times M \to M

This functor, which we can think of as a kind of ‘multiplication’, makes M into a vertically categorified version of a monoid. This explains the term ‘monoidal category’.

Definition

A monoidal category is a category M equipped with a functor

:M×MM\otimes : M \times M \to M

called the tensor product, an object

1M1 \in M

called the unit object, a natural isomorphism

a x,y,z:(xy)zx(yz)a_{x,y,z} : (x \otimes y) \otimes z \to x \otimes (y \otimes z)

called the associator, a natural isomorphism

λ x:1xx\lambda_x : 1 \otimes x \to x

called the left unitor, and a natural isomorphism

ρ x:x1x\rho_x : x \otimes 1 \to x

called the right unitor, which must make two diagrams commute: the famous pentagon identity? (or pentagon equation):

Pentagon Identity (wx)(yz) ((wx)y)z w(x(yz)) (w(xy))z w((xy)z) a wx,y,z a w,x,yz a w,x,y1 z 1 wa x,y,z a w,xy,z

and the triangle identity (not to be confused with the triangle identities of an adjunction):

(x1)y a x,1,y x(1y) ρ x1 y 1 xλ y xy \array{ & (x \otimes 1) \otimes y &\stackrel{a_{x,1,y}}{\longrightarrow} & x \otimes (1 \otimes y) \\ & {}_{\rho_x \otimes 1_y}\searrow && \swarrow_{1_x \otimes \lambda_y} & \\ && x \otimes y && }

In Categories for the Working Mathematician, it is also required that λ 1=ρ 1, and this is used in the proof of the coherence theorem. But it is not required here nor in the other standard references (I don’t know about Mac Lane’s 1963 article). So, is this condition really necessary for coherence and should we add it here? —Benoit Jubin

Todd Trimble: No, this equation follows from the others, as shown in a 1964 paper of Max Kelly. Some of these coherence-theoretic lemmas can be a little tricky, so it’s possible that Mac Lane threw this one in to streamline his proof of the coherence theorem in CWM without annoying intervening technicalities.

Mac Lane’s original 1963 article contained rather longer lists of axioms for monoidal and symmetric monoidal categories; Kelly’s article whittled these down to the present definitions and investigated questions of independence.

Adam: The proof (Theorem 6) in the Kelly paper relies on an extra triangle axiom not present here; it’s (5) (or its dual, (7)) in Kelly’s paper. I don’t think his paper manages to eliminate Mac Lane’s extra requirement unless you have that second triangle as an axiom. See also this discussion

Todd Trimble: A conceptually pleasant proof of the coherence theorem, proceeding from the standard definition, is given in an article of Joyal and Street (either Braided Tensor Categories or Geometry of Tensor Calculus, I; I forget which); it is based on the 2-categorical Yoneda lemma.

Yaron: Adam, in case you’re still following this, please note that in Theorem 7 of Kelly it is proven that the pentagon identity + the “usual” triangle identity (6) imply the extra identity (5), and the proof is independent of that of Theorem 6 (this is also Ex. VII.1.1, p. 165 in Categories Work). So, everything does follow from the pentagon identity and the “usual” triangle identity.

A monoidal category is said to be strict if the associator, left unitor and right unitors are all identity morphisms. In this case the pentagon and triangle commute automatically.

There is a strict 2-category MonCat with:

One version of Mac Lane’s Coherence Theorem states that in MonCat, every monoidal category is equivalent to a strict one.

Properties

Coherence

Closure

Proposition

Every small monoidal category C embeds as a full subcategory CD into a closed monoidal category, where the embedding functor is a strong monoidal functor.

Proof

One can take D=PSh(C) be the category of presheaves on C and j:CD the Yoneda embedding. The category of presheaves on C becomes a closed monoidal category with the Day convolution tensor product, which for F,GPSh(C) is

FG:e c,dCF(c)×G(d)×Hom C(e,cd).F \star G : e \mapsto \int^{c,d \in C} F(c) \times G(d) \times Hom_C(e, c \otimes d) \,.

If F and G are both in the image of the Yoneda embedding, F=Hom C(,a), G=Hom C(,b) for a,bC, then applying the co-Yoneda lemma to the two coends over c and d we get

(j(a)j(b))(e) = c,dCHom C(c,a)×Hom C(d,b)×Hom C(e,cd) Hom C(e,ab) j(ab)(e),\begin{aligned} (j(a) \star j(b))(e) & = \int^{c,d \in C} Hom_C(c,a) \times Hom_C(d,b)\times Hom_C(e, c \otimes d) \\ & \simeq Hom_C(e, a \otimes b) \\ & \simeq j(a \otimes b)(e) \,, \end{aligned}

naturally in e.

References

The definition of monoidal category can be found on John Armstrong’s blog and Wikipedia.

For definitions of monoidal functor and monoidal natural transformation, see:

It would be nice if you, dear reader, would add these definitions to the nLab! The LaTeX code is available if you want.

For an elementary introduction to monoidal categories using string diagrams, see:

For a more detailed tour of monoidal categories, also using string diagrams, try:

Selinger discusses autonomous, balanced, braided, compact closed, pivotal, ribbon, rigid, sovereign, spherical, tortile, and traced monoidal categories.

Where the Definition Comes From

The definition of monoidal category looks rather complicated at first sight, so it is natural to wonder if there is some magic wand we can wave that makes it appear automatically. For example, one might wonder if we can define monoidal categories using internalization.

In fact a strict monoidal category is just a monoid internal to the category Cat. Unfortunately this definition is circular, since to define a monoid internal to Cat, we need to use the fact that Cat is a monoidal category! Furthermore, hardly any of the monoidal categories in nature are strict.

Ronnie Brown I entirely understand that most monoidal categories in nature are not strict, and CWM gives an example to show that you cannot even get strictness for the cartesian product. On the other hand, for the cartesian product we get coherence properties directly from the universal property.

Now the tensor product in many monoidal categories in nature comes from the cartesian product, but with more elaborate morphisms. Thus the tensor product of vector spaces comes from bilinear maps. The associativity of this tensor product comes from looking at trilinear maps, and so derives from the associativity of the cartesian product. In a sense, this tensor product is as coherently associative as the cartesian product, which could means that in a rough and ready way we do not need to worry.

My query is whether there is a study of this kind of argument in categorical generality?

Peter LeFanu Lumsdaine: The setting for a statement like this would presumably be the connections between monoidal categories and multicategories, which are discussed very nicely in Chapters 2 and 3 of Tom Leinster’s book?. As far as I remember he doesn’t give anything that would quite make this argument, and I don’t know the literature of these well enough to say whether it’s been done elsewhere, but I’d guess it has, or at least that it would be fairly straightforward to give in that terminology. The statement would look something like:

“If C is a multicategory generated by its nullary, unary and binary arrows, C its underlying category, and , 1 are functors on C representing the nullary and binary arrows of C, then and 1 form the tensor and unit of a monoidal structure on C.”

The ugly part of this is the generation condition, which will be needed since we only start with and 1 (indeed, some stronger presentation condition might be needed, actually). The unbiased? version, where we have not just and 1 but an n-ary tensor product for every n, is essentially given in Leinster’s book, iirc, and doesn’t require such a condition.

So, we need to weaken the definition of monoidal category, and this is where the subtleties come in: we need the associator, left unitor, and right unitor to satisfy some ‘coherence laws’ — e.g. the pentagon identity.

But where do the coherence laws come from?

In fact, these are precisely what we need to make any diagram built solely by tensoring, associators, and unitors commute. This fact is another version of Mac Lane’s Coherence Theorem. Mac Lane proved it in the same paper where he originally defined the concept of monoidal category.

There are indeed ‘magic wands’ that automatically produce the definition of monoidal category, but most of these magic wands are so heavy that only more advanced wizards can lift them.

For example, you can define a monoidal category to be a pseudomonoid internal to the 2-category Cat — but nobody knew how to define these concepts until they knew what a monoidal category is!

Two other closely related approaches involve 2-monad theory and homotopy theory.

To make the first one work, the magic words to say are “there is a 2-monad whose algebras are strict monoidal categories, and a (non-strict) monoidal category is a pseudo-algebra for that 2-monad.” This doesn’t give you the definition of monoidal categories that we’re used to, though; it gives you the unbiased? version.

To make the second magic wand work, the magic words to say are “there is a monad/operad/etc. in Cat whose algebras are strict monoidal categories, and the monad/operad/etc. whose algebras are (non-strict) monoidal categories is a cofibrant replacement for that one.” Since cofibrant replacements are usually defined only up to equivalence, this one also doesn’t determine the usual definition uniquely. There is a “canonical” choice, but again it gives you the unbiased version. The equation “cofibrant = flexible?” says that these two magic wands are doing essentially the same thing.

Of course, both are also sort of a cheat, since in order to prove that the biased and unbiased definitions are equivalent, you need to have the coherence theorem for the biased definition. However, it’s only because of the coherence theorem that we can say definitely that the usual set of complicated-looking diagrams is “correct.” The approach using lax -functors really only postpones this question, since you also need a coherence theorem to show that the definition of lax -functor is “correct.” So perhaps there is no magic wand after all, at least not one that produces the specific diagrams in the usual biased definition of monoidal category.

However, if we temporarily ignore the unitors and focus on the associator, we may ask where does the pentagon identity come from? And one answer to this is provided by the Stasheff polytopes, which can be nicely obtained using Ross Street’s theory of orientals. For instance the pentagon diagram above is nothing but the 4th oriental! The tensor product itself is the second oriental, and the associator the third. The following section explains this in a bit more detail.

Relation to lax functors, orientals and descent

One can understand the structure of a monoidal category as a special simple case of the general notion of “lax -functor”, also known – up to the issue of invertible versus non-invertible structure morphisms – as the notion of -categorical descent and as the notion of infinity-anafunctor.

The discussion to follow now notably links the definition of monoidal category as above with that of monoidal (infinity,1)-category.

This may be familiar from the special simple case of a monoid in any bicategory C, which can be identified with a lax functor

A:ptCA : pt \to C

from the point to C. This lax functor sends the point to some object of C, sends the identity morphism on the point to some endomorphism of that object. The unitor of the lax functor gives the product on that endomorphism and the coherence of the unitor is the associativity condition on this product.

This is part of a more general principle. A lax monoid in any tricategory would again be a lax functor from the point to that tricategory.

And a monoidal category can be regarded as a pseudomonoid in the tricategory BCat, which has a single object, categories as 1-morphisms with the composition of 1-morphisms being the standard cartesian tensor product on categories.

Evidently, in the fully general context of weak -categories it becomes increasingly hard to state what a lax functor into a given -category should be: it will involve a plethora of structure morphisms and their coherences. One task of higher category theory is to organize this mess into something pretty and then to deal with this problem.

But before being intimidated by the problem in its most general form, it may pay to understand it in slightly simplified situations. One such slightly simplified setup is that of strict -categories, usually known as ω-categories or strict omega-categories.

For that case, Ross Street has given a general combinatorial formula for the -coherence law of the general monoidal structure: this is encoded in the orientals, which are nothing but the standard simplicial simplices, but equipped with extra information about source and targets of all faces.

See the picture of the first five orientals. We can read off the above definition of a monoidal category from them as follows:

  • identify the monoidal category M itself with the first oriental, just an arrow;

  • identify the ambient product M×M with the juxtaposition of two such arrows;

  • identify the tensor product MMM with the second oriental: a triangular cell going from the concatenation of two arrows to a single arrow;

  • identify the associator with the third oriental, the tetrahedron: a map from one way to compose three arrows (=copies of M) to the other way of doing this;

  • identify the pentagon identity with the fourth oriental. In general, the fourth oriental is itself a nontrivial 4-cell, but assume now that the big arrow in the middle of that is the identity. This makes what in general would be the pentagonator, the pentagon identity in this case.

O(Δ 0)= {0} O(Δ 1)= {01} O(Δ 2)= { 1 0 2 } O(Δ 3)= { 1 0 2 3 } O(Δ 4)= { 2 1 3 0 4 }\array{\arrayopts{\rowalign{center}} O(\Delta^0) = & \{ 0\} \\ O(\Delta^1) = & \left\{ 0 \to 1\right\} \\ O(\Delta^2) = & \left\{ \array{\begin{svg} <svg xmlns="http://www.w3.org/2000/svg" width="6em" height="4em" viewBox="0 0 60 40"> <defs> <marker id="svg295arrowhead" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="5" orient="auto"> <path d="M 0 0 L 10 5 L 0 10 z"/> </marker> <marker id="svg296arrowhead" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="4" markerHeight="2.5" orient="auto"> <path d="M 0 0 L 10 5 L 0 10 z"/> </marker> </defs> <g font-size="10"> <foreignObject x="25" y="-2" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>1</mi></math></foreignObject> <foreignObject x="0" y="27" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>0</mi></math></foreignObject> <foreignObject x="50" y="27" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>2</mi></math></foreignObject> </g> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M10,30 23, 15"/> <path d="M35,12 48, 27"/> <path d="M15,37 45, 37"/> </g> <g> <path stroke-width="3" d="M30,15 30,27" marker-end="url(#svg296arrowhead)"/> <path stroke="#FFF" d="M30,15 30,27"/> </g> </g> </svg> \end{svg}} \right\}\\ O(\Delta^3) = & \left\{ \array{\begin{svg} <svg xmlns="http://www.w3.org/2000/svg" width="13em" height="5em" viewBox="0 0 130 50"> <defs> <g id="myRect256"> <g font-size="10"> <foreignObject x="0" y="-3" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>1</mi></math></foreignObject> <foreignObject x="0" y="37" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>0</mi></math></foreignObject> <foreignObject x="40" y="-3" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>2</mi></math></foreignObject> <foreignObject x="40" y="37" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>3</mi></math></foreignObject> </g> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M10,7 37, 7"/> <path d="M6,42 6, 17"/> <path d="M10,47 37, 47"/> <path d="M46,12 46, 37"/> </g> </g> </g> </defs> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myRect256" x="0" y="0"/> <g fill="none" stroke="#000"> <path d="M11,43 38, 15" marker-end="url(#svg295arrowhead)"/> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M12,12 20,20"/> <path d="M40,18 27,40"/> </g> <g stroke="#FFF"> <path d="M12,12 20,20"/> <path d="M40,18 27,40"/> </g> </g> <g fill="none" stroke="#000"> <path stroke-width="5" d="M55,25 72,25"/> <path stroke-width="3" stroke="#FFF" d="M55,25 72,25" marker-end="url(#svg296arrowhead)"/> <path stroke-width="1" d="M55,25 72,25"/> </g> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myRect256" x="80" y="0"/> <g fill="none" stroke="#000"> <path d="M92,12 118, 39" marker-end="url(#svg295arrowhead)"/> <g> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M92,20 100,38"/> <path d="M120,12 113,19"/> </g> <g stroke="#FFF"> <path d="M92,20 100,38"/> <path d="M120,12 113,19"/> </g> </g> </g> </svg> \end{svg}}\right\}\\ O(\Delta^4) = & \left\{ \array{\begin{svg} <svg xmlns="http://www.w3.org/2000/svg" width="28em" height="23em" viewBox="-35 0 245 230"> <defs> <g id="myPent256"> <g font-size="10"> <foreignObject x="25" y="-2" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>2</mi></math></foreignObject> <foreignObject x="0" y="27" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>1</mi></math></foreignObject> <foreignObject x="50" y="27" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>3</mi></math></foreignObject> <foreignObject x="13" y="57" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>0</mi></math></foreignObject> <foreignObject x="38" y="57" width="12" height="14"><math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mi>4</mi></math></foreignObject> </g> <g fill="none" stroke="#000" marker-end="url(#svg295arrowhead)"> <path d="M8,32 25,13"/> <path d="M35,10 52,28"/> <path d="M54,41 48,57"/> <path d="M24,67 36,67"/> <path d="M16,62 8,45"/> </g> </g> </defs> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myPent256" x="0" y="0"/> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M10,36 45,36"/> <path d="M22,60 47,41"/> </g> <g> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M31,12 31,26"/> <path d="M12,38 25,48"/> <path d="M45,48 35,60"/> </g> <g stroke="#FFF"> <path d="M31,12 31,26"/> <path d="M12,38 25,48"/> <path d="M45,48 35,60"/> </g> </g> </g> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myPent256" x="110" y="0"/> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M120,36 155,36"/> <path d="M122,41 147,60"/> </g> <g> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M141,12 141,26"/> <path d="M125,47 135,58"/> <path d="M162,38 145,48"/> </g> <g stroke="#FFF"> <path d="M141,12 141,26"/> <path d="M125,47 135,58"/> <path d="M162,38 145,48"/> </g> </g> </g> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myPent256" x="160" y="80"/> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M172,119 195,140"/> <path d="M194,98 201,138"/> </g> <g> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M175,127 185,138"/> <path d="M212,116 206,116"/> <path d="M189,98 184,121"/> </g> <g stroke="#FFF"> <path d="M175,127 185,138"/> <path d="M212,116 206,116"/> <path d="M189,98 184,121"/> </g> </g> </g> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myPent256" x="55" y="160"/> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M74,220 83,180"/> <path d="M87,178 96,218"/> </g> <g> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M86,187 86,216"/> <path d="M63,196 71,196"/> <path d="M107,196 99,196"/> </g> <g stroke="#FFF"> <path d="M86,187 86,216"/> <path d="M63,196 71,196"/> <path d="M107,196 99,196"/> </g> </g> </g> <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#myPent256" x="-50" y="80"/> <g fill="none" stroke="#000"> <g marker-end="url(#svg295arrowhead)"> <path d="M-31,140 -22,100"/> <path d="M-29,143 -3,120"/> </g> <g> <g stroke-width="3" marker-end="url(#svg296arrowhead)"> <path d="M-40,116 -35,116"/> <path d="M-17,97 -17,123"/> <path d="M-5,128 -15,140"/> </g> <g stroke="#FFF"> <path d="M-40,116 -35,116"/> <path d="M-17,97 -17,123"/> <path d="M-5,128 -15,140"/> </g> </g> </g> <g fill="none" stroke="#000"> <g stroke-width="5"> <path d="M60,35 100,35"/> <path d="M158,75 168,90"/> <path d="M118,190 168,155"/> <path d="M3,150 43,185"/> <path d="M-3,95 11,79"/> </g> <g stroke-width="3" stroke="#FFF" marker-end="url(#svg296arrowhead)"> <path d="M158,75 168,90"/> <path d="M60,35 100,35"/> <path d="M118,190 168,155"/> <path d="M3,150 43,185"/> <path d="M-3,95 11,79"/> </g> <g stroke-width="1"> <path d="M60,35 100,35"/> <path d="M158,75 168,90"/> <path d="M118,190 168,155"/> <path d="M3,150 43,185"/> <path d="M-3,95 11,79"/> </g> </g> <g fill="none" stroke="#000"> <path stroke-width="7" d="M85,43 85,140"/> <path stroke-width="5" stroke="#FFF" d="M85,43 85,140" marker-end="url(#svg296arrowhead)"/> <path stroke-width="3" d="M85,43 85,140"/> <path stroke-width="1" stroke="#FFF" d="M85,43 85,140"/> </g> </svg> \end{svg}} \right\} }

This shows that it is a bit of an illusion to think of a pentagon identity: the full geometric shape is really a 4-dimensional tetrahedron (the 4-simplex) whose five tetrahedral faces are the five vertices of the pentagon identity.

We can formulate this identification of structure morphisms and coherence laws with orientals more formally using the general notion of descent, which was indeed the original motivation for conceiving the orientals. The descent -category Desc(Y,A) (constructed in terms of orientals) can be regarded as a way to formalize “lax -functor from Y to A”.

Indeed, using observations pretty much as just sketched, one finds that for C a 2-category that

Desc(pt,C)WeakMonoids(C)Desc(pt, C) \simeq WeakMonoids(C)

and for C the 3-category BCat we have

Desc(pt,BCat)LaxMonCat,Desc(pt, \mathbf{B}Cat) \simeq LaxMonCat \,,

where the 2-category on the right is defined as MonCat above, but with the associator not required to be an isomorphism.

Remark: pseudo versus lax, orientals versus unorientals

In closing, it should be remarked that the fact that everything here is lax instead of pseudo is related to a curious property of the orientals: the nth oriental for n1 fails to be weakly equivalent to the point. As a result, the objects of Desc(pt,C) are not quite ω-anafunctors from the point to C, since they do not map out of a proper hypercover of C. In the strict notion of descent as used in most of the literature, the orientals would hence provide something more general than ordinary descent, which in its generality is lacking some properties usually required of descent.

We can remedy this by replacing in the definition of the descent -category Desc(Y,C) the orientals by another cosimplicial -category, one which is equivalent to the point in each degree. Doing so and then going through the above discussion will make all the structure maps appeaing have inverses. But this will also apply to the monoidal product itself, then, which is usually not desired.

Variations

higher versions