# Revision history [back]

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.