Documentation

Mathlib.CategoryTheory.Sums.Basic

Binary disjoint unions of categories #

We define the category instance on C ⊕ D when C and D are categories.

We define:

We provide an induction principle Sum.homInduction to reason and work with morphisms in this category.

The sum of two functors F : A ⥤ C and G : B ⥤ C is a functor A ⊕ B ⥤ C, written F.sum' G. This construction should be preferred when defining functors out of a sum.

We provide natural isomorphisms inlCompSum' : inl_ ⋙ F.sum' G ≅ F and inrCompSum' : inl_ ⋙ F.sum' G ≅ G.

Furthermore, we provide Functor.sumIsoExt, which constructs a natural isomorphism of functors out of a sum out of natural isomorphism with their precomposition with the inclusion. This construction sholud be preferred when trying to construct isomorphisms between functors out of a sum.

We further define sums of functors and natural transformations, written F.sum G and α.sum β.

sum C D gives the direct sum of two categories.

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

inl_ is the functor X ↦ inl X.

Equations
@[simp]
theorem CategoryTheory.Sum.inl__obj (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : C) :
(inl_ C D).obj X = Sum.inl X

inr_ is the functor X ↦ inr X.

Equations
@[simp]
theorem CategoryTheory.Sum.inr__obj (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] (X : D) :
(inr_ C D).obj X = Sum.inr X
def CategoryTheory.Sum.homInduction {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {P : {x y : C D} → (x y) → Sort u_1} (inl : (x y : C) → (f : x y) → P ((inl_ C D).map f)) (inr : (x y : D) → (f : x y) → P ((inr_ C D).map f)) {x y : C D} (f : x y) :
P f

An induction principle for morphisms in a sum of category: a morphism is either of the form (inl_ _ _).map _ or of the form (inr_ _ _).map _).

Equations
@[simp]
theorem CategoryTheory.Sum.homInduction_left {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {P : {x y : C D} → (x y) → Sort u_1} (inl : (x y : C) → (f : x y) → P ((inl_ C D).map f)) (inr : (x y : D) → (f : x y) → P ((inr_ C D).map f)) {x y : C} (f : x y) :
homInduction inl inr ((inl_ C D).map f) = inl x y f
@[simp]
theorem CategoryTheory.Sum.homInduction_right {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {P : {x y : C D} → (x y) → Sort u_1} (inl : (x y : C) → (f : x y) → P ((inl_ C D).map f)) (inr : (x y : D) → (f : x y) → P ((inr_ C D).map f)) {x y : D} (f : x y) :
homInduction inl inr ((inr_ C D).map f) = inr x y f
def CategoryTheory.Functor.sum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) :
Functor (A B) C

The sum of two functors that land in a given category C.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Functor.inlCompSum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) :
(Sum.inl_ A B).comp (F.sum' G) F

The sum F.sum' G precomposed with the left inclusion functor is isomorphic to F

Equations
@[simp]
@[simp]
def CategoryTheory.Functor.inrCompSum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) :
(Sum.inr_ A B).comp (F.sum' G) G

The sum F.sum' G precomposed with the right inclusion functor is isomorphic to G

Equations
@[simp]
@[simp]
@[simp]
theorem CategoryTheory.Functor.sum'_obj_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) (a : A) :
(F.sum' G).obj (Sum.inl a) = F.obj a
@[simp]
theorem CategoryTheory.Functor.sum'_obj_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) (b : B) :
(F.sum' G).obj (Sum.inr b) = G.obj b
@[simp]
theorem CategoryTheory.Functor.sum'_map_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) {a a' : A} (f : a a') :
(F.sum' G).map ((Sum.inl_ A B).map f) = F.map f
@[simp]
theorem CategoryTheory.Functor.sum'_map_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor A C) (G : Functor B C) {b b' : B} (f : b b') :
(F.sum' G).map ((Sum.inr_ A B).map f) = G.map f
def CategoryTheory.Functor.sum {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) :
Functor (A C) (B D)

The sum of two functors.

Equations
@[simp]
theorem CategoryTheory.Functor.sum_obj_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) (a : A) :
(F.sum G).obj (Sum.inl a) = Sum.inl (F.obj a)
@[simp]
theorem CategoryTheory.Functor.sum_obj_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) (c : C) :
(F.sum G).obj (Sum.inr c) = Sum.inr (G.obj c)
@[simp]
theorem CategoryTheory.Functor.sum_map_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) {a a' : A} (f : a a') :
(F.sum G).map ((Sum.inl_ A C).map f) = (Sum.inl_ B D).map (F.map f)
@[simp]
theorem CategoryTheory.Functor.sum_map_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor A B) (G : Functor C D) {c c' : C} (f : c c') :
(F.sum G).map ((Sum.inr_ A C).map f) = (Sum.inr_ B D).map (G.map f)
def CategoryTheory.Functor.sumIsoExt {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) :
F G

A functor out of a sum is uniquely characterized by its precompositions with inl_ and inr_.

Equations
@[simp]
theorem CategoryTheory.Functor.sumIsoExt_hom_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (a : A) :
(sumIsoExt e₁ e₂).hom.app (Sum.inl a) = e₁.hom.app a
@[simp]
theorem CategoryTheory.Functor.sumIsoExt_hom_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (b : B) :
(sumIsoExt e₁ e₂).hom.app (Sum.inr b) = e₂.hom.app b
@[simp]
theorem CategoryTheory.Functor.sumIsoExt_inv_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (a : A) :
(sumIsoExt e₁ e₂).inv.app (Sum.inl a) = e₁.inv.app a
@[simp]
theorem CategoryTheory.Functor.sumIsoExt_inv_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor (A B) C} (e₁ : (Sum.inl_ A B).comp F (Sum.inl_ A B).comp G) (e₂ : (Sum.inr_ A B).comp F (Sum.inr_ A B).comp G) (b : B) :
(sumIsoExt e₁ e₂).inv.app (Sum.inr b) = e₂.inv.app b
def CategoryTheory.Functor.isoSum {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor (A B) C) :
F ((Sum.inl_ A B).comp F).sum' ((Sum.inr_ A B).comp F)

Any functor out of a sum is the sum of its precomposition with the inclusions.

Equations
def CategoryTheory.NatTrans.sum' {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor A C} {H I : Functor B C} (α : F G) (β : H I) :
F.sum' H G.sum' I

The sum of two natural transformations, where all functors have the same target category.

Equations
@[simp]
theorem CategoryTheory.NatTrans.sum'_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor A C} {H I : Functor B C} (α : F G) (β : H I) (a : A) :
(sum' α β).app (Sum.inl a) = α.app a
@[simp]
theorem CategoryTheory.NatTrans.sum'_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor A C} {H I : Functor B C} (α : F G) (β : H I) (b : B) :
(sum' α β).app (Sum.inr b) = β.app b
def CategoryTheory.NatTrans.sum {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {F G : Functor A B} {H I : Functor C D} (α : F G) (β : H I) :
F.sum H G.sum I

The sum of two natural transformations.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.NatTrans.sum_app_inl {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {F G : Functor A B} {H I : Functor C D} (α : F G) (β : H I) (a : A) :
(sum α β).app (Sum.inl a) = (Sum.inl_ B D).map (α.app a)
@[simp]
theorem CategoryTheory.NatTrans.sum_app_inr {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {F G : Functor A B} {H I : Functor C D} (α : F G) (β : H I) (c : C) :
(sum α β).app (Sum.inr c) = (Sum.inr_ B D).map (β.app c)

The functor exchanging two direct summand categories.

Equations
@[simp]
@[simp]
@[simp]
theorem CategoryTheory.Sum.swap_map_inl (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X Y : C} {f : Sum.inl X Sum.inl Y} :
(swap C D).map f = f
@[simp]
theorem CategoryTheory.Sum.swap_map_inr (C : Type u₁) [Category.{v₁, u₁} C] (D : Type u₂) [Category.{v₂, u₂} D] {X Y : D} {f : Sum.inr X Sum.inr Y} :
(swap C D).map f = f

Precomposing swap with the left inclusion gives the right inclusion.

Equations

Precomposing swap with the right inclusion gives the leftt inclusion.

Equations

swap gives an equivalence between C ⊕ D and D ⊕ C.

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

The double swap on C ⊕ D is naturally isomorphic to the identity functor.

Equations