Opened 10 years ago
Last modified 8 years ago
#12880 closed defect
Inconsistent domain, codomain and parent in EllipticCurveIsogeny — at Version 6
Reported by:  nthiery  Owned by:  cremona 

Priority:  minor  Milestone:  sage6.3 
Component:  elliptic curves  Keywords:  isogeny 
Cc:  sagecombinat, pbruin, defeo, sbesnier  Merged in:  
Authors:  Reviewers:  
Report Upstream:  N/A  Work issues:  
Branch:  Commit:  
Dependencies:  #11474  Stopgaps: 
Description (last modified by )
In the following example, the domain and codomain of phi do not match those of its parent::
sage: E = EllipticCurve(j=GF(7)(0)) sage: phi = EllipticCurveIsogeny(E, [E(0), E((0,1)), E((0,1))]) sage: phi.parent() Set of Morphisms 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 in Category of hom sets in Category of Schemes sage: phi.parent().domain() Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7 sage: phi.domain() Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7 sage: phi.parent().codomain() Abelian group of points on Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7 sage: phi.codomain() Elliptic Curve defined by y^2 = x^3 + 1 over Finite Field of size 7
Change History (6)
comment:1 Changed 9 years ago by
 Component changed from number theory to elliptic curves
 Owner changed from was to cremona
comment:2 Changed 9 years ago by
 Milestone changed from sage5.11 to sage5.12
comment:3 Changed 9 years ago by
 Milestone changed from sage6.1 to sage6.2
comment:4 Changed 8 years ago by
 Cc pbruin added
comment:5 Changed 8 years ago by
comment:6 Changed 8 years ago by
 Dependencies set to #11474
 Description modified (diff)
 Priority changed from major to minor
It should be very easy to fix in principle:

src/sage/schemes/elliptic_curves/ell_curve_isogeny.py
diff git a/src/sage/schemes/elliptic_curves/ell_curve_isogeny.py b/src/sage/schemes/e index 5cdbbdf..a729d3a 100644
a b class EllipticCurveIsogeny(Morphism): 1322 1322 self._codomain = self.__E2 1323 1323 1324 1324 # sets up the parent 1325 parent = homset.Hom(self.__E1 (0).parent(), self.__E2(0).parent())1325 parent = homset.Hom(self.__E1, self.__E2) 1326 1326 Morphism.__init__(self, parent) 1327 1327 1328 return1329 1330 1331 1328 # initializes the base field 1332 1329 def __init_algebraic_structs(self, E): 1333 1330 r"""
The only problem is that this breaks testing for equality of isogenies, due to #11474. Suppose E > E1
is an isogeny and E2
is an elliptic curve that is equal but not identical to E1
. Then Hom(E, E1)
and Hom(E, E2)
will also be equal but not identical; since the coercion model assumes uniqueness of parents, it will never regard corresponding elements of Hom(E, E1)
and Hom(E, E2)
as equal.
For some reason the Hom sets between the groups of points, on the other hand, are identical, which explains why equality testing currently is not broken.
I have used elliptic curve isogenies a huge amount and this has never bothered me, presumably because it never occurred to me to ask for the parent of an isogeny. If anyone wants to change this without breaking anything they are welcome, but I don't care very much.