Skip to content

Commit 50a4417

Browse files
committed
chore(CategoryTheory): lemmas for morphisms into colimits (#41011)
We add some variants of lemmas with presentability replaced by `Hom(X, _)` preserving certain colimits. From Proetale.
1 parent a8d8ebb commit 50a4417

1 file changed

Lines changed: 53 additions & 8 deletions

File tree

Mathlib/CategoryTheory/Presentable/Basic.lean

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -237,35 +237,80 @@ lemma isCardinalPresentable_iff_of_isEquivalence
237237
· intro
238238
infer_instance
239239

240+
section
241+
242+
variable {J : Type*} [Category* J] {D : J ⥤ C}
243+
244+
lemma Limits.exists_hom_of_preservesColimit_coyoneda {c : Cocone D} (hc : IsColimit c) {X : C}
245+
[PreservesColimit D (coyoneda.obj (.op X))] (f : X ⟶ c.pt) :
246+
∃ (j : J) (p : X ⟶ D.obj j), p ≫ c.ι.app j = f :=
247+
Types.jointly_surjective_of_isColimit (isColimitOfPreserves (coyoneda.obj (.op X)) hc) f
248+
249+
lemma Limits.exists_eq_of_preservesColimit_coyoneda [IsFiltered J] {c : Cocone D}
250+
(hc : IsColimit c) {X : C} [PreservesColimit D (coyoneda.obj (.op X))]
251+
{i j : J} (f : X ⟶ D.obj i) (g : X ⟶ D.obj j) (h : f ≫ c.ι.app i = g ≫ c.ι.app j) :
252+
∃ (k : J) (u : i ⟶ k) (v : j ⟶ k), f ≫ D.map u = g ≫ D.map v :=
253+
(Types.FilteredColimit.isColimit_eq_iff _ (isColimitOfPreserves (coyoneda.obj (.op X)) hc)).mp h
254+
255+
lemma Limits.exists_eq_of_preservesColimit_coyoneda_self [IsFiltered J] {c : Cocone D}
256+
(hc : IsColimit c) {X : C} [PreservesColimit D (coyoneda.obj (.op X))]
257+
{i : J} (f g : X ⟶ D.obj i) (h : f ≫ c.ι.app i = g ≫ c.ι.app i) :
258+
∃ (j : J) (a : i ⟶ j), f ≫ D.map a = g ≫ D.map a :=
259+
(Types.FilteredColimit.isColimit_eq_iff'
260+
(isColimitOfPreserves (coyoneda.obj (.op X)) hc) f g).mp h
261+
262+
lemma Limits.exists_hom_of_preservesColimit_yoneda {c : Cone D} (hc : IsLimit c) {X : C}
263+
[PreservesColimit D.op (yoneda.obj X)] (f : c.pt ⟶ X) :
264+
∃ (j : J) (p : D.obj j ⟶ X), c.π.app j ≫ p = f := by
265+
obtain ⟨j, p, hp⟩ := Types.jointly_surjective_of_isColimit
266+
(isColimitOfPreserves (yoneda.obj X) hc.op) f
267+
exact ⟨j.unop, p, hp⟩
268+
269+
lemma Limits.exists_eq_of_preservesColimit_yoneda [IsCofiltered J] {c : Cone D} (hc : IsLimit c)
270+
{X : C} [PreservesColimit D.op (yoneda.obj X)]
271+
{i j : J} (f : D.obj i ⟶ X) (g : D.obj j ⟶ X) (h : c.π.app i ≫ f = c.π.app j ≫ g) :
272+
∃ (k : J) (u : k ⟶ i) (v : k ⟶ j), D.map u ≫ f = D.map v ≫ g := by
273+
obtain ⟨k, u, v, huv⟩ :=
274+
(Types.FilteredColimit.isColimit_eq_iff _ (isColimitOfPreserves (yoneda.obj X) hc.op)).mp h
275+
exact ⟨k.unop, u.unop, v.unop, huv⟩
276+
277+
lemma Limits.exists_eq_of_preservesColimit_yoneda_self [IsCofiltered J] {c : Cone D}
278+
(hc : IsLimit c) {X : C} [PreservesColimit D.op (yoneda.obj X)]
279+
{i : J} (f g : D.obj i ⟶ X) (h : c.π.app i ≫ f = c.π.app i ≫ g) :
280+
∃ (j : J) (a : j ⟶ i), D.map a ≫ f = D.map a ≫ g := by
281+
obtain ⟨j, a, ha⟩ := (Types.FilteredColimit.isColimit_eq_iff'
282+
(isColimitOfPreserves (yoneda.obj X) hc.op) f g).mp h
283+
exact ⟨j.unop, a.unop, ha⟩
284+
240285
variable {X} in
241286
lemma IsCardinalPresentable.exists_hom_of_isColimit [IsCardinalPresentable X κ]
242-
{J : Type u₂} [Category.{v₂} J] [EssentiallySmall.{w} J] [IsCardinalFiltered J κ]
287+
[EssentiallySmall.{w} J] [IsCardinalFiltered J κ]
243288
{F : J ⥤ C} {c : Cocone F} (hc : IsColimit c) (f : X ⟶ c.pt) :
244289
∃ (j : J) (f' : X ⟶ F.obj j), f' ≫ c.ι.app j = f := by
245290
have := preservesColimitsOfShape_of_isCardinalPresentable_of_essentiallySmall X κ J
246-
exact Types.jointly_surjective_of_isColimit (isColimitOfPreserves (coyoneda.obj (op X)) hc) f
291+
exact exists_hom_of_preservesColimit_coyoneda hc f
247292

248293
variable {X} in
249294
lemma IsCardinalPresentable.exists_eq_of_isColimit [IsCardinalPresentable X κ]
250-
{J : Type u₂} [Category.{v₂} J] [EssentiallySmall.{w} J] [IsCardinalFiltered J κ]
295+
[EssentiallySmall.{w} J] [IsCardinalFiltered J κ]
251296
{F : J ⥤ C} {c : Cocone F} (hc : IsColimit c) {i₁ i₂ : J} (f₁ : X ⟶ F.obj i₁)
252297
(f₂ : X ⟶ F.obj i₂) (hf : f₁ ≫ c.ι.app i₁ = f₂ ≫ c.ι.app i₂) :
253298
∃ (j : J) (u : i₁ ⟶ j) (v : i₂ ⟶ j), f₁ ≫ F.map u = f₂ ≫ F.map v := by
254299
have := preservesColimitsOfShape_of_isCardinalPresentable_of_essentiallySmall X κ J
255300
have := isFiltered_of_isCardinalFiltered J κ
256-
exact (Types.FilteredColimit.isColimit_eq_iff _
257-
(isColimitOfPreserves (coyoneda.obj (op X)) hc)).1 hf
301+
exact exists_eq_of_preservesColimit_coyoneda hc f₁ f₂ hf
258302

259303
variable {X} in
260304
lemma IsCardinalPresentable.exists_eq_of_isColimit' [IsCardinalPresentable X κ]
261-
{J : Type u₂} [Category.{v₂} J] [EssentiallySmall.{w} J] [IsCardinalFiltered J κ]
305+
[EssentiallySmall.{w} J] [IsCardinalFiltered J κ]
262306
{F : J ⥤ C} {c : Cocone F} (hc : IsColimit c) {i : J} (f₁ f₂ : X ⟶ F.obj i)
263307
(hf : f₁ ≫ c.ι.app i = f₂ ≫ c.ι.app i) :
264308
∃ (j : J) (u : i ⟶ j), f₁ ≫ F.map u = f₂ ≫ F.map u := by
265309
have := preservesColimitsOfShape_of_isCardinalPresentable_of_essentiallySmall X κ J
266310
have := isFiltered_of_isCardinalFiltered J κ
267-
exact (Types.FilteredColimit.isColimit_eq_iff'
268-
(isColimitOfPreserves (coyoneda.obj (op X)) hc) f₁ f₂).1 hf
311+
exact exists_eq_of_preservesColimit_coyoneda_self hc f₁ f₂ hf
312+
313+
end
269314

270315
lemma isCardinalPresentable_iff_isCardinalAccessible_uliftCoyoneda_obj :
271316
IsCardinalPresentable X κ ↔ (uliftCoyoneda.{t}.obj (op X)).IsCardinalAccessible κ := by

0 commit comments

Comments
 (0)