Monoidal categories #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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
tensor_obj : C → C → C
tensor_hom : (X₁ ⟶ Y₁) → (X₂ ⟶ Y₂) → ((X₁ ⊗ X₂) ⟶ (Y₁ ⊗ Y₂))
and allow use of the overloaded notation⊗
for both. The unitors and associator are provided componentwise.
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 left_unitor_nat_iso
, right_unitor_nat_iso
and associator_nat_iso
.
Some consequences of the definition are proved in other files,
e.g. (λ_ (𝟙_ C)).hom = (ρ_ (𝟙_ C)).hom
in category_theory.monoidal.unitors_equal
.
Implementation #
Dealing with unitors and associators is painful, and at this stage we do not have a useful implementation of coherence for monoidal categories.
In an effort to lessen the pain, we put some effort into choosing the right simp
lemmas.
Generally, the rule is that the component index of a natural transformation "weighs more"
in considering the complexity of an expression than does a structural isomorphism (associator, etc).
As an example when we prove Proposition 2.2.4 of
http://www-math.mit.edu/~etingof/egnobookfinal.pdf
we state it as a @[simp]
lemma as
(λ_ (X ⊗ Y)).hom = (α_ (𝟙_ C) X Y).inv ≫ (λ_ X).hom ⊗ (𝟙 Y)
This is far from completely effective, but seems to prove a useful principle.
References #
- Tensor categories, Etingof, Gelaki, Nikshych, Ostrik, http://www-math.mit.edu/~etingof/egnobookfinal.pdf
- https://stacks.math.columbia.edu/tag/0FFK.
- tensor_obj : C → C → C
- tensor_hom : Π {X₁ Y₁ X₂ Y₂ : C}, (X₁ ⟶ Y₁) → (X₂ ⟶ Y₂) → (X₁ ⊗ X₂ ⟶ Y₁ ⊗ Y₂)
- tensor_id' : (∀ (X₁ X₂ : C), 𝟙 X₁ ⊗ 𝟙 X₂ = 𝟙 (X₁ ⊗ X₂)) . "obviously"
- tensor_comp' : (∀ {X₁ Y₁ Z₁ X₂ Y₂ Z₂ : C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (g₁ : Y₁ ⟶ Z₁) (g₂ : Y₂ ⟶ Z₂), f₁ ≫ g₁ ⊗ f₂ ≫ g₂ = (f₁ ⊗ f₂) ≫ (g₁ ⊗ g₂)) . "obviously"
- tensor_unit : C
- associator : Π (X Y Z : C), (X ⊗ Y) ⊗ Z ≅ X ⊗ Y ⊗ Z
- associator_naturality' : (∀ {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (f₃ : X₃ ⟶ Y₃), ((f₁ ⊗ f₂) ⊗ f₃) ≫ (α_ Y₁ Y₂ Y₃).hom = (α_ X₁ X₂ X₃).hom ≫ (f₁ ⊗ f₂ ⊗ f₃)) . "obviously"
- left_unitor : Π (X : C), 𝟙_ C ⊗ X ≅ X
- left_unitor_naturality' : (∀ {X Y : C} (f : X ⟶ Y), (𝟙 (𝟙_ C) ⊗ f) ≫ (λ_ Y).hom = (λ_ X).hom ≫ f) . "obviously"
- right_unitor : Π (X : C), X ⊗ 𝟙_ C ≅ X
- right_unitor_naturality' : (∀ {X Y : C} (f : X ⟶ Y), (f ⊗ 𝟙 (𝟙_ C)) ≫ (ρ_ Y).hom = (ρ_ X).hom ≫ f) . "obviously"
- pentagon' : (∀ (W X Y Z : C), ((α_ W X Y).hom ⊗ 𝟙 Z) ≫ (α_ W (X ⊗ Y) Z).hom ≫ (𝟙 W ⊗ (α_ X Y Z).hom) = (α_ (W ⊗ X) Y Z).hom ≫ (α_ W X (Y ⊗ Z)).hom) . "obviously"
- triangle' : (∀ (X Y : C), (α_ X (𝟙_ C) Y).hom ≫ (𝟙 X ⊗ (λ_ Y).hom) = (ρ_ X).hom ⊗ 𝟙 Y) . "obviously"
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 of this typeclass
- category_theory.monoidal_category.prod_monoidal
- category_theory.free_monoidal_category.category_theory.monoidal_category
- category_theory.discrete.monoidal
- discrete.add_monoidal
- category_theory.monoidal.functor_category_monoidal
- category_theory.monoidal.transported.category_theory.monoidal_category
- category_theory.monoidal_of_chosen_finite_products.monoidal_of_chosen_finite_products_synonym.category_theory.monoidal_category
- category_theory.types_monoidal
- Action.category_theory.monoidal_category
- Module.monoidal_category
- category_theory.monoidal_category.full_monoidal_subcategory
- fgModule.category_theory.monoidal_category
- category_theory.End_monoidal.monoidal_category
- Mon_.Mon_monoidal
- category_theory.monoidal_category_op
- category_theory.monoidal_category_mop
- category_theory.skeleton.monoidal_category
- category_theory.center.category_theory.monoidal_category
Instances of other typeclasses for category_theory.monoidal_category
- category_theory.monoidal_category.has_sizeof_inst
The tensor product of two isomorphisms is an isomorphism.
The lemmas in the next section are true by coherence, but we prove them directly as they are used in proving the coherence theorem.
The tensor product expressed as a functor.
The left-associated triple tensor product as a functor.
The right-associated triple tensor product as a functor.
The functor λ X, 𝟙_ C ⊗ X
.
The functor λ X, X ⊗ 𝟙_ C
.
The associator as a natural isomorphism.
The left unitor as a natural isomorphism.
Equations
The right unitor as a natural isomorphism.
Equations
Tensoring on the left with a fixed object, as a functor.
Equations
Instances for category_theory.monoidal_category.tensor_left
Tensoring on the left with X ⊗ Y
is naturally isomorphic to
tensoring on the left with Y
, and then again with X
.
Equations
Tensoring on the right with a fixed object, as a functor.
Equations
Instances for category_theory.monoidal_category.tensor_right
Tensoring on the left, as a functor from C
into endofunctors of C
.
TODO: show this is a op-monoidal functor.
Equations
- category_theory.monoidal_category.tensoring_left C = {obj := category_theory.monoidal_category.tensor_left _inst_2, map := λ (X Y : C) (f : X ⟶ Y), {app := λ (Z : C), f ⊗ 𝟙 Z, naturality' := _}, map_id' := _, map_comp' := _}
Instances for category_theory.monoidal_category.tensoring_left
Tensoring on the right, as a functor from C
into endofunctors of C
.
We later show this is a monoidal functor.
Equations
- category_theory.monoidal_category.tensoring_right C = {obj := category_theory.monoidal_category.tensor_right _inst_2, map := λ (X Y : C) (f : X ⟶ Y), {app := λ (Z : C), 𝟙 Z ⊗ f, naturality' := _}, map_id' := _, map_comp' := _}
Instances for category_theory.monoidal_category.tensoring_right
Tensoring on the right with X ⊗ Y
is naturally isomorphic to
tensoring on the right with X
, and then again with Y
.
Equations
- category_theory.monoidal_category.tensor_right_tensor X Y = category_theory.nat_iso.of_components (λ (Z : C), (α_ Z X Y).symm) _
Equations
- category_theory.monoidal_category.prod_monoidal C₁ C₂ = {tensor_obj := λ (X Y : C₁ × C₂), (X.fst ⊗ Y.fst, X.snd ⊗ Y.snd), tensor_hom := λ (_x _x_1 _x_2 _x_3 : C₁ × C₂) (f : _x ⟶ _x_1) (g : _x_2 ⟶ _x_3), (f.fst ⊗ g.fst, f.snd ⊗ g.snd), tensor_id' := _, tensor_comp' := _, tensor_unit := (𝟙_ C₁ _inst_2, 𝟙_ C₂ _inst_4), associator := λ (X Y Z : C₁ × C₂), (α_ X.fst Y.fst Z.fst).prod (α_ X.snd Y.snd Z.snd), associator_naturality' := _, left_unitor := λ (_x : C₁ × C₂), category_theory.monoidal_category.prod_monoidal._match_1 C₁ C₂ _x, left_unitor_naturality' := _, right_unitor := λ (_x : C₁ × C₂), category_theory.monoidal_category.prod_monoidal._match_2 C₁ C₂ _x, right_unitor_naturality' := _, pentagon' := _, triangle' := _}
- category_theory.monoidal_category.prod_monoidal._match_1 C₁ C₂ (X₁, X₂) = (λ_ X₁).prod (λ_ X₂)
- category_theory.monoidal_category.prod_monoidal._match_2 C₁ C₂ (X₁, X₂) = (ρ_ X₁).prod (ρ_ X₂)