(Lax) monoidal functors #
A lax monoidal functor F
between monoidal categories C
and D
is a functor between the underlying categories equipped with morphisms
ε : 𝟙_ D ⟶ F.obj (𝟙_ C)
(called the unit morphism)μ X Y : (F.obj X) ⊗ (F.obj Y) ⟶ F.obj (X ⊗ Y)
(called the tensorator, or strength). satisfying various axioms. This is implemented as a typeclassF.LaxMonoidal
.
Similarly, we define the typeclass F.OplaxMonoidal
. For these oplax monoidal functors,
we have similar data η
and δ
, but with morphisms in the opposite direction.
A monoidal functor (F.Monoidal
) is defined here as the combination of F.LaxMonoidal
and F.OplaxMonoidal
, with the additional conditions that ε
/η
and μ
/δ
are
inverse isomorphisms.
We show that the composition of (lax) monoidal functors gives a (lax) monoidal functor.
See Mathlib.CategoryTheory.Monoidal.NaturalTransformation
for monoidal natural transformations.
We show in Mathlib.CategoryTheory.Monoidal.Mon_
that lax monoidal functors take monoid objects
to monoid objects.
References #
A functor F : C ⥤ D
between monoidal categories is lax monoidal if it is
equipped with morphisms ε : 𝟙_ D ⟶ F.obj (𝟙_ C)
and μ X Y : F.obj X ⊗ F.obj Y ⟶ F.obj (X ⊗ Y)
,
satisfying the appropriate coherences.
unit morphism
- μ' (X Y : C) : MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) ⟶ F.obj (MonoidalCategoryStruct.tensorObj X Y)
tensorator
- μ'_natural_left {X Y : C} (f : X ⟶ Y) (X' : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) (μ' Y X') = CategoryStruct.comp (μ' X X') (F.map (MonoidalCategoryStruct.whiskerRight f X'))
- μ'_natural_right {X Y : C} (X' : C) (f : X ⟶ Y) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) (μ' X' Y) = CategoryStruct.comp (μ' X' X) (F.map (MonoidalCategoryStruct.whiskerLeft X' f))
- associativity' (X Y Z : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (μ' X Y) (F.obj Z)) (CategoryStruct.comp (μ' (MonoidalCategoryStruct.tensorObj X Y) Z) (F.map (MonoidalCategoryStruct.associator X Y Z).hom)) = CategoryStruct.comp (MonoidalCategoryStruct.associator (F.obj X) (F.obj Y) (F.obj Z)).hom (CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X) (μ' Y Z)) (μ' X (MonoidalCategoryStruct.tensorObj Y Z)))
associativity of the tensorator
- left_unitality' (X : C) : (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight ε' (F.obj X)) (CategoryStruct.comp (μ' (𝟙_ C) X) (F.map (MonoidalCategoryStruct.leftUnitor X).hom))
- right_unitality' (X : C) : (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X) ε') (CategoryStruct.comp (μ' X (𝟙_ C)) (F.map (MonoidalCategoryStruct.rightUnitor X).hom))
Instances
the unit morphism of a lax monoidal functor
Instances For
the tensorator of a lax monoidal functor
Equations
Instances For
A constructor for lax monoidal functors whose axioms are described by tensorHom
instead of
whiskerLeft
and whiskerRight
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
A functor F : C ⥤ D
between monoidal categories is oplax monoidal if it is
equipped with morphisms η : F.obj (𝟙_ C) ⟶ 𝟙 _D
and δ X Y : F.obj (X ⊗ Y) ⟶ F.obj X ⊗ F.obj Y
,
satisfying the appropriate coherences.
counit morphism
- δ' (X Y : C) : F.obj (MonoidalCategoryStruct.tensorObj X Y) ⟶ MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y)
cotensorator
- δ'_natural_left {X Y : C} (f : X ⟶ Y) (X' : C) : CategoryStruct.comp (δ' X X') (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerRight f X')) (δ' Y X')
- δ'_natural_right {X Y : C} (X' : C) (f : X ⟶ Y) : CategoryStruct.comp (δ' X' X) (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerLeft X' f)) (δ' X' Y)
- oplax_associativity' (X Y Z : C) : CategoryStruct.comp (δ' (MonoidalCategoryStruct.tensorObj X Y) Z) (CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (δ' X Y) (F.obj Z)) (MonoidalCategoryStruct.associator (F.obj X) (F.obj Y) (F.obj Z)).hom) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.associator X Y Z).hom) (CategoryStruct.comp (δ' X (MonoidalCategoryStruct.tensorObj Y Z)) (MonoidalCategoryStruct.whiskerLeft (F.obj X) (δ' Y Z)))
associativity of the tensorator
- oplax_left_unitality' (X : C) : (MonoidalCategoryStruct.leftUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.leftUnitor X).inv) (CategoryStruct.comp (δ' (𝟙_ C) X) (MonoidalCategoryStruct.whiskerRight η' (F.obj X)))
- oplax_right_unitality' (X : C) : (MonoidalCategoryStruct.rightUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.rightUnitor X).inv) (CategoryStruct.comp (δ' X (𝟙_ C)) (MonoidalCategoryStruct.whiskerLeft (F.obj X) η'))
Instances
the counit morphism of a lax monoidal functor
Instances For
the cotensorator of an oplax monoidal functor
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
A functor between monoidal categories is monoidal if it is lax and oplax monoidals, and both data give inverse isomorphisms.
- μ' (X Y : C) : MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) ⟶ F.obj (MonoidalCategoryStruct.tensorObj X Y)
- μ'_natural_left {X Y : C} (f : X ⟶ Y) (X' : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) (μ' Y X') = CategoryStruct.comp (μ' X X') (F.map (MonoidalCategoryStruct.whiskerRight f X'))
- μ'_natural_right {X Y : C} (X' : C) (f : X ⟶ Y) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) (μ' X' Y) = CategoryStruct.comp (μ' X' X) (F.map (MonoidalCategoryStruct.whiskerLeft X' f))
- associativity' (X Y Z : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (μ' X Y) (F.obj Z)) (CategoryStruct.comp (μ' (MonoidalCategoryStruct.tensorObj X Y) Z) (F.map (MonoidalCategoryStruct.associator X Y Z).hom)) = CategoryStruct.comp (MonoidalCategoryStruct.associator (F.obj X) (F.obj Y) (F.obj Z)).hom (CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X) (μ' Y Z)) (μ' X (MonoidalCategoryStruct.tensorObj Y Z)))
- left_unitality' (X : C) : (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight ε' (F.obj X)) (CategoryStruct.comp (μ' (𝟙_ C) X) (F.map (MonoidalCategoryStruct.leftUnitor X).hom))
- right_unitality' (X : C) : (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X) ε') (CategoryStruct.comp (μ' X (𝟙_ C)) (F.map (MonoidalCategoryStruct.rightUnitor X).hom))
- δ' (X Y : C) : F.obj (MonoidalCategoryStruct.tensorObj X Y) ⟶ MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y)
- δ'_natural_left {X Y : C} (f : X ⟶ Y) (X' : C) : CategoryStruct.comp (δ' X X') (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerRight f X')) (δ' Y X')
- δ'_natural_right {X Y : C} (X' : C) (f : X ⟶ Y) : CategoryStruct.comp (δ' X' X) (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerLeft X' f)) (δ' X' Y)
- oplax_associativity' (X Y Z : C) : CategoryStruct.comp (δ' (MonoidalCategoryStruct.tensorObj X Y) Z) (CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (δ' X Y) (F.obj Z)) (MonoidalCategoryStruct.associator (F.obj X) (F.obj Y) (F.obj Z)).hom) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.associator X Y Z).hom) (CategoryStruct.comp (δ' X (MonoidalCategoryStruct.tensorObj Y Z)) (MonoidalCategoryStruct.whiskerLeft (F.obj X) (δ' Y Z)))
- oplax_left_unitality' (X : C) : (MonoidalCategoryStruct.leftUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.leftUnitor X).inv) (CategoryStruct.comp (δ' (𝟙_ C) X) (MonoidalCategoryStruct.whiskerRight η' (F.obj X)))
- oplax_right_unitality' (X : C) : (MonoidalCategoryStruct.rightUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.rightUnitor X).inv) (CategoryStruct.comp (δ' X (𝟙_ C)) (MonoidalCategoryStruct.whiskerLeft (F.obj X) η'))
- μ_δ (X Y : C) : CategoryStruct.comp (LaxMonoidal.μ F X Y) (OplaxMonoidal.δ F X Y) = CategoryStruct.id (MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y))
- δ_μ (X Y : C) : CategoryStruct.comp (OplaxMonoidal.δ F X Y) (LaxMonoidal.μ F X Y) = CategoryStruct.id (F.obj (MonoidalCategoryStruct.tensorObj X Y))
Instances
The isomorphism 𝟙_ D ≅ F.obj (𝟙_ C)
when F
is a monoidal functor.
Equations
- CategoryTheory.Functor.Monoidal.εIso F = { hom := CategoryTheory.Functor.LaxMonoidal.ε F, inv := CategoryTheory.Functor.OplaxMonoidal.η F, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
The isomorphism F.obj X ⊗ F.obj Y ≅ F.obj (X ⊗ Y)
when F
is a monoidal functor.
Equations
- CategoryTheory.Functor.Monoidal.μIso F X Y = { hom := CategoryTheory.Functor.LaxMonoidal.μ F X Y, inv := CategoryTheory.Functor.OplaxMonoidal.δ F X Y, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
The tensorator as a natural isomorphism.
Equations
- CategoryTheory.Functor.Monoidal.μNatIso F = CategoryTheory.NatIso.ofComponents (fun (x : C × C) => CategoryTheory.Functor.Monoidal.μIso F x.1 x.2) ⋯
Instances For
Monoidal functors commute with left tensoring up to isomorphism
Equations
- CategoryTheory.Functor.Monoidal.commTensorLeft F X = CategoryTheory.NatIso.ofComponents (fun (Y : C) => CategoryTheory.Functor.Monoidal.μIso F X Y) ⋯
Instances For
Monoidal functors commute with right tensoring up to isomorphism
Equations
- CategoryTheory.Functor.Monoidal.commTensorRight F X = CategoryTheory.NatIso.ofComponents (fun (Y : C) => CategoryTheory.Functor.Monoidal.μIso F Y X) ⋯
Instances For
Equations
Equations
Structure which is a helper in order to show that a functor is monoidal. It
consists of isomorphisms εIso
and μIso
such that the morphisms .hom
induced
by these isomorphisms satisfy the axioms of lax monoidal functors.
unit morphism
- μIso (X Y : C) : MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) ≅ F.obj (MonoidalCategoryStruct.tensorObj X Y)
tensorator
- μIso_hom_natural_left {X Y : C} (f : X ⟶ Y) (X' : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) (self.μIso Y X').hom = CategoryStruct.comp (self.μIso X X').hom (F.map (MonoidalCategoryStruct.whiskerRight f X'))
- μIso_hom_natural_right {X Y : C} (X' : C) (f : X ⟶ Y) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) (self.μIso X' Y).hom = CategoryStruct.comp (self.μIso X' X).hom (F.map (MonoidalCategoryStruct.whiskerLeft X' f))
- associativity (X Y Z : C) : CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (self.μIso X Y).hom (F.obj Z)) (CategoryStruct.comp (self.μIso (MonoidalCategoryStruct.tensorObj X Y) Z).hom (F.map (MonoidalCategoryStruct.associator X Y Z).hom)) = CategoryStruct.comp (MonoidalCategoryStruct.associator (F.obj X) (F.obj Y) (F.obj Z)).hom (CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X) (self.μIso Y Z).hom) (self.μIso X (MonoidalCategoryStruct.tensorObj Y Z)).hom)
associativity of the tensorator
- left_unitality (X : C) : (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight self.εIso.hom (F.obj X)) (CategoryStruct.comp (self.μIso (𝟙_ C) X).hom (F.map (MonoidalCategoryStruct.leftUnitor X).hom))
- right_unitality (X : C) : (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.whiskerLeft (F.obj X) self.εIso.hom) (CategoryStruct.comp (self.μIso X (𝟙_ C)).hom (F.map (MonoidalCategoryStruct.rightUnitor X).hom))
Instances For
The lax monoidal functor structure induced by a Functor.CoreMonoidal
structure.
Equations
Instances For
The oplax monoidal functor structure induced by a Functor.CoreMonoidal
structure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The monoidal functor structure induced by a Functor.CoreMonoidal
structure.
Equations
- h.toMonoidal = CategoryTheory.Functor.Monoidal.mk ⋯ ⋯ ⋯ ⋯
Instances For
The Functor.CoreMonoidal
structure given by a lax monoidal functor such
that ε
and μ
are isomorphisms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The Functor.CoreMonoidal
structure given by an oplax monoidal functor such
that η
and δ
are isomorphisms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The Functor.Monoidal
structure given by a lax monoidal functor such
that ε
and μ
are isomorphisms.
Equations
Instances For
The Functor.Monoidal
structure given by an oplax monoidal functor such
that η
and δ
are isomorphisms.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- F.instMonoidalProdProd G = CategoryTheory.Functor.Monoidal.mk ⋯ ⋯ ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
The functor C ⥤ D × E
obtained from two lax monoidal functors is lax monoidal.
Equations
The functor C ⥤ D × E
obtained from two oplax monoidal functors is oplax monoidal.
Equations
The functor C ⥤ D × E
obtained from two monoidal functors is monoidal.
Equations
The right adjoint of an oplax monoidal functor is lax monoidal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
When adj : F ⊣ G
is an adjunction, with F
oplax monoidal and G
monoidal,
this typeclass expresses compatibilities between the adjunction and the (op)lax
monoidal structures.
- leftAdjoint_μ (X Y : D) : Functor.LaxMonoidal.μ G X Y = (adj.homEquiv (MonoidalCategoryStruct.tensorObj (G.obj X) (G.obj Y)) (MonoidalCategoryStruct.tensorObj ((Functor.id D).obj X) ((Functor.id D).obj Y))) (CategoryStruct.comp (Functor.OplaxMonoidal.δ F (G.obj X) (G.obj Y)) (MonoidalCategoryStruct.tensorHom (adj.counit.app X) (adj.counit.app Y)))
Instances
Equations
Equations
If a monoidal functor F
is an equivalence of categories then its inverse is also monoidal.
Instances For
An equivalence of categories involving monoidal functors is monoidal if the underlying adjunction satisfies certain compatibilities with respect to the monoidal functor data.
Equations
Instances For
The obvious auto-equivalence of a monoidal category is monoidal.
The inverse of a monoidal category equivalence is also a monoidal category equivalence.
Equations
- e.instMonoidalFunctorTrans e' = inferInstanceAs (e.functor.comp e'.functor).Monoidal
Equations
- e.instMonoidalInverseTrans e' = inferInstanceAs (e'.inverse.comp e.inverse).Monoidal
The composition of two monoidal category equivalences is monoidal.
Bundled version of lax monoidal functors. This type is equipped with a category
structure in CategoryTheory.Monoidal.NaturalTransformation
.
- obj : C → D
- map_comp {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) : self.map (CategoryStruct.comp f g) = CategoryStruct.comp (self.map f) (self.map g)
- laxMonoidal : self.LaxMonoidal
Instances For
Constructor for LaxMonoidalFunctor C D
.
Equations
- CategoryTheory.LaxMonoidalFunctor.of F = { toFunctor := F, laxMonoidal := inferInstance }