Skip to content

Commit 01b0e31

Browse files
committed
Merge branch 'erd1/sheafOverU' into qcoh-tilde-foo.1
2 parents 40b5774 + dfa4baf commit 01b0e31

5 files changed

Lines changed: 118 additions & 7 deletions

File tree

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8013,6 +8013,7 @@ public import Mathlib.Topology.Sheaves.Limits
80138013
public import Mathlib.Topology.Sheaves.LocalPredicate
80148014
public import Mathlib.Topology.Sheaves.LocallySurjective
80158015
public import Mathlib.Topology.Sheaves.MayerVietoris
8016+
public import Mathlib.Topology.Sheaves.Module
80168017
public import Mathlib.Topology.Sheaves.Over
80178018
public import Mathlib.Topology.Sheaves.PUnit
80188019
public import Mathlib.Topology.Sheaves.Points

Mathlib/CategoryTheory/Sites/Spaces.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ def grothendieckTopology : GrothendieckTopology (Opens T) where
5757
rcases hR hf _ hU with ⟨V, g, hg, hV⟩
5858
exact ⟨_, g ≫ f, hg, hV⟩
5959

60+
lemma mem_grothendieckTopology {U : Opens T} {S : Sieve U} :
61+
S ∈ Opens.grothendieckTopology T U ↔ ∀ x ∈ U, ∃ (V : _) (f : V ⟶ U), S f ∧ x ∈ V := .rfl
62+
63+
set_option backward.isDefEq.respectTransparency false in
6064
/-- The Grothendieck pretopology associated to a topological space. -/
6165
def pretopology : Pretopology (Opens T) where
6266
coverings X := {R | ∀ x ∈ X, ∃ (U : _) (f : U ⟶ X), R f ∧ x ∈ U}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/-
2+
Copyright (c) 2026 Andrew Yang. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Andrew Yang
5+
-/
6+
module
7+
8+
public import Mathlib.Algebra.Category.ModuleCat.Sheaf.PushforwardContinuous
9+
public import Mathlib.Algebra.Category.Ring.Limits
10+
public import Mathlib.Topology.Sheaves.Over
11+
public import Mathlib.Topology.Sheaves.SheafCondition.Sites
12+
13+
/-! # Specialized results for sheaf of modules over topological spaces -/
14+
15+
@[expose] public section
16+
17+
noncomputable section
18+
19+
open CategoryTheory
20+
21+
universe w v u
22+
23+
namespace TopologicalSpace.Opens
24+
25+
variable {X : TopCat.{u}} (U : Opens X) (R : X.Sheaf RingCat.{v})
26+
27+
set_option backward.isDefEq.respectTransparency false in
28+
/-- Sheaves of modules over `R.over U` are equivalent to sheaves of modules over `R |_ U`. -/
29+
def sheafOfModulesEquivOver :
30+
SheafOfModules.{w} (R.over U) ≌ SheafOfModules.{w} (U.sheafRestrict.obj R) := by
31+
refine SheafOfModules.pushforwardPushforwardEquivalence (eqv := U.overEquivalence.symm)
32+
(U.overPullbackSheafEquivOver.app _).inv (U.sheafRestrictSheafEquivOver.app _).inv rfl ?_
33+
ext : 2
34+
dsimp [sheafRestrictSheafEquivOver, Iso.isoCompInverse, -sheafRestrict_obj_val_map]
35+
simp only [Category.id_comp, Category.assoc, ← NatTrans.naturality]
36+
dsimp
37+
rw [← R.val.map_comp_assoc, eqToHom_map]
38+
simp [← NatTrans.comp_app, ← Sheaf.comp_val]
39+
40+
/-- `sheafOfModulesEquivOver` takes `R.over U` to `R |_ U`. -/
41+
def sheafOfModulesEquivOverUnit (R : X.Sheaf RingCat.{u}) :
42+
(U.sheafOfModulesEquivOver R).functor.obj (SheafOfModules.unit.{u} _) ≅
43+
SheafOfModules.unit.{u} _ := .refl _
44+
45+
/-- `sheafOfModulesEquivOver.inverse` takes `R |_ U` to `R.over U`. -/
46+
def sheafOfModulesEquivOverInverseUnit (R : X.Sheaf RingCat.{u}) :
47+
(U.sheafOfModulesEquivOver R).inverse.obj (SheafOfModules.unit.{u} _) ≅
48+
SheafOfModules.unit.{u} _ :=
49+
(U.sheafOfModulesEquivOver R).inverse.mapIso (U.sheafOfModulesEquivOverUnit R).symm ≪≫
50+
((U.sheafOfModulesEquivOver R).unitIso.app _).symm
51+
52+
end TopologicalSpace.Opens

Mathlib/Topology/Sheaves/Over.lean

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ Authors: Joël Riou
55
-/
66
module
77

8-
public import Mathlib.Topology.Sets.Opens
98
public import Mathlib.CategoryTheory.Comma.Over.Basic
9+
public import Mathlib.CategoryTheory.Sites.Over
10+
public import Mathlib.Topology.Sets.Opens
11+
public import Mathlib.Topology.Sheaves.SheafCondition.Sites
1012

1113
/-!
1214
# Opens and Over categories
@@ -15,11 +17,7 @@ In this file, given a topological space `X`, and `U : Opens X`,
1517
we show that the category `Over U` (whose objects are the
1618
`V : Opens X` equipped with a morphism `V ⟶ U`) is equivalent
1719
to the category `Opens U`.
18-
19-
## TODO
20-
* show that both functors of the equivalence `overEquivalence U` are continuous and
21-
induce an equivalence between `Sheaf ((Opens.grothendieckTopology X).over U) A`
22-
and `Sheaf (Opens.grothendieckTopology U) A` for any category `A`.
20+
This equivalence is bi-continuous, and thus induces an equivalence of sheaf categories.
2321
2422
-/
2523

@@ -31,7 +29,7 @@ open CategoryTheory Topology
3129

3230
namespace TopologicalSpace
3331

34-
variable {X : Type u} [TopologicalSpace X] (U : Opens X)
32+
variable {X : Type u} [TopologicalSpace X] (U : Opens X) {A : Type*} [Category* A]
3533

3634
namespace Opens
3735

@@ -53,6 +51,53 @@ def overEquivalence : Over U ≌ Opens ↥U where
5351
apply leOfHom V.hom)))
5452
counitIso := NatIso.ofComponents (fun V ↦ eqToIso (by aesop))
5553

54+
variable {U} in
55+
@[simp] lemma mem_overEquivalence_functor_obj {V : Over U} {x : U} :
56+
x ∈ U.overEquivalence.functor.obj V ↔ x.1 ∈ V.left := .rfl
57+
58+
section grothendieckTopology
59+
60+
instance : U.overEquivalence.functor.IsDenseSubsite
61+
((Opens.grothendieckTopology X).over U) (Opens.grothendieckTopology U) where
62+
functorPushforward_mem_iff {V S} := by
63+
simp only [Opens.mem_grothendieckTopology, Sieve.mem_functorPushforward_functor]
64+
constructor
65+
· intro H x hxV
66+
obtain ⟨W, f, hW, hxW⟩ := H ⟨x, V.hom.le hxV⟩ hxV
67+
exact ⟨_, ((U.overEquivalence.symm.toAdjunction.homEquiv _ _ ).symm f).left,
68+
⟨_, _, 𝟙 _, hW, rfl⟩, _, hxW, rfl⟩
69+
· intro H x hxV
70+
obtain ⟨W, f, ⟨W', hW'V, hWW', hSW'V, rfl⟩, hxW⟩ := H x hxV
71+
exact ⟨_, U.overEquivalence.functor.map hW'V,
72+
S.downward_closed hSW'V (U.overEquivalence.unitInv.app W'), hWW'.le hxW⟩
73+
74+
instance : U.overEquivalence.symm.inverse.IsDenseSubsite
75+
((Opens.grothendieckTopology X).over U) (Opens.grothendieckTopology U) :=
76+
inferInstanceAs (U.overEquivalence.functor.IsDenseSubsite ..)
77+
78+
instance : U.overEquivalence.inverse.IsDenseSubsite
79+
(Opens.grothendieckTopology U) ((Opens.grothendieckTopology X).over U) :=
80+
inferInstanceAs (U.overEquivalence.symm.functor.IsDenseSubsite ..)
81+
82+
/-- Sheaves on the over category of `U` is equivalent to sheaves on `U` as a topological space. -/
83+
@[simps!] def sheafEquivOver :
84+
Sheaf ((Opens.grothendieckTopology X).over U) A ≌ Sheaf (Opens.grothendieckTopology U) A :=
85+
U.overEquivalence.sheafCongr
86+
((Opens.grothendieckTopology X).over U) (Opens.grothendieckTopology U) A
87+
88+
/-- `overPullback` and `sheafRestrict` are isomorphic under `sheafEquivOver`. -/
89+
def overPullbackSheafEquivOver {X : TopCat} (U : Opens X) :
90+
(Opens.grothendieckTopology X).overPullback A U ⋙ U.sheafEquivOver.functor ≅
91+
U.sheafRestrict := .refl _
92+
93+
/-- `overPullback` and `sheafRestrict` are isomorphic under `sheafEquivOver`. -/
94+
def sheafRestrictSheafEquivOver {X : TopCat} (U : Opens X) :
95+
U.sheafRestrict ⋙ U.sheafEquivOver.inverse ≅
96+
(Opens.grothendieckTopology X).overPullback A U :=
97+
U.overPullbackSheafEquivOver.isoCompInverse.symm
98+
99+
end grothendieckTopology
100+
56101
end Opens
57102

58103
end TopologicalSpace

Mathlib/Topology/Sheaves/SheafCondition/Sites.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,15 @@ theorem TopCat.Presheaf.isSheaf_of_isOpenEmbedding (h : IsOpenEmbedding f) (hF :
174174
have := h.functor_isContinuous
175175
exact Functor.op_comp_isSheaf _ _ _ ⟨_, hF⟩
176176

177+
/-- The restriction functor of a sheaf to an open subspace. -/
178+
@[simps!]
179+
def TopologicalSpace.Opens.sheafRestrict (U : Opens X) :
180+
Sheaf (Opens.grothendieckTopology X) C ⥤ Sheaf (Opens.grothendieckTopology U) C :=
181+
haveI H : IsOpenEmbedding (TopCat.Hom.hom (X := .of U) (Y := X) ⟨_, continuous_subtype_val⟩) :=
182+
U.isOpenEmbedding
183+
haveI := H.functor_isContinuous
184+
H.isOpenMap.functor.sheafPushforwardContinuous C _ _
185+
177186
variable (f)
178187

179188
instance : RepresentablyFlat (Opens.map f) := by

0 commit comments

Comments
 (0)