Generators for the Mordell-Weil group of an elliptic curve over Q(sqrt(-5))

82 views
Skip to first unread message

David Roe

unread,
Apr 12, 2013, 7:36:13 PM4/12/13
to sag...@googlegroups.com
I just tried to find E(Q(sqrt(-5))) for a curve of conductor 522 and got a runtime error.  This computation doesn't seem like it would be infeasible; am I doing something wrong or is my intuition for what's computable out of whack?
David

sage: E = EllipticCurve('522c1'); E
Elliptic Curve defined by y^2 + x*y = x^3 - x^2 - 6*x - 54 over Rational Field
sage: E5 = E.base_extend(QuadraticField(-5))
sage: E5.gens()
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-59-7cc691b43220> in <module>()
----> 1 E5.gens()

/Users/roed/sage/sage-5.9.beta0/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/ell_number_field.pyc in gens(self, verbose, lim1, lim3, limtriv, maxprob, limbigprime)
   1831         """
   1832
-> 1833         lower,upper,gens = self.simon_two_descent(verbose=verbose,lim1=lim1,lim3=lim3,limtriv=limtriv,maxprob=maxprob,limbigprime=limbigprime)
   1834         return gens
   1835

/Users/roed/sage/sage-5.9.beta0/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/ell_number_field.pyc in simon_two_descent(self, verbose, lim1, lim3, limtriv, maxprob, limbigprime)
    303         t = simon_two_descent(self,
    304                               verbose=verbose, lim1=lim1, lim3=lim3, limtriv=limtriv,
--> 305                               maxprob=maxprob, limbigprime=limbigprime)
    306         prob_rank = Integer(t[0])
    307         two_selmer_rank = Integer(t[1])

/Users/roed/sage/sage-5.9.beta0/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/gp_simon.pyc in simon_two_descent(E, verbose, lim1, lim3, limtriv, maxprob, limbigprime)
    100     s = gp.eval('ans=%s;'%cmd)
    101     if s.find("***") != -1:
--> 102         raise RuntimeError, "\n%s\nAn error occurred while running Simon's 2-descent program"%s
    103     if verbose > 0:
    104         print s

RuntimeError:
  ***   at top-level: ans=bnfellrank(K,[1,-1,0
  ***                     ^--------------------
  ***   in function bnfellrank: ...eqtheta,rnfeq,bbnf];rang=
  ***   bnfell2descent_gen(b
  ***   ^--------------------
  ***   in function bnfell2descent_gen: ...ol de Legendre = "));vec=
  ***   bnfqfsolve(bnf,alpha
  ***   ^--------------------
  ***   in function bnfqfsolve: ...lag3&&bnf.clgp[1]>1,resl=
  ***   bnfqfsolve2(bnf,aa,b
  ***   ^--------------------
  ***   in function bnfqfsolve2: ...t(bnf,solvepolrel);bbbnf=
  ***   bnfinit(solvepolabs,
  ***   ^--------------------
  *** bnfinit: bnfinit: fundamental units too large.
An error occurred while running Simon's 2-descent program

William Stein

unread,
Apr 12, 2013, 7:48:28 PM4/12/13
to sag...@googlegroups.com
On Fri, Apr 12, 2013 at 4:36 PM, David Roe <roed...@gmail.com> wrote:
> I just tried to find E(Q(sqrt(-5))) for a curve of conductor 522 and got a
> runtime error. This computation doesn't seem like it would be infeasible;
> am I doing something wrong or is my intuition for what's computable out of
> whack?
> David
>
> sage: E = EllipticCurve('522c1'); E
> Elliptic Curve defined by y^2 + x*y = x^3 - x^2 - 6*x - 54 over Rational
> Field
> sage: E5 = E.base_extend(QuadraticField(-5))

You probably already know this, but you *should* compute with the
quadratic twist. The following will instantly give equivalent
information to what you want:

E = EllipticCurve('522c1')
F = E.quadratic_twist(-5)
F.rank()
F.gens()

Of course, Sage *should* be doing this behind the scenes.

William
> --
> You received this message because you are subscribed to the Google Groups
> "sage-nt" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sage-nt+u...@googlegroups.com.
> To post to this group, send an email to sag...@googlegroups.com.
> Visit this group at http://groups.google.com/group/sage-nt?hl=en-GB.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>



--
William Stein
Professor of Mathematics
University of Washington
http://wstein.org

John Cremona

unread,
Apr 13, 2013, 3:51:12 AM4/13/13
to sage-nt
That's funny, I thought someone had implemented this: finding E(K)
when K is quadratic and E is defined over Q. It would make a nice
project for someone.

Of course, the first method, using Simon's script, should have worked too.

John

David Roe

unread,
Apr 15, 2013, 7:55:01 AM4/15/13
to sag...@googlegroups.com
On Fri, Apr 12, 2013 at 5:48 PM, William Stein <wst...@gmail.com> wrote:
On Fri, Apr 12, 2013 at 4:36 PM, David Roe <roed...@gmail.com> wrote:
> I just tried to find E(Q(sqrt(-5))) for a curve of conductor 522 and got a
> runtime error.  This computation doesn't seem like it would be infeasible;
> am I doing something wrong or is my intuition for what's computable out of
> whack?
> David
>
> sage: E = EllipticCurve('522c1'); E
> Elliptic Curve defined by y^2 + x*y = x^3 - x^2 - 6*x - 54 over Rational
> Field
> sage: E5 = E.base_extend(QuadraticField(-5))

You probably already know this, but you *should* compute with the
quadratic twist.  The following will instantly give equivalent
information to what you want:

E = EllipticCurve('522c1')
F = E.quadratic_twist(-5)
F.rank()
F.gens()

I guess I don't see how to leverage generators of F over Q into generators for E(Q(sqrt(-5))).  I looked in Silverman's chapter on the Mordell-Weil group and didn't find anything; a reference would be great.
 
Of course, Sage *should* be doing this behind the scenes.

Of course.  Now we just need to get someone to implement it.  ;-)
David

John Cremona

unread,
Apr 15, 2013, 8:53:55 AM4/15/13
to sage-nt
Here's how. Since E and F are isomorphic over K=Q(sqrt-5) you can
define an isomorphism from F.base_change(K) to E.base_change(K) and
then use that to map points. That gives you "half" the generators
(those in the -1-eigenspace for Galois). For the ones in the
+1-eigenspace just map E.gens() into E.base_change(K).

I would give an example but have a meeting in 5 minutes...

John

John Cremona

unread,
Apr 15, 2013, 8:58:32 AM4/15/13
to sage-nt
sage: E = EllipticCurve('37a1')
sage: K.<a> = QuadraticField(-5)
sage: F = E.quadratic_twist(-5)
sage: E.rank(), F.rank()
(1, 1)
sage: EK = E.change_ring(K)
sage: gens1 = [EK(P) for P in E.gens()]
sage: iso = F.isomorphism_to(EK)
sage: gens2 = [EK(iso(P)) for P in F.gens()]
sage: gens = gens1+gens2
sage: gens
[(0 : 0 : 1), (3/4 : 1/8*a - 1/2 : 1)]
sage: EK.rank()
2

John

PS you can thank the person who implemented quadratic twists and
isomorphisms and point-mappings! ;)

David Roe

unread,
Apr 15, 2013, 9:15:18 AM4/15/13
to sag...@googlegroups.com
That makes sense.  Thanks!
David

Nils Bruin

unread,
Apr 15, 2013, 3:21:44 PM4/15/13
to sage-nt
On Apr 15, 5:53 am, John Cremona <john.crem...@gmail.com> wrote:
> Here's how.  Since E and F are isomorphic over K=Q(sqrt-5) you can
> define an isomorphism from F.base_change(K) to E.base_change(K) and
> then use that to map points.  That gives you "half" the generators
> (those in the -1-eigenspace for Galois).  For the ones in the
> +1-eigenspace just map E.gens() into E.base_change(K).

A priori that only gets you generators for E(K) tensor_Z Q, though.
The group E(K) is canonically isomorphic to WeilRestriction(E,K/Q)(Q),
which is a (2,2)-isogeny away from E x E^(d). You'd still have to 2-
saturate the group generated by the images in E(K) [which is easy].

Or do we have a theorem somewhere that readily gives us the index of
(E x E^(d))(Q) in WeilRestriction(E,K/Q)(Q) ?

John Cremona

unread,
Apr 15, 2013, 4:05:15 PM4/15/13
to sage-nt
You are quite right Nils (of course!) -- I did not mean to suggest
that we got more than a subgroup of finite index. But 2-saturation
would be enough, assuming we start with generators of the full groups
over Q including torsion generators.

Anyone who implements that would have to add the saturation step;
adding torsion might as well be done over the quadratic field anyway.

John
Reply all
Reply to author
Forward
0 new messages