Documentation

Mathlib.CategoryTheory.Monoidal.Braided.Basic

Braided and symmetric monoidal categories #

The basic definitions of braided monoidal categories, and symmetric monoidal categories, as well as braided functors.

Implementation note #

We make BraidedCategory another typeclass, but then have SymmetricCategory extend this. The rationale is that we are not carrying any additional data, just requiring a property.

Future work #

References #

A braided monoidal category is a monoidal category equipped with a braiding isomorphism β_ X Y : X ⊗ Y ≅ Y ⊗ X which is natural in both arguments, and also satisfies the two hexagon identities.

Instances

    The braiding natural isomorphism.

    Equations
    Instances For

      In a braided monoidal category, the functors tensorLeft X and tensorRight X are isomorphic.

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

        Verifying the axioms for a braiding by checking that the candidate braiding is sent to a braiding by a faithful monoidal functor.

        Equations
        Instances For

          Pull back a braiding along a fully faithful monoidal functor.

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

            We now establish how the braiding interacts with the unitors.

            I couldn't find a detailed proof in print, but this is discussed in:

            A symmetric monoidal category is a braided monoidal category for which the braiding is symmetric.

            Stacks Tag 0FFW

            Instances

              A lax braided functor between braided monoidal categories is a lax monoidal functor which preserves the braiding.

              Instances
                theorem CategoryTheory.Functor.LaxBraided.braided_assoc {C : Type u₁} {inst✝ : Category.{v₁, u₁} C} {inst✝¹ : MonoidalCategory C} {inst✝² : BraidedCategory C} {D : Type u₂} {inst✝³ : Category.{v₂, u₂} D} {inst✝⁴ : MonoidalCategory D} {inst✝⁵ : BraidedCategory D} {F : Functor C D} [self : F.LaxBraided] (X Y : C) {Z : D} (h : F.obj (MonoidalCategoryStruct.tensorObj Y X) Z) :
                structure CategoryTheory.LaxBraidedFunctor (C : Type u₁) [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (D : Type u₂) [Category.{v₂, u₂} D] [MonoidalCategory D] [BraidedCategory D] extends CategoryTheory.Functor C D :
                Type (max (max (max u₁ u₂) v₁) v₂)

                Bundled version of lax braided functors.

                Instances For

                  The lax monoidal functor induced by a lax braided functor.

                  Equations
                  Instances For

                    Constructor for morphisms in the category LaxBraiededFunctor C D.

                    Equations
                    Instances For
                      def CategoryTheory.LaxBraidedFunctor.isoOfComponents {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] [BraidedCategory D] {F G : LaxBraidedFunctor C D} (e : (X : C) → F.obj X G.obj X) (naturality : ∀ {X Y : C} (f : X Y), CategoryStruct.comp (F.map f) (e Y).hom = CategoryStruct.comp (e X).hom (G.map f) := by aesop_cat) (unit : CategoryStruct.comp (Functor.LaxMonoidal.ε F.toFunctor) (e (𝟙_ C)).hom = Functor.LaxMonoidal.ε G.toFunctor := by aesop_cat) (tensor : ∀ (X Y : C), CategoryStruct.comp (Functor.LaxMonoidal.μ F.toFunctor X Y) (e (MonoidalCategoryStruct.tensorObj X Y)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (e X).hom (e Y).hom) (Functor.LaxMonoidal.μ G.toFunctor X Y) := by aesop_cat) :
                      F G

                      Constructor for isomorphisms between lax braided functors.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        @[simp]
                        theorem CategoryTheory.LaxBraidedFunctor.isoOfComponents_hom_hom_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] [BraidedCategory D] {F G : LaxBraidedFunctor C D} (e : (X : C) → F.obj X G.obj X) (naturality : ∀ {X Y : C} (f : X Y), CategoryStruct.comp (F.map f) (e Y).hom = CategoryStruct.comp (e X).hom (G.map f) := by aesop_cat) (unit : CategoryStruct.comp (Functor.LaxMonoidal.ε F.toFunctor) (e (𝟙_ C)).hom = Functor.LaxMonoidal.ε G.toFunctor := by aesop_cat) (tensor : ∀ (X Y : C), CategoryStruct.comp (Functor.LaxMonoidal.μ F.toFunctor X Y) (e (MonoidalCategoryStruct.tensorObj X Y)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (e X).hom (e Y).hom) (Functor.LaxMonoidal.μ G.toFunctor X Y) := by aesop_cat) (X : C) :
                        (isoOfComponents e unit tensor).hom.hom.app X = (e X).hom
                        @[simp]
                        theorem CategoryTheory.LaxBraidedFunctor.isoOfComponents_inv_hom_app {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {D : Type u₂} [Category.{v₂, u₂} D] [MonoidalCategory D] [BraidedCategory D] {F G : LaxBraidedFunctor C D} (e : (X : C) → F.obj X G.obj X) (naturality : ∀ {X Y : C} (f : X Y), CategoryStruct.comp (F.map f) (e Y).hom = CategoryStruct.comp (e X).hom (G.map f) := by aesop_cat) (unit : CategoryStruct.comp (Functor.LaxMonoidal.ε F.toFunctor) (e (𝟙_ C)).hom = Functor.LaxMonoidal.ε G.toFunctor := by aesop_cat) (tensor : ∀ (X Y : C), CategoryStruct.comp (Functor.LaxMonoidal.μ F.toFunctor X Y) (e (MonoidalCategoryStruct.tensorObj X Y)).hom = CategoryStruct.comp (MonoidalCategoryStruct.tensorHom (e X).hom (e Y).hom) (Functor.LaxMonoidal.μ G.toFunctor X Y) := by aesop_cat) (X : C) :
                        (isoOfComponents e unit tensor).inv.hom.app X = (e X).inv

                        A braided functor between braided monoidal categories is a monoidal functor which preserves the braiding.

                        Instances

                          A braided category with a faithful braided functor to a symmetric category is itself symmetric.

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

                            A multiplicative morphism between commutative monoids gives a braided functor between the corresponding discrete braided monoidal categories.

                            Equations
                            def CategoryTheory.MonoidalCategory.tensorμ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ : C) :
                            tensorObj (tensorObj X₁ X₂) (tensorObj Y₁ Y₂) tensorObj (tensorObj X₁ Y₁) (tensorObj X₂ Y₂)

                            Swap the second and third objects in (X₁ ⊗ X₂) ⊗ (Y₁ ⊗ Y₂). This is used to strength the tensor product functor from C × C to C as a monoidal functor.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              def CategoryTheory.MonoidalCategory.tensorδ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ : C) :
                              tensorObj (tensorObj X₁ Y₁) (tensorObj X₂ Y₂) tensorObj (tensorObj X₁ X₂) (tensorObj Y₁ Y₂)

                              The inverse of tensorμ.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.tensorμ_tensorδ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ : C) :
                                CategoryStruct.comp (tensorμ X₁ X₂ Y₁ Y₂) (tensorδ X₁ X₂ Y₁ Y₂) = CategoryStruct.id (tensorObj (tensorObj X₁ X₂) (tensorObj Y₁ Y₂))
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.tensorμ_tensorδ_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ : C) {Z : C} (h : tensorObj (tensorObj X₁ X₂) (tensorObj Y₁ Y₂) Z) :
                                CategoryStruct.comp (tensorμ X₁ X₂ Y₁ Y₂) (CategoryStruct.comp (tensorδ X₁ X₂ Y₁ Y₂) h) = h
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.tensorδ_tensorμ {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ : C) :
                                CategoryStruct.comp (tensorδ X₁ X₂ Y₁ Y₂) (tensorμ X₁ X₂ Y₁ Y₂) = CategoryStruct.id (tensorObj (tensorObj X₁ Y₁) (tensorObj X₂ Y₂))
                                @[simp]
                                theorem CategoryTheory.MonoidalCategory.tensorδ_tensorμ_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ : C) {Z : C} (h : tensorObj (tensorObj X₁ Y₁) (tensorObj X₂ Y₂) Z) :
                                CategoryStruct.comp (tensorδ X₁ X₂ Y₁ Y₂) (CategoryStruct.comp (tensorμ X₁ X₂ Y₁ Y₂) h) = h
                                theorem CategoryTheory.MonoidalCategory.tensorμ_natural {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {X₁ X₂ Y₁ Y₂ U₁ U₂ V₁ V₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (g₁ : U₁ V₁) (g₂ : U₂ V₂) :
                                CategoryStruct.comp (tensorHom (tensorHom f₁ f₂) (tensorHom g₁ g₂)) (tensorμ Y₁ Y₂ V₁ V₂) = CategoryStruct.comp (tensorμ X₁ X₂ U₁ U₂) (tensorHom (tensorHom f₁ g₁) (tensorHom f₂ g₂))
                                theorem CategoryTheory.MonoidalCategory.tensorμ_natural_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {X₁ X₂ Y₁ Y₂ U₁ U₂ V₁ V₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (g₁ : U₁ V₁) (g₂ : U₂ V₂) {Z : C} (h : tensorObj (tensorObj Y₁ V₁) (tensorObj Y₂ V₂) Z) :
                                CategoryStruct.comp (tensorHom (tensorHom f₁ f₂) (tensorHom g₁ g₂)) (CategoryStruct.comp (tensorμ Y₁ Y₂ V₁ V₂) h) = CategoryStruct.comp (tensorμ X₁ X₂ U₁ U₂) (CategoryStruct.comp (tensorHom (tensorHom f₁ g₁) (tensorHom f₂ g₂)) h)
                                theorem CategoryTheory.MonoidalCategory.tensorμ_natural_left {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {X₁ X₂ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (Z₁ Z₂ : C) :
                                CategoryStruct.comp (whiskerRight (tensorHom f₁ f₂) (tensorObj Z₁ Z₂)) (tensorμ Y₁ Y₂ Z₁ Z₂) = CategoryStruct.comp (tensorμ X₁ X₂ Z₁ Z₂) (tensorHom (whiskerRight f₁ Z₁) (whiskerRight f₂ Z₂))
                                theorem CategoryTheory.MonoidalCategory.tensorμ_natural_left_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] {X₁ X₂ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (Z₁ Z₂ : C) {Z : C} (h : tensorObj (tensorObj Y₁ Z₁) (tensorObj Y₂ Z₂) Z) :
                                CategoryStruct.comp (whiskerRight (tensorHom f₁ f₂) (tensorObj Z₁ Z₂)) (CategoryStruct.comp (tensorμ Y₁ Y₂ Z₁ Z₂) h) = CategoryStruct.comp (tensorμ X₁ X₂ Z₁ Z₂) (CategoryStruct.comp (tensorHom (whiskerRight f₁ Z₁) (whiskerRight f₂ Z₂)) h)
                                theorem CategoryTheory.MonoidalCategory.tensorμ_natural_right {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (Z₁ Z₂ : C) {X₁ X₂ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) :
                                CategoryStruct.comp (whiskerLeft (tensorObj Z₁ Z₂) (tensorHom f₁ f₂)) (tensorμ Z₁ Z₂ Y₁ Y₂) = CategoryStruct.comp (tensorμ Z₁ Z₂ X₁ X₂) (tensorHom (whiskerLeft Z₁ f₁) (whiskerLeft Z₂ f₂))
                                theorem CategoryTheory.MonoidalCategory.tensorμ_natural_right_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (Z₁ Z₂ : C) {X₁ X₂ Y₁ Y₂ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) {Z : C} (h : tensorObj (tensorObj Z₁ Y₁) (tensorObj Z₂ Y₂) Z) :
                                CategoryStruct.comp (whiskerLeft (tensorObj Z₁ Z₂) (tensorHom f₁ f₂)) (CategoryStruct.comp (tensorμ Z₁ Z₂ Y₁ Y₂) h) = CategoryStruct.comp (tensorμ Z₁ Z₂ X₁ X₂) (CategoryStruct.comp (tensorHom (whiskerLeft Z₁ f₁) (whiskerLeft Z₂ f₂)) h)
                                theorem CategoryTheory.MonoidalCategory.tensor_associativity {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ Z₁ Z₂ : C) :
                                CategoryStruct.comp (whiskerRight (tensorμ X₁ X₂ Y₁ Y₂) (tensorObj Z₁ Z₂)) (CategoryStruct.comp (tensorμ (tensorObj X₁ Y₁) (tensorObj X₂ Y₂) Z₁ Z₂) (tensorHom (associator X₁ Y₁ Z₁).hom (associator X₂ Y₂ Z₂).hom)) = CategoryStruct.comp (associator (tensorObj X₁ X₂) (tensorObj Y₁ Y₂) (tensorObj Z₁ Z₂)).hom (CategoryStruct.comp (whiskerLeft (tensorObj X₁ X₂) (tensorμ Y₁ Y₂ Z₁ Z₂)) (tensorμ X₁ X₂ (tensorObj Y₁ Z₁) (tensorObj Y₂ Z₂)))
                                theorem CategoryTheory.MonoidalCategory.tensor_associativity_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ Y₁ Y₂ Z₁ Z₂ : C) {Z : C} (h : tensorObj (tensorObj X₁ (tensorObj Y₁ Z₁)) (tensorObj X₂ (tensorObj Y₂ Z₂)) Z) :
                                CategoryStruct.comp (whiskerRight (tensorμ X₁ X₂ Y₁ Y₂) (tensorObj Z₁ Z₂)) (CategoryStruct.comp (tensorμ (tensorObj X₁ Y₁) (tensorObj X₂ Y₂) Z₁ Z₂) (CategoryStruct.comp (tensorHom (associator X₁ Y₁ Z₁).hom (associator X₂ Y₂ Z₂).hom) h)) = CategoryStruct.comp (associator (tensorObj X₁ X₂) (tensorObj Y₁ Y₂) (tensorObj Z₁ Z₂)).hom (CategoryStruct.comp (whiskerLeft (tensorObj X₁ X₂) (tensorμ Y₁ Y₂ Z₁ Z₂)) (CategoryStruct.comp (tensorμ X₁ X₂ (tensorObj Y₁ Z₁) (tensorObj Y₂ Z₂)) h))
                                Equations
                                • One or more equations did not get rendered due to their size.
                                theorem CategoryTheory.MonoidalCategory.associator_monoidal {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ X₃ Y₁ Y₂ Y₃ : C) :
                                CategoryStruct.comp (tensorμ (tensorObj X₁ X₂) X₃ (tensorObj Y₁ Y₂) Y₃) (CategoryStruct.comp (whiskerRight (tensorμ X₁ X₂ Y₁ Y₂) (tensorObj X₃ Y₃)) (associator (tensorObj X₁ Y₁) (tensorObj X₂ Y₂) (tensorObj X₃ Y₃)).hom) = CategoryStruct.comp (tensorHom (associator X₁ X₂ X₃).hom (associator Y₁ Y₂ Y₃).hom) (CategoryStruct.comp (tensorμ X₁ (tensorObj X₂ X₃) Y₁ (tensorObj Y₂ Y₃)) (whiskerLeft (tensorObj X₁ Y₁) (tensorμ X₂ X₃ Y₂ Y₃)))
                                theorem CategoryTheory.MonoidalCategory.associator_monoidal_assoc {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X₁ X₂ X₃ Y₁ Y₂ Y₃ : C) {Z : C} (h : tensorObj (tensorObj X₁ Y₁) (tensorObj (tensorObj X₂ Y₂) (tensorObj X₃ Y₃)) Z) :
                                CategoryStruct.comp (tensorμ (tensorObj X₁ X₂) X₃ (tensorObj Y₁ Y₂) Y₃) (CategoryStruct.comp (whiskerRight (tensorμ X₁ X₂ Y₁ Y₂) (tensorObj X₃ Y₃)) (CategoryStruct.comp (associator (tensorObj X₁ Y₁) (tensorObj X₂ Y₂) (tensorObj X₃ Y₃)).hom h)) = CategoryStruct.comp (tensorHom (associator X₁ X₂ X₃).hom (associator Y₁ Y₂ Y₃).hom) (CategoryStruct.comp (tensorμ X₁ (tensorObj X₂ X₃) Y₁ (tensorObj Y₂ Y₃)) (CategoryStruct.comp (whiskerLeft (tensorObj X₁ Y₁) (tensorμ X₂ X₃ Y₂ Y₃)) h))
                                Equations
                                • One or more equations did not get rendered due to their size.
                                Equations
                                • One or more equations did not get rendered due to their size.
                                @[simp]
                                theorem CategoryTheory.MonoidalOpposite.mop_braiding {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X Y : C) :
                                (β_ X Y).mop = β_ { unmop := Y } { unmop := X }
                                @[simp]
                                theorem CategoryTheory.MonoidalOpposite.mop_hom_braiding {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X Y : C) :
                                (β_ X Y).hom.mop = (β_ { unmop := Y } { unmop := X }).hom
                                @[simp]
                                theorem CategoryTheory.MonoidalOpposite.mop_inv_braiding {C : Type u₁} [Category.{v₁, u₁} C] [MonoidalCategory C] [BraidedCategory C] (X Y : C) :
                                (β_ X Y).inv.mop = (β_ { unmop := Y } { unmop := X }).inv
                                Equations
                                • One or more equations did not get rendered due to their size.
                                @[simp]
                                @[simp]
                                Equations
                                • One or more equations did not get rendered due to their size.

                                The identity functor on C, viewed as a functor from C to its monoidal opposite, upgraded to a braided functor.

                                Equations

                                The identity functor on C, viewed as a functor from the monoidal opposite of C to C, upgraded to a braided functor.

                                Equations
                                @[reducible, inline]

                                The braided monoidal category obtained from C by replacing its braiding β_ X Y : X ⊗ Y ≅ Y ⊗ X with the inverse (β_ Y X)⁻¹ : X ⊗ Y ≅ Y ⊗ X. This corresponds to the automorphism of the braid group swapping over-crossings and under-crossings.

                                Equations
                                • CategoryTheory.reverseBraiding C = { braiding := fun (X Y : C) => (β_ Y X).symm, braiding_naturality_right := , braiding_naturality_left := , hexagon_forward := , hexagon_reverse := }
                                Instances For

                                  The identity functor from C to C, where the codomain is given the reversed braiding, upgraded to a braided functor.

                                  Equations
                                  Instances For