@@ -5,8 +5,10 @@ Authors: Joël Riou
55-/
66module
77
8- public import Mathlib.Topology.Sets.Opens
98public 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`,
1517we show that the category `Over U` (whose objects are the
1618`V : Opens X` equipped with a morphism `V ⟶ U`) is equivalent
1719to 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
3230namespace 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
3634namespace 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+
56101end Opens
57102
58103end TopologicalSpace
0 commit comments