@@ -94,6 +94,29 @@ abbrev opensFunctor : Opens X ⥤ Opens Y :=
94
94
/-- `f ''ᵁ U` is notation for the image (as an open set) of `U` under an open immersion `f`. -/
95
95
scoped [AlgebraicGeometry] notation3:90 f:91 " ''ᵁ " U:90 => (Scheme.Hom.opensFunctor f).obj U
96
96
97
+ lemma image_le_image_of_le {U V : Opens X} (e : U ≤ V) : f ''ᵁ U ≤ f ''ᵁ V := by
98
+ rintro a ⟨u, hu, rfl⟩
99
+ exact Set.mem_image_of_mem (⇑f.val.base) (e hu)
100
+
101
+ @[simp]
102
+ lemma opensFunctor_map_homOfLE {U V : Opens X} (e : U ≤ V) :
103
+ (Scheme.Hom.opensFunctor f).map (homOfLE e) = homOfLE (f.image_le_image_of_le e) :=
104
+ rfl
105
+
106
+ @[simp]
107
+ lemma image_top_eq_opensRange : f ''ᵁ ⊤ = f.opensRange := by
108
+ apply Opens.ext
109
+ simp
110
+
111
+ @[simp]
112
+ lemma preimage_image_eq (U : Opens X) : f ⁻¹ᵁ f ''ᵁ U = U := by
113
+ apply Opens.ext
114
+ simp [Set.preimage_image_eq _ f.openEmbedding.inj]
115
+
116
+ lemma image_preimage_eq_opensRange_inter (U : Opens Y) : f ''ᵁ f ⁻¹ᵁ U = f.opensRange ⊓ U := by
117
+ apply Opens.ext
118
+ simp [Set.image_preimage_eq_range_inter]
119
+
97
120
/-- The isomorphism `Γ(X, U) ⟶ Γ(Y, f(U))` induced by an open immersion `f : X ⟶ Y`. -/
98
121
def invApp (U) : Γ(X, U) ⟶ Γ(Y, f ''ᵁ U) :=
99
122
LocallyRingedSpace.IsOpenImmersion.invApp f U
@@ -131,6 +154,17 @@ theorem invApp_app (U) :
131
154
(eqToHom (Opens.ext <| by exact Set.preimage_image_eq U.1 H.base_open.inj)).op :=
132
155
(PresheafedSpace.IsOpenImmersion.invApp_app _ _).trans (by rw [eqToHom_op])
133
156
157
+ @[reassoc (attr := simp), elementwise]
158
+ lemma appLE_invApp {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] {U : Opens Y}
159
+ {V : Opens X} (e : V ≤ f ⁻¹ᵁ U) :
160
+ Scheme.Hom.appLE f U V e ≫ Scheme.Hom.invApp f V =
161
+ Y.presheaf.map (homOfLE <| (f.image_le_image_of_le e).trans
162
+ (f.image_preimage_eq_opensRange_inter U ▸ inf_le_right)).op := by
163
+ simp only [Scheme.Hom.appLE, Category.assoc, Scheme.Hom.invApp_naturality, Functor.op_obj,
164
+ Functor.op_map, Quiver.Hom.unop_op, Scheme.Hom.opensFunctor_map_homOfLE,
165
+ Scheme.Hom.app_invApp_assoc, Opens.carrier_eq_coe]
166
+ erw [← Functor.map_comp, ← op_comp, homOfLE_comp]
167
+
134
168
end Scheme.Hom
135
169
136
170
/-- The open sets of an open subscheme corresponds to the open sets containing in the image. -/
@@ -547,6 +581,33 @@ theorem lift_app {X Y U : Scheme.{u}} (f : U ⟶ Y) (g : X ⟶ Y) [IsOpenImmersi
547
581
IsOpenImmersion.app_eq_invApp_app_of_comp_eq _ _ _ (lift_fac _ _ _).symm _
548
582
#align algebraic_geometry.IsOpenImmersion.lift_app AlgebraicGeometry.IsOpenImmersion.lift_app
549
583
584
+ /-- If `f` is an open immersion `X ⟶ Y`, the global sections of `X`
585
+ are naturally isomorphic to the sections of `Y` over the image of `f`. -/
586
+ noncomputable
587
+ def ΓIso {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] (U : Opens Y) :
588
+ Γ(X, f⁻¹ᵁ U) ≅ Γ(Y, f.opensRange ⊓ U) :=
589
+ asIso (Scheme.Hom.invApp f <| f⁻¹ᵁ U) ≪≫
590
+ Y.presheaf.mapIso (eqToIso <| (f.image_preimage_eq_opensRange_inter U).symm).op
591
+
592
+ @[simp]
593
+ lemma ΓIso_inv {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] (U : Opens Y) :
594
+ (ΓIso f U).inv = f.appLE (f.opensRange ⊓ U) (f⁻¹ᵁ U)
595
+ (by rw [← f.image_preimage_eq_opensRange_inter, f.preimage_image_eq]) := by
596
+ simp only [ΓIso, Iso.trans_inv, Functor.mapIso_inv, Iso.op_inv, eqToIso.inv, eqToHom_op,
597
+ asIso_inv, IsIso.comp_inv_eq, Scheme.Hom.appLE_invApp]
598
+ rfl
599
+
600
+ @[reassoc, elementwise]
601
+ lemma map_ΓIso_inv {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] (U : Opens Y) :
602
+ Y.presheaf.map (homOfLE inf_le_right).op ≫ (ΓIso f U).inv = f.app U := by
603
+ simp [Scheme.Hom.appLE_eq_app]
604
+
605
+ @[reassoc, elementwise]
606
+ lemma ΓIso_hom_map {X Y : Scheme.{u}} (f : X ⟶ Y) [IsOpenImmersion f] (U : Opens Y) :
607
+ f.app U ≫ (ΓIso f U).hom = Y.presheaf.map (homOfLE inf_le_right).op := by
608
+ rw [← map_ΓIso_inv]
609
+ simp [-ΓIso_inv]
610
+
550
611
end IsOpenImmersion
551
612
552
613
namespace Scheme
0 commit comments