Skip to content

Commit ea8a7df

Browse files
committed
feat(CategoryTheory): Limits in Subobject X (#29766)
Adds limits to `Subobject X`. Together with #29253, this will show existence of glbs in the poset of subobjects. Co-authored-by: Christian Merten [c.j.merten@uu.nl](mailto:c.j.merten@uu.nl)
1 parent 453f274 commit ea8a7df

File tree

4 files changed

+57
-6
lines changed

4 files changed

+57
-6
lines changed

Mathlib/CategoryTheory/Subobject/Basic.lean

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2020 Bhavik Mehta. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Bhavik Mehta, Kim Morrison
55
-/
6+
import Mathlib.CategoryTheory.Limits.Skeleton
67
import Mathlib.CategoryTheory.Subobject.MonoOver
78
import Mathlib.CategoryTheory.Skeletal
89
import Mathlib.CategoryTheory.ConcreteCategory.Basic
@@ -69,7 +70,7 @@ In fact, in an abelian category (I'm not sure in what generality beyond that),
6970
-/
7071

7172

72-
universe v₁ v₂ u₁ u₂
73+
universe w' w v₁ v₂ v₃ u₁ u₂ u₃
7374

7475
noncomputable section
7576

@@ -516,6 +517,23 @@ def lowerEquivalence {A : C} {B : D} (e : MonoOver A ≌ MonoOver B) : Subobject
516517
· exact (ThinSkeleton.map_comp_eq _ _).symm
517518
· exact ThinSkeleton.map_id_eq.symm
518519

520+
section Limits
521+
522+
variable {J : Type u₃} [Category.{v₃} J]
523+
524+
instance hasLimitsOfShape [HasLimitsOfShape J (Over X)] :
525+
HasLimitsOfShape J (Subobject X) := by
526+
apply hasLimitsOfShape_thinSkeleton
527+
528+
instance hasFiniteLimits [HasFiniteLimits (Over X)] : HasFiniteLimits (Subobject X) where
529+
out _ _ _ := by infer_instance
530+
531+
instance hasLimitsOfSize [HasLimitsOfSize.{w, w'} (Over X)] :
532+
HasLimitsOfSize.{w, w'} (Subobject X) where
533+
has_limits_of_shape _ _ := by infer_instance
534+
535+
end Limits
536+
519537
section Pullback
520538

521539
variable [HasPullbacks C]

Mathlib/CategoryTheory/Subobject/Lattice.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,7 @@ theorem bot_arrow {B : C} : (⊥ : Subobject B).arrow = 0 :=
310310
theorem bot_factors_iff_zero {A B : C} (f : A ⟶ B) : (⊥ : Subobject B).Factors f ↔ f = 0 :=
311311
by
312312
rintro ⟨h, rfl⟩
313-
simp only [MonoOver.bot_arrow_eq_zero, Functor.id_obj, Functor.const_obj_obj,
314-
MonoOver.bot_left, comp_zero],
313+
simp only [MonoOver.bot_arrow_eq_zero, MonoOver.bot_left, comp_zero],
315314
by
316315
rintro rfl
317316
exact ⟨0, by simp⟩⟩

Mathlib/CategoryTheory/Subobject/MonoOver.lean

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ Authors: Bhavik Mehta, Kim Morrison
66
import Mathlib.CategoryTheory.Comma.Over.Pullback
77
import Mathlib.CategoryTheory.Adjunction.Reflective
88
import Mathlib.CategoryTheory.Adjunction.Restrict
9+
import Mathlib.CategoryTheory.Limits.FullSubcategory
910
import Mathlib.CategoryTheory.Limits.Shapes.Images
1011
import Mathlib.CategoryTheory.Limits.Shapes.Pullback.CommSq
1112
import Mathlib.CategoryTheory.Functor.ReflectsIso.Basic
13+
import Mathlib.CategoryTheory.WithTerminal.Cone
1214

1315
/-!
1416
# Monomorphisms over a fixed object
@@ -36,7 +38,7 @@ and was ported to mathlib by Kim Morrison.
3638
-/
3739

3840

39-
universe v₁ v₂ u₁ u₂
41+
universe w' w v₁ v₂ v₃ u₁ u₂ u₃
4042

4143
noncomputable section
4244

@@ -47,13 +49,17 @@ open CategoryTheory CategoryTheory.Category CategoryTheory.Limits CategoryTheory
4749
variable {C : Type u₁} [Category.{v₁} C] {X Y Z : C}
4850
variable {D : Type u₂} [Category.{v₂} D]
4951

52+
/-- The object property in `Over X` of the structure morphism being a monomorphism. -/
53+
abbrev Over.isMono (X : C) : ObjectProperty (Over X) :=
54+
fun f : Over X => Mono f.hom
55+
5056
/-- The category of monomorphisms into `X` as a full subcategory of the over category.
5157
This isn't skeletal, so it's not a partial order.
5258
5359
Later we define `Subobject X` as the quotient of this by isomorphisms.
5460
-/
5561
def MonoOver (X : C) :=
56-
ObjectProperty.FullSubcategory fun f : Over X => Mono f.hom
62+
ObjectProperty.FullSubcategory (Over.isMono X)
5763

5864
instance (X : C) : Category (MonoOver X) :=
5965
ObjectProperty.FullSubcategory.category _
@@ -202,6 +208,35 @@ def slice {A : C} {f : Over A}
202208
MonoOver.liftComp _ _ _ _ ≪≫
203209
MonoOver.liftIso _ _ f.iteratedSliceEquiv.counitIso ≪≫ MonoOver.liftId
204210

211+
section Limits
212+
213+
variable {J : Type u₃} [Category.{v₃} J] (X : C)
214+
215+
lemma closedUnderLimitsOfShape_isMono :
216+
ClosedUnderLimitsOfShape J (Over.isMono X) := by
217+
refine fun F _ hc p ↦ ⟨fun g h e ↦ ?_⟩
218+
apply IsLimit.hom_ext <| WithTerminal.isLimitEquiv.invFun hc
219+
intro j; cases j with
220+
| of j => have := p j; rw [← cancel_mono ((F.obj j).hom)]; simpa
221+
| star => exact e
222+
223+
instance hasLimit (F : J ⥤ MonoOver X) [HasLimit (F ⋙ (Over.isMono X).ι)] :
224+
HasLimit F := by
225+
apply hasLimit_of_closedUnderLimits (closedUnderLimitsOfShape_isMono X)
226+
227+
instance hasLimitsOfShape [HasLimitsOfShape J (Over X)] :
228+
HasLimitsOfShape J (MonoOver X) := by
229+
apply hasLimitsOfShape_of_closedUnderLimits (closedUnderLimitsOfShape_isMono X)
230+
231+
instance hasFiniteLimits [HasFiniteLimits (Over X)] : HasFiniteLimits (MonoOver X) where
232+
out _ _ _ := by apply hasLimitsOfShape X
233+
234+
instance hasLimitsOfSize [HasLimitsOfSize.{w, w'} (Over X)] :
235+
HasLimitsOfSize.{w, w'} (MonoOver X) where
236+
has_limits_of_shape _ _ := by apply hasLimitsOfShape X
237+
238+
end Limits
239+
205240
section Pullback
206241

207242
variable [HasPullbacks C]

Mathlib/CategoryTheory/Subpresheaf/Subobject.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ noncomputable def equivalenceMonoOver : Subpresheaf F ≌ MonoOver F where
3232
inverse :=
3333
{ obj X := Subpresheaf.range X.arrow
3434
map {X Y} f := homOfLE (by
35-
dsimp
3635
rw [← MonoOver.w f]
3736
apply range_comp_le ) }
3837
unitIso := NatIso.ofComponents (fun A ↦ eqToIso (by simp))

0 commit comments

Comments
 (0)