@@ -45,100 +45,13 @@ open CategoryTheory Category Limits Sieve
4545
4646variable {C : Type u} [Category.{v} C]
4747
48- namespace Sheaf
49-
5048variable {P : Cᵒᵖ ⥤ Type v} {X : C} (J : GrothendieckTopology C)
5149
52- /--
53- To show `P` is a sheaf for the binding of `U` with `B`, it suffices to show that `P` is a sheaf for
54- `U`, that `P` is a sheaf for each sieve in `B`, and that it is separated for any pullback of any
55- sieve in `B`.
50+ namespace Sheaf
5651
57- This is mostly an auxiliary lemma to show `isSheafFor_trans`.
58- Adapted from [ Elephant ] , Lemma C2.1.7(i) with suggestions as mentioned in
59- https://math.stackexchange.com/a/358709/
60- -/
61- theorem isSheafFor_bind (P : Cᵒᵖ ⥤ Type v) (U : Sieve X) (B : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄, U f → Sieve Y)
62- (hU : Presieve.IsSheafFor P (U : Presieve X))
63- (hB : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : U f), Presieve.IsSheafFor P (B hf : Presieve Y))
64- (hB' : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (h : U f) ⦃Z⦄ (g : Z ⟶ Y),
65- Presieve.IsSeparatedFor P (((B h).pullback g) : Presieve Z)) :
66- Presieve.IsSheafFor P (Sieve.bind (U : Presieve X) B : Presieve X) := by
67- intro s hs
68- let y : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : U f), Presieve.FamilyOfElements P (B hf : Presieve Y) :=
69- fun Y f hf Z g hg => s _ (Presieve.bind_comp _ _ hg)
70- have hy : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : U f), (y hf).Compatible := by
71- intro Y f H Y₁ Y₂ Z g₁ g₂ f₁ f₂ hf₁ hf₂ comm
72- apply hs
73- apply reassoc_of% comm
74- let t : Presieve.FamilyOfElements P (U : Presieve X) :=
75- fun Y f hf => (hB hf).amalgamate (y hf) (hy hf)
76- have ht : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (hf : U f), (y hf).IsAmalgamation (t f hf) := fun Y f hf =>
77- (hB hf).isAmalgamation _
78- have hT : t.Compatible := by
79- rw [Presieve.compatible_iff_sieveCompatible]
80- intro Z W f h hf
81- apply (hB (U.downward_closed hf h)).isSeparatedFor.ext
82- intro Y l hl
83- apply (hB' hf (l ≫ h)).ext
84- intro M m hm
85- have : bind U B (m ≫ l ≫ h ≫ f) := by simpa using (Presieve.bind_comp f hf hm : bind U B _)
86- trans s (m ≫ l ≫ h ≫ f) this
87- · have := ht (U.downward_closed hf h) _ ((B _).downward_closed hl m)
88- rw [op_comp, FunctorToTypes.map_comp_apply] at this
89- grind
90- · have h : s _ _ = _ := (ht hf _ hm).symm
91- -- Porting note: this was done by `simp only [assoc] at`
92- conv_lhs at h => congr; rw [assoc, assoc]
93- rw [h]
94- simp only [op_comp, assoc, FunctorToTypes.map_comp_apply]
95- refine ⟨hU.amalgamate t hT, ?_, ?_⟩
96- · rintro Z _ ⟨Y, f, g, hg, hf, rfl⟩
97- rw [op_comp, FunctorToTypes.map_comp_apply, Presieve.IsSheafFor.valid_glue _ _ _ hg]
98- apply ht hg _ hf
99- · intro y hy
100- apply hU.isSeparatedFor.ext
101- intro Y f hf
102- apply (hB hf).isSeparatedFor.ext
103- intro Z g hg
104- rw [← FunctorToTypes.map_comp_apply, ← op_comp, hy _ (Presieve.bind_comp _ _ hg),
105- hU.valid_glue _ _ hf, ht hf _ hg]
106-
107- /-- Given two sieves `R` and `S`, to show that `P` is a sheaf for `S`, we can show:
108- * `P` is a sheaf for `R`
109- * `P` is a sheaf for the pullback of `S` along any arrow in `R`
110- * `P` is separated for the pullback of `R` along any arrow in `S`.
111-
112- This is mostly an auxiliary lemma to construct `finestTopology`.
113- Adapted from [ Elephant ] , Lemma C2.1.7(ii) with suggestions as mentioned in
114- https://math.stackexchange.com/a/358709
115- -/
116- theorem isSheafFor_trans (P : Cᵒᵖ ⥤ Type v) (R S : Sieve X)
117- (hR : Presieve.IsSheafFor P (R : Presieve X))
118- (hR' : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (_ : S f), Presieve.IsSeparatedFor P (R.pullback f : Presieve Y))
119- (hS : ∀ ⦃Y⦄ ⦃f : Y ⟶ X⦄ (_ : R f), Presieve.IsSheafFor P (S.pullback f : Presieve Y)) :
120- Presieve.IsSheafFor P (S : Presieve X) := by
121- have : (bind R fun Y f _ => S.pullback f : Presieve X) ≤ S := by
122- rintro Z f ⟨W, f, g, hg, hf : S _, rfl⟩
123- apply hf
124- apply Presieve.isSheafFor_subsieve_aux P this
125- · apply isSheafFor_bind _ _ _ hR hS
126- intro Y f hf Z g
127- rw [← pullback_comp]
128- apply (hS (R.downward_closed hf _)).isSeparatedFor
129- · intro Y f hf
130- have : Sieve.pullback f (bind R fun T (k : T ⟶ X) (_ : R k) => pullback k S) =
131- R.pullback f := by
132- ext Z g
133- constructor
134- · rintro ⟨W, k, l, hl, _, comm⟩
135- rw [pullback_apply, ← comm]
136- simp [hl]
137- · intro a
138- refine ⟨Z, 𝟙 Z, _, a, ?_⟩
139- simp [hf]
140- rw [this]
141- apply hR' hf
52+ @ [deprecated (since := "2026-02-06" )] alias isSheafFor_bind := Presieve.isSheafFor_bind
53+
54+ @ [deprecated (since := "2026-02-06" )] alias isSheafFor_trans := Presieve.isSheafFor_trans
14255
14356/-- Construct the finest (largest) Grothendieck topology for which the given presheaf is a sheaf. -/
14457@ [stacks 00Z9 "This is a special case of the Stacks entry, but following a different
@@ -154,7 +67,7 @@ def finestTopologySingle (P : Cᵒᵖ ⥤ Type v) : GrothendieckTopology C where
15467 transitive' X S hS R hR Z g := by
15568 -- This is the hard part of the construction, showing that the given set of sieves satisfies
15669 -- the transitivity axiom.
157- refine isSheafFor_trans P (pullback g S) _ (hS Z g) ?_ ?_
70+ refine Presieve. isSheafFor_trans P (pullback g S) _ (hS Z g) ?_ ?_
15871 · intro Y f _
15972 rw [← pullback_comp]
16073 apply (hS _ _).isSeparatedFor
0 commit comments