Revision history [back]

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: phi = EllipticCurveIsogeny(E,P/P.leading_coefficient(),codomain=E)
sage: [2*u+phi(u) for u in E.points()]
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.

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: phi = EllipticCurveIsogeny(E,P/P.leading_coefficient(),codomain=E)
sage: [2*u+phi(u) for u in E.points()]
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.

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: phi = EllipticCurveIsogeny(E,P/P.leading_coefficient(),codomain=E)
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.kernel. To get the multiplication-by-2 isogeny reliably, perhaps use

sage: E.multiplication_by_m_isogeny(2)