|
8 | 8 | public import Mathlib.Geometry.RingedSpace.OpenImmersion |
9 | 9 | public import Mathlib.AlgebraicGeometry.Scheme |
10 | 10 | public import Mathlib.CategoryTheory.MorphismProperty.Limits |
| 11 | +public import Mathlib.CategoryTheory.Limits.Preorder |
11 | 12 |
|
12 | 13 | /-! |
13 | 14 | # Open immersions of schemes |
@@ -87,6 +88,37 @@ theorem mem_opensRange {f : X ⟶ Y} [IsOpenImmersion f] {y : Y} : |
87 | 88 | def opensFunctor : X.Opens ⥤ Y.Opens := |
88 | 89 | LocallyRingedSpace.IsOpenImmersion.opensFunctor f.toLRSHom |
89 | 90 |
|
| 91 | +/-- The adjunction image-preimage adjunction for an open immersion of schemes. -/ |
| 92 | +def opensFunctorAdjunction : f.opensFunctor ⊣ TopologicalSpace.Opens.map f.base := |
| 93 | + IsOpenMap.adjunction ‹IsOpenImmersion f›.base_open.isOpenMap |
| 94 | + |
| 95 | +instance : f.opensFunctor.IsLeftAdjoint := |
| 96 | + f.opensFunctorAdjunction.isLeftAdjoint |
| 97 | + |
| 98 | +instance : f.opensFunctor.IsCocontinuous (Opens.grothendieckTopology _) |
| 99 | + (Opens.grothendieckTopology _) := by |
| 100 | + rw [f.opensFunctorAdjunction.isCocontinuous_iff_coverPreserving] |
| 101 | + exact coverPreserving_opens_map f.base |
| 102 | + |
| 103 | +instance : f.opensFunctor.Full := |
| 104 | + have : Mono f.base := (TopCat.mono_iff_injective f.base).mpr f.isOpenEmbedding.injective |
| 105 | + inferInstanceAs f.isOpenEmbedding.functor.Full |
| 106 | + |
| 107 | +lemma coverPreserving_opensFunctor : |
| 108 | + CoverPreserving (Opens.grothendieckTopology _) (Opens.grothendieckTopology _) f.opensFunctor := |
| 109 | + f.isOpenEmbedding.isOpenMap.coverPreserving |
| 110 | + |
| 111 | +instance {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] : |
| 112 | + PreservesLimitsOfShape WalkingCospan (Scheme.Hom.opensFunctor f) := by |
| 113 | + dsimp [Scheme.Hom.opensFunctor] |
| 114 | + infer_instance |
| 115 | + |
| 116 | +instance {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] : |
| 117 | + f.opensFunctor.PreservesOneHypercovers (Opens.grothendieckTopology _) |
| 118 | + (Opens.grothendieckTopology _) := by |
| 119 | + refine Functor.PreservesOneHypercovers.of_coverPreserving ?_ |
| 120 | + exact Scheme.Hom.coverPreserving_opensFunctor f |
| 121 | + |
90 | 122 | /-- `f ''ᵁ U` is notation for the image (as an open set) of `U` under an open immersion `f`. |
91 | 123 | The preferred name in lemmas is `image` and it should be treated as an infix. -/ |
92 | 124 | scoped[AlgebraicGeometry] notation3:90 f:91 " ''ᵁ " U:90 => (Scheme.Hom.opensFunctor f).obj U |
@@ -206,6 +238,13 @@ theorem appIso_hom' (U) : |
206 | 238 | (f.appIso U).hom = f.appLE (f ''ᵁ U) U (preimage_image_eq f U).ge := |
207 | 239 | f.appIso_hom U |
208 | 240 |
|
| 241 | +set_option backward.defeqAttrib.useBackward true in |
| 242 | +@[reassoc (attr := simp)] |
| 243 | +lemma appIso_hom_naturality {U V : X.Opens} (i : op U ⟶ op V) : |
| 244 | + dsimp% Y.presheaf.map (f.opensFunctor.op.map i) ≫ (f.appIso V).hom = |
| 245 | + (f.appIso U).hom ≫ X.presheaf.map i := by |
| 246 | + simp [← cancel_mono (f.appIso V).inv] |
| 247 | + |
209 | 248 | @[reassoc (attr := simp)] |
210 | 249 | theorem app_appIso_inv (U) : |
211 | 250 | f.app U ≫ (f.appIso (f ⁻¹ᵁ U)).inv = |
|
0 commit comments