American Citizen on Mon, 27 Nov 2023 21:26:20 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: general educational question on elliptic curve isogenies and moving points around |
BillThanks for that sufficient reply. I was not aware that I didn't have to move to the minimal model of the curve.
However past experience has shown me that normal Gaussian reduction (via the ellheightmatrix) doesn't quite work right for the non-minimal curves Mordell-Weil basis set, sometimes Minkowski reduction is necessary to find the smallest MW basis (how we define "smallest" is a story in itself)
So I guess I got into a habit of using the minimal form for the curve. Randall On 11/27/23 09:46, Bill Allombert wrote:
On Sun, Nov 26, 2023 at 05:07:18PM -0800, American Citizen wrote:Bill What I am expecting as a function operator is something like map_iso(F,E,pt) = [operate_on_x, operate_on_y] where x=p[1] and y=p[2] using the f,g,h polynomials from the ellisomat results. derived from the minimal model maps of the elliptic curves F and E. I would like to see the operator function f given like a GP-Pari function say q = f(F,E,p) which outputs point q on F. The way I worked this was take E (given elliptic curve), find M (minimal model of E), move points to M, then find N (minimal model of F) and carefully compare the ellisomat results for both elliptic curves M and N, to find a match on the E(a4,a6) curves. Once this is found, I move points on E to M, then move points from M to N, then move the points from N to F. As you all know, this has to be carefully done.There is no need to take minimal models. You can do this: \\ find the curve in S isomorphic to F findisom(S,F)= { foreach(S,s, my(urst=ellisisom(ellinit(s[1]),F)); if(urst,return([s[2],s[3],urst]))); } \\ return [f,fd], f isogeny from E to F, and fd its dual. isog(E,F)= { my(S=ellisomat(E)[1]); my([f,fd,urst]=findisom(S,F)); [P->ellchangepoint(ellisogenyapply(f,P),urst), P->ellisogenyapply(fd,ellchangepointinv(P,urst))]; } For example: ? E=ellinit(K[1]); ? F=ellinit(K[2]); ? P=elltors(E).gen[1] %3 = [-221813002148660,28351785859134866849500] ? [f,fd]=isog(E,F); ? Q=f(P) %5 = [833820316449280,-7588256062930707186440] ? ellisoncurve(F,Q) %6 = 1 ? ellorder(F,Q) %7 = 4 ? R=fd(Q) %8 = [990529152804880,-495264576402440] ? R==ellmul(E,P,2) %9 = 1 Cheers, Bill.