The category of monoids in a monoidal category. #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We define monoids in a monoidal category C
and show that the category of monoids is equivalent to
the category of lax monoidal functors from the unit monoidal category to C
. We also show that if
C
is braided, then the category of monoids is naturally monoidal.
- X : C
- one : 𝟙_ C ⟶ self.X
- mul : self.X ⊗ self.X ⟶ self.X
- one_mul' : (self.one ⊗ 𝟙 self.X) ≫ self.mul = (λ_ self.X).hom . "obviously"
- mul_one' : (𝟙 self.X ⊗ self.one) ≫ self.mul = (ρ_ self.X).hom . "obviously"
- mul_assoc' : (self.mul ⊗ 𝟙 self.X) ≫ self.mul = (α_ self.X self.X self.X).hom ≫ (𝟙 self.X ⊗ self.mul) ≫ self.mul . "obviously"
A monoid object internal to a monoidal category.
When the monoidal category is preadditive, this is also sometimes called an "algebra object".
Instances for Mon_
The trivial monoid object. We later show this is initial in Mon_ C
.
Equations
- Mon_.inhabited C = {default := Mon_.trivial C _inst_2}
- hom : M.X ⟶ N.X
- one_hom' : M.one ≫ self.hom = N.one . "obviously"
- mul_hom' : M.mul ≫ self.hom = (self.hom ⊗ self.hom) ≫ N.mul . "obviously"
A morphism of monoid objects.
Instances for Mon_.hom
- Mon_.hom.has_sizeof_inst
- Mon_.hom_inhabited
Equations
- M.hom_inhabited = {default := M.id}
The forgetful functor from monoid objects to the ambient category.
Equations
Instances for Mon_.forget
The forgetful functor from monoid objects to the ambient category reflects isomorphisms.
Construct an isomorphism of monoids by giving an isomorphism between the underlying objects and checking compatibility with unit and multiplication only in the forward direction.
A lax monoidal functor takes monoid objects to monoid objects.
That is, a lax monoidal functor F : C ⥤ D
induces a functor Mon_ C ⥤ Mon_ D
.
Equations
- F.map_Mon = {obj := λ (A : Mon_ C), {X := F.to_functor.obj A.X, one := F.ε ≫ F.to_functor.map A.one, mul := F.μ A.X A.X ≫ F.to_functor.map A.mul, one_mul' := _, mul_one' := _, mul_assoc' := _}, map := λ (A B : Mon_ C) (f : A ⟶ B), {hom := F.to_functor.map f.hom, one_hom' := _, mul_hom' := _}, map_id' := _, map_comp' := _}
map_Mon
is functorial in the lax monoidal functor.
Equations
- category_theory.lax_monoidal_functor.map_Mon_functor C D = {obj := category_theory.lax_monoidal_functor.map_Mon _inst_4, map := λ (F G : category_theory.lax_monoidal_functor C D) (α : F ⟶ G), {app := λ (A : Mon_ C), {hom := α.to_nat_trans.app A.X, one_hom' := _, mul_hom' := _}, naturality' := _}, map_id' := _, map_comp' := _}
Implementation of Mon_.equiv_lax_monoidal_functor_punit
.
Equations
- Mon_.equiv_lax_monoidal_functor_punit.lax_monoidal_to_Mon C = {obj := λ (F : category_theory.lax_monoidal_functor (category_theory.discrete punit) C), F.map_Mon.obj (Mon_.trivial (category_theory.discrete punit)), map := λ (F G : category_theory.lax_monoidal_functor (category_theory.discrete punit) C) (α : F ⟶ G), ((category_theory.lax_monoidal_functor.map_Mon_functor (category_theory.discrete punit) C).map α).app (Mon_.trivial (category_theory.discrete punit)), map_id' := _, map_comp' := _}
Implementation of Mon_.equiv_lax_monoidal_functor_punit
.
Equations
- Mon_.equiv_lax_monoidal_functor_punit.Mon_to_lax_monoidal C = {obj := λ (A : Mon_ C), {to_functor := {obj := λ (_x : category_theory.discrete punit), A.X, map := λ (_x _x_1 : category_theory.discrete punit) (_x : _x ⟶ _x_1), 𝟙 A.X, map_id' := _, map_comp' := _}, ε := A.one, μ := λ (_x _x : category_theory.discrete punit), A.mul, μ_natural' := _, associativity' := _, left_unitality' := _, right_unitality' := _}, map := λ (A B : Mon_ C) (f : A ⟶ B), {to_nat_trans := {app := λ (_x : category_theory.discrete punit), f.hom, naturality' := _}, unit' := _, tensor' := _}, map_id' := _, map_comp' := _}
Implementation of Mon_.equiv_lax_monoidal_functor_punit
.
Equations
- Mon_.equiv_lax_monoidal_functor_punit.unit_iso C = category_theory.nat_iso.of_components (λ (F : category_theory.lax_monoidal_functor (category_theory.discrete punit) C), category_theory.monoidal_nat_iso.of_components (λ (_x : category_theory.discrete punit), F.to_functor.map_iso (category_theory.eq_to_iso _)) _ _ _) _
Implementation of Mon_.equiv_lax_monoidal_functor_punit
.
Equations
- Mon_.equiv_lax_monoidal_functor_punit.counit_iso C = category_theory.nat_iso.of_components (λ (F : Mon_ C), {hom := {hom := 𝟙 ((Mon_.equiv_lax_monoidal_functor_punit.Mon_to_lax_monoidal C ⋙ Mon_.equiv_lax_monoidal_functor_punit.lax_monoidal_to_Mon C).obj F).X, one_hom' := _, mul_hom' := _}, inv := {hom := 𝟙 ((𝟭 (Mon_ C)).obj F).X, one_hom' := _, mul_hom' := _}, hom_inv_id' := _, inv_hom_id' := _}) _
Monoid objects in C
are "just" lax monoidal functors from the trivial monoidal category to C
.
Equations
- Mon_.equiv_lax_monoidal_functor_punit C = {functor := Mon_.equiv_lax_monoidal_functor_punit.lax_monoidal_to_Mon C _inst_2, inverse := Mon_.equiv_lax_monoidal_functor_punit.Mon_to_lax_monoidal C _inst_2, unit_iso := Mon_.equiv_lax_monoidal_functor_punit.unit_iso C _inst_2, counit_iso := Mon_.equiv_lax_monoidal_functor_punit.counit_iso C _inst_2, functor_unit_iso_comp' := _}
In this section, we prove that the category of monoids in a braided monoidal category is monoidal.
Given two monoids M
and N
in a braided monoidal category C
, the multiplication on the tensor
product M.X ⊗ N.X
is defined in the obvious way: it is the tensor product of the multiplications
on M
and N
, except that the tensor factors in the source come in the wrong order, which we fix
by pre-composing with a permutation isomorphism constructed from the braiding.
A more conceptual way of understanding this definition is the following: The braiding on C
gives
rise to a monoidal structure on the tensor product functor from C × C
to C
. A pair of monoids
in C
gives rise to a monoid in C × C
, which the tensor product functor by being monoidal takes
to a monoid in C
. The permutation isomorphism appearing in the definition of the multiplication
on the tensor product of two monoids is an instance of a more general family of isomorphisms which
together form a strength that equips the tensor product functor with a monoidal structure, and the
monoid axioms for the tensor product follow from the monoid axioms for the tensor factors plus the
properties of the strength (i.e., monoidal functor axioms). The strength tensor_μ
of the tensor
product functor has been defined in category_theory.monoidal.braided
. Its properties, stated as
independent lemmas in that module, are used extensively in the proofs below. Notice that we could
have followed the above plan not only conceptually but also as a possible implementation and could
have constructed the tensor product of monoids via map_Mon
, but we chose to give a more explicit
definition directly in terms of tensor_μ
.
To complete the definition of the monoidal category structure on the category of monoids, we need
to provide definitions of associator and unitors. The obvious candidates are the associator and
unitors from C
, but we need to prove that they are monoid morphisms, i.e., compatible with unit
and multiplication. These properties translate to the monoidality of the associator and unitors
(with respect to the monoidal structures on the functors they relate), which have also been proved
in category_theory.monoidal.braided
.
Equations
- Mon_.Mon_monoidal = {tensor_obj := λ (M N : Mon_ C), {X := M.X ⊗ N.X, one := (λ_ (𝟙_ C)).inv ≫ (M.one ⊗ N.one), mul := category_theory.tensor_μ C (M.X, N.X) (M.X, N.X) ≫ (M.mul ⊗ N.mul), one_mul' := _, mul_one' := _, mul_assoc' := _}, tensor_hom := λ (M N P Q : Mon_ C) (f : M ⟶ N) (g : P ⟶ Q), {hom := f.hom ⊗ g.hom, one_hom' := _, mul_hom' := _}, tensor_id' := _, tensor_comp' := _, tensor_unit := Mon_.trivial C _inst_2, associator := λ (M N P : Mon_ C), Mon_.iso_of_iso (α_ M.X N.X P.X) Mon_.one_associator Mon_.mul_associator, associator_naturality' := _, left_unitor := λ (M : Mon_ C), Mon_.iso_of_iso (λ_ M.X) Mon_.one_left_unitor Mon_.mul_left_unitor, left_unitor_naturality' := _, right_unitor := λ (M : Mon_ C), Mon_.iso_of_iso (ρ_ M.X) Mon_.one_right_unitor Mon_.mul_right_unitor, right_unitor_naturality' := _, pentagon' := _, triangle' := _}
Projects:
- Check that
Mon_ Mon ≌ CommMon
, via the Eckmann-Hilton argument. (You'll have to hook up the cartesian monoidal structure onMon
first, available in #3463) - Check that
Mon_ Top ≌ [bundled topological monoids]
. - Check that
Mon_ AddCommGroup ≌ Ring
. (We've already gotMon_ (Module R) ≌ Algebra R
, incategory_theory.monoidal.internal.Module
.) - Can you transport this monoidal structure to
Ring
orAlgebra R
? How does it compare to the "native" one? - Show that when
C
is braided, the forgetful functorMon_ C ⥤ C
is monoidal. - Show that when
F
is a lax braided functorC ⥤ D
, the functormap_Mon F : Mon_ C ⥤ Mon_ D
is lax monoidal.