"Source: Text/Geometry/CrvEll.text";
"Line: 1961";
"Date: Wed Sep 19 23:00:01 2018";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Geometry/CrvEll.text, line: 1961
// Example: H131E20 ()
print "Example: H131E20";
ei := GetEchoInput();
SetEchoInput(true);
E := EllipticCurve([GF(97) | 2, 3]);
E1, f := IsogenyFromKernel(E, DivisionPolynomial(E, 5));
deg := Degree(f);
psi := DivisionPolynomial(E, deg);
f1 := PushThroughIsogeny(f, psi);
E2, g := IsogenyFromKernel(E1, f1);
// Velu's formulae give an isomorphic curve, not the curve itself.
IsIsomorphic(E2, E);
assert $1;
assert #E2 eq #E;
h := Isomorphism(E2, E);
f_dual := g*IsomorphismToIsogeny(h);
&and [ f_dual(f(P)) eq deg*P : P in RationalPoints(E) ];
assert $1;
f_dual eq DualIsogeny(f);
f_dual eq DualIsogeny(f) * NegationMap(E);
assert $1 or $2;
SetEchoInput(ei);
