@@ -155,6 +155,144 @@ instance preservesMonomorphisms_π₃ :
155155
156156end
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+
158296end ShortComplex
159297
160298end CategoryTheory
0 commit comments