Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit b495fdf

Browse files
committed
feat(category_theory): Filtered colimits preserves finite limits in algebraic categories (#10604)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 2bfa768 commit b495fdf

File tree

3 files changed

+80
-3
lines changed

3 files changed

+80
-3
lines changed

src/category_theory/limits/filtered_colimit_commutes_finite_limit.lean

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Scott Morrison
55
-/
66
import category_theory.limits.colimit_limit
7+
import category_theory.limits.preserves.functor_category
8+
import category_theory.limits.preserves.finite
9+
import category_theory.limits.shapes.finite_limits
10+
import category_theory.limits.preserves.filtered
711

812
/-!
913
# Filtered colimits commute with finite limits.
@@ -308,14 +312,38 @@ begin
308312
end
309313

310314
noncomputable
311-
instance filtered_colim_preserves_finite_limits :
312-
preserves_limits_of_shape J (colim : (K ⥤ Type v) ⥤ _) := ⟨λ F, ⟨λ c hc,
315+
instance filtered_colim_preserves_finite_limits_of_types :
316+
preserves_finite_limits (colim : (K ⥤ Type v) ⥤ _) := ⟨λ J _ _, by exactI ⟨λ F, ⟨λ c hc,
313317
begin
314318
apply is_limit.of_iso_limit (limit.is_limit _),
315319
symmetry,
316320
transitivity (colim.map_cone (limit.cone F)),
317321
exact functor.map_iso _ (hc.unique_up_to_iso (limit.is_limit F)),
318322
exact as_iso (colimit_limit_to_limit_colimit_cone F),
319-
end ⟩⟩
323+
end ⟩⟩⟩
324+
325+
variables {C : Type u} [category.{v} C] [concrete_category.{v} C]
326+
section
327+
variables [has_limits_of_shape J C] [has_colimits_of_shape K C]
328+
variables [reflects_limits_of_shape J (forget C)] [preserves_colimits_of_shape K (forget C)]
329+
variables [preserves_limits_of_shape J (forget C)]
330+
331+
noncomputable
332+
instance filtered_colim_preserves_finite_limits :
333+
preserves_limits_of_shape J (colim : (K ⥤ C) ⥤ _) :=
334+
begin
335+
haveI : preserves_limits_of_shape J ((colim : (K ⥤ C) ⥤ _) ⋙ forget C) :=
336+
preserves_limits_of_shape_of_nat_iso (preserves_colimit_nat_iso _).symm,
337+
exactI preserves_limits_of_shape_of_reflects_of_preserves _ (forget C)
338+
end
339+
end
340+
341+
local attribute [instance] reflects_limits_of_shape_of_reflects_isomorphisms
342+
343+
noncomputable
344+
instance [preserves_finite_limits (forget C)] [preserves_filtered_colimits (forget C)]
345+
[has_finite_limits C] [has_colimits_of_shape K C] [reflects_isomorphisms (forget C)] :
346+
preserves_finite_limits (colim : (K ⥤ C) ⥤ _) :=
347+
⟨λ _ _ _, by exactI category_theory.limits.filtered_colim_preserves_finite_limits⟩
320348

321349
end category_theory.limits

src/category_theory/limits/preserves/functor_category.lean

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,22 @@ begin
7878
exact preserves_limit.preserves hc,
7979
end ⟩⟩⟩
8080

81+
instance whiskering_right_preserves_limits_of_shape {C : Type u} [category C]
82+
{D : Type*} [category D] {E : Type*} [category.{u} E]
83+
{J : Type u} [small_category J] [has_limits_of_shape J D]
84+
(F : D ⥤ E) [preserves_limits_of_shape J F] :
85+
preserves_limits_of_shape J ((whiskering_right C D E).obj F) := ⟨λ K, ⟨λ c hc,
86+
begin
87+
apply evaluation_jointly_reflects_limits,
88+
intro k,
89+
change is_limit (((evaluation _ _).obj k ⋙ F).map_cone c),
90+
exact preserves_limit.preserves hc,
91+
end ⟩⟩
92+
93+
instance whiskering_right_preserves_limits {C : Type u} [category C]
94+
{D : Type*} [category D] {E : Type*} [category.{u} E] (F : D ⥤ E)
95+
[has_limits D] [preserves_limits F] : preserves_limits ((whiskering_right C D E).obj F) := {}
96+
8197
/-- If `Lan F.op : (Cᵒᵖ ⥤ Type*) ⥤ (Dᵒᵖ ⥤ Type*)` preserves limits of shape `J`, so will `F`. -/
8298
noncomputable
8399
def preserves_limit_of_Lan_presesrves_limit {C D : Type u} [small_category C] [small_category D]

src/category_theory/limits/preserves/limits.lean

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ is_limit.cone_point_unique_up_to_iso_inv_comp _ _ j
6161
lemma lift_comp_preserves_limits_iso_hom (t : cone F) :
6262
G.map (limit.lift _ t) ≫ (preserves_limit_iso G F).hom = limit.lift (F ⋙ G) (G.map_cone _) :=
6363
by { ext, simp [← G.map_comp] }
64+
65+
variables [preserves_limits_of_shape J G] [has_limits_of_shape J D] [has_limits_of_shape J C]
66+
67+
/-- If `C, D` has all limits of shape `J`, and `G` preserves them, then `preserves_limit_iso` is
68+
functorial wrt `F`. -/
69+
@[simps] def preserves_limit_nat_iso : lim ⋙ G ≅ (whiskering_right J C D).obj G ⋙ lim :=
70+
nat_iso.of_components (λ F, preserves_limit_iso G F)
71+
begin
72+
intros _ _ f,
73+
ext,
74+
dsimp,
75+
simp only [preserves_limits_iso_hom_π, whisker_right_app, lim_map_π, category.assoc,
76+
preserves_limits_iso_hom_π_assoc, ← G.map_comp]
77+
end
78+
6479
end
6580

6681
section
@@ -95,6 +110,24 @@ lemma ι_preserves_colimits_iso_hom (j : J) :
95110
lemma preserves_colimits_iso_inv_comp_desc (t : cocone F) :
96111
(preserves_colimit_iso G F).inv ≫ G.map (colimit.desc _ t) = colimit.desc _ (G.map_cocone t) :=
97112
by { ext, simp [← G.map_comp] }
113+
114+
variables [preserves_colimits_of_shape J G] [has_colimits_of_shape J D] [has_colimits_of_shape J C]
115+
116+
/-- If `C, D` has all colimits of shape `J`, and `G` preserves them, then `preserves_colimit_iso`
117+
is functorial wrt `F`. -/
118+
@[simps] def preserves_colimit_nat_iso : colim ⋙ G ≅ (whiskering_right J C D).obj G ⋙ colim :=
119+
nat_iso.of_components (λ F, preserves_colimit_iso G F)
120+
begin
121+
intros _ _ f,
122+
rw [← iso.inv_comp_eq, ← category.assoc, ← iso.eq_comp_inv],
123+
ext,
124+
dsimp,
125+
erw ι_colim_map_assoc,
126+
simp only [ι_preserves_colimits_iso_inv, whisker_right_app, category.assoc,
127+
ι_preserves_colimits_iso_inv_assoc, ← G.map_comp],
128+
erw ι_colim_map
129+
end
130+
98131
end
99132

100133
end category_theory

0 commit comments

Comments
 (0)