Skip to content

Commit b0af307

Browse files
committed
feat(CategoryTheory/Limits/Comma): comma categories have finite (co)limits (leanprover-community#40896)
The original file proves the existence of limits and colimits in comma categories under suitable conditions, and prove that the forgetful functors from (co)structured arrows preserve (co)limits. This adds the specific instances for finite (co)limits. Co-authored-by: morel <sophie.morel@ens-lyon.fr>
1 parent 553eb72 commit b0af307

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

Mathlib/CategoryTheory/Limits/Comma.lean

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public import Mathlib.CategoryTheory.Comma.Over.Basic
1010
public import Mathlib.CategoryTheory.Limits.Constructions.EpiMono
1111
public import Mathlib.CategoryTheory.Limits.Creates
1212
public import Mathlib.CategoryTheory.Limits.Unit
13+
public import Mathlib.CategoryTheory.Limits.Preserves.Finite
14+
public import Mathlib.CategoryTheory.Limits.Preserves.Creates.Finite
1315

1416
/-!
1517
# Limits and colimits in comma categories
@@ -150,6 +152,10 @@ instance hasLimitsOfSize [HasLimitsOfSize.{w, w'} A] [HasLimitsOfSize.{w, w'} B]
150152
[PreservesLimitsOfSize.{w, w'} R] : HasLimitsOfSize.{w, w'} (Comma L R) :=
151153
fun _ _ => inferInstance⟩
152154

155+
instance hasFiniteLimits [HasFiniteLimits A] [HasFiniteLimits B]
156+
[PreservesFiniteLimits R] : HasFiniteLimits (Comma L R) where
157+
out _ _ _ := inferInstance
158+
153159
instance hasColimit (F : J ⥤ Comma L R) [HasColimit (F ⋙ fst L R)] [HasColimit (F ⋙ snd L R)]
154160
[PreservesColimit (F ⋙ fst L R) L] : HasColimit F :=
155161
HasColimit.mk ⟨_, coconeOfPreservesIsColimit _ (colimit.isColimit _) (colimit.isColimit _)⟩
@@ -161,6 +167,10 @@ instance hasColimitsOfSize [HasColimitsOfSize.{w, w'} A] [HasColimitsOfSize.{w,
161167
[PreservesColimitsOfSize.{w, w'} L] : HasColimitsOfSize.{w, w'} (Comma L R) :=
162168
fun _ _ => inferInstance⟩
163169

170+
instance hasFiniteColimits [HasFiniteColimits A] [HasFiniteColimits B]
171+
[PreservesFiniteColimits L] : HasFiniteColimits (Comma L R) where
172+
out _ _ _ := inferInstance
173+
164174
instance preservesColimitsOfShape_fst [HasColimitsOfShape J A] [HasColimitsOfShape J B]
165175
[PreservesColimitsOfShape J L] : PreservesColimitsOfShape J (Comma.fst L R) where
166176
preservesColimit :=
@@ -188,6 +198,9 @@ instance hasLimit (F : J ⥤ Arrow T) [i₁ : HasLimit (F ⋙ leftFunc)] [i₂ :
188198

189199
instance hasLimitsOfShape [HasLimitsOfShape J T] : HasLimitsOfShape J (Arrow T) where
190200

201+
instance hasFiniteLimits [HasFiniteLimits T] : HasFiniteLimits (Arrow T) where
202+
out _ _ _ := inferInstance
203+
191204
instance hasLimits [HasLimits T] : HasLimits (Arrow T) :=
192205
fun _ _ => inferInstance⟩
193206

@@ -200,6 +213,9 @@ instance hasColimit (F : J ⥤ Arrow T) [i₁ : HasColimit (F ⋙ leftFunc)]
200213

201214
instance hasColimitsOfShape [HasColimitsOfShape J T] : HasColimitsOfShape J (Arrow T) where
202215

216+
instance hasFiniteColimits [HasFiniteColimits T] : HasFiniteColimits (Arrow T) where
217+
out _ _ _ := inferInstance
218+
203219
instance hasColimits [HasColimits T] : HasColimits (Arrow T) :=
204220
fun _ _ => inferInstance⟩
205221

@@ -230,6 +246,10 @@ instance hasLimit [i₁ : HasLimit (F ⋙ proj X G)] [i₂ : PreservesLimit (F
230246
instance hasLimitsOfShape [HasLimitsOfShape J A] [PreservesLimitsOfShape J G] :
231247
HasLimitsOfShape J (StructuredArrow X G) where
232248

249+
instance hasFiniteLimits [HasFiniteLimits A] [PreservesFiniteLimits G] :
250+
HasFiniteLimits (StructuredArrow X G) where
251+
out _ _ _ := inferInstance
252+
233253
instance hasLimitsOfSize [HasLimitsOfSize.{w, w'} A] [PreservesLimitsOfSize.{w, w'} G] :
234254
HasLimitsOfSize.{w, w'} (StructuredArrow X G) :=
235255
fun J hJ => by infer_instance⟩
@@ -246,6 +266,10 @@ noncomputable instance createsLimit [i : PreservesLimit (F ⋙ proj X G) G] :
246266
noncomputable instance createsLimitsOfShape [PreservesLimitsOfShape J G] :
247267
CreatesLimitsOfShape J (proj X G) where
248268

269+
noncomputable instance createsFiniteLimits [PreservesFiniteLimits G] :
270+
CreatesFiniteLimits (proj X G) where
271+
createsFiniteLimits _ _ _ := inferInstance
272+
249273
noncomputable instance createsLimitsOfSize [PreservesLimitsOfSize.{w, w'} G] :
250274
CreatesLimitsOfSize.{w, w'} (proj X G :) where
251275

@@ -277,6 +301,10 @@ instance hasColimit [i₁ : HasColimit (F ⋙ proj G X)] [i₂ : PreservesColimi
277301
instance hasColimitsOfShape [HasColimitsOfShape J A] [PreservesColimitsOfShape J G] :
278302
HasColimitsOfShape J (CostructuredArrow G X) where
279303

304+
instance hasFiniteColimits [HasFiniteColimits A] [PreservesFiniteColimits G] :
305+
HasFiniteColimits (CostructuredArrow G X) where
306+
out _ _ _ := inferInstance
307+
280308
instance hasColimitsOfSize [HasColimitsOfSize.{w, w'} A] [PreservesColimitsOfSize.{w, w'} G] :
281309
HasColimitsOfSize.{w, w'} (CostructuredArrow G X) :=
282310
fun _ _ => inferInstance⟩
@@ -293,6 +321,10 @@ noncomputable instance createsColimit [i : PreservesColimit (F ⋙ proj G X) G]
293321
noncomputable instance createsColimitsOfShape [PreservesColimitsOfShape J G] :
294322
CreatesColimitsOfShape J (proj G X) where
295323

324+
noncomputable instance createsFiniteColimits [PreservesFiniteColimits G] :
325+
CreatesFiniteColimits (proj G X) where
326+
createsFiniteColimits _ _ _ := inferInstance
327+
296328
noncomputable instance createsColimitsOfSize [PreservesColimitsOfSize.{w, w'} G] :
297329
CreatesColimitsOfSize.{w, w'} (proj G X :) where
298330

0 commit comments

Comments
 (0)