#20774: Basic singularity analysis for algebraic curves
-------------------------------------+-------------------------------------
Reporter: gjorgenson | Owner:
Type: enhancement | Status: needs_work
Priority: minor | Milestone: sage-7.3
Component: algebraic | Resolution:
geometry | Merged in:
Keywords: gsoc2016 | Reviewers: Ben Hutz
Authors: Grayson Jorgenson | Work issues:
Report Upstream: N/A | Commit:
Branch: | bfcd05e6885d0f66ee55556deaf2dacc792a8c96
u/gjorgenson/ticket/20774 | Stopgaps:
Dependencies: |
-------------------------------------+-------------------------------------
Comment (by gjorgenson):
Merging with beta4 broke the example in the singular_points function at
line 260 of curve.py; too few points seem to be returned now.
It looks like this is due to the point search changes for 0 dimensional
subschemes from #20780. Replacing the new point search with the old one
from before the merge resolves the problem. Here's the failed example
modified a bit:
{{{
R.<a> = QQ[]
K.<b> = NumberField(a^8 - a^4 + 1)
P.<x,y,z> = ProjectiveSpace(K, 2)
C = Curve([359/12*x*y^2*z^2 + 2*y*z^4 + 187/12*y^3*z^2 + x*z^4\
+ 67/3*x^2*y*z^2 + 117/4*y^5 + 9*x^5 + 6*x^3*z^2 + 393/4*x*y^4\
+ 145*x^2*y^3 + 115*x^3*y^2 + 49*x^4*y], P)
X = C.singular_subscheme()
Q = P([1/2*b^5 + 1/2*b^3 - 1/2*b - 1,1,0])
X(Q)
(1/2*b^5 + 1/2*b^3 - 1/2*b - 1 : 1 : 0)
X.rational_points() # Q is on X, but not in set of rational points anymore
[(2/3*b^4 - 1/3 : 0 : 1), (b^6 : -b^6 : 1), (-b^6 : b^6 : 1), (-2/3*b^4 +
1/3 : 0 : 1)]
}}}
I thought the point search method in #20780 looked good when I reviewed
it, and I think this issue might just be from a weird special case. For
this example, during the part of the algorithm using the affine patch
corresponding to y = 1, the Groebner basis used is `[x^2 + 2*x + 1/2*z^2 +
3/2, x*z + z, z^3 + z]`. The rightmost polynomial has z = 0 among its
roots, but substituting z = 0 and y = 1 into the next polynomial `x*z + z`
yields 0, and I think this causes the algorithm to skip any points with z
= 0, y = 1. But if those values had been kept for the last polynomial `x^2
+ 2*x + 1/2*z^2 + 3/2`, substituting them in would give `x^2 + 2*x + 3/2`
which would give the x values of the missing points.
I think a way to resolve this might be to just add something like
{{{
else:
new_points.append(P)
good = 1
}}}
after the if statement `if L != 0:` in line 159 of projective_homset.py.
Doing this doesn't seem to break any examples, but does it mess up the
algorithm at all?
--
Ticket URL: <http://trac.sagemath.org/ticket/20774#comment:13>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.