mathlib3 documentation

category_theory.whiskering

Whiskering #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

Given a functor F : C ⥤ D and functors G H : D ⥤ E and a natural transformation α : G ⟶ H, we can construct a new natural transformation F ⋙ G ⟶ F ⋙ H, called whisker_left F α. This is the same as the horizontal composition of 𝟙 F with α.

This operation is functorial in F, and we package this as whiskering_left. Here (whiskering_left.obj F).obj G is F ⋙ G, and (whiskering_left.obj F).map α is whisker_left F α. (That is, we might have alternatively named this as the "left composition functor".)

We also provide analogues for composition on the right, and for these operations on isomorphisms.

At the end of the file, we provide the left and right unitors, and the associator, for functor composition. (In fact functor composition is definitionally associative, but very often relying on this causes extremely slow elaboration, so it is better to insert it explicitly.) We also show these natural isomorphisms satisfy the triangle and pentagon identities.

@[simp]
theorem category_theory.whisker_left_app {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C D) {G H : D E} (α : G H) (X : C) :
def category_theory.whisker_left {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C D) {G H : D E} (α : G H) :
F G F H

If α : G ⟶ H then whisker_left F α : (F ⋙ G) ⟶ (F ⋙ H) has components α.app (F.obj X).

Equations
Instances for category_theory.whisker_left
def category_theory.whisker_right {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {G H : C D} (α : G H) (F : D E) :
G F H F

If α : G ⟶ H then whisker_right α F : (G ⋙ F) ⟶ (G ⋙ F) has components F.map (α.app X).

Equations
Instances for category_theory.whisker_right
@[simp]
theorem category_theory.whisker_right_app {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {G H : C D} (α : G H) (F : D E) (X : C) :
@[simp]
@[simp]
theorem category_theory.whiskering_left_map_app_app (C : Type u₁) [category_theory.category C] (D : Type u₂) [category_theory.category D] (E : Type u₃) [category_theory.category E] (F G : C D) (τ : F G) (H : D E) (c : C) :
(((category_theory.whiskering_left C D E).map τ).app H).app c = H.map (τ.app c)

Left-composition gives a functor (C ⥤ D) ⥤ ((D ⥤ E) ⥤ (C ⥤ E)).

(whiskering_left.obj F).obj G is F ⋙ G, and (whiskering_left.obj F).map α is whisker_left F α.

Equations
@[simp]

Right-composition gives a functor (D ⥤ E) ⥤ ((C ⥤ D) ⥤ (C ⥤ E)).

(whiskering_right.obj H).obj F is F ⋙ H, and (whiskering_right.obj H).map α is whisker_right α H.

Equations
@[simp]
theorem category_theory.whiskering_right_map_app_app (C : Type u₁) [category_theory.category C] (D : Type u₂) [category_theory.category D] (E : Type u₃) [category_theory.category E] (G H : D E) (τ : G H) (F : C D) (c : C) :
(((category_theory.whiskering_right C D E).map τ).app F).app c = τ.app (F.obj c)
@[simp]
def category_theory.iso_whisker_left {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] (F : C D) {G H : D E} (α : G H) :
F G F H

If α : G ≅ H is a natural isomorphism then iso_whisker_left F α : (F ⋙ G) ≅ (F ⋙ H) has components α.app (F.obj X).

Equations
def category_theory.iso_whisker_right {C : Type u₁} [category_theory.category C] {D : Type u₂} [category_theory.category D] {E : Type u₃} [category_theory.category E] {G H : C D} (α : G H) (F : D E) :
G F H F

If α : G ≅ H then iso_whisker_right α F : (G ⋙ F) ≅ (H ⋙ F) has components F.map_iso (α.app X).

Equations
@[simp]
@[simp]

The left unitor, a natural isomorphism ((𝟭 _) ⋙ F) ≅ F.

Equations
@[simp]

The right unitor, a natural isomorphism (F ⋙ (𝟭 B)) ≅ F.

Equations
@[simp]
@[simp]
theorem category_theory.functor.associator_inv_app {A : Type u₁} [category_theory.category A] {B : Type u₂} [category_theory.category B] {C : Type u₃} [category_theory.category C] {D : Type u₄} [category_theory.category D] (F : A B) (G : B C) (H : C D) (_x : A) :
(F.associator G H).inv.app _x = 𝟙 ((F G H).obj _x)
def category_theory.functor.associator {A : Type u₁} [category_theory.category A] {B : Type u₂} [category_theory.category B] {C : Type u₃} [category_theory.category C] {D : Type u₄} [category_theory.category D] (F : A B) (G : B C) (H : C D) :
(F G) H F G H

The associator for functors, a natural isomorphism ((F ⋙ G) ⋙ H) ≅ (F ⋙ (G ⋙ H)).

(In fact, iso.refl _ will work here, but it tends to make Lean slow later, and it's usually best to insert explicit associators.)

Equations
@[simp]
theorem category_theory.functor.associator_hom_app {A : Type u₁} [category_theory.category A] {B : Type u₂} [category_theory.category B] {C : Type u₃} [category_theory.category C] {D : Type u₄} [category_theory.category D] (F : A B) (G : B C) (H : C D) (_x : A) :
(F.associator G H).hom.app _x = 𝟙 (((F G) H).obj _x)
@[protected]
theorem category_theory.functor.assoc {A : Type u₁} [category_theory.category A] {B : Type u₂} [category_theory.category B] {C : Type u₃} [category_theory.category C] {D : Type u₄} [category_theory.category D] (F : A B) (G : B C) (H : C D) :
(F G) H = F G H