@@ -5,6 +5,7 @@ Authors: Christian Merten
55-/
66import Mathlib.CategoryTheory.MorphismProperty.Limits
77import Mathlib.CategoryTheory.Sites.Pretopology
8+ import Mathlib.CategoryTheory.Sites.Coverage
89
910/-!
1011# The site induced by a morphism property
@@ -22,44 +23,106 @@ namespace CategoryTheory
2223
2324open Limits
2425
25- variable {C : Type *} [Category C] [HasPullbacks C]
26+ variable {C : Type *} [Category C]
2627
2728namespace MorphismProperty
2829
30+ variable {P Q : MorphismProperty C}
31+
32+ /-- This is the precoverage on `C` where covering presieves are those where every
33+ morphism satisfies `P`. -/
34+ def precoverage (P : MorphismProperty C) : Precoverage C where
35+ coverings X S := ∀ ⦃Y : C⦄ ⦃f : Y ⟶ X⦄, S f → P f
36+
37+ @[simp]
38+ lemma ofArrows_mem_precoverage {X : C} {ι : Type *} {Y : ι → C} {f : ∀ i, Y i ⟶ X} :
39+ .ofArrows Y f ∈ precoverage P X ↔ ∀ i, P (f i) :=
40+ ⟨fun h i ↦ h ⟨i⟩, fun h _ g ⟨i⟩ ↦ h i⟩
41+
42+ instance [P.ContainsIdentities] [P.RespectsIso] : P.precoverage.HasIsos where
43+ mem_coverings_of_isIso f _ _ _ := fun ⟨⟩ ↦ P.of_isIso f
44+
45+ instance [P.IsStableUnderBaseChange] : P.precoverage.IsStableUnderBaseChange where
46+ mem_coverings_of_isPullback {ι} S X f hf T g W p₁ p₂ h Z g hg := by
47+ obtain ⟨i⟩ := hg
48+ exact P.of_isPullback (h i).flip (hf ⟨i⟩)
49+
50+ instance [P.IsStableUnderComposition] : P.precoverage.IsStableUnderComposition where
51+ comp_mem_coverings {ι} S X f hf σ Y g hg Z p := by
52+ intro ⟨i⟩
53+ exact P.comp_mem _ _ (hg _ ⟨i.2 ⟩) (hf ⟨i.1 ⟩)
54+
55+ lemma precoverage_monotone (hPQ : P ≤ Q) : precoverage P ≤ precoverage Q :=
56+ fun _ _ hR _ _ hg ↦ hPQ _ (hR hg)
57+
58+ variable (P Q) in
59+ lemma precoverage_inf : precoverage (P ⊓ Q) = precoverage P ⊓ precoverage Q := by
60+ ext X R
61+ exact ⟨fun hS ↦ ⟨fun _ _ hf ↦ (hS hf).left, fun _ _ hf ↦ (hS hf).right⟩,
62+ fun h ↦ fun _ _ hf ↦ ⟨h.left hf, h.right hf⟩⟩
63+
64+ /-- If `P` is stable under base change, this is the coverage on `C` where covering presieves
65+ are those where every morphism satisfies `P`. -/
66+ @ [simps toPrecoverage]
67+ def coverage (P : MorphismProperty C) [P.IsStableUnderBaseChange] [P.HasPullbacks] :
68+ Coverage C where
69+ __ := precoverage P
70+ pullback X Y f S hS := by
71+ have : S.HasPullbacks f := ⟨fun {W} h hh ↦ P.hasPullback _ (hS hh)⟩
72+ refine ⟨S.pullbackArrows f, ?_, .pullbackArrows f S⟩
73+ intro Z g ⟨W, a, h⟩
74+ have := S.hasPullback f h
75+ exact P.pullback_snd _ _ (hS h)
76+
77+ /-- If `P` is stable under base change, it induces a Grothendieck topology: the one associated
78+ to `coverage P`. -/
79+ abbrev grothendieckTopology (P : MorphismProperty C) [P.IsStableUnderBaseChange] [P.HasPullbacks] :
80+ GrothendieckTopology C :=
81+ P.coverage.toGrothendieck
82+
83+ section HasPullbacks
84+
85+ variable [P.IsStableUnderBaseChange] [HasPullbacks C]
86+
2987/-- If `P` is a multiplicative morphism property which is stable under base change on a category
3088`C` with pullbacks, then `P` induces a pretopology, where coverings are given by presieves whose
3189elements satisfy `P`. -/
90+ @ [simps! toPrecoverage]
3291def pretopology (P : MorphismProperty C) [P.IsMultiplicative] [P.IsStableUnderBaseChange] :
33- Pretopology C where
34- coverings X S := ∀ {Y : C} {f : Y ⟶ X}, S f → P f
35- has_isos X Y f h Z g hg := by
36- cases hg
37- exact P.of_isIso f
38- pullbacks X Y f S hS Z g hg := by
39- obtain ⟨Z, g, hg⟩ := hg
40- apply P.pullback_snd g f (hS hg)
41- transitive X S Ti hS hTi Y f hf := by
42- obtain ⟨Z, g, h, H, H', rfl⟩ := hf
43- exact comp_mem _ _ _ (hTi h H H') (hS H)
44-
45- /-- To a morphism property `P` satisfying the conditions of `MorphismProperty.pretopology`, we
46- associate the Grothendieck topology generated by `P.pretopology`. -/
47- abbrev grothendieckTopology (P : MorphismProperty C) [P.IsMultiplicative]
48- [P.IsStableUnderBaseChange] : GrothendieckTopology C :=
49- P.pretopology.toGrothendieck
92+ Pretopology C :=
93+ (precoverage P).toPretopology
94+
95+ /-- If `P` is also multiplicative, the coverage induced by `P` is the pretopology induced by `P`. -/
96+ lemma coverage_eq_toCoverage_pretopology [P.IsMultiplicative] :
97+ P.coverage = P.pretopology.toCoverage := rfl
98+
99+ /-- If `P` is also multiplicative, the topology induced by `P` is the topology induced by the
100+ pretopology induced by `P`. -/
101+ lemma grothendieckTopology_eq_toGrothendieck_pretopology [P.IsMultiplicative] :
102+ P.grothendieckTopology = P.pretopology.toGrothendieck := by
103+ rw [grothendieckTopology, coverage_eq_toCoverage_pretopology,
104+ Pretopology.toGrothendieck_toCoverage]
105+
106+ section
50107
51108variable {P Q : MorphismProperty C}
52109 [P.IsMultiplicative] [P.IsStableUnderBaseChange]
53110 [Q.IsMultiplicative] [Q.IsStableUnderBaseChange]
54111
55- lemma pretopology_le (hPQ : P ≤ Q) : P.pretopology ≤ Q.pretopology :=
56- fun _ _ hS _ f hf ↦ hPQ f (hS hf)
112+ lemma pretopology_monotone (hPQ : P ≤ Q) : P.pretopology ≤ Q.pretopology :=
113+ precoverage_monotone hPQ
114+
115+ @ [deprecated (since := "2025-08-28" )]
116+ alias pretopology_le := pretopology_monotone
57117
58118variable (P Q) in
59- lemma pretopology_inf :
60- (P ⊓ Q).pretopology = P.pretopology ⊓ Q.pretopology := by
61- ext X S
62- exact ⟨fun hS ↦ ⟨fun hf ↦ (hS hf).left, fun hf ↦ (hS hf).right⟩,
63- fun h ↦ fun hf ↦ ⟨h.left hf, h.right hf⟩⟩
119+ lemma pretopology_inf : (P ⊓ Q).pretopology = P.pretopology ⊓ Q.pretopology := by
120+ ext : 1
121+ simp only [pretopology_toPrecoverage, precoverage_inf]
122+ rfl
123+
124+ end
125+
126+ end HasPullbacks
64127
65128end CategoryTheory.MorphismProperty
0 commit comments