Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - feat(AlgebraicGeometry/ProjectiveSpectrum/Scheme): finish the Proj construction #12371

Closed
wants to merge 44 commits into from
Closed
Changes from 39 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
931847d
test JΓΆel's approach
jjaassoonn Apr 23, 2024
156bdcd
linter error, add isomorphism
jjaassoonn Apr 23, 2024
9d83469
some minor APIs
jjaassoonn Apr 23, 2024
a688c62
fix linter and add the sheaf morphism
jjaassoonn Apr 23, 2024
bec43a6
add skeleton
jjaassoonn Apr 24, 2024
533ce43
first commit
erdOne May 19, 2024
acef8f9
clean
erdOne May 19, 2024
1ba0b31
Update HomogeneousLocalization.lean
erdOne May 19, 2024
c21e6d0
use `mk` instead of `mk''`
erdOne May 19, 2024
eba612f
addd docs
erdOne May 19, 2024
a342f79
Update Scheme.lean
erdOne May 19, 2024
a0eee1c
finish draft
erdOne May 20, 2024
83e0adf
address comments
erdOne May 20, 2024
816f779
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn May 20, 2024
87a96b6
Merge remote-tracking branch 'origin/erd1/homogeneousLocalization' in…
jjaassoonn May 20, 2024
6279880
Merge remote-tracking branch 'origin/erd1/proj2' into zjj/proj_test
jjaassoonn May 20, 2024
d2393e1
manually merge Andrew's work
jjaassoonn May 20, 2024
d40aba7
manually merge Andrew's work
jjaassoonn May 20, 2024
5a6f602
move things around
jjaassoonn May 20, 2024
ecc3c76
add documentation, add "as a scheme"
jjaassoonn May 20, 2024
1e1a908
linter
jjaassoonn May 21, 2024
1df83c4
linter and documentation
jjaassoonn May 21, 2024
bc4a6c3
linter fix
jjaassoonn May 21, 2024
9693a67
Update Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Scheme.lean
jjaassoonn May 29, 2024
39b1d68
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn May 29, 2024
a988334
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn May 30, 2024
3d1595b
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn May 31, 2024
70c42b3
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn Jun 10, 2024
bf7654d
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn Jun 11, 2024
ccd3384
fix?
Jun 11, 2024
dbd1278
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn Jun 17, 2024
0e3112f
Merge remote-tracking branch 'origin/master' into zjj/proj_test
Jun 18, 2024
01028e6
delete unnecssary open
Jun 18, 2024
4751056
add docs
Jun 18, 2024
52d8dd3
fix
Jun 18, 2024
bd9ef81
Merge remote-tracking branch 'origin/master' into zjj/proj_test
Jun 19, 2024
2bd0411
fix
Jun 19, 2024
b0c4aa0
add docs
Jun 19, 2024
6bd2aad
slight tidy up
Jun 19, 2024
4a07e06
Merge remote-tracking branch 'origin/master' into zjj/proj_test
Jun 22, 2024
9e99a4b
temp
Jun 22, 2024
063794b
fix
Jun 22, 2024
e13314f
fix
Jun 22, 2024
c600f2e
Merge remote-tracking branch 'origin/master' into zjj/proj_test
jjaassoonn Jun 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions Mathlib/AlgebraicGeometry/ProjectiveSpectrum/Scheme.lean
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ If we further assume `m` is positive
and `Spec A⁰_f` corresponding to the ring map `A⁰_f β†’ Ξ“(Proj, pbo f)` under the Gamma-Spec
adjunction defined by sending `s` to the section `x ↦ s` on `pbo f`.

Finally,
* `AlgebraicGeometry.Proj`: for any `β„•`-graded ring `A`, `Proj A` is locally affine, hence is a
scheme.

## Reference
* [Robin Hartshorne, *Algebraic Geometry*][Har77]: Chapter II.2 Proposition 2.5
-/
Expand Down Expand Up @@ -755,6 +759,87 @@ lemma isLocalization_atPrime (f) (x : pbo f) {m} (f_deg : f ∈ π’œ m) (hm : 0
rw [mul_left_comm, mul_left_comm y.den.1, ← tsub_add_cancel_of_le (show 1 ≀ m from hm),
pow_succ, mul_assoc, mul_assoc, e]

/--
For an element `f ∈ A` with positive degree and a homogeneous ideal in `D(f)`, we have that the
stalk of `Spec A⁰_ f` at `y` is isomorphic to `A⁰ₓ` where `y` is the point in `Proj` corresponding
to `x`.
-/
def specStalkEquiv (f) (x : pbo f) {m} (f_deg : f ∈ π’œ m) (hm : 0 < m) :
(Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec π’œ f).1.base x) β‰…
CommRingCat.of (AtPrime π’œ x.1.asHomogeneousIdeal.toIdeal) :=
letI : Algebra (Away π’œ f) (AtPrime π’œ x.1.asHomogeneousIdeal.toIdeal) :=
(mapId π’œ (Submonoid.powers_le.mpr x.2)).toAlgebra
haveI := isLocalization_atPrime π’œ f x f_deg hm
(IsLocalization.algEquiv
(R := A⁰_ f)
(M := ((toSpec π’œ f).1.base x).asIdeal.primeCompl)
(S := (Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec π’œ f).1.base x))
(Q := AtPrime π’œ x.1.asHomogeneousIdeal.toIdeal)).toRingEquiv.toCommRingCatIso

lemma toStalk_specStalkEquiv (f) (x : pbo f) {m} (f_deg : f ∈ π’œ m) (hm : 0 < m) :
StructureSheaf.toStalk (A⁰_ f) ((toSpec π’œ f).1.base x) ≫ (specStalkEquiv π’œ f x f_deg hm).hom =
(mapId _ <| Submonoid.powers_le.mpr x.2 : (A⁰_ f) β†’+* AtPrime π’œ x.1.1.toIdeal) :=
letI : Algebra (Away π’œ f) (AtPrime π’œ x.1.asHomogeneousIdeal.toIdeal) :=
(mapId π’œ (Submonoid.powers_le.mpr x.2)).toAlgebra
letI := isLocalization_atPrime π’œ f x f_deg hm
(IsLocalization.algEquiv
(R := A⁰_ f)
(M := ((toSpec π’œ f).1.base x).asIdeal.primeCompl)
(S := (Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec π’œ f).1.base x))
(Q := AtPrime π’œ x.1.asHomogeneousIdeal.toIdeal)).toAlgHom.comp_algebraMap

lemma stalkMap_toSpec (f) (x : pbo f) {m} (f_deg : f ∈ π’œ m) (hm : 0 < m) :
PresheafedSpace.stalkMap (toSpec π’œ f).1 x =
(specStalkEquiv π’œ f x f_deg hm).hom ≫ (Proj.stalkIso' π’œ x.1).toCommRingCatIso.inv ≫
((Proj.toLocallyRingedSpace π’œ).restrictStalkIso (Opens.openEmbedding _) x).inv :=
IsLocalization.ringHom_ext (R := A⁰_ f) ((toSpec π’œ f).1.base x).asIdeal.primeCompl
(S := (Spec.structureSheaf (A⁰_ f)).presheaf.stalk ((toSpec π’œ f).1.base x)) <|
(toStalk_stalkMap_toSpec _ _ _).trans <| by
rw [awayToΞ“_Ξ“ToStalk, ← toStalk_specStalkEquiv, Category.assoc]; rfl

lemma isIso_toSpec (f) {m} (f_deg : f ∈ π’œ m) (hm : 0 < m) :
IsIso (toSpec π’œ f) := by
have (x) : IsIso (PresheafedSpace.stalkMap (toSpec π’œ f).1 x) := by
rw [stalkMap_toSpec π’œ f x f_deg hm]; infer_instance
have : LocallyRingedSpace.IsOpenImmersion (toSpec π’œ f) := by
apply SheafedSpace.IsOpenImmersion.of_stalk_iso
convert (TopCat.homeoOfIso (projIsoSpecTopComponent f_deg hm)).openEmbedding using 1
exact funext <| toSpec_base_apply_eq π’œ
suffices IsIso (LocallyRingedSpace.forgetToSheafedSpace.map (toSpec π’œ f)) from
isIso_of_reflects_iso _ LocallyRingedSpace.forgetToSheafedSpace
show IsIso (toSpec π’œ f).1
suffices IsIso (SheafedSpace.forgetToPresheafedSpace.map (toSpec π’œ f).1) from
isIso_of_reflects_iso _ SheafedSpace.forgetToPresheafedSpace
suffices Epi (SheafedSpace.forgetToPresheafedSpace.map (toSpec π’œ f).1).base from
PresheafedSpace.IsOpenImmersion.to_iso _
rw [TopCat.epi_iff_surjective]
convert (TopCat.homeoOfIso (projIsoSpecTopComponent f_deg hm)).surjective using 1
exact funext <| toSpec_base_apply_eq π’œ

end ProjectiveSpectrum.Proj

open ProjectiveSpectrum.Proj in
/--
If `f ∈ A` is a homogeneous element of positive degree, then the projective spectrum restricted to
`D(f)` as a locally ringed space is isomorphic to `Spec A⁰_f`.
-/
def projIsoSpec (f) {m} (f_deg : f ∈ π’œ m) (hm : 0 < m) :
(Proj| pbo f) β‰… (Spec (A⁰_ f)) :=
@asIso (f := toSpec π’œ f) (isIso_toSpec π’œ f f_deg hm)

/--
This is the scheme `Proj(A)` for any `β„•`-graded ring `A`.
-/
def Β«ProjΒ» : Scheme where
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note that the french quotation can be safely ignored, they are here because Proj is a local notation. But since the notation is local, outside this file, one can just use AlgebraicGeometry.Proj

__ := Proj.toLocallyRingedSpace π’œ
local_affine (x : Proj.T) := by
classical
obtain ⟨f, m, f_deg, hm, hx⟩ : βˆƒ (f : A) (m : β„•) (_ : f ∈ π’œ m) (_ : 0 < m), f βˆ‰ x.1 := by
by_contra!
refine x.not_irrelevant_le fun z hz ↦ ?_
rw [← DirectSum.sum_support_decompose π’œ z]
exact x.1.toIdeal.sum_mem fun k hk ↦ this _ k (SetLike.coe_mem _) <| by_contra <| by aesop
exact ⟨⟨pbo f, hx⟩, .of (A⁰_ f), ⟨projIsoSpec π’œ f f_deg hm⟩⟩


end AlgebraicGeometry
Loading