Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 0453d60

Browse files
committed
feat(algebraic_geometry/projective_spectrum): structure sheaf of Proj of graded ring (#13072)
Construct the structure sheaf of Proj of a graded algebra.
1 parent f94cd0f commit 0453d60

File tree

2 files changed

+229
-2
lines changed

2 files changed

+229
-2
lines changed
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
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

src/algebraic_geometry/projective_spectrum/topology.lean

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Jujian Zhang, Johan Commelin
55
-/
66

7-
import topology.sets.opens
7+
import topology.category.Top
88
import ring_theory.graded_algebra.homogeneous_ideal
99

1010
/-!
@@ -30,11 +30,14 @@ It is naturally endowed with a topology: the Zariski topology.
3030
* `projective_spectrum.vanishing_ideal t`: The vanishing ideal of a subset `t` of
3131
`projective_spectrum 𝒜` is the intersection of points in `t` (viewed as relevant homogeneous prime
3232
ideals).
33+
* `projective_spectrum.Top`: the topological space of `projective_spectrum 𝒜` endowed with the
34+
Zariski topology
35+
3336
-/
3437

3538
noncomputable theory
3639
open_locale direct_sum big_operators pointwise
37-
open direct_sum set_like
40+
open direct_sum set_like Top topological_space category_theory opposite
3841

3942
variables {R A: Type*}
4043
variables [comm_semiring R] [comm_ring A] [algebra R A]
@@ -302,6 +305,11 @@ topological_space.of_closed (set.range (projective_spectrum.zero_locus 𝒜))
302305
end
303306
(by { rintros _ ⟨s, rfl⟩ _ ⟨t, rfl⟩, exact ⟨_, (union_zero_locus 𝒜 s t).symm⟩ })
304307

308+
/--
309+
The underlying topology of `Proj` is the projective spectrum of graded ring `A`.
310+
-/
311+
def Top : Top := Top.of (projective_spectrum 𝒜)
312+
305313
lemma is_open_iff (U : set (projective_spectrum 𝒜)) :
306314
is_open U ↔ ∃ s, Uᶜ = zero_locus 𝒜 s :=
307315
by simp only [@eq_comm _ Uᶜ]; refl

0 commit comments

Comments
 (0)