I used Maple to get the change of variable for the quartic

v^2 = p^4 - 2p^3 + 5p^2 + 8p + 4

This is the output : enter image description here

In other words, from the output I obtained from Maple:


The problem arises with this output is when I rearrange the elliptic curve to become the standard form : $$y^2 = x^3-(121/3)x-1690/27$$ I noticed that the change of variable x,y,p,v changes as well because I tried substituting them back in the elliptic curve (that I rearranged) and they no longer satisfy the curve. Is there a way to fix this?

Also, I actually did lots of thinking and calculation on this since yesterday and found out (using Sage)

p,x,v,y= var('p x v y')
y= -(4*(p^3-5*p^2+2*p*v-12*p+4*v-8))/p^3
eq1=expand(y^2 - x^3 + (121/3)*x - 1690/27) #Elliptic curve E4
eq=eq1.subs({v: sqrt(p^4 - 2*p^3 + 5*p^2 + 8*p + 4)})
eq.simplify_full() = 0

Explanation : I just changed the negative sign on x to be positive and wrote my elliptic curve as y^2 = x^3 - (121/3)*x + 1690/27.

Next problem : No idea what to do with the change of variable for p, v to satisfy this curve too. Is there a better way to deal with this?


1 Answer 1


I don't understand why you say that the the substitutions produced by the Weierstrassform command do not satisfy the elliptic curve.

The entry k[1] is,

x^3 - (121/3)*x - 1690/27 + y^2


x^3 - (121/3)*x - 1690/27 - y^2

Let's do some substitutions, using those results given by the Weierstrassform command.

f := v^2 - ( p^4 - 2*p^3 + 5*p^2 + 8*p + 4 ):

k := Weierstrassform(f,p,v,x,y):

lprint( k[1] );


map( lprint, [ x=k[2], y=k[3], p=k[4], v=k[5] ] ):

  x = -(1/3)*(5*p^2+24*p-12*v+24)/p^2
  y = -4*(p^3-5*p^2+2*p*v-12*p+4*v-8)/p^3
  p = (-72*x-264+36*y)/(9*x^2+30*x-119)
  v = (-162*x^4+540*x^3-648*x^2*y+13176*x^2-4752*x*y+62340*x-16488*y+153994)/(81*x^4+540*x^3-1242*x^2-7140*x+14161)

lprint( solve(f, v) );

   (p^4-2*p^3+5*p^2+8*p+4)^(1/2), -(p^4-2*p^3+5*p^2+8*p+4)^(1/2)

# Substitute for x and y in k[1], then substitute using
# v=solve(f, v)[1], and then simplify.
simplify( eval(eval(k[1], [x=k[2], y=k[3]]), [v=solve(f, v)[1]]) );


# Substitute for x and y in k[1], then substitute using
# v=solve(f, v)[2], and then simplify.
simplify( eval(eval(k[1], [x=k[2], y=k[3]]), [v=solve(f, v)[2]]) );


# Substitute for x and y in k[1], then simplify using
# f=0 as a side-relation.
simplify( eval(k[1], [x=k[2], y=k[3]]), {f} );


# Substitute for p and v in f, then simplify using
# k[1]=0 as a side-relation.
simplify( simplify( eval(f, [p=k[4], v=k[5]]) ), {k[1]} );


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .