Documentation

Mathlib.CategoryTheory.Monoidal.Functor

(Lax) monoidal functors #

A lax monoidal functor F between monoidal categories C and D is a functor between the underlying categories equipped with morphisms

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 #

See https://stacks.math.columbia.edu/tag/0FFL.

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.

Instances
    def CategoryTheory.Functor.LaxMonoidal.ε {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] :
    𝟙_ D F.obj (𝟙_ C)

    the unit morphism of a lax monoidal functor

    Equations
    Instances For

      the tensorator of a lax monoidal functor

      Equations
      Instances For
        @[simp]
        theorem CategoryTheory.Functor.LaxMonoidal.μ_natural_left {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] {X Y : C} (f : X Y) (X' : C) :
        @[simp]
        theorem CategoryTheory.Functor.LaxMonoidal.μ_natural_right {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] {X Y : C} (X' : C) (f : X Y) :
        @[simp]
        theorem CategoryTheory.Functor.LaxMonoidal.μ_natural {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] {X Y X' Y' : C} (f : X Y) (g : X' Y') :
        @[simp]
        theorem CategoryTheory.Functor.LaxMonoidal.μ_natural_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] {X Y X' Y' : C} (f : X Y) (g : X' Y') {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj Y Y') Z) :
        def CategoryTheory.Functor.LaxMonoidal.ofTensorHom {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (ε' : 𝟙_ D F.obj (𝟙_ C)) (μ' : (X Y : C) → MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) F.obj (MonoidalCategoryStruct.tensorObj X Y)) (μ'_natural : ∀ {X Y X' Y' : C} (f : X Y) (g : X' Y'), CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (F.map f) (F.map g)) (μ' Y Y') = CategoryStruct.comp (μ' X X') (F.map (MonoidalCategoryStruct.tensorHom f g)) := by aesop_cat) (associativity' : ∀ (X Y Z : C), CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (μ' X Y) (CategoryStruct.id (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.tensorHom (CategoryStruct.id (F.obj X)) (μ' Y Z)) (μ' X (MonoidalCategoryStruct.tensorObj Y Z))) := by aesop_cat) (left_unitality' : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom ε' (CategoryStruct.id (F.obj X))) (CategoryStruct.comp (μ' (𝟙_ C) X) (F.map (MonoidalCategoryStruct.leftUnitor X).hom)) := by aesop_cat) (right_unitality' : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (CategoryStruct.id (F.obj X)) ε') (CategoryStruct.comp (μ' X (𝟙_ C)) (F.map (MonoidalCategoryStruct.rightUnitor X).hom)) := by aesop_cat) :
        F.LaxMonoidal

        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
          theorem CategoryTheory.Functor.LaxMonoidal.ofTensorHom_ε {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (ε' : 𝟙_ D F.obj (𝟙_ C)) (μ' : (X Y : C) → MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) F.obj (MonoidalCategoryStruct.tensorObj X Y)) (μ'_natural : ∀ {X Y X' Y' : C} (f : X Y) (g : X' Y'), CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (F.map f) (F.map g)) (μ' Y Y') = CategoryStruct.comp (μ' X X') (F.map (MonoidalCategoryStruct.tensorHom f g)) := by aesop_cat) (associativity' : ∀ (X Y Z : C), CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (μ' X Y) (CategoryStruct.id (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.tensorHom (CategoryStruct.id (F.obj X)) (μ' Y Z)) (μ' X (MonoidalCategoryStruct.tensorObj Y Z))) := by aesop_cat) (left_unitality' : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom ε' (CategoryStruct.id (F.obj X))) (CategoryStruct.comp (μ' (𝟙_ C) X) (F.map (MonoidalCategoryStruct.leftUnitor X).hom)) := by aesop_cat) (right_unitality' : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (CategoryStruct.id (F.obj X)) ε') (CategoryStruct.comp (μ' X (𝟙_ C)) (F.map (MonoidalCategoryStruct.rightUnitor X).hom)) := by aesop_cat) :
          ε F = ε'
          theorem CategoryTheory.Functor.LaxMonoidal.ofTensorHom_μ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (ε' : 𝟙_ D F.obj (𝟙_ C)) (μ' : (X Y : C) → MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) F.obj (MonoidalCategoryStruct.tensorObj X Y)) (μ'_natural : ∀ {X Y X' Y' : C} (f : X Y) (g : X' Y'), CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (F.map f) (F.map g)) (μ' Y Y') = CategoryStruct.comp (μ' X X') (F.map (MonoidalCategoryStruct.tensorHom f g)) := by aesop_cat) (associativity' : ∀ (X Y Z : C), CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (μ' X Y) (CategoryStruct.id (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.tensorHom (CategoryStruct.id (F.obj X)) (μ' Y Z)) (μ' X (MonoidalCategoryStruct.tensorObj Y Z))) := by aesop_cat) (left_unitality' : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom ε' (CategoryStruct.id (F.obj X))) (CategoryStruct.comp (μ' (𝟙_ C) X) (F.map (MonoidalCategoryStruct.leftUnitor X).hom)) := by aesop_cat) (right_unitality' : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (CategoryStruct.id (F.obj X)) ε') (CategoryStruct.comp (μ' X (𝟙_ C)) (F.map (MonoidalCategoryStruct.rightUnitor X).hom)) := by aesop_cat) :
          μ F = μ'
          Equations
          • One or more equations did not get rendered due to their size.
          instance CategoryTheory.Functor.LaxMonoidal.comp {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.LaxMonoidal] [G.LaxMonoidal] :
          (F.comp G).LaxMonoidal
          Equations
          • One or more equations did not get rendered due to their size.
          @[simp]
          theorem CategoryTheory.Functor.LaxMonoidal.comp_ε {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.LaxMonoidal] [G.LaxMonoidal] :
          ε (F.comp G) = CategoryStruct.comp (ε G) (G.map (ε F))
          @[simp]
          theorem CategoryTheory.Functor.LaxMonoidal.comp_μ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.LaxMonoidal] [G.LaxMonoidal] (X Y : C) :
          μ (F.comp G) X Y = CategoryStruct.comp (μ G (F.obj X) (F.obj Y)) (G.map (μ F X Y))

          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.

          Instances
            def CategoryTheory.Functor.OplaxMonoidal.η {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] :
            F.obj (𝟙_ C) 𝟙_ D

            the counit morphism of a lax monoidal functor

            Equations
            Instances For

              the cotensorator of an oplax monoidal functor

              Equations
              Instances For
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural_left {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] {X Y : C} (f : X Y) (X' : C) :
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural_left_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] {X Y : C} (f : X Y) (X' : C) {Z : D} (h : MonoidalCategoryStruct.tensorObj (F.obj Y) (F.obj X') Z) :
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural_right {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] {X Y : C} (X' : C) (f : X Y) :
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural_right_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] {X Y : C} (X' : C) (f : X Y) {Z : D} (h : MonoidalCategoryStruct.tensorObj (F.obj X') (F.obj Y) Z) :
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] {X Y X' Y' : C} (f : X Y) (g : X' Y') :
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] {X Y X' Y' : C} (f : X Y) (g : X' Y') {Z : D} (h : MonoidalCategoryStruct.tensorObj (F.obj Y) (F.obj Y') Z) :
                Equations
                • One or more equations did not get rendered due to their size.
                instance CategoryTheory.Functor.OplaxMonoidal.comp {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.OplaxMonoidal] [G.OplaxMonoidal] :
                (F.comp G).OplaxMonoidal
                Equations
                • One or more equations did not get rendered due to their size.
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.comp_η {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.OplaxMonoidal] [G.OplaxMonoidal] :
                η (F.comp G) = CategoryStruct.comp (G.map (η F)) (η G)
                @[simp]
                theorem CategoryTheory.Functor.OplaxMonoidal.comp_δ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.OplaxMonoidal] [G.OplaxMonoidal] (X Y : C) :
                δ (F.comp G) X Y = CategoryStruct.comp (G.map (δ F X Y)) (δ G (F.obj X) (F.obj Y))
                class CategoryTheory.Functor.Monoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) extends F.LaxMonoidal, F.OplaxMonoidal :
                Type (max u₁ v₂)

                A functor between monoidal categories is monoidal if it is lax and oplax monoidals, and both data give inverse isomorphisms.

                Instances
                  @[simp]
                  theorem CategoryTheory.Functor.Monoidal.ε_η_assoc {C : Type u₁} {inst✝ : Category.{v₁, u₁} C} {inst✝¹ : MonoidalCategory C} {D : Type u₂} {inst✝² : Category.{v₂, u₂} D} {inst✝³ : MonoidalCategory D} {F : Functor C D} [self : F.Monoidal] {Z : D} (h : 𝟙_ D Z) :
                  @[simp]
                  theorem CategoryTheory.Functor.Monoidal.μ_δ_assoc {C : Type u₁} {inst✝ : Category.{v₁, u₁} C} {inst✝¹ : MonoidalCategory C} {D : Type u₂} {inst✝² : Category.{v₂, u₂} D} {inst✝³ : MonoidalCategory D} {F : Functor C D} [self : F.Monoidal] (X Y : C) {Z : D} (h : MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) Z) :
                  @[simp]
                  theorem CategoryTheory.Functor.Monoidal.η_ε_assoc {C : Type u₁} {inst✝ : Category.{v₁, u₁} C} {inst✝¹ : MonoidalCategory C} {D : Type u₂} {inst✝² : Category.{v₂, u₂} D} {inst✝³ : MonoidalCategory D} {F : Functor C D} [self : F.Monoidal] {Z : D} (h : F.obj (𝟙_ C) Z) :
                  @[simp]
                  theorem CategoryTheory.Functor.Monoidal.δ_μ_assoc {C : Type u₁} {inst✝ : Category.{v₁, u₁} C} {inst✝¹ : MonoidalCategory C} {D : Type u₂} {inst✝² : Category.{v₂, u₂} D} {inst✝³ : MonoidalCategory D} {F : Functor C D} [self : F.Monoidal] (X Y : C) {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj X Y) Z) :
                  def CategoryTheory.Functor.Monoidal.εIso {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] :
                  𝟙_ D F.obj (𝟙_ C)

                  The isomorphism 𝟙_ D ≅ F.obj (𝟙_ C) when F is a monoidal functor.

                  Equations
                  Instances For

                    The isomorphism F.obj X ⊗ F.obj Y ≅ F.obj (X ⊗ Y) when F is a monoidal functor.

                    Equations
                    Instances For
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.μIso_inv {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X Y : C) :
                      (μIso F X Y).inv = OplaxMonoidal.δ F X Y
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.μIso_hom {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X Y : C) :
                      (μIso F X Y).hom = LaxMonoidal.μ F X Y
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_ε_η {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') :
                      CategoryStruct.comp (G.map (LaxMonoidal.ε F)) (G.map (OplaxMonoidal.η F)) = CategoryStruct.id (G.obj (𝟙_ D))
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_ε_η_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') {Z : C'} (h : G.obj (𝟙_ D) Z) :
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_η_ε {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') :
                      CategoryStruct.comp (G.map (OplaxMonoidal.η F)) (G.map (LaxMonoidal.ε F)) = CategoryStruct.id (G.obj (F.obj (𝟙_ C)))
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_η_ε_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') {Z : C'} (h : G.obj (F.obj (𝟙_ C)) Z) :
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_μ_δ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') (X Y : C) :
                      CategoryStruct.comp (G.map (LaxMonoidal.μ F X Y)) (G.map (OplaxMonoidal.δ F X Y)) = CategoryStruct.id (G.obj (MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y)))
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_μ_δ_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') (X Y : C) {Z : C'} (h : G.obj (MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y)) Z) :
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_δ_μ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') (X Y : C) :
                      @[simp]
                      theorem CategoryTheory.Functor.Monoidal.map_δ_μ_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) [F.Monoidal] (G : Functor D C') (X Y : C) {Z : C'} (h : G.obj (F.obj (MonoidalCategoryStruct.tensorObj X Y)) Z) :
                      noncomputable def CategoryTheory.Functor.Monoidal.μNatIso {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] :
                      (F.prod F).comp (MonoidalCategory.tensor D) (MonoidalCategory.tensor C).comp F

                      The tensorator as a natural isomorphism.

                      Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.Functor.Monoidal.μNatIso_hom_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X : C × C) :
                        (μNatIso F).hom.app X = LaxMonoidal.μ F X.1 X.2
                        @[simp]
                        theorem CategoryTheory.Functor.Monoidal.μNatIso_inv_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X : C × C) :
                        (μNatIso F).inv.app X = OplaxMonoidal.δ F X.1 X.2
                        noncomputable def CategoryTheory.Functor.Monoidal.commTensorLeft {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X : C) :

                        Monoidal functors commute with left tensoring up to isomorphism

                        Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.Functor.Monoidal.commTensorLeft_hom_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X X✝ : C) :
                          (commTensorLeft F X).hom.app X✝ = LaxMonoidal.μ F X X✝
                          @[simp]
                          theorem CategoryTheory.Functor.Monoidal.commTensorLeft_inv_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X X✝ : C) :
                          (commTensorLeft F X).inv.app X✝ = OplaxMonoidal.δ F X X✝

                          Monoidal functors commute with right tensoring up to isomorphism

                          Equations
                          Instances For
                            @[simp]
                            theorem CategoryTheory.Functor.Monoidal.commTensorRight_inv_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X X✝ : C) :
                            (commTensorRight F X).inv.app X✝ = OplaxMonoidal.δ F X✝ X
                            @[simp]
                            theorem CategoryTheory.Functor.Monoidal.commTensorRight_hom_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.Monoidal] (X X✝ : C) :
                            (commTensorRight F X).hom.app X✝ = LaxMonoidal.μ F X✝ X
                            instance CategoryTheory.Functor.Monoidal.instComp {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor D E) [F.Monoidal] [G.Monoidal] :
                            (F.comp G).Monoidal
                            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.

                            Instances For
                              @[simp]
                              theorem CategoryTheory.Functor.CoreMonoidal.μIso_hom_natural_left_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (self : F.CoreMonoidal) {X Y : C} (f : X Y) (X' : C) {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj Y X') Z) :
                              @[simp]
                              theorem CategoryTheory.Functor.CoreMonoidal.μIso_hom_natural_right_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (self : F.CoreMonoidal) {X Y : C} (X' : C) (f : X Y) {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj X' Y) Z) :
                              theorem CategoryTheory.Functor.CoreMonoidal.left_unitality_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (self : F.CoreMonoidal) (X : C) {Z : D} (h : F.obj X Z) :
                              theorem CategoryTheory.Functor.CoreMonoidal.right_unitality_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (self : F.CoreMonoidal) (X : C) {Z : D} (h : F.obj X Z) :
                              def CategoryTheory.Functor.CoreMonoidal.toLaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (h : F.CoreMonoidal) :
                              F.LaxMonoidal

                              The lax monoidal functor structure induced by a Functor.CoreMonoidal structure.

                              Equations
                              • h.toLaxMonoidal = { ε' := h.εIso.hom, μ' := fun (X Y : C) => (h.μIso X Y).hom, μ'_natural_left := , μ'_natural_right := , associativity' := , left_unitality' := , right_unitality' := }
                              Instances For
                                theorem CategoryTheory.Functor.CoreMonoidal.toLaxMonoidal_μ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (h : F.CoreMonoidal) (X Y : C) :
                                LaxMonoidal.μ F X Y = (h.μIso X Y).hom
                                def CategoryTheory.Functor.CoreMonoidal.toOplaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (h : F.CoreMonoidal) :
                                F.OplaxMonoidal

                                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
                                  theorem CategoryTheory.Functor.CoreMonoidal.toOplaxMonoidal_δ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (h : F.CoreMonoidal) (X Y : C) :
                                  OplaxMonoidal.δ F X Y = (h.μIso X Y).inv
                                  def CategoryTheory.Functor.CoreMonoidal.toMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (h : F.CoreMonoidal) :
                                  F.Monoidal

                                  The monoidal functor structure induced by a Functor.CoreMonoidal structure.

                                  Equations
                                  Instances For
                                    noncomputable def CategoryTheory.Functor.CoreMonoidal.ofLaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] [IsIso (LaxMonoidal.ε F)] [∀ (X Y : C), IsIso (LaxMonoidal.μ F X Y)] :
                                    F.CoreMonoidal

                                    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
                                      noncomputable def CategoryTheory.Functor.CoreMonoidal.ofOplaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] [IsIso (OplaxMonoidal.η F)] [∀ (X Y : C), IsIso (OplaxMonoidal.δ F X Y)] :
                                      F.CoreMonoidal

                                      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
                                        noncomputable def CategoryTheory.Functor.Monoidal.ofLaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] [IsIso (LaxMonoidal.ε F)] [∀ (X Y : C), IsIso (LaxMonoidal.μ F X Y)] :
                                        F.Monoidal

                                        The Functor.Monoidal structure given by a lax monoidal functor such that ε and μ are isomorphisms.

                                        Equations
                                        Instances For
                                          noncomputable def CategoryTheory.Functor.Monoidal.ofOplaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.OplaxMonoidal] [IsIso (OplaxMonoidal.η F)] [∀ (X Y : C), IsIso (OplaxMonoidal.δ F X Y)] :
                                          F.Monoidal

                                          The Functor.Monoidal structure given by an oplax monoidal functor such that η and δ are isomorphisms.

                                          Equations
                                          Instances For
                                            instance CategoryTheory.Functor.instLaxMonoidalProdProd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.LaxMonoidal] [G.LaxMonoidal] :
                                            (F.prod G).LaxMonoidal
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_ε_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.LaxMonoidal] [G.LaxMonoidal] :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_ε_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.LaxMonoidal] [G.LaxMonoidal] :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_μ_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.LaxMonoidal] [G.LaxMonoidal] (X Y : C × E) :
                                            (LaxMonoidal.μ (F.prod G) X Y).1 = LaxMonoidal.μ F X.1 Y.1
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_μ_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.LaxMonoidal] [G.LaxMonoidal] (X Y : C × E) :
                                            (LaxMonoidal.μ (F.prod G) X Y).2 = LaxMonoidal.μ G X.2 Y.2
                                            instance CategoryTheory.Functor.instOplaxMonoidalProdProd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.OplaxMonoidal] [G.OplaxMonoidal] :
                                            (F.prod G).OplaxMonoidal
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_η_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.OplaxMonoidal] [G.OplaxMonoidal] :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_η_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.OplaxMonoidal] [G.OplaxMonoidal] :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_δ_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.OplaxMonoidal] [G.OplaxMonoidal] (X Y : C × E) :
                                            (OplaxMonoidal.δ (F.prod G) X Y).1 = OplaxMonoidal.δ F X.1 Y.1
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_δ_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.OplaxMonoidal] [G.OplaxMonoidal] (X Y : C × E) :
                                            (OplaxMonoidal.δ (F.prod G) X Y).2 = OplaxMonoidal.δ G X.2 Y.2
                                            instance CategoryTheory.Functor.instMonoidalProdProd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {C' : Type u₁'} [Category.{v₁', u₁'} C'] (F : Functor C D) (G : Functor E C') [MonoidalCategory C'] [F.Monoidal] [G.Monoidal] :
                                            (F.prod G).Monoidal
                                            Equations
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            instance CategoryTheory.Functor.LaxMonoidal.prod' {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.LaxMonoidal] [G.LaxMonoidal] :
                                            (F.prod' G).LaxMonoidal

                                            The functor C ⥤ D × E obtained from two lax monoidal functors is lax monoidal.

                                            Equations
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_ε_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.LaxMonoidal] [G.LaxMonoidal] :
                                            (LaxMonoidal.ε (F.prod' G)).1 = LaxMonoidal.ε F
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_ε_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.LaxMonoidal] [G.LaxMonoidal] :
                                            (LaxMonoidal.ε (F.prod' G)).2 = LaxMonoidal.ε G
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_μ_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.LaxMonoidal] [G.LaxMonoidal] (X Y : C) :
                                            (LaxMonoidal.μ (F.prod' G) X Y).1 = LaxMonoidal.μ F X Y
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_μ_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.LaxMonoidal] [G.LaxMonoidal] (X Y : C) :
                                            (LaxMonoidal.μ (F.prod' G) X Y).2 = LaxMonoidal.μ G X Y
                                            instance CategoryTheory.Functor.OplaxMonoidal.prod' {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.OplaxMonoidal] [G.OplaxMonoidal] :
                                            (F.prod' G).OplaxMonoidal

                                            The functor C ⥤ D × E obtained from two oplax monoidal functors is oplax monoidal.

                                            Equations
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_η_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.OplaxMonoidal] [G.OplaxMonoidal] :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_η_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.OplaxMonoidal] [G.OplaxMonoidal] :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_δ_fst {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.OplaxMonoidal] [G.OplaxMonoidal] (X Y : C) :
                                            (OplaxMonoidal.δ (F.prod' G) X Y).1 = OplaxMonoidal.δ F X Y
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod'_δ_snd {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.OplaxMonoidal] [G.OplaxMonoidal] (X Y : C) :
                                            (OplaxMonoidal.δ (F.prod' G) X Y).2 = OplaxMonoidal.δ G X Y
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_comp_fst {C : Type u_1} {D : Type u_2} [Category.{u_3, u_1} C] [Category.{u_4, u_2} D] {X Y Z : C × D} (f : X Y) (g : Y Z) :
                                            theorem CategoryTheory.Functor.prod_comp_fst_assoc {C : Type u_1} {D : Type u_2} [Category.{u_3, u_1} C] [Category.{u_4, u_2} D] {X Y Z : C × D} (f : X Y) (g : Y Z) {Z✝ : C} (h : Z.1 Z✝) :
                                            @[simp]
                                            theorem CategoryTheory.Functor.prod_comp_snd {C : Type u_1} {D : Type u_2} [Category.{u_3, u_1} C] [Category.{u_4, u_2} D] {X Y Z : C × D} (f : X Y) (g : Y Z) :
                                            theorem CategoryTheory.Functor.prod_comp_snd_assoc {C : Type u_1} {D : Type u_2} [Category.{u_3, u_1} C] [Category.{u_4, u_2} D] {X Y Z : C × D} (f : X Y) (g : Y Z) {Z✝ : D} (h : Z.2 Z✝) :
                                            instance CategoryTheory.Functor.Monoidal.prod' {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (F : Functor C D) (G : Functor C E) [F.Monoidal] [G.Monoidal] :
                                            (F.prod' G).Monoidal

                                            The functor C ⥤ D × E obtained from two monoidal functors is monoidal.

                                            Equations
                                            def CategoryTheory.Adjunction.rightAdjointLaxMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] :
                                            G.LaxMonoidal

                                            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
                                              theorem CategoryTheory.Adjunction.rightAdjointLaxMonoidal_ε {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] :
                                              Functor.LaxMonoidal.ε G = (adj.homEquiv (𝟙_ C) (𝟙_ D)) (Functor.OplaxMonoidal.η F)
                                              theorem CategoryTheory.Adjunction.rightAdjointLaxMonoidal_μ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] (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)))
                                              class CategoryTheory.Adjunction.IsMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] :

                                              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.

                                              Instances
                                                instance CategoryTheory.Adjunction.instIsMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] :
                                                adj.IsMonoidal
                                                theorem CategoryTheory.Adjunction.unit_app_unit_comp_map_η {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] :
                                                theorem CategoryTheory.Adjunction.unit_app_unit_comp_map_η_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] {Z : C} (h : G.obj (𝟙_ D) Z) :
                                                theorem CategoryTheory.Adjunction.unit_app_tensor_comp_map_δ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] (X Y : C) :
                                                CategoryStruct.comp (adj.unit.app (MonoidalCategoryStruct.tensorObj X Y)) (G.map (Functor.OplaxMonoidal.δ F X Y)) = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (adj.unit.app X) (adj.unit.app Y)) (Functor.LaxMonoidal.μ G (F.obj X) (F.obj Y))
                                                theorem CategoryTheory.Adjunction.unit_app_tensor_comp_map_δ_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] (X Y : C) {Z : C} (h : G.obj (MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y)) Z) :
                                                theorem CategoryTheory.Adjunction.map_ε_comp_counit_app_unit {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] :
                                                CategoryStruct.comp (F.map (Functor.LaxMonoidal.ε G)) (adj.counit.app (𝟙_ D)) = Functor.OplaxMonoidal.η F
                                                theorem CategoryTheory.Adjunction.map_ε_comp_counit_app_unit_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] {Z : D} (h : 𝟙_ D Z) :
                                                theorem CategoryTheory.Adjunction.map_μ_comp_counit_app_tensor {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] (X Y : D) :
                                                CategoryStruct.comp (F.map (Functor.LaxMonoidal.μ G X Y)) (adj.counit.app (MonoidalCategoryStruct.tensorObj X Y)) = CategoryStruct.comp (Functor.OplaxMonoidal.δ F (G.obj X) (G.obj Y)) (MonoidalCategoryStruct.tensorHom (adj.counit.app X) (adj.counit.app Y))
                                                theorem CategoryTheory.Adjunction.map_μ_comp_counit_app_tensor_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] (X Y : D) {Z : D} (h : MonoidalCategoryStruct.tensorObj X Y Z) :
                                                instance CategoryTheory.Adjunction.isMonoidal_comp {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] {F : Functor C D} {G : Functor D C} (adj : F G) [F.OplaxMonoidal] [G.LaxMonoidal] [adj.IsMonoidal] {F' : Functor D E} {G' : Functor E D} (adj' : F' G') [F'.OplaxMonoidal] [G'.LaxMonoidal] [adj'.IsMonoidal] :
                                                (adj.comp adj').IsMonoidal
                                                instance CategoryTheory.Equivalence.instMonoidalFunctorSymmOfInverse {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.inverse.Monoidal] :
                                                e.symm.functor.Monoidal
                                                Equations
                                                instance CategoryTheory.Equivalence.instMonoidalInverseSymmOfFunctor {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] :
                                                e.symm.inverse.Monoidal
                                                Equations
                                                noncomputable def CategoryTheory.Equivalence.inverseMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] :
                                                e.inverse.Monoidal

                                                If a monoidal functor F is an equivalence of categories then its inverse is also monoidal.

                                                Equations
                                                Instances For
                                                  @[reducible, inline]
                                                  abbrev CategoryTheory.Equivalence.IsMonoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] :

                                                  An equivalence of categories involving monoidal functors is monoidal if the underlying adjunction satisfies certain compatibilities with respect to the monoidal functor data.

                                                  Equations
                                                  • e.IsMonoidal = e.toAdjunction.IsMonoidal
                                                  Instances For
                                                    theorem CategoryTheory.Equivalence.unitIso_hom_app_comp_inverse_map_η_functor {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] :
                                                    CategoryStruct.comp (e.unitIso.hom.app (𝟙_ C)) (e.inverse.map (Functor.OplaxMonoidal.η e.functor)) = Functor.LaxMonoidal.ε e.inverse
                                                    theorem CategoryTheory.Equivalence.unitIso_hom_app_comp_inverse_map_η_functor_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] {Z : C} (h : e.inverse.obj (𝟙_ D) Z) :
                                                    CategoryStruct.comp (e.unitIso.hom.app (𝟙_ C)) (CategoryStruct.comp (e.inverse.map (Functor.OplaxMonoidal.η e.functor)) h) = CategoryStruct.comp (Functor.LaxMonoidal.ε e.inverse) h
                                                    theorem CategoryTheory.Equivalence.unitIso_hom_app_tensor_comp_inverse_map_δ_functor {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (X Y : C) :
                                                    CategoryStruct.comp (e.unitIso.hom.app (MonoidalCategoryStruct.tensorObj X Y)) (e.inverse.map (Functor.OplaxMonoidal.δ e.functor X Y)) = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (e.unitIso.hom.app X) (e.unitIso.hom.app Y)) (Functor.LaxMonoidal.μ e.inverse (e.functor.obj X) (e.functor.obj Y))
                                                    theorem CategoryTheory.Equivalence.unitIso_hom_app_tensor_comp_inverse_map_δ_functor_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (X Y : C) {Z : C} (h : e.inverse.obj (MonoidalCategoryStruct.tensorObj (e.functor.obj X) (e.functor.obj Y)) Z) :
                                                    CategoryStruct.comp (e.unitIso.hom.app (MonoidalCategoryStruct.tensorObj X Y)) (CategoryStruct.comp (e.inverse.map (Functor.OplaxMonoidal.δ e.functor X Y)) h) = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (e.unitIso.hom.app X) (e.unitIso.hom.app Y)) (CategoryStruct.comp (Functor.LaxMonoidal.μ e.inverse (e.functor.obj X) (e.functor.obj Y)) h)
                                                    theorem CategoryTheory.Equivalence.functor_map_ε_inverse_comp_counitIso_hom_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] :
                                                    CategoryStruct.comp (e.functor.map (Functor.LaxMonoidal.ε e.inverse)) (e.counitIso.hom.app (𝟙_ D)) = Functor.OplaxMonoidal.η e.functor
                                                    theorem CategoryTheory.Equivalence.functor_map_ε_inverse_comp_counitIso_hom_app_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] {Z : D} (h : 𝟙_ D Z) :
                                                    CategoryStruct.comp (e.functor.map (Functor.LaxMonoidal.ε e.inverse)) (CategoryStruct.comp (e.counitIso.hom.app (𝟙_ D)) h) = CategoryStruct.comp (Functor.OplaxMonoidal.η e.functor) h
                                                    theorem CategoryTheory.Equivalence.functor_map_μ_inverse_comp_counitIso_hom_app_tensor {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (X Y : D) :
                                                    CategoryStruct.comp (e.functor.map (Functor.LaxMonoidal.μ e.inverse X Y)) (e.counitIso.hom.app (MonoidalCategoryStruct.tensorObj X Y)) = CategoryStruct.comp (Functor.OplaxMonoidal.δ e.functor (e.inverse.obj X) (e.inverse.obj Y)) (MonoidalCategoryStruct.tensorHom (e.counitIso.hom.app X) (e.counitIso.hom.app Y))
                                                    theorem CategoryTheory.Equivalence.functor_map_μ_inverse_comp_counitIso_hom_app_tensor_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (X Y : D) {Z : D} (h : MonoidalCategoryStruct.tensorObj X Y Z) :
                                                    CategoryStruct.comp (e.functor.map (Functor.LaxMonoidal.μ e.inverse X Y)) (CategoryStruct.comp (e.counitIso.hom.app (MonoidalCategoryStruct.tensorObj X Y)) h) = CategoryStruct.comp (Functor.OplaxMonoidal.δ e.functor (e.inverse.obj X) (e.inverse.obj Y)) (CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (e.counitIso.hom.app X) (e.counitIso.hom.app Y)) h)
                                                    theorem CategoryTheory.Equivalence.counitIso_inv_app_comp_functor_map_η_inverse {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] :
                                                    CategoryStruct.comp (e.counitIso.inv.app (𝟙_ D)) (e.functor.map (Functor.OplaxMonoidal.η e.inverse)) = Functor.LaxMonoidal.ε e.functor
                                                    theorem CategoryTheory.Equivalence.counitIso_inv_app_comp_functor_map_η_inverse_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] {Z : D} (h : e.functor.obj (𝟙_ C) Z) :
                                                    CategoryStruct.comp (e.counitIso.inv.app (𝟙_ D)) (CategoryStruct.comp (e.functor.map (Functor.OplaxMonoidal.η e.inverse)) h) = CategoryStruct.comp (Functor.LaxMonoidal.ε e.functor) h
                                                    theorem CategoryTheory.Equivalence.counitIso_inv_app_tensor_comp_functor_map_δ_inverse {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (X Y : C) :
                                                    CategoryStruct.comp (e.counitIso.inv.app (MonoidalCategoryStruct.tensorObj (e.functor.obj X) (e.functor.obj Y))) (e.functor.map (Functor.OplaxMonoidal.δ e.inverse (e.functor.obj X) (e.functor.obj Y))) = CategoryStruct.comp (Functor.LaxMonoidal.μ e.functor X Y) (e.functor.map (MonoidalCategoryStruct.tensorHom (e.unitIso.hom.app X) (e.unitIso.hom.app Y)))
                                                    theorem CategoryTheory.Equivalence.counitIso_inv_app_tensor_comp_functor_map_δ_inverse_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (X Y : C) {Z : D} (h : e.functor.obj (MonoidalCategoryStruct.tensorObj (e.inverse.obj (e.functor.obj X)) (e.inverse.obj (e.functor.obj Y))) Z) :
                                                    CategoryStruct.comp (e.counitIso.inv.app (MonoidalCategoryStruct.tensorObj (e.functor.obj X) (e.functor.obj Y))) (CategoryStruct.comp (e.functor.map (Functor.OplaxMonoidal.δ e.inverse (e.functor.obj X) (e.functor.obj Y))) h) = CategoryStruct.comp (Functor.LaxMonoidal.μ e.functor X Y) (CategoryStruct.comp (e.functor.map (MonoidalCategoryStruct.tensorHom (e.unitIso.hom.app X) (e.unitIso.hom.app Y))) h)

                                                    The obvious auto-equivalence of a monoidal category is monoidal.

                                                    instance CategoryTheory.Equivalence.isMonoidal_symm {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] :
                                                    e.symm.IsMonoidal

                                                    The inverse of a monoidal category equivalence is also a monoidal category equivalence.

                                                    instance CategoryTheory.Equivalence.instMonoidalFunctorTrans {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (e : C D) [e.functor.Monoidal] (e' : D E) [e'.functor.Monoidal] :
                                                    (e.trans e').functor.Monoidal
                                                    Equations
                                                    • e.instMonoidalFunctorTrans e' = inferInstanceAs (e.functor.comp e'.functor).Monoidal
                                                    instance CategoryTheory.Equivalence.instMonoidalInverseTrans {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (e : C D) [e.inverse.Monoidal] (e' : D E) [e'.inverse.Monoidal] :
                                                    (e.trans e').inverse.Monoidal
                                                    Equations
                                                    • e.instMonoidalInverseTrans e' = inferInstanceAs (e'.inverse.comp e.inverse).Monoidal
                                                    instance CategoryTheory.Equivalence.isMonoidal_trans {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {E : Type u₃} [Category.{v₃, u₃} E] [MonoidalCategory E] (e : C D) [e.functor.Monoidal] [e.inverse.Monoidal] [e.IsMonoidal] (e' : D E) [e'.functor.Monoidal] [e'.inverse.Monoidal] [e'.IsMonoidal] :
                                                    (e.trans e').IsMonoidal

                                                    The composition of two monoidal category equivalences is monoidal.

                                                    structure CategoryTheory.LaxMonoidalFunctor (C : Type u₁) [Category.{v₁, u₁} C] [MonoidalCategory C] (D : Type u₂) [Category.{v₂, u₂} D] [MonoidalCategory D] extends CategoryTheory.Functor C D :
                                                    Type (max (max (max u₁ u₂) v₁) v₂)

                                                    Bundled version of lax monoidal functors. This type is equipped with a category structure in CategoryTheory.Monoidal.NaturalTransformation.

                                                    Instances For

                                                      Constructor for LaxMonoidalFunctor C D.

                                                      Equations
                                                      Instances For
                                                        @[simp]
                                                        theorem CategoryTheory.LaxMonoidalFunctor.of_toFunctor {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) [F.LaxMonoidal] :
                                                        (of F).toFunctor = F