Closed
Description
The isogenies implementation suffers several conception issues; the main issues I can quickly describe are:
- the
_mul_
method of EllipticCurveIsogeny is not handled by the general Morphism class:
sage: E = EllipticCurve(j=GF(7)(0))
sage: phi=E.isogeny( [E(0), E((0,1)), E((0,-1))])
sage: phi*phi
[...]
TypeError: Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7 is not in Category of hom sets in Category of Schemes
--> I've edited ell_curve_isogeny.py in order to make this work: the codomain() and domain() methods initially gaves "Elliptic Curve ...", I've updated to "Abelian group of points of Elliptic Curve ..." (and tried to make the other parts of code consistant with that).
- Hierarchy class is not well think: e.g. WeierstrassIsomorphism is not a child of EllipticCurveIsogeny. Moreover, we can not compose isogeny and Weierstrass Isomorphism. There exist a "SchemeMorphism" class; maybe it's a good idea to make EllipticCurveIsogeny subclass of this ?
Follwing the previous code:
sage: i=WeierstrassIsomorphism(E,(2,0,0,0))
sage: phi*i
Composite map:
From: Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
To: Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
Defn: Generic morphism:
From: Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
To: Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
Via: (u,r,s,t) = (2, 0, 0, 0)
then
Isogeny of degree 3:
From: Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
To: Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
sage: i*phi
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-13-b2d0bfcb3b82> in <module>()
----> 1 i*phi
/home/sebsheep/sage/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/weierstrass_morphism.pyc in __mul__(self, other)
582 True
583 """
--> 584 if self._domain_curve==other._codomain_curve:
585 w=baseWI.__mul__(self,other)
586 return WeierstrassIsomorphism(other._domain_curve, w.tuple(), self._codomain_curve)
/home/sebsheep/sage/local/lib/python2.7/site-packages/sage/structure/element.so in sage.structure.element.Element.__getattr__ (sage/structure/element.c:3868)()
/home/sebsheep/sage/local/lib/python2.7/site-packages/sage/structure/misc.so in sage.structure.misc.getattr_from_other_class (sage/structure/misc.c:1696)()
AttributeError: 'EllipticCurveIsogeny' object has no attribute '_codomain_curve'
I've joined a "preliminary draft" of a new "sage/local/lib/python2.7/site-packages/sage/schemes/elliptic_curves/ell_curve_isogeny.py" wrote in a few hours.
Depends on #12880
Component: elliptic curves
Keywords: days57
Reviewer: Matthias Koeppe
Issue created by migration from https://trac.sagemath.org/ticket/16115