Skip to content

Class misconception with isogenies #16115

Closed
@sagetrac-sbesnier

Description

@sagetrac-sbesnier

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

CC: @defeo @yyyyx4

Component: elliptic curves

Keywords: days57

Reviewer: Matthias Koeppe

Issue created by migration from https://trac.sagemath.org/ticket/16115

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions