Zulip Chat Archive
Stream: maths
Topic: Proj construction
Jujian Zhang (Jan 04 2022 at 20:05):
I am working on Proj construction at https://github.com/leanprover-community/mathlib/pull/9964. When try to prove
def stalk_iso (x : projective_spectrum.Top 𝒜) :
(structure_sheaf 𝒜).1.stalk x ≃+* CommRing.of (hartshorne_localisation 𝒜 x) :=
-- 𝒜 is grading
by following hartshorne, the definition I ended up with is full of classical.some
so not very useful. Does any body know a cleaner way to do this?
Because hartshorne_localisation 𝒜 x
is a subring of a localisation ring, so I couldn't directly use localization.lift
.
I also wasn't able to follow the method in prime_spectrum
because there is a lot of degree of homogeneous elements involved.
Johan Commelin (Jan 04 2022 at 20:08):
I don't have Hartshorne hear next to me. Did you also look at the Stacks Project? Do they do the same thing?
Jujian Zhang (Jan 04 2022 at 20:09):
Stack project defined structure sheaf on basic open sets and lift it up.
Kevin Buzzard (Jan 04 2022 at 20:10):
Can you say something about the mathematics behind the question you're asking? I just looked at the diff for the branch and it's really long and terrifying
Kevin Buzzard (Jan 04 2022 at 20:12):
Hartshorne's definition of the structure sheaf is completely different to stacks.
Jujian Zhang (Jan 04 2022 at 20:15):
So the problem is the following:
From my understanding In Hartshorne is defined to be where is subring of such that numerator and denominator are homogeneous with same degree.
Jujian Zhang (Jan 04 2022 at 20:16):
So I defined to be a long existentially quantified thing
{y : (localization.at_prime x.as_homogeneous_ideal.1) |
∃ (a b : A) (i : ι) (a_hom : a ∈ 𝒜 i) (b_hom : b ∈ 𝒜 i) (b_nin : b ∉ x.as_homogeneous_ideal),
y = (localization.mk a ⟨b, b_nin⟩ : (localization.at_prime x.as_homogeneous_ideal.1))}
Kevin Buzzard (Jan 04 2022 at 20:16):
So S is some nat-graded ring and you're localising at a homogeneous prime ideal I guess.
Kevin Buzzard (Jan 04 2022 at 20:17):
My guess is that the localisation is Z-graded and S_(p) is just the degree 0 piece. Possibly.
Jujian Zhang (Jan 04 2022 at 20:17):
Then when I define functions from this ring, because I need to use choose ... using ...
. Then to prove things about the definition, there is always classical.some
Kevin Buzzard (Jan 04 2022 at 20:21):
If your functions don't actually depend on the choice of a and b then you could avoid classical.some . But if you don't want to avoid it then the trick I usually use is to define the basic functions you need, i.e. numerator
and denominator
using classical.some (giving you a
and b
from y
), and then immediately make an API for these things (i.e. prove a \in A i
and b \in A i
and y = mk a b
) using classical.some_spec
and then never use classical.some
any more but only use these wrappers for which you have all the API you need right there.
Jujian Zhang (Jan 04 2022 at 20:21):
I was trying to be as general as possible: so A
is an R
-algebra graded by 𝒜 : \iota \to submodule R A
Jujian Zhang (Jan 04 2022 at 20:22):
Kevin Buzzard said:
If your functions don't actually depend on the choice of a and b then you could avoid classical.some . But if you don't want to avoid it then the trick I usually use is to define the basic functions you need, i.e.
numerator
anddenominator
using classical.some (giving youa
andb
fromy
), and then immediately make an API for these things (i.e. provea \in A i
andb \in A i
andy = mk a b
) usingclassical.some_spec
and then never useclassical.some
any more but only use these wrappers for which you have all the API you need right there.
Let me try this.
Kevin Buzzard (Jan 04 2022 at 20:23):
The idea is that a = numerator y
and b = denominator y
and you immediately prove all the things you need relating a
and b
to y
using classical.some_spec
and then just stick to numerator
and denominator
from then on.
Adam Topaz (Jan 04 2022 at 20:26):
I think we need to think carefully about the proj construction, and my first inclination is that this approach is not necessarily the right way to go herre...
Adam Topaz (Jan 04 2022 at 20:27):
I would guess that we would be in better shape if we glued affine schemes..
Kevin Buzzard (Jan 04 2022 at 20:27):
You mean to define projective n-space or to define Proj of a graded ring?
Adam Topaz (Jan 04 2022 at 20:28):
proj of a graded ring.
Kevin Buzzard (Jan 04 2022 at 20:28):
So you mean look at the proof in Hartshorne that projective schemes are schemes, and then implement this as the definition
Adam Topaz (Jan 04 2022 at 20:28):
yeah essentially.
Adam Topaz (Jan 04 2022 at 20:30):
Do we have a gluing construction for sheaves @Andrew Yang ? I mean, if we have a topological space , and an open cover with sheaves on which are compatible on the intersections, can we glue to get a sheaf on ?
Adam Topaz (Jan 04 2022 at 20:31):
I.e. stacks#00AL
Kevin Buzzard (Jan 04 2022 at 20:32):
You want it for sheaves of types?
Adam Topaz (Jan 04 2022 at 20:33):
Well, in this case for sheaves of rings, but the same argument works.
Kevin Buzzard (Jan 04 2022 at 20:33):
Does it work for sheaves of topological spaces?
Adam Topaz (Jan 04 2022 at 20:33):
no ;)
Kevin Buzzard (Jan 04 2022 at 20:33):
I thought so ;-)
Adam Topaz (Jan 04 2022 at 20:40):
I'm looking at how stacks describes the proj construction now, and I think that would be a much better way to go:
https://stacks.math.columbia.edu/tag/00JM
Jujian Zhang (Jan 04 2022 at 20:48):
The underlying topological space of Proj is already defined.
https://stacks.math.columbia.edu/tag/01M3 defines structure sheaf on a basis of this topology. I think following stack project, the hard work would be proving sheaf condition. Following Hartshorne, the work would be proving that isomorphic to affine scheme on basic open set
Adam Topaz (Jan 04 2022 at 20:49):
The point is that the hard work should be done in the gluing construction for sheaves. You would then use assertion (6) from https://stacks.math.columbia.edu/tag/00JP to transfer the structure sheaf of the affine scheme along a homeomorphism, and the gluing construction should give you the structure sheaf on proj.
Adam Topaz (Jan 04 2022 at 21:02):
As for the issue about degrees of numerators and denominators, we should probably develop some API for the degree zero subring of a graded ring, and the grading on a localization by a homogeneous element.
Andrew Yang (Jan 05 2022 at 04:30):
The current way of gluing sheaves might be gluing sheafed spaces altogether, then transfer the sheaf onto the original space via some homeomorphism.
Adam Topaz (Jan 05 2022 at 04:31):
Hmmm... we should do something for descent data.
Jujian Zhang (Jan 06 2022 at 12:18):
@Andrew Yang Can you point me out to the gluing sheaf api please, I couldn't find the localtion of the api in mathlib, I would like to try to do proj construction by gluing affine scheme on basic open sets.
Andrew Yang (Jan 06 2022 at 12:24):
It is stuck in branch#open_subfunctor.
Hopefully this is going to make it into mathib in this month or the next.
The main stuff is in src/algebraic_geometry/presheafed_space/gluing.lean
.
It's not yet well-documented, but examples can be found in src/algebraic_geometry/open_subfunctor.lean
.
If you plan on using it, I'll try to make it compile later today or tomorrow.
I think the definitions are relatively stable now, and the proof of the lemmas might be tidied up in the future but that should not matter as much.
Jujian Zhang (Jan 06 2022 at 12:28):
Thank you! Let me try to understand the construction!
Andrew Yang (Jan 06 2022 at 13:05):
The stuff in the branch should be good to use except some errors in src/topology/gluing.lean
. But that should be fixed once #9864 is merged today or tomorrow.
In the mean time, it should be fine to browse the branch using the current mathlib cache (c391512ee
).
Jujian Zhang (Jan 06 2022 at 13:27):
I downloaded c391512ee cache, but didn't get any error in topology/gluing.lean
. I guess this is good news.
Turns out it is vs code being frozen.
Jujian Zhang (Jan 06 2022 at 13:57):
I couldn't get this working, it seems there is category_theory/concrete_category/elementwise
. I am getting this error.
file 'category_theory/concrete_category/elementwise' not found in the search path
Will Sawin (Jan 06 2022 at 14:00):
Really cool to see progress on this IMO!
Andrew Yang (Jan 06 2022 at 14:03):
I think it's fine to ignore that error. Lean should still work in src/algebraic_geometry/presheafed_space/gluing.lean
.
If you really want to solve this error, you can merge the branch glue_spaces
, but that branch touched some very basic files, so the cache might be un-usable.
Andrew Yang (Jan 07 2022 at 19:47):
The branch should now compile without errors again.
Jujian Zhang (Jan 25 2022 at 11:02):
The Proj construction is now sorry free
Jujian Zhang (Jan 25 2022 at 11:02):
EF1A7EB2-EDD2-4640-970E-1340A19206C3.png
Johan Commelin (Jan 25 2022 at 12:08):
@Jujian Zhang Congratulations! That's a milestone.
Johan Commelin (Jan 25 2022 at 12:08):
Out of curiousity: Can you give an estimate of the size of the diff between mathlib-master and your development?
Jujian Zhang (Jan 25 2022 at 12:12):
I merged a branch from Andrew Yang (but ended up not using it), the scheme.lean file is 5k lines and zariski topology and structure sheaf combined is about 1k. So everything together is about 6k lines.
Jujian Zhang (Jan 25 2022 at 12:13):
There are currently some heavy refls going on, so GitHub cannot compile it. I am working on fixing on heavy refls and try to get GitHub compile this branch.
Johan Commelin (Jan 25 2022 at 12:18):
Ok, thanks!
Johan Commelin (Jan 25 2022 at 12:18):
That's quite a size. Impressive work!
Jujian Zhang (Jan 25 2022 at 12:19):
Thank you for the kind word!
Johan Commelin (Jan 25 2022 at 12:19):
Would you mind pasting the full signature of Proj.to_Scheme
? Because there's a bunch of variables in your screenshot, I guess that have been introduced by variables
lines that aren't in the picture.
Jujian Zhang (Jan 25 2022 at 12:24):
A62B364B-362F-4F71-A734-A3F98DFB1E6C.png
Jujian Zhang (Jan 25 2022 at 12:25):
Sorry about this, but I am current out having lunch. So I have to take a screenshot of variables line
Johan Commelin (Jan 25 2022 at 12:42):
No worries, thanks a lot!
Last updated: Dec 20 2023 at 11:08 UTC