1 | initial version |
Usually, when using the constructor for a point of an elliptic curve E
, the point should have components living in the field of coefficients of E
. If not, sage tries to convert. In our case, the first conversion works, the second conversion fails. To fix this, use instead of I
the root of $-1$ that exists in the field with $p^2$ elements. I will use j
instead of $i$ and/or $I$. (So there is no need to restart sage...)
The second error comes from the fact that the polynomial is $x(x-1)^2$. Using $x(x-1)$ instead also fails. I tried to guess which is the isogeny to be used, using instead an explicit point $P_4(1,\sqrt2)$, which is $4$--torsion.
The following code shows the solution in a decent case.
F = GF(127)
R.<x> = PolynomialRing(Fp)
K.<j> = F.extension( x^2 + 1 )
E0 = EllipticCurve( K, [1,0] )
assert E0.is_supersingular()
params = ( None, None, 9, 22 )
phiP = E0( [ params[2], params[3]] )
print "phiP =", phiP
phiQ = E0( [-params[2], j*params[3]] )
print "phiQ =", phiQ
E = EllipticCurve( K, [1,0] )
P4 = E( ( 1, sqrt(F(2)) ) )
phi = EllipticCurveIsogeny(E, P4)
print "phi is:\n%s\n" % phi
print "phi has the kernel polynomial %s" % phi.kernel_polynomial().factor()
The prints are, after a slight manual rearrangement:
phiP = (9 : 22 : 1)
phiQ = (118 : 22*j : 1)
phi is:
Isogeny of degree 4
from Elliptic Curve defined by y^2 = x^3 + x
over Finite Field in j of size 127^2
to Elliptic Curve defined by y^2 = x^3 + 83*x + 15
over Finite Field in j of size 127^2
phi has the kernel polynomial x * (x + 126)
Note that $P_4$ is a point of order four, and the degree of $\phi$ is also four.
sage: P4.order()
4
sage: phi.degree()
4
The code can be now easily adapted to work over the more complicated posted situation.