potential bug for calculating Heegner points

48 views
Skip to first unread message

Debanjana

unread,
Jul 5, 2022, 4:01:48 PM7/5/22
to sage-...@googlegroups.com
sage: E = EllipticCurve('11a1')
sage: P = E.heegner_point(-7)
sage: t = P.point_exact()
sage: t.domain()
Spectrum of Number Field in a with defining polynomial x^2 + x + 20
sage: t.domain().base_ring().discriminant()
-79

The answer should be -7 but Sage gives -79

--
A smile is a curve that can set many things straight.

Justin C. Walker

unread,
Jul 5, 2022, 6:21:02 PM7/5/22
to SAGE Development


> On Jul 5, 2022, at 07:00 , Debanjana <tul...@gmail.com> wrote:
>
> sage: E = EllipticCurve('11a1')
> sage: P = E.heegner_point(-7)
> sage: t = P.point_exact()
> sage: t.domain()
> Spectrum of Number Field in a with defining polynomial x^2 + x + 20
> sage: t.domain().base_ring().discriminant()
> -79
>
> The answer should be -7 but Sage gives -79

I think what you are doing with this line:
t.domain().base_ring().discriminant()
is computing the discriminant of the base ring of t, i.e., the quadratic field associated to the curve E.

This gives you what you want:
P.discriminant()
(i.e., -7).

HTH

Justin

--
Justin C. Walker, Curmudgeon at Large
Director
Institute for the Enhancement of the Director's income
-----------
--
They said it couldn't be done, but sometimes,
it doesn't work out that way.
- Casey Stengel
--



John Cremona

unread,
Jul 6, 2022, 3:18:47 AM7/6/22
to SAGE devel


On Tue, 5 Jul 2022, 23:21 'Justin C. Walker' via sage-devel, <sage-...@googlegroups.com> wrote:


> On Jul 5, 2022, at 07:00 , Debanjana <tul...@gmail.com> wrote:
>
> sage: E = EllipticCurve('11a1')
> sage: P = E.heegner_point(-7)
> sage: t = P.point_exact()
> sage: t.domain()
> Spectrum of Number Field in a with defining polynomial x^2 + x + 20
> sage: t.domain().base_ring().discriminant()
> -79
>
> The answer should be -7 but Sage gives -79

I think what you are doing with this line:
    t.domain().base_ring().discriminant()
is computing the discriminant of the base ring of t, i.e., the quadratic field associated to the curve E.

This gives you what you want:
    P.discriminant()
(i.e., -7).


No this does not explain it. P.point_exact() should give a point defined over the field with discriminant -7, but it gives a point over a different field. This is wrong.

John











HTH

Justin

--
Justin C. Walker, Curmudgeon at Large
Director
Institute for the Enhancement of the Director's income
-----------
--
They said it couldn't be done, but sometimes,
it doesn't work out that way.
  - Casey Stengel
--



--
You received this message because you are subscribed to the Google Groups "sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/9025D9A8-5E0F-42C9-AD1D-8B73F0E5BB5B%40mac.com.

John Cremona

unread,
Jul 6, 2022, 5:29:08 AM7/6/22
to SAGE devel
The problem is in lines 3373-3374 and 3382 of
src/sage/schemes/elliptic_curves/heegner.py. The floating point
approximation of the point has x-coordinate 0.500000000000000 -
1.32287565553229*I and the code tries to find an algebraic number to
match (i.e. a polynomial over QQ with it as approximate root) this
using degrees 1 and 2. Degree 1 gives back x which passes the test on
line 3382 (self._check_poly_discriminant(f)) which is only checking
that its root could be in the relevant field (and of course 0 is the
root, so it is).

I'll open a ticket for this.

John

John Cremona

unread,
Jul 6, 2022, 9:09:20 AM7/6/22
to SAGE devel
On Wed, 6 Jul 2022 at 10:28, John Cremona <john.c...@gmail.com> wrote:
>
> The problem is in lines 3373-3374 and 3382 of
> src/sage/schemes/elliptic_curves/heegner.py. The floating point
> approximation of the point has x-coordinate 0.500000000000000 -
> 1.32287565553229*I and the code tries to find an algebraic number to
> match (i.e. a polynomial over QQ with it as approximate root) this
> using degrees 1 and 2. Degree 1 gives back x which passes the test on
> line 3382 (self._check_poly_discriminant(f)) which is only checking
> that its root could be in the relevant field (and of course 0 is the
> root, so it is).
>
> I'll open a ticket for this.

https://trac.sagemath.org/ticket/34121
Reply all
Reply to author
Forward
0 new messages