# mathlibdocumentation

category_theory.limits.comma

# Limits and colimits in comma categories #

We build limits in the comma category comma L R provided that the two source categories have limits and R preserves them. This is used to construct limits in the arrow category, structured arrow category and under category, and show that the appropriate forgetful functors create limits.

The duals of all the above are also given.

@[simp]
theorem category_theory.comma.limit_auxiliary_cone_X {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) :
= L.obj c₁.X
def category_theory.comma.limit_auxiliary_cone {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) :

(Implementation). An auxiliary cone which is useful in order to construct limits in the comma category.

Equations
@[simp]
theorem category_theory.comma.limit_auxiliary_cone_π_app {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) (X : J) :
= L.map (c₁.π.app X) (F.obj X).hom
def category_theory.comma.cone_of_preserves {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) :

If R preserves the appropriate limit, then given a cone for F ⋙ fst L R : J ⥤ L and a limit cone for F ⋙ snd L R : J ⥤ R we can build a cone for F which will turn out to be a limit cone.

Equations
@[simp]
theorem category_theory.comma.cone_of_preserves_X_hom {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) :
@[simp]
theorem category_theory.comma.cone_of_preserves_π_app_left {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) (j : J) :
t₂).π.app j).left = c₁.π.app j
@[simp]
theorem category_theory.comma.cone_of_preserves_X_left {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) :
.X.left = c₁.X
@[simp]
theorem category_theory.comma.cone_of_preserves_π_app_right {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) (j : J) :
t₂).π.app j).right = c₂.π.app j
@[simp]
theorem category_theory.comma.cone_of_preserves_X_right {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₁ : category_theory.limits.cone (F ) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) :
.X.right = c₂.X
def category_theory.comma.cone_of_preserves_is_limit {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cone (F } (t₁ : category_theory.limits.is_limit c₁) {c₂ : category_theory.limits.cone (F } (t₂ : category_theory.limits.is_limit c₂) :

Provided that R preserves the appropriate limit, then the cone in cone_of_preserves is a limit.

Equations
@[simp]
theorem category_theory.comma.colimit_auxiliary_cocone_X {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₂ : category_theory.limits.cocone (F ) :
= R.obj c₂.X
def category_theory.comma.colimit_auxiliary_cocone {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₂ : category_theory.limits.cocone (F ) :

(Implementation). An auxiliary cocone which is useful in order to construct colimits in the comma category.

Equations
@[simp]
theorem category_theory.comma.colimit_auxiliary_cocone_ι_app {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) (c₂ : category_theory.limits.cocone (F ) (X : J) :
= (F.obj X).hom R.map (c₂.ι.app X)
def category_theory.comma.cocone_of_preserves {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } (c₂ : category_theory.limits.cocone (F ) :

If L preserves the appropriate colimit, then given a colimit cocone for F ⋙ fst L R : J ⥤ L and a cocone for F ⋙ snd L R : J ⥤ R we can build a cocone for F which will turn out to be a colimit cocone.

Equations
@[simp]
theorem category_theory.comma.cocone_of_preserves_X_right {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } (c₂ : category_theory.limits.cocone (F ) :
.X.right = c₂.X
@[simp]
theorem category_theory.comma.cocone_of_preserves_ι_app_right {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } (c₂ : category_theory.limits.cocone (F ) (j : J) :
.ι.app j).right = c₂.ι.app j
@[simp]
theorem category_theory.comma.cocone_of_preserves_X_hom {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } (c₂ : category_theory.limits.cocone (F ) :
@[simp]
theorem category_theory.comma.cocone_of_preserves_X_left {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } (c₂ : category_theory.limits.cocone (F ) :
.X.left = c₁.X
@[simp]
theorem category_theory.comma.cocone_of_preserves_ι_app_left {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } (c₂ : category_theory.limits.cocone (F ) (j : J) :
.ι.app j).left = c₁.ι.app j
def category_theory.comma.cocone_of_preserves_is_colimit {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J ) {c₁ : category_theory.limits.cocone (F } {c₂ : category_theory.limits.cocone (F }  :

Provided that L preserves the appropriate colimit, then the cocone in cocone_of_preserves is a colimit.

Equations
@[protected, instance]
def category_theory.comma.has_limit {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J )  :
@[protected, instance]
def category_theory.comma.has_limits_of_shape {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T}  :
@[protected, instance]
def category_theory.comma.has_limits {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T}  :
@[protected, instance]
def category_theory.comma.has_colimit {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T} (F : J )  :
@[protected, instance]
def category_theory.comma.has_colimits_of_shape {J : Type w} {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T}  :
@[protected, instance]
def category_theory.comma.has_colimits {A : Type u₁} {B : Type u₂} {T : Type u₃} {L : A T} {R : B T}  :
@[protected, instance]
def category_theory.arrow.has_limit {J : Type w} {T : Type u₃} (F : J )  :
@[protected, instance]
def category_theory.arrow.has_limits_of_shape {J : Type w} {T : Type u₃}  :
@[protected, instance]
@[protected, instance]
def category_theory.arrow.has_colimit {J : Type w} {T : Type u₃} (F : J )  :
@[protected, instance]
def category_theory.arrow.has_colimits_of_shape {J : Type w} {T : Type u₃}  :
@[protected, instance]
@[protected, instance]
def category_theory.structured_arrow.has_limit {J : Type w} {A : Type u₁} {T : Type u₃} {X : T} {G : A T} (F : J )  :
@[protected, instance]
def category_theory.structured_arrow.has_limits_of_shape {J : Type w} {A : Type u₁} {T : Type u₃} {X : T} {G : A T}  :
@[protected, instance]
def category_theory.structured_arrow.has_limits {A : Type u₁} {T : Type u₃} {X : T} {G : A T}  :
@[protected, instance]
noncomputable def category_theory.structured_arrow.creates_limit {J : Type w} {A : Type u₁} {T : Type u₃} {X : T} {G : A T} (F : J )  :
Equations
@[protected, instance]
noncomputable def category_theory.structured_arrow.creates_limits_of_shape {J : Type w} {A : Type u₁} {T : Type u₃} {X : T} {G : A T}  :
Equations
@[protected, instance]
noncomputable def category_theory.structured_arrow.creates_limits {A : Type u₁} {T : Type u₃} {X : T} {G : A T}  :
Equations
@[protected, instance]
def category_theory.structured_arrow.mono_right_of_mono {A : Type u₁} {T : Type u₃} {X : T} {G : A T} {Y Z : G} (f : Y Z)  :
theorem category_theory.structured_arrow.mono_iff_mono_right {A : Type u₁} {T : Type u₃} {X : T} {G : A T} {Y Z : G} (f : Y Z) :
@[protected, instance]
def category_theory.costructured_arrow.has_colimit {J : Type w} {A : Type u₁} {T : Type u₃} {G : A T} {X : T} (F : J )  :
@[protected, instance]
def category_theory.costructured_arrow.has_colimits_of_shape {J : Type w} {A : Type u₁} {T : Type u₃} {G : A T} {X : T}  :
@[protected, instance]
def category_theory.costructured_arrow.has_colimits {A : Type u₁} {T : Type u₃} {G : A T} {X : T}  :
@[protected, instance]
noncomputable def category_theory.costructured_arrow.creates_colimit {J : Type w} {A : Type u₁} {T : Type u₃} {G : A T} {X : T} (F : J )  :
Equations
@[protected, instance]
noncomputable def category_theory.costructured_arrow.creates_colimits_of_shape {J : Type w} {A : Type u₁} {T : Type u₃} {G : A T} {X : T}  :
Equations
@[protected, instance]
noncomputable def category_theory.costructured_arrow.creates_colimits {A : Type u₁} {T : Type u₃} {G : A T} {X : T}  :
Equations
@[protected, instance]
def category_theory.costructured_arrow.epi_left_of_epi {A : Type u₁} {T : Type u₃} {G : A T} {X : T} {Y Z : X} (f : Y Z)  :
theorem category_theory.costructured_arrow.epi_iff_epi_left {A : Type u₁} {T : Type u₃} {G : A T} {X : T} {Y Z : X} (f : Y Z) :