Opened 17 months ago
Closed 17 months ago
#20839 closed enhancement (fixed)
Basic intersection analysis for algebraic curves
Reported by:  gjorgenson  Owned by:  

Priority:  minor  Milestone:  sage7.3 
Component:  algebraic geometry  Keywords:  gsoc2016 
Cc:  bhutz, mmarco  Merged in:  
Authors:  Grayson Jorgenson  Reviewers:  Ben Hutz 
Report Upstream:  N/A  Work issues:  
Branch:  cae16fe (Commits)  Commit:  cae16fe73a6db14d63156e509c48b160ae17094e 
Dependencies:  Stopgaps: 
Description
Implement basic intersection analysis, such as when given two curves and a point, determine if the point is in the intersection of the two curves, and if so, compute the intersection multiplicity of the curves at that point if defined. Also, given a projective curve, determine if it is a complete intersection.
Change History (11)
comment:1 Changed 17 months ago by
 Branch set to u/gjorgenson/ticket/20839
comment:2 Changed 17 months ago by
 Commit set to f775a0ffaa6a969b5c3c4dc7a03862f0e71fdc58
comment:3 Changed 17 months ago by
 Status changed from new to needs_review
comment:4 Changed 17 months ago by
 Reviewers set to Ben Hutz
 intersects_at(): why not but both attempts in the same try block?
 is_complete_intersection: Boolean can go on the same line at OUTPUT
not the radical ideal per our discussion today
here is another noncomplete intersection example
P.<x,y,z,w>=ProjectiveSpace(QQ,3) X= Curve([x*zy^2,z*(y*wz^2)  w*(x*wy*z)]) X.is_complete_intersection()
 intersection_multiplicity: an integer can go on the same line as OUTPUT
good these add up to 4 as bezout's theorem implies
K.<i>=QuadraticField(1) A.<x,y>=AffineSpace(K,2) C = Curve([x^2y]) D = Curve([x^2+y^2]) for t in C.intersection(D).rational_points(): C.intersection_multiplicity(D,t)
also good
K.<i>=QuadraticField(1) A.<x,y>=AffineSpace(K,2) C = Curve([y^2x^3]) D = Curve([(x^2+y^2)^2  4*x^2*y^2]) for t in C.intersection(D).rational_points(): C.intersection_multiplicity(D,t)
so for plane curves this looks ok. Does this really work in dimension greater than 2? I don't think it does, I think the intersection number possibly has lower order terms. Regardless, in looking at this, the following example died
K.<i>=QuadraticField(1) A.<x,y,z>=AffineSpace(K,3) C = Curve([x^2y,z^2+x^2]) D = Curve([x^2+y^2,x^2+z]) for t in C.intersection(D).rational_points(): C.intersection_multiplicity(D,p)
 I think an transverse check would be nice too:
is_transverse()  Returns true if and only if the point p is a nonsingular point of both plane curves C and D and the curves have distinct tangents there.
comment:5 Changed 17 months ago by
 Commit changed from f775a0ffaa6a969b5c3c4dc7a03862f0e71fdc58 to 09eea02208e31ac7a3d829fd307c01d133ed0c08
Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
bbffa39  20774: Merge this ticket with 20697.

4fce7ed  20774: Merge this ticket with 20676.

4655c72  20774: Implement multiplicity, tangents, and is_ordinary_singularity

e1f1529  20774: Merge with 7.3 beta3

e6f1a93  20774: Changes from first review.

1f0d7ab  20774: Merge with 7.3 beta4.

bfcd05e  20774: Added some error tests, and updated error messages.

4282a4f  20774: addressed small bug with point search

6564724  20839: merge with ticket 20774

09eea02  20839: some remaining changes from review

comment:6 Changed 17 months ago by
Thanks, I made most of the changes, but haven't yet addressed the intersection_multiplicity issue. Is there a good way to generalize the intersection multiplicity computations to work for space curves, or would it be best to make them specific to plane curves?
I really don't have much homological algebra background, but if I understand correctly, I think a general definition of intersection multiplicity is given by Serre's Tor formula. I think Singular has some functionality for working with the needed constructions, but I'm not sure whether it's enough to be able to do multiplicity computations.
comment:7 Changed 17 months ago by
 Commit changed from 09eea02208e31ac7a3d829fd307c01d133ed0c08 to 4b9ab0a8d1744f35fa507ff46da2cf032d7405d7
New commit didn't automatically appear.
New commits:
4b9ab0a  20839: implemented Serre intersection multiplicity for affine/projective subschemes

comment:8 Changed 17 months ago by
 Status changed from needs_review to needs_work
This looks fine except that is_transverse should return False when one of the points is singular.
comment:9 Changed 17 months ago by
 Commit changed from 4b9ab0a8d1744f35fa507ff46da2cf032d7405d7 to cae16fe73a6db14d63156e509c48b160ae17094e
 Status changed from needs_work to needs_review
New commits:
cae16fe  20839: improved is_transverse

comment:10 Changed 17 months ago by
 Status changed from needs_review to positive_review
comment:11 Changed 17 months ago by
 Branch changed from u/gjorgenson/ticket/20839 to cae16fe73a6db14d63156e509c48b160ae17094e
 Resolution set to fixed
 Status changed from positive_review to closed
Branch pushed to git repo; I updated commit sha1. New commits:
20839: first implementation attempt.