File: Mathlib/CategoryTheory/Extensive.lean

full_name: CategoryTheory.HasPullbacksOfInclusions
code: /-- A category has pullback of inclusions if it has all pullbacks along coproduct injections. -/
class HasPullbacksOfInclusions (C : Type u) [Category.{v} C] [HasBinaryCoproducts C] : Prop where
  [hasPullbackInl : ∀ {X Y Z : C} (f : Z ⟶ X ⨿ Y), HasPullback coprod.inl f]
goal: Prop

full_name: CategoryTheory.HasPullbacksOfInclusions.hasPullbackInl
code: /-- A category has pullback of inclusions if it has all pullbacks along coproduct injections. -/
class HasPullbacksOfInclusions (C : Type u) [Category.{v} C] [HasBinaryCoproducts C] : Prop where
  [hasPullbackInl : ∀ {X Y Z : C} (f : Z ⟶ X ⨿ Y), HasPullback coprod.inl f]
goal: CategoryTheory.Limits.HasPullback CategoryTheory.Limits.coprod.inl f

full_name: CategoryTheory.PreservesPullbacksOfInclusions.preservesPullbackInl
code: /--
A functor preserves pullback of inclusions if it preserves all pullbacks along coproduct injections.
-/
class PreservesPullbacksOfInclusions {C : Type*} [Category C] {D : Type*} [Category D]
    (F : C ⥤ D) [HasBinaryCoproducts C] where
  [preservesPullbackInl : ∀ {X Y Z : C} (f : Z ⟶ X ⨿ Y), PreservesLimit (cospan coprod.inl f) F]
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.cospan CategoryTheory.Limits.coprod.inl f) F

full_name: CategoryTheory.PreservesPullbacksOfInclusions
code: /--
A functor preserves pullback of inclusions if it preserves all pullbacks along coproduct injections.
-/
class PreservesPullbacksOfInclusions {C : Type*} [Category C] {D : Type*} [Category D]
    (F : C ⥤ D) [HasBinaryCoproducts C] where
  [preservesPullbackInl : ∀ {X Y Z : C} (f : Z ⟶ X ⨿ Y), PreservesLimit (cospan coprod.inl f) F]
goal: Type (max (max (max u_1 u_2) u_3) u_4)

full_name: CategoryTheory.FinitaryPreExtensive.universal'
code: /-- A category is (finitary) pre-extensive if it has finite coproducts,
and binary coproducts are universal. -/
class FinitaryPreExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  universal' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsUniversalColimit c
goal: CategoryTheory.Limits.IsColimit c → CategoryTheory.IsUniversalColimit c

full_name: CategoryTheory.FinitaryPreExtensive
code: /-- A category is (finitary) pre-extensive if it has finite coproducts,
and binary coproducts are universal. -/
class FinitaryPreExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  universal' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsUniversalColimit c
goal: Prop

full_name: CategoryTheory.FinitaryPreExtensive.hasPullbacksOfInclusions
code: /-- A category is (finitary) pre-extensive if it has finite coproducts,
and binary coproducts are universal. -/
class FinitaryPreExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  universal' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsUniversalColimit c
goal: CategoryTheory.HasPullbacksOfInclusions C

full_name: CategoryTheory.FinitaryPreExtensive.hasFiniteCoproducts
code: /-- A category is (finitary) pre-extensive if it has finite coproducts,
and binary coproducts are universal. -/
class FinitaryPreExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  universal' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsUniversalColimit c
goal: CategoryTheory.Limits.HasFiniteCoproducts C

full_name: CategoryTheory.FinitaryExtensive.hasPullbacksOfInclusions
code: /-- A category is (finitary) extensive if it has finite coproducts,
and binary coproducts are van Kampen. -/
class FinitaryExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  van_kampen' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsVanKampenColimit c
goal: CategoryTheory.HasPullbacksOfInclusions C

full_name: CategoryTheory.FinitaryExtensive.van_kampen'
code: /-- A category is (finitary) extensive if it has finite coproducts,
and binary coproducts are van Kampen. -/
class FinitaryExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  van_kampen' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsVanKampenColimit c
goal: CategoryTheory.Limits.IsColimit c → CategoryTheory.IsVanKampenColimit c

full_name: CategoryTheory.FinitaryExtensive
code: /-- A category is (finitary) extensive if it has finite coproducts,
and binary coproducts are van Kampen. -/
class FinitaryExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  van_kampen' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsVanKampenColimit c
goal: Prop

full_name: CategoryTheory.FinitaryExtensive.hasFiniteCoproducts
code: /-- A category is (finitary) extensive if it has finite coproducts,
and binary coproducts are van Kampen. -/
class FinitaryExtensive (C : Type u) [Category.{v} C] : Prop where
  [hasFiniteCoproducts : HasFiniteCoproducts C]
  [hasPullbacksOfInclusions : HasPullbacksOfInclusions C]
  /-- In a finitary extensive category, all coproducts are van Kampen-/
  van_kampen' : ∀ {X Y : C} (c : BinaryCofan X Y), IsColimit c → IsVanKampenColimit c
goal: CategoryTheory.Limits.HasFiniteCoproducts C

full_name: CategoryTheory.FinitaryExtensive.vanKampen
code: theorem FinitaryExtensive.vanKampen [FinitaryExtensive C] {F : Discrete WalkingPair ⥤ C}
    (c : Cocone F) (hc : IsColimit c) : IsVanKampenColimit c 
goal: CategoryTheory.IsVanKampenColimit c

full_name: CategoryTheory.HasPullbacksOfInclusions.instOfHasPullbacks
code: instance (priority := 100) [HasBinaryCoproducts C] [HasPullbacks C] :
    HasPullbacksOfInclusions C 
goal: CategoryTheory.HasPullbacksOfInclusions C

full_name: CategoryTheory.HasPullbacksOfInclusions.preservesPullbackInl'
code: instance preservesPullbackInl' :
    HasPullback f coprod.inl 
goal: CategoryTheory.Limits.HasPullback f CategoryTheory.Limits.coprod.inl

full_name: CategoryTheory.HasPullbacksOfInclusions.hasPullbackInr'
code: instance hasPullbackInr' :
    HasPullback f coprod.inr 
goal: CategoryTheory.Limits.HasPullback f CategoryTheory.Limits.coprod.inr

full_name: CategoryTheory.HasPullbacksOfInclusions.hasPullbackInr
code: instance hasPullbackInr :
    HasPullback coprod.inr f 
goal: CategoryTheory.Limits.HasPullback CategoryTheory.Limits.coprod.inr f

full_name: CategoryTheory.PreservesPullbacksOfInclusions.instOfPreservesLimitsOfShapeWalkingCospan
code: noncomputable
instance (priority := 100) [PreservesLimitsOfShape WalkingCospan F] :
    PreservesPullbacksOfInclusions F 
goal: CategoryTheory.PreservesPullbacksOfInclusions F

full_name: CategoryTheory.PreservesPullbacksOfInclusions.preservesPullbackInl'
code: noncomputable
instance preservesPullbackInl' :
    PreservesLimit (cospan f coprod.inl) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.cospan f CategoryTheory.Limits.coprod.inl) F

full_name: CategoryTheory.PreservesPullbacksOfInclusions.preservesPullbackInr'
code: noncomputable
instance preservesPullbackInr' :
    PreservesLimit (cospan f coprod.inr) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.cospan f CategoryTheory.Limits.coprod.inr) F

full_name: CategoryTheory.PreservesPullbacksOfInclusions.preservesPullbackInr
code: noncomputable
instance preservesPullbackInr :
    PreservesLimit (cospan coprod.inr f) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.cospan CategoryTheory.Limits.coprod.inr f) F

full_name: CategoryTheory.FinitaryExtensive.toFinitaryPreExtensive
code: instance (priority := 100) FinitaryExtensive.toFinitaryPreExtensive [FinitaryExtensive C] :
    FinitaryPreExtensive C 
goal: CategoryTheory.FinitaryPreExtensive C

full_name: CategoryTheory.FinitaryExtensive.mono_inr_of_isColimit
code: theorem FinitaryExtensive.mono_inr_of_isColimit [FinitaryExtensive C] {c : BinaryCofan X Y}
    (hc : IsColimit c) : Mono c.inr 
goal: CategoryTheory.Mono c.inr

full_name: CategoryTheory.FinitaryExtensive.mono_inl_of_isColimit
code: theorem FinitaryExtensive.mono_inl_of_isColimit [FinitaryExtensive C] {c : BinaryCofan X Y}
    (hc : IsColimit c) : Mono c.inl 
goal: CategoryTheory.Mono c.inl

full_name: CategoryTheory.instMonoInl
code: instance [FinitaryExtensive C] (X Y : C) : Mono (coprod.inl : X ⟶ X ⨿ Y) 
goal: CategoryTheory.Mono CategoryTheory.Limits.coprod.inl

full_name: CategoryTheory.instMonoInr
code: instance [FinitaryExtensive C] (X Y : C) : Mono (coprod.inr : Y ⟶ X ⨿ Y) 
goal: CategoryTheory.Mono CategoryTheory.Limits.coprod.inr

full_name: CategoryTheory.FinitaryExtensive.isPullback_initial_to_binaryCofan
code: theorem FinitaryExtensive.isPullback_initial_to_binaryCofan [FinitaryExtensive C]
    {c : BinaryCofan X Y} (hc : IsColimit c) :
    IsPullback (initial.to _) (initial.to _) c.inl c.inr 
goal: CategoryTheory.IsPullback
  (CategoryTheory.Limits.initial.to
    ((CategoryTheory.Limits.pair X Y).obj { as := CategoryTheory.Limits.WalkingPair.left }))
  (CategoryTheory.Limits.initial.to
    ((CategoryTheory.Limits.pair X Y).obj { as := CategoryTheory.Limits.WalkingPair.right }))
  c.inl c.inr

full_name: CategoryTheory.hasStrictInitialObjects_of_finitaryPreExtensive
code: instance (priority := 100) hasStrictInitialObjects_of_finitaryPreExtensive
    [FinitaryPreExtensive C] : HasStrictInitialObjects C 
goal: CategoryTheory.Limits.HasStrictInitialObjects C

full_name: CategoryTheory.finitaryExtensive_iff_of_isTerminal
code: theorem finitaryExtensive_iff_of_isTerminal (C : Type u) [Category.{v} C] [HasFiniteCoproducts C]
    [HasPullbacksOfInclusions C]
    (T : C) (HT : IsTerminal T) (c₀ : BinaryCofan T T) (hc₀ : IsColimit c₀) :
    FinitaryExtensive C ↔ IsVanKampenColimit c₀ 
goal: CategoryTheory.FinitaryExtensive C ↔ CategoryTheory.IsVanKampenColimit c₀

full_name: CategoryTheory.types.finitaryExtensive
code: instance types.finitaryExtensive : FinitaryExtensive (Type u) 
goal: CategoryTheory.FinitaryExtensive (Type u)

full_name: CategoryTheory.finitaryExtensiveTopCatAux
code: /-- (Implementation) An auxiliary lemma for the proof that `TopCat` is finitary extensive. -/
noncomputable def finitaryExtensiveTopCatAux (Z : TopCat.{u})
    (f : Z ⟶ TopCat.of (PUnit.{u + 1} ⊕ PUnit.{u + 1})) :
    IsColimit (BinaryCofan.mk
      (TopCat.pullbackFst f (TopCat.binaryCofan (TopCat.of PUnit) (TopCat.of PUnit)).inl)
      (TopCat.pullbackFst f (TopCat.binaryCofan (TopCat.of PUnit) (TopCat.of PUnit)).inr)) 
goal: CategoryTheory.Limits.IsColimit
  (CategoryTheory.Limits.BinaryCofan.mk
    (TopCat.pullbackFst f ((TopCat.of PUnit.{u + 1}).binaryCofan (TopCat.of PUnit.{u + 1})).inl)
    (TopCat.pullbackFst f ((TopCat.of PUnit.{u + 1}).binaryCofan (TopCat.of PUnit.{u + 1})).inr))

full_name: CategoryTheory.finitaryExtensive_TopCat
code: instance finitaryExtensive_TopCat : FinitaryExtensive TopCat.{u} 
goal: CategoryTheory.FinitaryExtensive TopCat

full_name: CategoryTheory.finitaryExtensive_of_reflective
code: theorem finitaryExtensive_of_reflective
    [HasFiniteCoproducts D] [HasPullbacksOfInclusions D] [FinitaryExtensive C]
    {Gl : C ⥤ D} {Gr : D ⥤ C} (adj : Gl ⊣ Gr) [Gr.Full] [Gr.Faithful]
    [∀ X Y (f : X ⟶ Gl.obj Y), HasPullback (Gr.map f) (adj.unit.app Y)]
    [∀ X Y (f : X ⟶ Gl.obj Y), PreservesLimit (cospan (Gr.map f) (adj.unit.app Y)) Gl]
    [PreservesPullbacksOfInclusions Gl] :
    FinitaryExtensive D 
goal: CategoryTheory.FinitaryExtensive D

full_name: CategoryTheory.finitaryExtensive_functor
code: instance finitaryExtensive_functor [HasPullbacks C] [FinitaryExtensive C] :
    FinitaryExtensive (D ⥤ C) 
goal: CategoryTheory.FinitaryExtensive (CategoryTheory.Functor D C)

full_name: CategoryTheory.instPreservesLimitWalkingCospanCospanOfIsIso
code: noncomputable
instance {C} [Category C] {D} [Category D] (F : C ⥤ D)
    {X Y Z : C} (f : X ⟶ Z) (g : Y ⟶ Z) [IsIso f] : PreservesLimit (cospan f g) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.cospan f g) F

full_name: CategoryTheory.instPreservesLimitWalkingCospanCospanOfIsIso_1
code: noncomputable
instance {C} [Category C] {D} [Category D] (F : C ⥤ D)
    {X Y Z : C} (f : X ⟶ Z) (g : Y ⟶ Z) [IsIso g] : PreservesLimit (cospan f g) F 
goal: CategoryTheory.Limits.PreservesLimit (CategoryTheory.Limits.cospan f g) F

full_name: CategoryTheory.finitaryExtensive_of_preserves_and_reflects
code: theorem finitaryExtensive_of_preserves_and_reflects (F : C ⥤ D) [FinitaryExtensive D]
    [HasFiniteCoproducts C] [HasPullbacksOfInclusions C]
    [PreservesPullbacksOfInclusions F]
    [ReflectsLimitsOfShape WalkingCospan F] [PreservesColimitsOfShape (Discrete WalkingPair) F]
    [ReflectsColimitsOfShape (Discrete WalkingPair) F] : FinitaryExtensive C 
goal: CategoryTheory.FinitaryExtensive C

full_name: CategoryTheory.finitaryExtensive_of_preserves_and_reflects_isomorphism
code: theorem finitaryExtensive_of_preserves_and_reflects_isomorphism (F : C ⥤ D) [FinitaryExtensive D]
    [HasFiniteCoproducts C] [HasPullbacks C] [PreservesLimitsOfShape WalkingCospan F]
    [PreservesColimitsOfShape (Discrete WalkingPair) F] [F.ReflectsIsomorphisms] :
    FinitaryExtensive C 
goal: CategoryTheory.FinitaryExtensive C

full_name: CategoryTheory.FinitaryPreExtensive.isUniversal_finiteCoproducts_Fin
code: theorem FinitaryPreExtensive.isUniversal_finiteCoproducts_Fin [FinitaryPreExtensive C] {n : ℕ}
    {F : Discrete (Fin n) ⥤ C} {c : Cocone F} (hc : IsColimit c) : IsUniversalColimit c 
goal: CategoryTheory.IsUniversalColimit c

full_name: CategoryTheory.FinitaryPreExtensive.isUniversal_finiteCoproducts
code: theorem FinitaryPreExtensive.isUniversal_finiteCoproducts [FinitaryPreExtensive C] {ι : Type*}
    [Finite ι] {F : Discrete ι ⥤ C} {c : Cocone F} (hc : IsColimit c) : IsUniversalColimit c 
goal: CategoryTheory.IsUniversalColimit c

full_name: CategoryTheory.FinitaryExtensive.isVanKampen_finiteCoproducts_Fin
code: theorem FinitaryExtensive.isVanKampen_finiteCoproducts_Fin [FinitaryExtensive C] {n : ℕ}
    {F : Discrete (Fin n) ⥤ C} {c : Cocone F} (hc : IsColimit c) : IsVanKampenColimit c 
goal: CategoryTheory.IsVanKampenColimit c

full_name: CategoryTheory.FinitaryExtensive.isVanKampen_finiteCoproducts
code: theorem FinitaryExtensive.isVanKampen_finiteCoproducts [FinitaryExtensive C] {ι : Type*}
    [Finite ι] {F : Discrete ι ⥤ C} {c : Cocone F} (hc : IsColimit c) : IsVanKampenColimit c 
goal: CategoryTheory.IsVanKampenColimit c

full_name: CategoryTheory.FinitaryPreExtensive.hasPullbacks_of_is_coproduct
code: lemma FinitaryPreExtensive.hasPullbacks_of_is_coproduct [FinitaryPreExtensive C] {ι : Type*}
    [Finite ι] {F : Discrete ι ⥤ C} {c : Cocone F} (hc : IsColimit c) (i : Discrete ι) {X : C}
    (g : X ⟶ _) : HasPullback g (c.ι.app i) 
goal: CategoryTheory.Limits.HasPullback g (c.ι.app i)

full_name: CategoryTheory.FinitaryExtensive.mono_ι
code: lemma FinitaryExtensive.mono_ι [FinitaryExtensive C] {ι : Type*} [Finite ι] {F : Discrete ι ⥤ C}
    {c : Cocone F} (hc : IsColimit c) (i : Discrete ι) :
    Mono (c.ι.app i) 
goal: CategoryTheory.Mono (c.ι.app i)

full_name: CategoryTheory.instMonoι
code: instance [FinitaryExtensive C] {ι : Type*} [Finite ι] (X : ι → C) (i : ι) :
    Mono (Sigma.ι X i) 
goal: CategoryTheory.Mono (CategoryTheory.Limits.Sigma.ι X i)

full_name: CategoryTheory.FinitaryExtensive.isPullback_initial_to
code: lemma FinitaryExtensive.isPullback_initial_to [FinitaryExtensive C]
    {ι : Type*} [Finite ι] {F : Discrete ι ⥤ C}
    {c : Cocone F} (hc : IsColimit c) (i j : Discrete ι) (e : i ≠ j) :
    IsPullback (initial.to _) (initial.to _) (c.ι.app i) (c.ι.app j) 
goal: CategoryTheory.IsPullback (CategoryTheory.Limits.initial.to (F.obj i)) (CategoryTheory.Limits.initial.to (F.obj j))
  (c.ι.app i) (c.ι.app j)

full_name: CategoryTheory.FinitaryExtensive.isPullback_initial_to_sigma_ι
code: lemma FinitaryExtensive.isPullback_initial_to_sigma_ι [FinitaryExtensive C] {ι : Type*} [Finite ι]
    (X : ι → C) (i j : ι) (e : i ≠ j) :
    IsPullback (initial.to _) (initial.to _) (Sigma.ι X i) (Sigma.ι X j) 
goal: CategoryTheory.IsPullback (CategoryTheory.Limits.initial.to (X i)) (CategoryTheory.Limits.initial.to (X j))
  (CategoryTheory.Limits.Sigma.ι X i) (CategoryTheory.Limits.Sigma.ι X j)

full_name: CategoryTheory.FinitaryPreExtensive.hasPullbacks_of_inclusions
code: instance FinitaryPreExtensive.hasPullbacks_of_inclusions [FinitaryPreExtensive C] {X Z : C}
    {α : Type*} (f : X ⟶ Z) {Y : (a : α) → C} (i : (a : α) → Y a ⟶ Z) [Finite α]
    [hi : IsIso (Sigma.desc i)] (a : α) : HasPullback f (i a) 
goal: CategoryTheory.Limits.HasPullback f (i a)

full_name: CategoryTheory.FinitaryPreExtensive.sigma_desc_iso
code: lemma FinitaryPreExtensive.sigma_desc_iso [FinitaryPreExtensive C] {α : Type} [Finite α] {X : C}
    {Z : α → C} (π : (a : α) → Z a ⟶ X) {Y : C} (f : Y ⟶ X) (hπ : IsIso (Sigma.desc π)) :
    IsIso (Sigma.desc ((fun _ ↦ pullback.fst _ _) : (a : α) → pullback f (π a) ⟶ _)) 
goal: CategoryTheory.IsIso (CategoryTheory.Limits.Sigma.desc fun x => CategoryTheory.Limits.pullback.fst f (π x))