Documentation

Mathlib.CategoryTheory.Monoidal.Category

Monoidal categories #

A monoidal category is a category equipped with a tensor product, unitors, and an associator. In the definition, we provide the tensor product as a pair of functions

The tensor product can be expressed as a functor via tensor : C × C ⥤ C. The unitors and associator are gathered together as natural isomorphisms in leftUnitor_nat_iso, rightUnitor_nat_iso and associator_nat_iso.

Some consequences of the definition are proved in other files after proving the coherence theorem, e.g. (λ_ (𝟙_ C)).hom = (ρ_ (𝟙_ C)).hom in CategoryTheory.Monoidal.CoherenceLemmas.

Implementation notes #

In the definition of monoidal categories, we also provide the whiskering operators:

If you want to provide tensorHom and define whiskerLeft and whiskerRight in terms of it, you can use the alternative constructor CategoryTheory.MonoidalCategory.ofTensorHom.

The whiskerings are useful when considering simp-normal forms of morphisms in monoidal categories.

Simp-normal form for morphisms #

Rewriting involving associators and unitors could be very complicated. We try to ease this complexity by putting carefully chosen simp lemmas that rewrite any morphisms into the simp-normal form defined below. Rewriting into simp-normal form is especially useful in preprocessing performed by the coherence tactic.

The simp-normal form of morphisms is defined to be an expression that has the minimal number of parentheses. More precisely,

  1. it is a composition of morphisms like f₁ ≫ f₂ ≫ f₃ ≫ f₄ ≫ f₅ such that each fᵢ is either a structural morphisms (morphisms made up only of identities, associators, unitors) or non-structural morphisms, and
  2. each non-structural morphism in the composition is of the form X₁ ◁ X₂ ◁ X₃ ◁ f ▷ X₄ ▷ X₅, where each Xᵢ is a object that is not the identity or a tensor and f is a non-structural morphisms that is not the identity or a composite.

Note that X₁ ◁ X₂ ◁ X₃ ◁ f ▷ X₄ ▷ X₅ is actually X₁ ◁ (X₂ ◁ (X₃ ◁ ((f ▷ X₄) ▷ X₅))).

Currently, the simp lemmas don't rewrite 𝟙 X ⊗ f and f ⊗ 𝟙 Y into X ◁ f and f ▷ Y, respectively, since it requires a huge refactoring. We hope to add these simp lemmas soon.

References #

Auxiliary structure to carry only the data fields of (and provide notation for) MonoidalCategory.

  • tensorObj : CCC

    curried tensor product of objects

  • whiskerLeft (X : C) {Y₁ Y₂ : C} (f : Y₁ Y₂) : tensorObj X Y₁ tensorObj X Y₂

    left whiskering for morphisms

  • whiskerRight {X₁ X₂ : C} (f : X₁ X₂) (Y : C) : tensorObj X₁ Y tensorObj X₂ Y

    right whiskering for morphisms

  • tensorHom {X₁ Y₁ X₂ Y₂ : C} (f : X₁ Y₁) (g : X₂ Y₂) : tensorObj X₁ X₂ tensorObj Y₁ Y₂

    Tensor product of identity maps is the identity: (𝟙 X₁ ⊗ 𝟙 X₂) = 𝟙 (X₁ ⊗ X₂)

  • tensorUnit : C

    The tensor unity in the monoidal structure 𝟙_ C

  • associator (X Y Z : C) : tensorObj (tensorObj X Y) Z tensorObj X (tensorObj Y Z)

    The associator isomorphism (X ⊗ Y) ⊗ Z ≃ X ⊗ (Y ⊗ Z)

  • leftUnitor (X : C) : tensorObj (𝟙_ C) X X

    The left unitor: 𝟙_ C ⊗ X ≃ X

  • rightUnitor (X : C) : tensorObj X (𝟙_ C) X

    The right unitor: X ⊗ 𝟙_ C ≃ X

Instances

    Notation for tensorObj, the tensor product of objects in a monoidal category

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Notation for the whiskerLeft operator of monoidal categories

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Notation for the whiskerRight operator of monoidal categories

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Notation for tensorHom, the tensor product of morphisms in a monoidal category

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            Notation for tensorUnit, the two-sided identity of

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              Used to ensure that 𝟙_ notation is used, as the ascription makes this not automatic.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                Notation for the monoidal associator: (X ⊗ Y) ⊗ Z ≃ X ⊗ (Y ⊗ Z)

                Equations
                Instances For

                  Notation for the leftUnitor: 𝟙_C ⊗ X ≃ X

                  Equations
                  Instances For

                    Notation for the rightUnitor: X ⊗ 𝟙_C ≃ X

                    Equations
                    Instances For

                      In a monoidal category, we can take the tensor product of objects, X ⊗ Y and of morphisms f ⊗ g. Tensor product does not need to be strictly associative on objects, but there is a specified associator, α_ X Y Z : (X ⊗ Y) ⊗ Z ≅ X ⊗ (Y ⊗ Z). There is a tensor unit 𝟙_ C, with specified left and right unitor isomorphisms λ_ X : 𝟙_ C ⊗ X ≅ X and ρ_ X : X ⊗ 𝟙_ C ≅ X. These associators and unitors satisfy the pentagon and triangle equations.

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

                      Instances
                        theorem CategoryTheory.MonoidalCategory.tensorHom_def_assoc {C : Type u} {𝒞 : Category.{v, u} C} [self : MonoidalCategory C] {X₁ Y₁ X₂ Y₂ : C} (f : X₁ Y₁) (g : X₂ Y₂) {Z : C} (h : tensorObj Y₁ Y₂ Z) :
                        theorem CategoryTheory.MonoidalCategory.tensor_comp_assoc {C : Type u} {𝒞 : Category.{v, u} C} [self : MonoidalCategory C] {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (g₁ : Y₁ Z₁) (g₂ : Y₂ Z₂) {Z : C} (h : tensorObj Z₁ Z₂ Z) :
                        theorem CategoryTheory.MonoidalCategory.associator_naturality_assoc {C : Type u} {𝒞 : Category.{v, u} C} [self : MonoidalCategory C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃) {Z : C} (h : tensorObj Y₁ (tensorObj Y₂ Y₃) Z) :
                        CategoryStruct.comp (tensorHom (tensorHom f₁ f₂) f₃) (CategoryStruct.comp (associator Y₁ Y₂ Y₃).hom h) = CategoryStruct.comp (associator X₁ X₂ X₃).hom (CategoryStruct.comp (tensorHom f₁ (tensorHom f₂ f₃)) h)
                        @[simp]
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.id_tensorHom {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y₁ Y₂ : C} (f : Y₁ Y₂) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.tensorHom_id {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X₁ X₂ : C} (f : X₁ X₂) (Y : C) :
                        @[simp]
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.whisker_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Y' : C} (f : Y Y') (Z : C) :
                        theorem CategoryTheory.MonoidalCategory.tensorHom_def' {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X₁ Y₁ X₂ Y₂ : C} (f : X₁ Y₁) (g : X₂ Y₂) :
                        theorem CategoryTheory.MonoidalCategory.tensorHom_def'_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X₁ Y₁ X₂ Y₂ : C} (f : X₁ Y₁) (g : X₂ Y₂) {Z : C} (h : tensorObj Y₁ Y₂ Z) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.whiskerLeft_hom_inv_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) {Z✝ : C} (h : tensorObj X Y Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.hom_inv_whiskerRight_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) {Z✝ : C} (h : tensorObj X Z Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.whiskerLeft_inv_hom_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) {Z✝ : C} (h : tensorObj X Z Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.inv_hom_whiskerRight_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) {Z✝ : C} (h : tensorObj Y Z Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.whiskerLeft_hom_inv'_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) [IsIso f] {Z✝ : C} (h : tensorObj X Y Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.hom_inv_whiskerRight'_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) [IsIso f] (Z : C) {Z✝ : C} (h : tensorObj X Z Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.whiskerLeft_inv_hom'_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) [IsIso f] {Z✝ : C} (h : tensorObj X Z Z✝) :
                        @[simp]
                        theorem CategoryTheory.MonoidalCategory.inv_hom_whiskerRight'_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) [IsIso f] (Z : C) {Z✝ : C} (h : tensorObj Y Z Z✝) :
                        def CategoryTheory.MonoidalCategory.whiskerLeftIso {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) :

                        The left whiskering of an isomorphism is an isomorphism.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[simp]
                          theorem CategoryTheory.MonoidalCategory.whiskerLeftIso_inv {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) :
                          (whiskerLeftIso X f).inv = whiskerLeft X f.inv
                          @[simp]
                          theorem CategoryTheory.MonoidalCategory.whiskerLeftIso_hom {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) :
                          (whiskerLeftIso X f).hom = whiskerLeft X f.hom
                          instance CategoryTheory.MonoidalCategory.whiskerLeft_isIso {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) [IsIso f] :
                          @[simp]
                          theorem CategoryTheory.MonoidalCategory.inv_whiskerLeft {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y Z) [IsIso f] :
                          @[simp]
                          theorem CategoryTheory.MonoidalCategory.whiskerLeftIso_trans {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (W : C) {X Y Z : C} (f : X Y) (g : Y Z) :
                          @[simp]
                          theorem CategoryTheory.MonoidalCategory.whiskerLeftIso_symm {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (W : C) {X Y : C} (f : X Y) :
                          (whiskerLeftIso W f).symm = whiskerLeftIso W f.symm
                          def CategoryTheory.MonoidalCategory.whiskerRightIso {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) :

                          The right whiskering of an isomorphism is an isomorphism.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            @[simp]
                            theorem CategoryTheory.MonoidalCategory.whiskerRightIso_hom {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) :
                            (whiskerRightIso f Z).hom = whiskerRight f.hom Z
                            @[simp]
                            theorem CategoryTheory.MonoidalCategory.whiskerRightIso_inv {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) :
                            (whiskerRightIso f Z).inv = whiskerRight f.inv Z
                            instance CategoryTheory.MonoidalCategory.whiskerRight_isIso {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) [IsIso f] :
                            @[simp]
                            theorem CategoryTheory.MonoidalCategory.inv_whiskerRight {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (Z : C) [IsIso f] :
                            @[simp]
                            @[simp]
                            theorem CategoryTheory.MonoidalCategory.whiskerRightIso_symm {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X Y) (W : C) :
                            (whiskerRightIso f W).symm = whiskerRightIso f.symm W
                            def CategoryTheory.MonoidalCategory.tensorIso {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y X' Y' : C} (f : X Y) (g : X' Y') :

                            The tensor product of two isomorphisms is an isomorphism.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              @[simp]
                              theorem CategoryTheory.MonoidalCategory.tensorIso_hom {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y X' Y' : C} (f : X Y) (g : X' Y') :
                              (tensorIso f g).hom = tensorHom f.hom g.hom
                              @[simp]
                              theorem CategoryTheory.MonoidalCategory.tensorIso_inv {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y X' Y' : C} (f : X Y) (g : X' Y') :
                              (tensorIso f g).inv = tensorHom f.inv g.inv

                              Notation for tensorIso, the tensor product of isomorphisms

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                theorem CategoryTheory.MonoidalCategory.tensorIso_def {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y X' Y' : C} (f : X Y) (g : X' Y') :
                                theorem CategoryTheory.MonoidalCategory.tensorIso_def' {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y X' Y' : C} (f : X Y) (g : X' Y') :
                                instance CategoryTheory.MonoidalCategory.tensor_isIso {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {W X Y Z : C} (f : W X) [IsIso f] (g : Y Z) [IsIso g] :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.inv_tensor {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {W X Y Z : C} (f : W X) [IsIso f] (g : Y Z) [IsIso g] :
                                inv (tensorHom f g) = tensorHom (inv f) (inv g)
                                theorem CategoryTheory.MonoidalCategory.whiskerLeft_dite {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {P : Prop} [Decidable P] (X : C) {Y Z : C} (f : P(Y Z)) (f' : ¬P(Y Z)) :
                                whiskerLeft X (if h : P then f h else f' h) = if h : P then whiskerLeft X (f h) else whiskerLeft X (f' h)
                                theorem CategoryTheory.MonoidalCategory.dite_whiskerRight {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {P : Prop} [Decidable P] {X Y : C} (f : P(X Y)) (f' : ¬P(X Y)) (Z : C) :
                                whiskerRight (if h : P then f h else f' h) Z = if h : P then whiskerRight (f h) Z else whiskerRight (f' h) Z
                                theorem CategoryTheory.MonoidalCategory.tensor_dite {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {P : Prop} [Decidable P] {W X Y Z : C} (f : W X) (g : P(Y Z)) (g' : ¬P(Y Z)) :
                                tensorHom f (if h : P then g h else g' h) = if h : P then tensorHom f (g h) else tensorHom f (g' h)
                                theorem CategoryTheory.MonoidalCategory.dite_tensor {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {P : Prop} [Decidable P] {W X Y Z : C} (f : W X) (g : P(Y Z)) (g' : ¬P(Y Z)) :
                                tensorHom (if h : P then g h else g' h) f = if h : P then tensorHom (g h) f else tensorHom (g' h) f
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.whiskerLeft_eqToHom {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {Y Z : C} (f : Y = Z) :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.eqToHom_whiskerRight {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f : X = Y) (Z : C) :
                                theorem CategoryTheory.MonoidalCategory.whiskerLeft_iff {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f g : X Y) :
                                whiskerLeft (𝟙_ C) f = whiskerLeft (𝟙_ C) g f = g
                                theorem CategoryTheory.MonoidalCategory.whiskerRight_iff {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C} (f g : X Y) :
                                whiskerRight f (𝟙_ C) = whiskerRight g (𝟙_ C) f = g

                                The lemmas in the next section are true by coherence, but we prove them directly as they are used in proving the coherence theorem.

                                @[simp]

                                We state it as a simp lemma, which is regarded as an involved version of id_whiskerRight X Y : 𝟙 X ▷ Y = 𝟙 (X ⊗ Y).

                                theorem CategoryTheory.MonoidalCategory.associator_inv_naturality {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y Z X' Y' Z' : C} (f : X X') (g : Y Y') (h : Z Z') :
                                theorem CategoryTheory.MonoidalCategory.associator_inv_naturality_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y Z X' Y' Z' : C} (f : X X') (g : Y Y') (h : Z Z') {Z✝ : C} (h✝ : tensorObj (tensorObj X' Y') Z' Z✝) :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.associator_conjugation {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X X' Y Y' Z Z' : C} (f : X X') (g : Y Y') (h : Z Z') :
                                theorem CategoryTheory.MonoidalCategory.associator_conjugation_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X X' Y Y' Z Z' : C} (f : X X') (g : Y Y') (h : Z Z') {Z✝ : C} (h✝ : tensorObj (tensorObj X' Y') Z' Z✝) :
                                theorem CategoryTheory.MonoidalCategory.associator_inv_conjugation {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X X' Y Y' Z Z' : C} (f : X X') (g : Y Y') (h : Z Z') :
                                theorem CategoryTheory.MonoidalCategory.associator_inv_conjugation_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X X' Y Y' Z Z' : C} (f : X X') (g : Y Y') (h : Z Z') {Z✝ : C} (h✝ : tensorObj X' (tensorObj Y' Z') Z✝) :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.hom_inv_id_tensor_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {V W X Y Z : C} (f : V W) (g : X Y) (h : Y Z) {Z✝ : C} (h✝ : tensorObj V Z Z✝) :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.inv_hom_id_tensor_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {V W X Y Z : C} (f : V W) (g : X Y) (h : Y Z) {Z✝ : C} (h✝ : tensorObj W Z Z✝) :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.tensor_hom_inv_id_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {V W X Y Z : C} (f : V W) (g : X Y) (h : Y Z) {Z✝ : C} (h✝ : tensorObj Z V Z✝) :
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.tensor_inv_hom_id_assoc {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] {V W X Y Z : C} (f : V W) (g : X Y) (h : Y Z) {Z✝ : C} (h✝ : tensorObj Z W Z✝) :
                                @[simp]
                                @[simp]
                                @[simp]
                                @[simp]
                                @[reducible, inline]
                                abbrev CategoryTheory.MonoidalCategory.ofTensorHom {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategoryStruct C] (tensor_id : ∀ (X₁ X₂ : C), tensorHom (CategoryStruct.id X₁) (CategoryStruct.id X₂) = CategoryStruct.id (tensorObj X₁ X₂) := by aesop_cat) (id_tensorHom : ∀ (X : C) {Y₁ Y₂ : C} (f : Y₁ Y₂), tensorHom (CategoryStruct.id X) f = whiskerLeft X f := by aesop_cat) (tensorHom_id : ∀ {X₁ X₂ : C} (f : X₁ X₂) (Y : C), tensorHom f (CategoryStruct.id Y) = whiskerRight f Y := by aesop_cat) (tensor_comp : ∀ {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (g₁ : Y₁ Z₁) (g₂ : Y₂ Z₂), tensorHom (CategoryStruct.comp f₁ g₁) (CategoryStruct.comp f₂ g₂) = CategoryStruct.comp (tensorHom f₁ f₂) (tensorHom g₁ g₂) := by aesop_cat) (associator_naturality : ∀ {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃), CategoryStruct.comp (tensorHom (tensorHom f₁ f₂) f₃) (associator Y₁ Y₂ Y₃).hom = CategoryStruct.comp (associator X₁ X₂ X₃).hom (tensorHom f₁ (tensorHom f₂ f₃)) := by aesop_cat) (leftUnitor_naturality : ∀ {X Y : C} (f : X Y), CategoryStruct.comp (tensorHom (CategoryStruct.id (𝟙_ C)) f) (leftUnitor Y).hom = CategoryStruct.comp (leftUnitor X).hom f := by aesop_cat) (rightUnitor_naturality : ∀ {X Y : C} (f : X Y), CategoryStruct.comp (tensorHom f (CategoryStruct.id (𝟙_ C))) (rightUnitor Y).hom = CategoryStruct.comp (rightUnitor X).hom f := by aesop_cat) (pentagon : ∀ (W X Y Z : C), CategoryStruct.comp (tensorHom (associator W X Y).hom (CategoryStruct.id Z)) (CategoryStruct.comp (associator W (tensorObj X Y) Z).hom (tensorHom (CategoryStruct.id W) (associator X Y Z).hom)) = CategoryStruct.comp (associator (tensorObj W X) Y Z).hom (associator W X (tensorObj Y Z)).hom := by aesop_cat) (triangle : ∀ (X Y : C), CategoryStruct.comp (associator X (𝟙_ C) Y).hom (tensorHom (CategoryStruct.id X) (leftUnitor Y).hom) = tensorHom (rightUnitor X).hom (CategoryStruct.id Y) := by aesop_cat) :

                                A constructor for monoidal categories that requires tensorHom instead of whiskerLeft and whiskerRight.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For

                                  The tensor product expressed as a functor.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.MonoidalCategory.tensor_obj (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C × C) :
                                    (tensor C).obj X = tensorObj X.1 X.2
                                    @[simp]
                                    theorem CategoryTheory.MonoidalCategory.tensor_map (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C × C} (f : X Y) :
                                    (tensor C).map f = tensorHom f.1 f.2

                                    The left-associated triple tensor product as a functor.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For
                                      @[simp]
                                      @[simp]
                                      theorem CategoryTheory.MonoidalCategory.leftAssocTensor_map (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C × C × C} (f : X Y) :
                                      (leftAssocTensor C).map f = tensorHom (tensorHom f.1 f.2.1) f.2.2

                                      The right-associated triple tensor product as a functor.

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        @[simp]
                                        @[simp]
                                        theorem CategoryTheory.MonoidalCategory.rightAssocTensor_map (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X Y : C × C × C} (f : X Y) :
                                        (rightAssocTensor C).map f = tensorHom f.1 (tensorHom f.2.1 f.2.2)

                                        The tensor product bifunctor C ⥤ C ⥤ C of a monoidal category.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.MonoidalCategory.curriedTensor_map_app (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] {X✝ Y✝ : C} (f : X✝ Y✝) (Y : C) :
                                          ((curriedTensor C).map f).app Y = whiskerRight f Y
                                          @[simp]
                                          theorem CategoryTheory.MonoidalCategory.curriedTensor_obj_map (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {X✝ Y✝ : C} (g : X✝ Y✝) :
                                          ((curriedTensor C).obj X).map g = whiskerLeft X g
                                          @[simp]

                                          Tensoring on the left with a fixed object, as a functor.

                                          Equations
                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.MonoidalCategory.tensorLeft_map {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {X✝ Y✝ : C} (g : X✝ Y✝) :
                                            (tensorLeft X).map g = whiskerLeft X g

                                            Tensoring on the right with a fixed object, as a functor.

                                            Equations
                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.MonoidalCategory.tensorRight_map {C : Type u} [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C) {X✝ Y✝ : C} (f : X✝ Y✝) :
                                              (tensorRight X).map f = whiskerRight f X
                                              @[reducible, inline]

                                              The functor fun X ↦ 𝟙_ C ⊗ X.

                                              Equations
                                              Instances For
                                                @[reducible, inline]

                                                The functor fun X ↦ X ⊗ 𝟙_ C.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  theorem CategoryTheory.MonoidalCategory.associatorNatIso_hom_app (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C × C × C) :
                                                  (associatorNatIso C).hom.app X = (associator X.1 X.2.1 X.2.2).hom
                                                  @[simp]
                                                  theorem CategoryTheory.MonoidalCategory.associatorNatIso_inv_app (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X : C × C × C) :
                                                  (associatorNatIso C).inv.app X = (associator X.1 X.2.1 X.2.2).inv

                                                  The associator as a natural isomorphism between trifunctors C ⥤ C ⥤ C ⥤ C.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    @[simp]
                                                    theorem CategoryTheory.MonoidalCategory.curriedAssociatorNatIso_inv_app_app_app (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X X✝ X✝ : C) :
                                                    (((curriedAssociatorNatIso C).inv.app X).app X✝).app X✝ = (associator X X✝ X✝).inv
                                                    @[simp]
                                                    theorem CategoryTheory.MonoidalCategory.curriedAssociatorNatIso_hom_app_app_app (C : Type u) [𝒞 : Category.{v, u} C] [MonoidalCategory C] (X X✝ X✝ : C) :
                                                    (((curriedAssociatorNatIso C).hom.app X).app X✝).app X✝ = (associator X X✝ X✝).hom

                                                    Tensoring on the left with X ⊗ Y is naturally isomorphic to tensoring on the left with Y, and then again with X.

                                                    Equations
                                                    Instances For
                                                      @[simp]
                                                      @[simp]
                                                      @[reducible, inline]

                                                      Tensoring on the left, as a functor from C into endofunctors of C.

                                                      TODO: show this is an op-monoidal functor.

                                                      Equations
                                                      Instances For
                                                        @[reducible, inline]

                                                        Tensoring on the right, as a functor from C into endofunctors of C.

                                                        We later show this is a monoidal functor.

                                                        Equations
                                                        Instances For

                                                          Tensoring on the right with X ⊗ Y is naturally isomorphic to tensoring on the right with X, and then again with Y.

                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            theorem CategoryTheory.MonoidalCategory.prodMonoidal_tensorHom (C₁ : Type u₁) [Category.{v₁, u₁} C₁] [MonoidalCategory C₁] (C₂ : Type u₂) [Category.{v₂, u₂} C₂] [MonoidalCategory C₂] {X₁✝ Y₁✝ X₂✝ Y₂✝ : C₁ × C₂} (f : X₁✝ Y₁✝) (g : X₂✝ Y₂✝) :
                                                            tensorHom f g = (tensorHom f.1 g.1, tensorHom f.2 g.2)
                                                            @[simp]
                                                            theorem CategoryTheory.MonoidalCategory.prodMonoidal_whiskerLeft (C₁ : Type u₁) [Category.{v₁, u₁} C₁] [MonoidalCategory C₁] (C₂ : Type u₂) [Category.{v₂, u₂} C₂] [MonoidalCategory C₂] (X x✝ x✝¹ : C₁ × C₂) (f : x✝ x✝¹) :
                                                            whiskerLeft X f = (whiskerLeft X.1 f.1, whiskerLeft X.2 f.2)
                                                            @[simp]
                                                            theorem CategoryTheory.MonoidalCategory.prodMonoidal_whiskerRight (C₁ : Type u₁) [Category.{v₁, u₁} C₁] [MonoidalCategory C₁] (C₂ : Type u₂) [Category.{v₂, u₂} C₂] [MonoidalCategory C₂] {X₁✝ X₂✝ : C₁ × C₂} (f : X₁✝ X₂✝) (X : C₁ × C₂) :
                                                            whiskerRight f X = (whiskerRight f.1 X.1, whiskerRight f.2 X.2)
                                                            @[simp]
                                                            theorem CategoryTheory.MonoidalCategory.prodMonoidal_tensorUnit (C₁ : Type u₁) [Category.{v₁, u₁} C₁] [MonoidalCategory C₁] (C₂ : Type u₂) [Category.{v₂, u₂} C₂] [MonoidalCategory C₂] :
                                                            𝟙_ (C₁ × C₂) = (𝟙_ C₁, 𝟙_ C₂)
                                                            @[simp]
                                                            theorem CategoryTheory.MonoidalCategory.prodMonoidal_associator (C₁ : Type u₁) [Category.{v₁, u₁} C₁] [MonoidalCategory C₁] (C₂ : Type u₂) [Category.{v₂, u₂} C₂] [MonoidalCategory C₂] (X Y Z : C₁ × C₂) :
                                                            associator X Y Z = (associator X.1 Y.1 Z.1).prod (associator X.2 Y.2 Z.2)
                                                            @[simp]
                                                            theorem CategoryTheory.MonoidalCategory.prodMonoidal_tensorObj (C₁ : Type u₁) [Category.{v₁, u₁} C₁] [MonoidalCategory C₁] (C₂ : Type u₂) [Category.{v₂, u₂} C₂] [MonoidalCategory C₂] (X Y : C₁ × C₂) :
                                                            tensorObj X Y = (tensorObj X.1 Y.1, tensorObj X.2 Y.2)
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            @[simp]
                                                            theorem CategoryTheory.NatTrans.tensor_naturality {J : Type u_1} [Category.{u_3, u_1} J] {C : Type u_2} [Category.{u_4, u_2} C] [MonoidalCategory C] {F G F' G' : Functor J C} (α : F F') (β : G G') {X Y X' Y' : J} (f : X Y) (g : X' Y') :
                                                            theorem CategoryTheory.NatTrans.tensor_naturality_assoc {J : Type u_1} [Category.{u_3, u_1} J] {C : Type u_2} [Category.{u_4, u_2} C] [MonoidalCategory C] {F G F' G' : Functor J C} (α : F F') (β : G G') {X Y X' Y' : J} (f : X Y) (g : X' Y') {Z : C} (h : MonoidalCategoryStruct.tensorObj (F'.obj Y) (G'.obj Y') Z) :
                                                            theorem CategoryTheory.NatTrans.whiskerRight_app_tensor_app {J : Type u_1} [Category.{u_3, u_1} J] {C : Type u_2} [Category.{u_4, u_2} C] [MonoidalCategory C] {F G F' G' : Functor J C} (α : F F') (β : G G') {X Y : J} (f : X Y) (X' : J) :
                                                            theorem CategoryTheory.NatTrans.whiskerRight_app_tensor_app_assoc {J : Type u_1} [Category.{u_3, u_1} J] {C : Type u_2} [Category.{u_4, u_2} C] [MonoidalCategory C] {F G F' G' : Functor J C} (α : F F') (β : G G') {X Y : J} (f : X Y) (X' : J) {Z : C} (h : MonoidalCategoryStruct.tensorObj (F'.obj Y) (G'.obj X') Z) :
                                                            theorem CategoryTheory.NatTrans.whiskerLeft_app_tensor_app {J : Type u_1} [Category.{u_3, u_1} J] {C : Type u_2} [Category.{u_4, u_2} C] [MonoidalCategory C] {F G F' G' : Functor J C} (α : F F') (β : G G') {X' Y' : J} (f : X' Y') (X : J) :
                                                            theorem CategoryTheory.NatTrans.whiskerLeft_app_tensor_app_assoc {J : Type u_1} [Category.{u_3, u_1} J] {C : Type u_2} [Category.{u_4, u_2} C] [MonoidalCategory C] {F G F' G' : Functor J C} (α : F F') (β : G G') {X' Y' : J} (f : X' Y') (X : J) {Z : C} (h : MonoidalCategoryStruct.tensorObj (F'.obj X) (G'.obj Y') Z) :