Opened 2 years ago

Closed 2 years ago

# Basic intersection analysis for algebraic curves

Reported by: Owned by: gjorgenson minor sage-7.3 algebraic geometry gsoc2016 bhutz, mmarco Grayson Jorgenson Ben Hutz N/A cae16fe (Commits) cae16fe73a6db14d63156e509c48b160ae17094e

### 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.

### comment:1 Changed 2 years ago by gjorgenson

• Branch set to u/gjorgenson/ticket/20839

### comment:2 Changed 2 years ago by git

• Commit set to f775a0ffaa6a969b5c3c4dc7a03862f0e71fdc58

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

 ​f775a0f `20839: first implementation attempt.`

### comment:3 Changed 2 years ago by gjorgenson

• Status changed from new to needs_review

### comment:4 Changed 2 years 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

```P.<x,y,z,w>=ProjectiveSpace(QQ,3)
X= Curve([x*z-y^2,z*(y*w-z^2) - w*(x*w-y*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^2-y])
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^2-x^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^2-y,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 2 years ago by git

• 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 2 years 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 2 years ago by gjorgenson

• 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 2 years 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 2 years ago by gjorgenson

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

New commits:

 ​cae16fe `20839: improved is_transverse`

### comment:10 Changed 2 years ago by bhutz

• Status changed from needs_review to positive_review

### comment:11 Changed 2 years 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.