Bill Allombert on Thu, 03 Oct 2024 09:39:19 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: question on moving points from one elliptic curve to another


On Wed, Oct 02, 2024 at 04:18:57PM -0700, American Citizen wrote:
> Hello:
> 
> My gp-pari program "ell_lift_pts(f,e,p)" where f and e are 5-element
> Weierstrass format for two elliptic curves with the same conductor and p is
> either a single point p, or a vector of points on the elliptic curve e, is
> not working correctly.
> 
> What's the right way to do this in GP Pari?

First, you can only do that if the curves are isogenous, it is not sufficient
for them to have the same conductor.

For example 37a1 and 37b1 have the same conductor but not the same rank.

Second, you should upgrade to PARI 2.17.0 that I released on Monday.
It includes a new function ellisisom that I wrote especially for your usecase.

ellisisom(E,F):

   Return  0  if the elliptic curves E and F defined over the same number field are not isomorphic,  otherwise return [u,r,s,t] suitable
for ellchangecurve, mapping E to F.

   ? E = ellinit([1,2]);
   ? ellisisom(E, ellinit([1,3]))
   %2 = 0
   ? F = ellchangecurve(E, [-1,1,3,2]);
   ? ellisisom(E,F)
   %4 = [1, 1, -3, -2]


Now if you curve are not isomorphic you can use ellisomat to check whether they are isogenous:
run ellisomat(E) and then check whether one of the isogenous curve is isomorphic to E using
ellisisom.

Here an example:

E=ellinit("65a1")
F=ellinit("65a2")
PE=ellheegner(E)
L=ellisomat(E)[1];
S=select(e->ellisisom(F,ellinit(e[1])),L)[1]
G=ellinit(S[1]);
urst=ellisisom(G,F)
PG=ellisogenyapply(S[2],PE)
ellisoncurve(G,PG)
PF=ellchangepoint(PG,urst)
ellisoncurve(F,PF)

? E=ellinit("65a1")
%1 = [1,0,0,-1,0,1,-2,0,-1,49,-73,65,117649/65,Vecsmall([1]),[Vecsmall([128,1])],[0,0,0,0,0,0,0,0]]
? F=ellinit("65a2")
%2 = [1,0,0,4,1,1,8,4,-15,-191,-577,-4225,6967871/4225,Vecsmall([1]),[Vecsmall([128,-1])],[0,0,0,0,0,0,0,0]]
? PE=ellheegner(E)
%3 = [1,0]
? L=ellisomat(E)[1];
? S=select(e->ellisisom(F,ellinit(e[1])),L)[1]
%5 = [[191/48,577/864],[x^3+1/12*x^2-x,1/2*x^4+y*x^3+1/2*x^2+y*x,x],[1/4*x^3+191/192*x+577/3456,-1/8*x^4+(1/8*y-1/48)*x^3+(1/16*y-191/384)*x^2+(-191/384*y-575/3456)*x+(-581/6912*y-577/41472),x+1/6]]
? G=ellinit(S[1]);
? urst=ellisisom(G,F)
%7 = [1,1/12,1/2,0]
? PG=ellisogenyapply(S[2],PE)
%8 = [1/12,1]
? ellisoncurve(G,PG)
%9 = 1
? PF=ellchangepoint(PG,urst)
%10 = [0,1]
? ellisoncurve(F,PF)
%11 = 1

Cheers,
Bill