Skip to content

Commit 0cacd20

Browse files
committed
feat: the category of short complexes has colimits (#6324)
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
1 parent fed8b91 commit 0cacd20

1 file changed

Lines changed: 138 additions & 0 deletions

File tree

Mathlib/Algebra/Homology/ShortComplex/Limits.lean

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,144 @@ instance preservesMonomorphisms_π₃ :
155155

156156
end
157157

158+
/-- If a cocone with values in `ShortComplex C` is such that it becomes colimit
159+
when we apply the three projections `ShortComplex C ⥤ C`, then it is colimit. -/
160+
def isColimitOfIsColimitπ (c : Cocone F)
161+
(h₁ : IsColimit (π₁.mapCocone c)) (h₂ : IsColimit (π₂.mapCocone c))
162+
(h₃ : IsColimit (π₃.mapCocone c)) : IsColimit c where
163+
desc s :=
164+
{ τ₁ := h₁.desc (π₁.mapCocone s)
165+
τ₂ := h₂.desc (π₂.mapCocone s)
166+
τ₃ := h₃.desc (π₃.mapCocone s)
167+
comm₁₂ := h₁.hom_ext (fun j => by
168+
have eq₁ := h₁.fac (π₁.mapCocone s)
169+
have eq₂ := h₂.fac (π₂.mapCocone s)
170+
have eq₁₂ := fun j => (c.ι.app j).comm₁₂
171+
have eq₁₂' := fun j => (s.ι.app j).comm₁₂
172+
dsimp at eq₁ eq₂ eq₁₂ eq₁₂' ⊢
173+
rw [reassoc_of% (eq₁ j), eq₁₂', reassoc_of% eq₁₂, eq₂])
174+
comm₂₃ := h₂.hom_ext (fun j => by
175+
have eq₂ := h₂.fac (π₂.mapCocone s)
176+
have eq₃ := h₃.fac (π₃.mapCocone s)
177+
have eq₂₃ := fun j => (c.ι.app j).comm₂₃
178+
have eq₂₃' := fun j => (s.ι.app j).comm₂₃
179+
dsimp at eq₂ eq₃ eq₂₃ eq₂₃' ⊢
180+
rw [reassoc_of% (eq₂ j), eq₂₃', reassoc_of% eq₂₃, eq₃]) }
181+
fac s j := by
182+
ext
183+
· apply IsColimit.fac h₁
184+
· apply IsColimit.fac h₂
185+
· apply IsColimit.fac h₃
186+
uniq s m hm := by
187+
ext
188+
· exact h₁.uniq (π₁.mapCocone s) _ (fun j => π₁.congr_map (hm j))
189+
· exact h₂.uniq (π₂.mapCocone s) _ (fun j => π₂.congr_map (hm j))
190+
· exact h₃.uniq (π₃.mapCocone s) _ (fun j => π₃.congr_map (hm j))
191+
192+
section
193+
194+
variable (F) [HasColimit (F ⋙ π₁)] [HasColimit (F ⋙ π₂)] [HasColimit (F ⋙ π₃)]
195+
196+
/-- Construction of a colimit cocone for a functor `J ⥤ ShortComplex C` using the colimits
197+
of the three components `J ⥤ C`. -/
198+
noncomputable def colimitCocone : Cocone F :=
199+
Cocone.mk (ShortComplex.mk (colimMap (whiskerLeft F π₁Toπ₂)) (colimMap (whiskerLeft F π₂Toπ₃))
200+
(by aesop_cat))
201+
{ app := fun j => Hom.mk (colimit.ι (F ⋙ π₁) _) (colimit.ι (F ⋙ π₂) _)
202+
(colimit.ι (F ⋙ π₃) _) (by aesop_cat) (by aesop_cat)
203+
naturality := fun _ _ f => by
204+
ext
205+
· dsimp; erw [comp_id, colimit.w (F ⋙ π₁)]
206+
· dsimp; erw [comp_id, colimit.w (F ⋙ π₂)]
207+
· dsimp; erw [comp_id, colimit.w (F ⋙ π₃)] }
208+
209+
/-- `colimitCocone F` becomes colimit after the application of `π₁ : ShortComplex C ⥤ C`. -/
210+
noncomputable def isColimitπ₁MapCoconeColimitCocone :
211+
IsColimit (π₁.mapCocone (colimitCocone F)) :=
212+
(IsColimit.ofIsoColimit (colimit.isColimit _) (Cocones.ext (Iso.refl _) (by aesop_cat)))
213+
214+
/-- `colimitCocone F` becomes colimit after the application of `π₂ : ShortComplex C ⥤ C`. -/
215+
noncomputable def isColimitπ₂MapCoconeColimitCocone :
216+
IsColimit (π₂.mapCocone (colimitCocone F)) :=
217+
(IsColimit.ofIsoColimit (colimit.isColimit _) (Cocones.ext (Iso.refl _) (by aesop_cat)))
218+
219+
/-- `colimitCocone F` becomes colimit after the application of `π₃ : ShortComplex C ⥤ C`. -/
220+
noncomputable def isColimitπ₃MapCoconeColimitCocone :
221+
IsColimit (π₃.mapCocone (colimitCocone F)) :=
222+
(IsColimit.ofIsoColimit (colimit.isColimit _) (Cocones.ext (Iso.refl _) (by aesop_cat)))
223+
224+
/-- `colimitCocone F` is colimit. -/
225+
noncomputable def isColimitColimitCocone : IsColimit (colimitCocone F) :=
226+
isColimitOfIsColimitπ _ (isColimitπ₁MapCoconeColimitCocone F)
227+
(isColimitπ₂MapCoconeColimitCocone F) (isColimitπ₃MapCoconeColimitCocone F)
228+
229+
instance hasColimit_of_hasColimitπ : HasColimit F := ⟨⟨⟨_, isColimitColimitCocone _⟩⟩⟩
230+
231+
noncomputable instance : PreservesColimit F π₁ :=
232+
preservesColimitOfPreservesColimitCocone (isColimitColimitCocone F)
233+
(isColimitπ₁MapCoconeColimitCocone F)
234+
235+
noncomputable instance : PreservesColimit F π₂ :=
236+
preservesColimitOfPreservesColimitCocone (isColimitColimitCocone F)
237+
(isColimitπ₂MapCoconeColimitCocone F)
238+
239+
noncomputable instance : PreservesColimit F π₃ :=
240+
preservesColimitOfPreservesColimitCocone (isColimitColimitCocone F)
241+
(isColimitπ₃MapCoconeColimitCocone F)
242+
243+
end
244+
245+
section
246+
247+
variable [HasColimitsOfShape J C]
248+
249+
instance hasColimitsOfShape :
250+
HasColimitsOfShape J (ShortComplex C) where
251+
252+
noncomputable instance : PreservesColimitsOfShape J (π₁ : _ ⥤ C) where
253+
254+
noncomputable instance : PreservesColimitsOfShape J (π₂ : _ ⥤ C) where
255+
256+
noncomputable instance : PreservesColimitsOfShape J (π₃ : _ ⥤ C) where
257+
258+
end
259+
260+
section
261+
262+
variable [HasFiniteColimits C]
263+
264+
instance hasFiniteColimits : HasFiniteColimits (ShortComplex C) :=
265+
fun _ _ _ => inferInstance⟩
266+
267+
noncomputable instance : PreservesFiniteColimits (π₁ : _ ⥤ C) :=
268+
fun _ _ _ => inferInstance⟩
269+
270+
noncomputable instance : PreservesFiniteColimits (π₂ : _ ⥤ C) :=
271+
fun _ _ _ => inferInstance⟩
272+
273+
noncomputable instance : PreservesFiniteColimits (π₃ : _ ⥤ C) :=
274+
fun _ _ _ => inferInstance⟩
275+
276+
end
277+
278+
section
279+
280+
variable [HasColimitsOfShape WalkingSpan C]
281+
282+
instance preservesEpimorphisms_π₁ :
283+
Functor.PreservesEpimorphisms (π₁ : _ ⥤ C) :=
284+
CategoryTheory.preservesEpimorphisms_of_preservesColimitsOfShape _
285+
286+
instance preservesEpimorphisms_π₂ :
287+
Functor.PreservesEpimorphisms (π₂ : _ ⥤ C) :=
288+
CategoryTheory.preservesEpimorphisms_of_preservesColimitsOfShape _
289+
290+
instance preservesEpimorphisms_π₃ :
291+
Functor.PreservesEpimorphisms (π₃ : _ ⥤ C) :=
292+
CategoryTheory.preservesEpimorphisms_of_preservesColimitsOfShape _
293+
294+
end
295+
158296
end ShortComplex
159297

160298
end CategoryTheory

0 commit comments

Comments
 (0)