Documentation

Mathlib.CategoryTheory.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.

def CategoryTheory.Comma.limitAuxiliaryCone {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) (c₁ : Limits.Cone (F.comp (fst L R))) :
Limits.Cone ((F.comp (snd L R)).comp R)

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

Equations
Instances For
    @[simp]
    theorem CategoryTheory.Comma.limitAuxiliaryCone_pt {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) (c₁ : Limits.Cone (F.comp (fst L R))) :
    (limitAuxiliaryCone F c₁).pt = L.obj c₁.pt
    @[simp]
    theorem CategoryTheory.Comma.limitAuxiliaryCone_π_app {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) (c₁ : Limits.Cone (F.comp (fst L R))) (X : J) :
    (limitAuxiliaryCone F c₁).app X = CategoryStruct.comp (L.map (c₁.app X)) (F.obj X).hom
    noncomputable def CategoryTheory.Comma.coneOfPreserves {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] (c₁ : Limits.Cone (F.comp (fst L R))) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit 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
    • One or more equations did not get rendered due to their size.
    Instances For
      @[simp]
      theorem CategoryTheory.Comma.coneOfPreserves_π_app_right {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] (c₁ : Limits.Cone (F.comp (fst L R))) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit c₂) (j : J) :
      ((coneOfPreserves F c₁ t₂).app j).right = c₂.app j
      @[simp]
      theorem CategoryTheory.Comma.coneOfPreserves_pt_right {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] (c₁ : Limits.Cone (F.comp (fst L R))) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit c₂) :
      (coneOfPreserves F c₁ t₂).pt.right = c₂.pt
      @[simp]
      theorem CategoryTheory.Comma.coneOfPreserves_π_app_left {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] (c₁ : Limits.Cone (F.comp (fst L R))) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit c₂) (j : J) :
      ((coneOfPreserves F c₁ t₂).app j).left = c₁.app j
      @[simp]
      theorem CategoryTheory.Comma.coneOfPreserves_pt_left {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] (c₁ : Limits.Cone (F.comp (fst L R))) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit c₂) :
      (coneOfPreserves F c₁ t₂).pt.left = c₁.pt
      @[simp]
      theorem CategoryTheory.Comma.coneOfPreserves_pt_hom {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] (c₁ : Limits.Cone (F.comp (fst L R))) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit c₂) :
      (coneOfPreserves F c₁ t₂).pt.hom = (Limits.isLimitOfPreserves R t₂).lift (limitAuxiliaryCone F c₁)
      noncomputable def CategoryTheory.Comma.coneOfPreservesIsLimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesLimit (F.comp (snd L R)) R] {c₁ : Limits.Cone (F.comp (fst L R))} (t₁ : Limits.IsLimit c₁) {c₂ : Limits.Cone (F.comp (snd L R))} (t₂ : Limits.IsLimit c₂) :

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

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        def CategoryTheory.Comma.colimitAuxiliaryCocone {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) (c₂ : Limits.Cocone (F.comp (snd L R))) :
        Limits.Cocone ((F.comp (fst L R)).comp L)

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

        Equations
        Instances For
          @[simp]
          theorem CategoryTheory.Comma.colimitAuxiliaryCocone_pt {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) (c₂ : Limits.Cocone (F.comp (snd L R))) :
          (colimitAuxiliaryCocone F c₂).pt = R.obj c₂.pt
          @[simp]
          theorem CategoryTheory.Comma.colimitAuxiliaryCocone_ι_app {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) (c₂ : Limits.Cocone (F.comp (snd L R))) (X : J) :
          (colimitAuxiliaryCocone F c₂).app X = CategoryStruct.comp (F.obj X).hom (R.map (c₂.app X))
          noncomputable def CategoryTheory.Comma.coconeOfPreserves {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) (c₂ : Limits.Cocone (F.comp (snd L R))) :

          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
          • One or more equations did not get rendered due to their size.
          Instances For
            @[simp]
            theorem CategoryTheory.Comma.coconeOfPreserves_ι_app_right {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) (c₂ : Limits.Cocone (F.comp (snd L R))) (j : J) :
            ((coconeOfPreserves F t₁ c₂).app j).right = c₂.app j
            @[simp]
            theorem CategoryTheory.Comma.coconeOfPreserves_pt_left {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) (c₂ : Limits.Cocone (F.comp (snd L R))) :
            (coconeOfPreserves F t₁ c₂).pt.left = c₁.pt
            @[simp]
            theorem CategoryTheory.Comma.coconeOfPreserves_pt_hom {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) (c₂ : Limits.Cocone (F.comp (snd L R))) :
            (coconeOfPreserves F t₁ c₂).pt.hom = (Limits.isColimitOfPreserves L t₁).desc (colimitAuxiliaryCocone F c₂)
            @[simp]
            theorem CategoryTheory.Comma.coconeOfPreserves_ι_app_left {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) (c₂ : Limits.Cocone (F.comp (snd L R))) (j : J) :
            ((coconeOfPreserves F t₁ c₂).app j).left = c₁.app j
            @[simp]
            theorem CategoryTheory.Comma.coconeOfPreserves_pt_right {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) (c₂ : Limits.Cocone (F.comp (snd L R))) :
            (coconeOfPreserves F t₁ c₂).pt.right = c₂.pt
            noncomputable def CategoryTheory.Comma.coconeOfPreservesIsColimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.PreservesColimit (F.comp (fst L R)) L] {c₁ : Limits.Cocone (F.comp (fst L R))} (t₁ : Limits.IsColimit c₁) {c₂ : Limits.Cocone (F.comp (snd L R))} (t₂ : Limits.IsColimit c₂) :

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

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              instance CategoryTheory.Comma.hasLimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.HasLimit (F.comp (fst L R))] [Limits.HasLimit (F.comp (snd L R))] [Limits.PreservesLimit (F.comp (snd L R)) R] :
              instance CategoryTheory.Comma.hasColimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {B : Type u₂} [Category.{v₂, u₂} B] {T : Type u₃} [Category.{v₃, u₃} T] {L : Functor A T} {R : Functor B T} (F : Functor J (Comma L R)) [Limits.HasColimit (F.comp (fst L R))] [Limits.HasColimit (F.comp (snd L R))] [Limits.PreservesColimit (F.comp (fst L R)) L] :
              instance CategoryTheory.StructuredArrow.hasLimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {T : Type u₃} [Category.{v₃, u₃} T] {X : T} {G : Functor A T} (F : Functor J (StructuredArrow X G)) [i₁ : Limits.HasLimit (F.comp (proj X G))] [i₂ : Limits.PreservesLimit (F.comp (proj X G)) G] :
              noncomputable instance CategoryTheory.StructuredArrow.createsLimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {T : Type u₃} [Category.{v₃, u₃} T] {X : T} {G : Functor A T} (F : Functor J (StructuredArrow X G)) [i : Limits.PreservesLimit (F.comp (proj X G)) G] :
              Equations
              • One or more equations did not get rendered due to their size.
              instance CategoryTheory.CostructuredArrow.hasTerminal {A : Type u₁} [Category.{v₁, u₁} A] {T : Type u₃} [Category.{v₃, u₃} T] {G : Functor A T} [G.Faithful] [G.Full] {Y : A} :
              instance CategoryTheory.CostructuredArrow.hasColimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {T : Type u₃} [Category.{v₃, u₃} T] {G : Functor A T} {X : T} (F : Functor J (CostructuredArrow G X)) [i₁ : Limits.HasColimit (F.comp (proj G X))] [i₂ : Limits.PreservesColimit (F.comp (proj G X)) G] :
              noncomputable instance CategoryTheory.CostructuredArrow.createsColimit {J : Type w} [Category.{w', w} J] {A : Type u₁} [Category.{v₁, u₁} A] {T : Type u₃} [Category.{v₃, u₃} T] {G : Functor A T} {X : T} (F : Functor J (CostructuredArrow G X)) [i : Limits.PreservesColimit (F.comp (proj G X)) G] :
              Equations
              • One or more equations did not get rendered due to their size.