Skip to content

Commit a80ef49

Browse files
jjaassoonnzjjerdOne
committed
feat(AlgebraicGeometry/ProjectiveSpectrum/Scheme): finish the Proj construction (#12371)
This PR finishes the `Proj` construction for any ring graded by natural numbers: If $A$ is an $R$ algebra with 𝒜 as its grading i.e. 𝒜 i is an $R$-submodule of $A$ , then `AlgebraicGeometry.Proj 𝒜` is the scheme whose underlying topological space is the collection of homogeneous relevant prime ideals with the Zariski topology; whose sheaf of rings is the collection of functions that are locally homogeneous fractions. We prove that for each `f : A` with positive degree, `Proj | D(f)` (`Proj` as locally ringed space restricted to the basic open set around `f`) is isomorphic to `Spec A^0_f` (prime spectrum of the homogeneous localization of `A` at `f`). The isomorphism is constructed as the following: by the Gamma-Spec adjunction, it is sufficient to construct a ring map `A⁰_f → Γ(Proj, pbo f)` from the ring of homogeneous localization of `A` away from `f` to the local sections of structure sheaf of projective spectrum on the basic open set around `f`. The map `A⁰_f → Γ(Proj, pbo f)` is defined by sending `s ∈ A⁰_f` to the section `x ↦ s` on `pbo f`. Then we show that the map `Proj | D(f) -> Spec A⁰_f` induces an isomorphism on stalk level, thus is an isomorphism. Co-authored-by: Andrew Yang <[email protected]> Co-authored-by: zjj <[email protected]> Co-authored-by: Andrew Yang <[email protected]> Co-authored-by: Andrew Yang <[email protected]>
1 parent 7eb6e30 commit a80ef49

File tree

1 file changed

+81
-0
lines changed
  • Mathlib/AlgebraicGeometry/ProjectiveSpectrum

1 file changed

+81
-0
lines changed

Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Scheme.lean

+81
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ If we further assume `m` is positive
8282
and `Spec A⁰_f` corresponding to the ring map `A⁰_f → Γ(Proj, pbo f)` under the Gamma-Spec
8383
adjunction defined by sending `s` to the section `x ↦ s` on `pbo f`.
8484
85+
Finally,
86+
* `AlgebraicGeometry.Proj`: for any `ℕ`-graded ring `A`, `Proj A` is locally affine, hence is a
87+
scheme.
88+
8589
## Reference
8690
* [Robin Hartshorne, *Algebraic Geometry*][Har77]: Chapter II.2 Proposition 2.5
8791
-/
@@ -667,6 +671,11 @@ lemma toSpec_base_apply_eq {f} (x : Proj| pbo f) :
667671
IsLocalization.AtPrime.isUnit_mk'_iff]
668672
exact not_not
669673

674+
lemma toSpec_base_isIso {f} {m} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
675+
IsIso (toSpec 𝒜 f).1.base := by
676+
convert (projIsoSpecTopComponent f_deg hm).isIso_hom
677+
exact DFunLike.ext _ _ <| toSpec_base_apply_eq 𝒜
678+
670679
lemma mk_mem_toSpec_base_apply {f} (x : Proj| pbo f)
671680
(z : NumDenSameDeg 𝒜 (.powers f)) :
672681
HomogeneousLocalization.mk z ∈ ((toSpec 𝒜 f).1.base x).asIdeal ↔
@@ -755,6 +764,78 @@ lemma isLocalization_atPrime (f) (x : pbo f) {m} (f_deg : f ∈ 𝒜 m) (hm : 0
755764
rw [mul_left_comm, mul_left_comm y.den.1, ← tsub_add_cancel_of_le (show 1 ≤ m from hm),
756765
pow_succ, mul_assoc, mul_assoc, e]
757766

767+
/--
768+
For an element `f ∈ A` with positive degree and a homogeneous ideal in `D(f)`, we have that the
769+
stalk of `Spec A⁰_ f` at `y` is isomorphic to `A⁰ₓ` where `y` is the point in `Proj` corresponding
770+
to `x`.
771+
-/
772+
def specStalkEquiv (f) (x : pbo f) {m} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
773+
(Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec 𝒜 f).1.base x) ≅
774+
CommRingCat.of (AtPrime 𝒜 x.1.asHomogeneousIdeal.toIdeal) :=
775+
letI : Algebra (Away 𝒜 f) (AtPrime 𝒜 x.1.asHomogeneousIdeal.toIdeal) :=
776+
(mapId 𝒜 (Submonoid.powers_le.mpr x.2)).toAlgebra
777+
haveI := isLocalization_atPrime 𝒜 f x f_deg hm
778+
(IsLocalization.algEquiv
779+
(R := A⁰_ f)
780+
(M := ((toSpec 𝒜 f).1.base x).asIdeal.primeCompl)
781+
(S := (Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec 𝒜 f).1.base x))
782+
(Q := AtPrime 𝒜 x.1.asHomogeneousIdeal.toIdeal)).toRingEquiv.toCommRingCatIso
783+
784+
lemma toStalk_specStalkEquiv (f) (x : pbo f) {m} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
785+
StructureSheaf.toStalk (A⁰_ f) ((toSpec 𝒜 f).1.base x) ≫ (specStalkEquiv 𝒜 f x f_deg hm).hom =
786+
(mapId _ <| Submonoid.powers_le.mpr x.2 : (A⁰_ f) →+* AtPrime 𝒜 x.1.1.toIdeal) :=
787+
letI : Algebra (Away 𝒜 f) (AtPrime 𝒜 x.1.asHomogeneousIdeal.toIdeal) :=
788+
(mapId 𝒜 (Submonoid.powers_le.mpr x.2)).toAlgebra
789+
letI := isLocalization_atPrime 𝒜 f x f_deg hm
790+
(IsLocalization.algEquiv
791+
(R := A⁰_ f)
792+
(M := ((toSpec 𝒜 f).1.base x).asIdeal.primeCompl)
793+
(S := (Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec 𝒜 f).1.base x))
794+
(Q := AtPrime 𝒜 x.1.asHomogeneousIdeal.toIdeal)).toAlgHom.comp_algebraMap
795+
796+
lemma stalkMap_toSpec (f) (x : pbo f) {m} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
797+
LocallyRingedSpace.stalkMap (toSpec 𝒜 f) x =
798+
(specStalkEquiv 𝒜 f x f_deg hm).hom ≫ (Proj.stalkIso' 𝒜 x.1).toCommRingCatIso.inv ≫
799+
((Proj.toLocallyRingedSpace 𝒜).restrictStalkIso (Opens.openEmbedding _) x).inv :=
800+
IsLocalization.ringHom_ext (R := A⁰_ f) ((toSpec 𝒜 f).1.base x).asIdeal.primeCompl
801+
(S := (Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec 𝒜 f).1.base x)) <|
802+
(toStalk_stalkMap_toSpec _ _ _).trans <| by
803+
rw [awayToΓ_ΓToStalk, ← toStalk_specStalkEquiv, Category.assoc]; rfl
804+
805+
lemma isIso_toSpec (f) {m} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
806+
IsIso (toSpec 𝒜 f) := by
807+
haveI : IsIso (toSpec 𝒜 f).1.base := toSpec_base_isIso 𝒜 f_deg hm
808+
haveI (x) : IsIso (LocallyRingedSpace.stalkMap (toSpec 𝒜 f) x) := by
809+
rw [stalkMap_toSpec 𝒜 f x f_deg hm]; infer_instance
810+
haveI : LocallyRingedSpace.IsOpenImmersion (toSpec 𝒜 f) :=
811+
LocallyRingedSpace.IsOpenImmersion.of_stalk_iso (toSpec 𝒜 f)
812+
(TopCat.homeoOfIso (asIso <| (toSpec 𝒜 f).1.base)).openEmbedding
813+
exact LocallyRingedSpace.IsOpenImmersion.to_iso _
814+
758815
end ProjectiveSpectrum.Proj
759816

817+
open ProjectiveSpectrum.Proj in
818+
/--
819+
If `f ∈ A` is a homogeneous element of positive degree, then the projective spectrum restricted to
820+
`D(f)` as a locally ringed space is isomorphic to `Spec A⁰_f`.
821+
-/
822+
def projIsoSpec (f) {m} (f_deg : f ∈ 𝒜 m) (hm : 0 < m) :
823+
(Proj| pbo f) ≅ (Spec (A⁰_ f)) :=
824+
@asIso (f := toSpec 𝒜 f) (isIso_toSpec 𝒜 f f_deg hm)
825+
826+
/--
827+
This is the scheme `Proj(A)` for any `ℕ`-graded ring `A`.
828+
-/
829+
def «Proj» : Scheme where
830+
__ := Proj.toLocallyRingedSpace 𝒜
831+
local_affine (x : Proj.T) := by
832+
classical
833+
obtain ⟨f, m, f_deg, hm, hx⟩ : ∃ (f : A) (m : ℕ) (_ : f ∈ 𝒜 m) (_ : 0 < m), f ∉ x.1 := by
834+
by_contra!
835+
refine x.not_irrelevant_le fun z hz ↦ ?_
836+
rw [← DirectSum.sum_support_decompose 𝒜 z]
837+
exact x.1.toIdeal.sum_mem fun k hk ↦ this _ k (SetLike.coe_mem _) <| by_contra <| by aesop
838+
exact ⟨⟨pbo f, hx⟩, .of (A⁰_ f), ⟨projIsoSpec 𝒜 f f_deg hm⟩⟩
839+
840+
760841
end AlgebraicGeometry

0 commit comments

Comments
 (0)