Bill Allombert on Fri, 04 Feb 2022 17:55:53 +0100


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

Re: miller functions for elliptic curves


On Fri, Feb 04, 2022 at 05:16:52PM +0100, Pierre Charollois wrote:
> I need a function with  divisor m[P] - m[OE], for an elliptic curve over Q,
> and P, Q  arbitrary torsion points.
> I can probably code this naively myself, but maybe there are for instance
> tricks that reduce the number of iterations. (I noticed papers about this).

Most of the papers are for the evaluated version.  For the non-evaluated
version, speed is limited by the size of the output.

You can try the attached script (based on an old script by John Cremona).

E=ellinit("11a1");
P=[5,5]
ellorder(E,P)
f=ellweilpol(E,P,5)

%12 =(150*x^3+(-35*y-2075)*x^2+(-4*y^2+390*y+9400)*x+(y^3+5*y^2-1000*y-14000))/(x^2-32*x+256)

Is it waht you need ?

Cheers,
Bill.
Y;X;
ellequation(e)='Y^2+e.a1*'X*'Y+e.a3*'Y-('X^3+e.a2*'X^2+e.a4*'X+e.a6);

elltang(e,t)=
{
  local(gpt,dyf,dxf,u,v);
  if(t==[0],return(1));
  dyf=2*t[2]+e[1]*t[1]+e[3];
  if(dyf==0,return('x-t[1]));
  dxf=e[1]*t[2]-(3*t[1]^2+2*e[2]*t[1]+e[4]);
  'y-t[2]+(dxf/dyf)*('x-t[1]);
}

ellvert(e,t)=if(t==[0],1,'x-t[1]);

ellchord(e,t,s)=
{
  local(gpt);
  if(s==[0],return(ellvert(e,t)));
  if(t==[0],return(ellvert(e,s)));
  if(s==t,return(elltang(e,t)));
  if(s[1]==t[1],return(ellvert(e,t)));
  'y-t[2]-((t[2]-s[2])/(t[1]-s[1]))*('x-t[1]);
}

ellweilpol(e,t,m)=
{
  local(kt,h);
  if(m==1,return(1));
  if(m==2,return(ellvert(e,t)));
  if(m==3,return(elltang(e,t)));
  kt=elladd(e,t,t);
  h=elltang(e,t);
  for(k=2,m-2,
      h*=ellchord(e,t,kt);
      h/=ellvert(e,kt);
      kt=elladd(e,kt,t)
     );
  h
}