# Elliptic curve isogenies: kernel polynomial not monic

Hello, I was trying to follow the example here to create a kernel equal to the full 2 torsion. But I ran into the problem of not having a monic kernel polynomial. This is what I have

sage: p = 22031
sage: K = GF(p)
sage: F.<z> = K[]
sage: L = GF(p^2,'a',modulus=z^2+2); a = L.gen()
sage: E = EllipticCurve(K,[6486*a+8098, 12871*a+17004])
sage: ker_list = E_B.division_polynomial(2).list()
sage: phi = EllipticCurveIsogeny(E, ker_list); phi
ValueError: The kernel polynomial must be monic.


I've tried to salvage the situation by feeding the list of 2-torsion points into the function, but I do not get the same isogeny.

sage: E = EllipticCurve(GF(3), [0,0,0,1,1])
sage: ker_list = E.division_polynomial(2).list()
sage: phi = EllipticCurveIsogeny(E, ker_list)
sage: print phi
Isogeny of degree 4 from Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 3 to Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 3
sage: ETwoTors = E(0).division_points(2)
sage: phi = EllipticCurveIsogeny(E, ETwoTors)
sage: print phi
Isogeny of degree 2 from Elliptic Curve defined by y^2 = x^3 + x + 1 over Finite Field of size 3 to Elliptic Curve defined by y^2 = x^3 + 2*x over Finite Field of size 3


What I am really after is to let $\phi$ be the multiplication by 2 endomorphism.

edit retag close merge delete

Sort by » oldest newest most voted

I think this does approximately what you want:

sage: E = EllipticCurve(GF(11), [0,0,0,1,1])
sage: P = E.division_polynomial(2)
sage: {2*u+phi(u) for u in E.points()}
{(0 : 1 : 0)}


Note that this apparently happens to construct the multiplication-by-(-2) map, which has the same kernel. To get the multiplication-by-2 isogeny reliably, perhaps use

sage: E.multiplication_by_m_isogeny(2)

more