|
| 1 | +/- |
| 2 | +Copyright (c) 2022 Jujian Zhang. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Jujian Zhang |
| 5 | +-/ |
| 6 | +import algebraic_geometry.projective_spectrum.topology |
| 7 | +import topology.sheaves.local_predicate |
| 8 | +import ring_theory.graded_algebra.homogeneous_localization |
| 9 | +import algebraic_geometry.locally_ringed_space |
| 10 | + |
| 11 | +/-! |
| 12 | +# The structure sheaf on `projective_spectrum 𝒜`. |
| 13 | +
|
| 14 | +In `src/algebraic_geometry/topology.lean`, we have given a topology on `projective_spectrum 𝒜`; in |
| 15 | +this file we will construct a sheaf on `projective_spectrum 𝒜`. |
| 16 | +
|
| 17 | +## Notation |
| 18 | +- `R` is a commutative semiring; |
| 19 | +- `A` is a commutative ring and an `R`-algebra; |
| 20 | +- `𝒜 : ℕ → submodule R A` is the grading of `A`; |
| 21 | +- `U` is opposite object of some open subset of `projective_spectrum.Top`. |
| 22 | +
|
| 23 | +## Main definitions and results |
| 24 | +We define the structure sheaf as the subsheaf of all dependent function |
| 25 | +`f : Π x : U, homogeneous_localization 𝒜 x` such that `f` is locally expressible as ratio of two |
| 26 | +elements of the *same grading*, i.e. `∀ y ∈ U, ∃ (V ⊆ U) (i : ℕ) (a b ∈ 𝒜 i), ∀ z ∈ V, f z = a / b`. |
| 27 | +
|
| 28 | +* `algebraic_geometry.projective_spectrum.structure_sheaf.is_locally_fraction`: the predicate that |
| 29 | + a dependent function is locally expressible as a ratio of two elements of the same grading. |
| 30 | +* `algebraic_geometry.projective_spectrum.structure_sheaf.sections_subring`: the dependent functions |
| 31 | + satisfying the above local property forms a subring of all dependent functions |
| 32 | + `Π x : U, homogeneous_localization 𝒜 x`. |
| 33 | +* `algebraic_geometry.Proj.structure_sheaf`: the sheaf with `U ↦ sections_subring U` and natural |
| 34 | + restriction map. |
| 35 | +
|
| 36 | +Then we establish that `Proj 𝒜` is a `LocallyRingedSpace`: |
| 37 | +* `algebraic_geometry.Proj.stalk_iso'`: for any `x : projective_spectrum 𝒜`, the stalk of |
| 38 | + `Proj.structure_sheaf` at `x` is isomorphic to `homogeneous_localization 𝒜 x`. |
| 39 | +* `algebraic_geometry.Proj.to_LocallyRingedSpace`: `Proj` as a locally ringed space. |
| 40 | +
|
| 41 | +## References |
| 42 | +
|
| 43 | +* [Robin Hartshorne, *Algebraic Geometry*][Har77] |
| 44 | +
|
| 45 | +
|
| 46 | +-/ |
| 47 | + |
| 48 | +noncomputable theory |
| 49 | + |
| 50 | +namespace algebraic_geometry |
| 51 | + |
| 52 | +open_locale direct_sum big_operators pointwise |
| 53 | +open direct_sum set_like localization Top topological_space category_theory opposite |
| 54 | + |
| 55 | +variables {R A: Type*} |
| 56 | +variables [comm_ring R] [comm_ring A] [algebra R A] |
| 57 | +variables (𝒜 : ℕ → submodule R A) [graded_algebra 𝒜] |
| 58 | + |
| 59 | +local notation `at ` x := homogeneous_localization 𝒜 x.as_homogeneous_ideal.to_ideal |
| 60 | + |
| 61 | +namespace projective_spectrum.structure_sheaf |
| 62 | + |
| 63 | +variables {𝒜} |
| 64 | + |
| 65 | +/-- |
| 66 | +The predicate saying that a dependent function on an open `U` is realised as a fixed fraction |
| 67 | +`r / s` of *same grading* in each of the stalks (which are localizations at various prime ideals). |
| 68 | +-/ |
| 69 | +def is_fraction {U : opens (projective_spectrum.Top 𝒜)} (f : Π x : U, at x.1) : Prop := |
| 70 | +∃ (i : ℕ) (r s : 𝒜 i), |
| 71 | + ∀ x : U, ∃ (s_nin : s.1 ∉ x.1.as_homogeneous_ideal), |
| 72 | + (f x) = quotient.mk' ⟨i, r, s, s_nin⟩ |
| 73 | + |
| 74 | +variables (𝒜) |
| 75 | + |
| 76 | +/-- |
| 77 | +The predicate `is_fraction` is "prelocal", in the sense that if it holds on `U` it holds on any open |
| 78 | +subset `V` of `U`. |
| 79 | +-/ |
| 80 | +def is_fraction_prelocal : prelocal_predicate (λ (x : projective_spectrum.Top 𝒜), at x) := |
| 81 | +{ pred := λ U f, is_fraction f, |
| 82 | + res := by rintros V U i f ⟨j, r, s, w⟩; exact ⟨j, r, s, λ y, w (i y)⟩ } |
| 83 | + |
| 84 | +/-- |
| 85 | +We will define the structure sheaf as the subsheaf of all dependent functions in |
| 86 | +`Π x : U, homogeneous_localization 𝒜 x` consisting of those functions which can locally be expressed |
| 87 | +as a ratio of `A` of same grading.-/ |
| 88 | +def is_locally_fraction : local_predicate (λ (x : projective_spectrum.Top 𝒜), at x) := |
| 89 | +(is_fraction_prelocal 𝒜).sheafify |
| 90 | + |
| 91 | +namespace section_subring |
| 92 | +variable {𝒜} |
| 93 | + |
| 94 | +open submodule set_like.graded_monoid homogeneous_localization |
| 95 | + |
| 96 | +lemma zero_mem' (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) : |
| 97 | + (is_locally_fraction 𝒜).pred (0 : Π x : unop U, at x.1) := |
| 98 | +λ x, ⟨unop U, x.2, 𝟙 (unop U), ⟨0, ⟨0, zero_mem _⟩, ⟨1, one_mem⟩, λ y, ⟨_, rfl⟩⟩⟩ |
| 99 | + |
| 100 | +lemma one_mem' (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) : |
| 101 | + (is_locally_fraction 𝒜).pred (1 : Π x : unop U, at x.1) := |
| 102 | +λ x, ⟨unop U, x.2, 𝟙 (unop U), ⟨0, ⟨1, one_mem⟩, ⟨1, one_mem⟩, λ y, ⟨_, rfl⟩⟩⟩ |
| 103 | + |
| 104 | +lemma add_mem' (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) |
| 105 | + (a b : Π x : unop U, at x.1) |
| 106 | + (ha : (is_locally_fraction 𝒜).pred a) (hb : (is_locally_fraction 𝒜).pred b) : |
| 107 | + (is_locally_fraction 𝒜).pred (a + b) := λ x, |
| 108 | +begin |
| 109 | + rcases ha x with ⟨Va, ma, ia, ja, ⟨ra, ra_mem⟩, ⟨sa, sa_mem⟩, wa⟩, |
| 110 | + rcases hb x with ⟨Vb, mb, ib, jb, ⟨rb, rb_mem⟩, ⟨sb, sb_mem⟩, wb⟩, |
| 111 | + refine ⟨Va ⊓ Vb, ⟨ma, mb⟩, opens.inf_le_left _ _ ≫ ia, ja + jb, |
| 112 | + ⟨sb * ra + sa * rb, add_mem (add_comm jb ja ▸ mul_mem sb_mem ra_mem : sb * ra ∈ 𝒜 (ja + jb)) |
| 113 | + (mul_mem sa_mem rb_mem)⟩, |
| 114 | + ⟨sa * sb, mul_mem sa_mem sb_mem⟩, λ y, ⟨λ h, _, _⟩⟩, |
| 115 | + { cases (y : projective_spectrum.Top 𝒜).is_prime.mem_or_mem h with h h, |
| 116 | + { obtain ⟨nin, -⟩ := (wa ⟨y, (opens.inf_le_left Va Vb y).2⟩), exact nin h }, |
| 117 | + { obtain ⟨nin, -⟩ := (wb ⟨y, (opens.inf_le_right Va Vb y).2⟩), exact nin h } }, |
| 118 | + { simp only [add_mul, map_add, pi.add_apply, ring_hom.map_mul, ext_iff_val, add_val], |
| 119 | + obtain ⟨nin1, hy1⟩ := (wa (opens.inf_le_left Va Vb y)), |
| 120 | + obtain ⟨nin2, hy2⟩ := (wb (opens.inf_le_right Va Vb y)), |
| 121 | + dsimp only at hy1 hy2, |
| 122 | + erw [hy1, hy2], |
| 123 | + simpa only [val_mk', add_mk, ← subtype.val_eq_coe, add_comm], } |
| 124 | +end |
| 125 | + |
| 126 | +lemma neg_mem' (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) |
| 127 | + (a : Π x : unop U, at x.1) |
| 128 | + (ha : (is_locally_fraction 𝒜).pred a) : |
| 129 | + (is_locally_fraction 𝒜).pred (-a) := λ x, |
| 130 | +begin |
| 131 | + rcases ha x with ⟨V, m, i, j, ⟨r, r_mem⟩, ⟨s, s_mem⟩, w⟩, |
| 132 | + choose nin hy using w, |
| 133 | + refine ⟨V, m, i, j, ⟨-r, submodule.neg_mem _ r_mem⟩, ⟨s, s_mem⟩, λ y, ⟨nin y, _⟩⟩, |
| 134 | + simp only [ext_iff_val, val_mk', ←subtype.val_eq_coe] at hy, |
| 135 | + simp only [pi.neg_apply, ext_iff_val, neg_val, hy, val_mk', ←subtype.val_eq_coe, neg_mk], |
| 136 | +end |
| 137 | + |
| 138 | +lemma mul_mem' (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) |
| 139 | + (a b : Π x : unop U, at x.1) |
| 140 | + (ha : (is_locally_fraction 𝒜).pred a) (hb : (is_locally_fraction 𝒜).pred b) : |
| 141 | + (is_locally_fraction 𝒜).pred (a * b) := λ x, |
| 142 | +begin |
| 143 | + rcases ha x with ⟨Va, ma, ia, ja, ⟨ra, ra_mem⟩, ⟨sa, sa_mem⟩, wa⟩, |
| 144 | + rcases hb x with ⟨Vb, mb, ib, jb, ⟨rb, rb_mem⟩, ⟨sb, sb_mem⟩, wb⟩, |
| 145 | + refine ⟨Va ⊓ Vb, ⟨ma, mb⟩, opens.inf_le_left _ _ ≫ ia, ja + jb, |
| 146 | + ⟨ra * rb, set_like.graded_monoid.mul_mem ra_mem rb_mem⟩, |
| 147 | + ⟨sa * sb, set_like.graded_monoid.mul_mem sa_mem sb_mem⟩, λ y, ⟨λ h, _, _⟩⟩, |
| 148 | + { cases (y : projective_spectrum.Top 𝒜).is_prime.mem_or_mem h with h h, |
| 149 | + { choose nin hy using wa ⟨y, (opens.inf_le_left Va Vb y).2⟩, exact nin h }, |
| 150 | + { choose nin hy using wb ⟨y, (opens.inf_le_right Va Vb y).2⟩, exact nin h }, }, |
| 151 | + { simp only [pi.mul_apply, ring_hom.map_mul], |
| 152 | + choose nin1 hy1 using wa (opens.inf_le_left Va Vb y), |
| 153 | + choose nin2 hy2 using wb (opens.inf_le_right Va Vb y), |
| 154 | + rw ext_iff_val at hy1 hy2 ⊢, |
| 155 | + erw [mul_val, hy1, hy2], |
| 156 | + simpa only [val_mk', mk_mul, ← subtype.val_eq_coe] } |
| 157 | +end |
| 158 | + |
| 159 | +end section_subring |
| 160 | + |
| 161 | +section |
| 162 | + |
| 163 | +open section_subring |
| 164 | + |
| 165 | +variable {𝒜} |
| 166 | +/--The functions satisfying `is_locally_fraction` form a subring of all dependent functions |
| 167 | +`Π x : U, homogeneous_localization 𝒜 x`.-/ |
| 168 | +def sections_subring (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) : subring (Π x : unop U, at x.1) := |
| 169 | +{ carrier := { f | (is_locally_fraction 𝒜).pred f }, |
| 170 | + zero_mem' := zero_mem' U, |
| 171 | + one_mem' := one_mem' U, |
| 172 | + add_mem' := add_mem' U, |
| 173 | + neg_mem' := neg_mem' U, |
| 174 | + mul_mem' := mul_mem' U } |
| 175 | + |
| 176 | +end |
| 177 | + |
| 178 | +/--The structure sheaf (valued in `Type`, not yet `CommRing`) is the subsheaf consisting of |
| 179 | +functions satisfying `is_locally_fraction`.-/ |
| 180 | +def structure_sheaf_in_Type : sheaf Type* (projective_spectrum.Top 𝒜):= |
| 181 | +subsheaf_to_Types (is_locally_fraction 𝒜) |
| 182 | + |
| 183 | +instance comm_ring_structure_sheaf_in_Type_obj (U : (opens (projective_spectrum.Top 𝒜))ᵒᵖ) : |
| 184 | + comm_ring ((structure_sheaf_in_Type 𝒜).1.obj U) := (sections_subring U).to_comm_ring |
| 185 | + |
| 186 | +/--The structure presheaf, valued in `CommRing`, constructed by dressing up the `Type` valued |
| 187 | +structure presheaf.-/ |
| 188 | +@[simps] def structure_presheaf_in_CommRing : presheaf CommRing (projective_spectrum.Top 𝒜) := |
| 189 | +{ obj := λ U, CommRing.of ((structure_sheaf_in_Type 𝒜).1.obj U), |
| 190 | + map := λ U V i, |
| 191 | + { to_fun := ((structure_sheaf_in_Type 𝒜).1.map i), |
| 192 | + map_zero' := rfl, |
| 193 | + map_add' := λ x y, rfl, |
| 194 | + map_one' := rfl, |
| 195 | + map_mul' := λ x y, rfl, }, } |
| 196 | + |
| 197 | +/--Some glue, verifying that that structure presheaf valued in `CommRing` agrees with the `Type` |
| 198 | +valued structure presheaf.-/ |
| 199 | +def structure_presheaf_comp_forget : |
| 200 | + structure_presheaf_in_CommRing 𝒜 ⋙ (forget CommRing) ≅ (structure_sheaf_in_Type 𝒜).1 := |
| 201 | +nat_iso.of_components (λ U, iso.refl _) (by tidy) |
| 202 | + |
| 203 | +end projective_spectrum.structure_sheaf |
| 204 | + |
| 205 | +namespace projective_spectrum |
| 206 | + |
| 207 | +open Top.presheaf projective_spectrum.structure_sheaf opens |
| 208 | + |
| 209 | +/--The structure sheaf on `Proj` 𝒜, valued in `CommRing`.-/ |
| 210 | +def Proj.structure_sheaf : sheaf CommRing (projective_spectrum.Top 𝒜) := |
| 211 | +⟨structure_presheaf_in_CommRing 𝒜, |
| 212 | + -- We check the sheaf condition under `forget CommRing`. |
| 213 | + (is_sheaf_iff_is_sheaf_comp _ _).mpr |
| 214 | + (is_sheaf_of_iso (structure_presheaf_comp_forget 𝒜).symm |
| 215 | + (structure_sheaf_in_Type 𝒜).property)⟩ |
| 216 | + |
| 217 | +end projective_spectrum |
| 218 | + |
| 219 | +end algebraic_geometry |
0 commit comments