Opened 8 months ago

Closed 8 months ago

#20839 closed enhancement (fixed)

Basic intersection analysis for algebraic curves

Reported by: gjorgenson Owned by:
Priority: minor Milestone: sage-7.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:


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 8 months ago by gjorgenson

  • Branch set to u/gjorgenson/ticket/20839

comment:2 Changed 8 months ago by git

  • Commit set to f775a0ffaa6a969b5c3c4dc7a03862f0e71fdc58

Branch pushed to git repo; I updated commit sha1. New commits:

f775a0f20839: first implementation attempt.

comment:3 Changed 8 months ago by gjorgenson

  • Status changed from new to needs_review

comment:4 Changed 8 months ago by bhutz

  • 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

X= Curve([x*z-y^2,z*(y*w-z^2) - w*(x*w-y*z)])
  • intersection_multiplicity: an integer can go on the same line as OUTPUT

good these add up to 4 as bezout's theorem implies

C = Curve([x^2-y])
D = Curve([x^2+y^2])
for t in C.intersection(D).rational_points():

also good

C = Curve([y^2-x^3])
D = Curve([(x^2+y^2)^2 - 4*x^2*y^2])
for t in C.intersection(D).rational_points():

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

C = Curve([x^2-y,z^2+x^2])
D = Curve([x^2+y^2,x^2+z])
for t in C.intersection(D).rational_points():
  • 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 8 months ago by git

  • Commit changed from f775a0ffaa6a969b5c3c4dc7a03862f0e71fdc58 to 09eea02208e31ac7a3d829fd307c01d133ed0c08

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:

bbffa3920774: Merge this ticket with 20697.
4fce7ed20774: Merge this ticket with 20676.
4655c7220774: Implement multiplicity, tangents, and is_ordinary_singularity
e1f152920774: Merge with 7.3 beta3
e6f1a9320774: Changes from first review.
1f0d7ab20774: Merge with 7.3 beta4.
bfcd05e20774: Added some error tests, and updated error messages.
4282a4f20774: addressed small bug with point search
656472420839: merge with ticket 20774
09eea0220839: some remaining changes from review

comment:6 Changed 8 months ago by gjorgenson

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 8 months ago by gjorgenson

  • Commit changed from 09eea02208e31ac7a3d829fd307c01d133ed0c08 to 4b9ab0a8d1744f35fa507ff46da2cf032d7405d7

New commit didn't automatically appear.

New commits:

4b9ab0a20839: implemented Serre intersection multiplicity for affine/projective subschemes

comment:8 Changed 8 months ago by bhutz

  • 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 8 months ago by gjorgenson

  • Commit changed from 4b9ab0a8d1744f35fa507ff46da2cf032d7405d7 to cae16fe73a6db14d63156e509c48b160ae17094e
  • Status changed from needs_work to needs_review

New commits:

cae16fe20839: improved is_transverse

comment:10 Changed 8 months ago by bhutz

  • Status changed from needs_review to positive_review

comment:11 Changed 8 months ago by vbraun

  • Branch changed from u/gjorgenson/ticket/20839 to cae16fe73a6db14d63156e509c48b160ae17094e
  • Resolution set to fixed
  • Status changed from positive_review to closed
Note: See TracTickets for help on using tickets.