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.lean 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
    theorem CategoryTheory.Functor.LaxMonoidal.ext_iff {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} {x y : F.LaxMonoidal} :
    x = y ε F = ε F μ F = μ F
    theorem CategoryTheory.Functor.LaxMonoidal.ext {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} {x y : F.LaxMonoidal} (ε : ε F = ε F) (μ : μ F = μ F) :
    x = y
    @[simp]
    theorem CategoryTheory.Functor.LaxMonoidal.μ_natural_right_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.LaxMonoidal] {X Y : C} (X' : C) (f : X Y) {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj X' Y) Z) :
    @[simp]
    theorem CategoryTheory.Functor.LaxMonoidal.μ_natural_left_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.LaxMonoidal] {X Y : C} (f : X Y) (X' : C) {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj Y X') Z) :
    @[implicit_reducible]
    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} (ε : MonoidalCategoryStruct.tensorUnit D F.obj (MonoidalCategoryStruct.tensorUnit 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 cat_disch) (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 cat_disch) (left_unitality : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom ε (CategoryStruct.id (F.obj X))) (CategoryStruct.comp (μ (MonoidalCategoryStruct.tensorUnit C) X) (F.map (MonoidalCategoryStruct.leftUnitor X).hom)) := by cat_disch) (right_unitality : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (CategoryStruct.id (F.obj X)) ε) (CategoryStruct.comp (μ X (MonoidalCategoryStruct.tensorUnit C)) (F.map (MonoidalCategoryStruct.rightUnitor X).hom)) := by cat_disch) :

    A constructor for lax monoidal functors whose axioms are described by tensorHom instead of whiskerLeft and whiskerRight.

    Instances For
      @[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
        theorem CategoryTheory.Functor.OplaxMonoidal.ext {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} {x y : F.OplaxMonoidal} (η : η F = η F) (δ : δ F = δ F) :
        x = y
        theorem CategoryTheory.Functor.OplaxMonoidal.ext_iff {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} {x y : F.OplaxMonoidal} :
        x = y η F = η F δ F = δ F
        @[simp]
        theorem CategoryTheory.Functor.OplaxMonoidal.δ_natural_right_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.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_left_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.OplaxMonoidal] {X Y : C} (f : X Y) (X' : C) {Z : D} (h : MonoidalCategoryStruct.tensorObj (F.obj Y) (F.obj X') Z) :

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

        Instances
          theorem CategoryTheory.Functor.Monoidal.ext {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} {x y : F.Monoidal} (ε : LaxMonoidal.ε F = LaxMonoidal.ε F) (μ : LaxMonoidal.μ F = LaxMonoidal.μ F) (η : OplaxMonoidal.η F = OplaxMonoidal.η F) (δ : OplaxMonoidal.δ F = OplaxMonoidal.δ F) :
          x = y
          @[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) :
          @[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) :

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

          Instances For

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

            Instances For

              Monoidal functors commute with left tensoring up to isomorphism

              Instances For

                Monoidal functors commute with right tensoring up to isomorphism

                Instances For
                  theorem CategoryTheory.Functor.Monoidal.toLaxMonoidal_injective {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) :
                  Function.Injective (@toLaxMonoidal C inst✝ inst✝¹ D inst✝² inst✝³ F)
                  theorem CategoryTheory.Functor.Monoidal.toOplaxMonoidal_injective {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] (F : Functor C D) :
                  Function.Injective (@toOplaxMonoidal C inst✝ inst✝¹ D inst✝² inst✝³ F)

                  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
                    def CategoryTheory.Functor.CoreMonoidal.mk' {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (εIso : MonoidalCategoryStruct.tensorUnit D F.obj (MonoidalCategoryStruct.tensorUnit C)) (μIso : (X Y : C) → MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) F.obj (MonoidalCategoryStruct.tensorObj X Y)) (μIso_inv_natural_left : ∀ {X Y : C} (f : X Y) (X' : C), CategoryStruct.comp (μIso X X').inv (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerRight f X')) (μIso Y X').inv := by cat_disch) (μIso_inv_natural_right : ∀ {X Y : C} (X' : C) (f : X Y), CategoryStruct.comp (μIso X' X).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerLeft X' f)) (μIso X' Y).inv := by cat_disch) (oplax_associativity : ∀ (X Y Z : C), CategoryStruct.comp (μIso (MonoidalCategoryStruct.tensorObj X Y) Z).inv (CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (μIso X Y).inv (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 (μIso X (MonoidalCategoryStruct.tensorObj Y Z)).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X) (μIso Y Z).inv)) := by cat_disch) (oplax_left_unitality : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.leftUnitor X).inv) (CategoryStruct.comp (μIso (MonoidalCategoryStruct.tensorUnit C) X).inv (MonoidalCategoryStruct.whiskerRight εIso.inv (F.obj X))) := by cat_disch) (oplax_right_unitality : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.rightUnitor X).inv) (CategoryStruct.comp (μIso X (MonoidalCategoryStruct.tensorUnit C)).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X) εIso.inv)) := by cat_disch) :

                    Alternative constructor for CoreMonoidal, for which the axioms are stated in terms on the inverses of εIso and μIso.

                    Instances For
                      @[simp]
                      theorem CategoryTheory.Functor.CoreMonoidal.mk'_μIso {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (εIso : MonoidalCategoryStruct.tensorUnit D F.obj (MonoidalCategoryStruct.tensorUnit C)) (μIso : (X Y : C) → MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) F.obj (MonoidalCategoryStruct.tensorObj X Y)) (μIso_inv_natural_left : ∀ {X Y : C} (f : X Y) (X' : C), CategoryStruct.comp (μIso X X').inv (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerRight f X')) (μIso Y X').inv := by cat_disch) (μIso_inv_natural_right : ∀ {X Y : C} (X' : C) (f : X Y), CategoryStruct.comp (μIso X' X).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerLeft X' f)) (μIso X' Y).inv := by cat_disch) (oplax_associativity : ∀ (X Y Z : C), CategoryStruct.comp (μIso (MonoidalCategoryStruct.tensorObj X Y) Z).inv (CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (μIso X Y).inv (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 (μIso X (MonoidalCategoryStruct.tensorObj Y Z)).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X) (μIso Y Z).inv)) := by cat_disch) (oplax_left_unitality : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.leftUnitor X).inv) (CategoryStruct.comp (μIso (MonoidalCategoryStruct.tensorUnit C) X).inv (MonoidalCategoryStruct.whiskerRight εIso.inv (F.obj X))) := by cat_disch) (oplax_right_unitality : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.rightUnitor X).inv) (CategoryStruct.comp (μIso X (MonoidalCategoryStruct.tensorUnit C)).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X) εIso.inv)) := by cat_disch) (X Y : C) :
                      (mk' εIso μIso μIso_inv_natural_left μIso_inv_natural_right oplax_associativity oplax_left_unitality oplax_right_unitality).μIso X Y = μIso X Y
                      @[simp]
                      theorem CategoryTheory.Functor.CoreMonoidal.mk'_εIso {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] {F : Functor C D} (εIso : MonoidalCategoryStruct.tensorUnit D F.obj (MonoidalCategoryStruct.tensorUnit C)) (μIso : (X Y : C) → MonoidalCategoryStruct.tensorObj (F.obj X) (F.obj Y) F.obj (MonoidalCategoryStruct.tensorObj X Y)) (μIso_inv_natural_left : ∀ {X Y : C} (f : X Y) (X' : C), CategoryStruct.comp (μIso X X').inv (MonoidalCategoryStruct.whiskerRight (F.map f) (F.obj X')) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerRight f X')) (μIso Y X').inv := by cat_disch) (μIso_inv_natural_right : ∀ {X Y : C} (X' : C) (f : X Y), CategoryStruct.comp (μIso X' X).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X') (F.map f)) = CategoryStruct.comp (F.map (MonoidalCategoryStruct.whiskerLeft X' f)) (μIso X' Y).inv := by cat_disch) (oplax_associativity : ∀ (X Y Z : C), CategoryStruct.comp (μIso (MonoidalCategoryStruct.tensorObj X Y) Z).inv (CategoryStruct.comp (MonoidalCategoryStruct.whiskerRight (μIso X Y).inv (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 (μIso X (MonoidalCategoryStruct.tensorObj Y Z)).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X) (μIso Y Z).inv)) := by cat_disch) (oplax_left_unitality : ∀ (X : C), (MonoidalCategoryStruct.leftUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.leftUnitor X).inv) (CategoryStruct.comp (μIso (MonoidalCategoryStruct.tensorUnit C) X).inv (MonoidalCategoryStruct.whiskerRight εIso.inv (F.obj X))) := by cat_disch) (oplax_right_unitality : ∀ (X : C), (MonoidalCategoryStruct.rightUnitor (F.obj X)).inv = CategoryStruct.comp (F.map (MonoidalCategoryStruct.rightUnitor X).inv) (CategoryStruct.comp (μIso X (MonoidalCategoryStruct.tensorUnit C)).inv (MonoidalCategoryStruct.whiskerLeft (F.obj X) εIso.inv)) := by cat_disch) :
                      (mk' εIso μIso μIso_inv_natural_left μIso_inv_natural_right oplax_associativity oplax_left_unitality oplax_right_unitality).εIso = εIso
                      @[implicit_reducible]

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

                      Instances For
                        @[implicit_reducible]

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

                        Instances For
                          @[implicit_reducible]

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

                          Instances For

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

                            Instances For

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

                              Instances For
                                @[implicit_reducible]

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

                                Instances For
                                  @[implicit_reducible]

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

                                  Instances For
                                    @[implicit_reducible]

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

                                    @[implicit_reducible]

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

                                    @[implicit_reducible]

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

                                    @[implicit_reducible]

                                    The right adjoint of an oplax monoidal functor is lax monoidal.

                                    Instances For

                                      When adj : F ⊣ G is an adjunction, with F oplax monoidal and G lax-monoidal, this typeclass expresses compatibilities between the adjunction and the (op)lax monoidal structures.

                                      Instances
                                        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
                                        @[implicit_reducible]

                                        The left adjoint of a lax monoidal functor is oplax monoidal.

                                        Instances For

                                          If F ⊣ G is an adjunction, the G is lax monoidal iff F is oplax monoidal. It is advisable to use Adjunction.leftAdjointOplaxMonoidal and Adjunction.rightAdjointLaxMonoidal, because compatibilities between the oplax monoidal left adjoint and the lax monoidal right adjoint (Adjunction.IsMonoidal) have been stated for these definitions.

                                          Instances For
                                            @[implicit_reducible]

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

                                            Instances For
                                              @[reducible, inline]

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

                                              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.

                                                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
                                                  @[implicit_reducible]

                                                  Transport the structure of a monoidal functor along a natural isomorphism of functors.

                                                  Instances For
                                                    @[implicit_reducible]

                                                    Given a functor F and an equivalence of categories e such that e.inverse and e.functor ⋙ F are monoidal functors, F is monoidal as well.

                                                    Instances For
                                                      @[implicit_reducible]

                                                      Given a functor F and an equivalence of categories e such that e.functor and e.inverse ⋙ F are monoidal functors, F is monoidal as well.

                                                      Instances For
                                                        @[implicit_reducible]

                                                        Given a functor F and an equivalence of categories e such that e.functor and F ⋙ e.inverse are monoidal functors, F is monoidal as well.

                                                        Instances For
                                                          @[implicit_reducible]

                                                          Given a functor F and an equivalence of categories e such that e.inverse and F ⋙ e.functor are monoidal functors, F is monoidal as well.

                                                          Instances For