Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Elliptic curves with CM over number fields fail to find all isogenies #36780

Closed
2 tasks done
JohnCremona opened this issue Nov 26, 2023 · 2 comments · Fixed by #36786
Closed
2 tasks done

Elliptic curves with CM over number fields fail to find all isogenies #36780

JohnCremona opened this issue Nov 26, 2023 · 2 comments · Fixed by #36786

Comments

@JohnCremona
Copy link
Member

Steps To Reproduce

Define an elliptic curve E over a real quadratic number field, where j(E) = 0, compute E.isogeny_class(), and look at the degrees it finds. Example:
sage: L5. = NumberField(x^2-5)
sage: F = EllipticCurve(L5,[0,-4325477943600*r5-4195572876000])
sage: F.isogeny_class().matrix()
[1 3]
[3 1]

Expected Behavior

The matrix should include isogenies of degree 5 (and more).

Actual Behavior

It only find 3-isogenies (see above).

Additional Information

As reported to sage-support: https://groups.google.com/g/sage-support/c/1BfJIGIlb0M

The problem is in the function sage.schemes.elliptic_curves.isogeny_class.isogeny_degrees.cm, where the degree bound called n there needs to be multiplied by 3 for j=0, d=-3 (and by 2 for j=1728, d=-4).

A PR is in preparation. Only curves with j=0 or j=1728 are affected (and not all these).

Environment

- **OS**: any
- **Sage Version**: 10.2rc3

Checklist

  • I have searched the existing issues for a bug report that matches the one I want to file, without success.
  • I have read the documentation and troubleshoot guide
@JohnCremona JohnCremona self-assigned this Nov 26, 2023
JohnCremona added a commit to JohnCremona/sage that referenced this issue Nov 27, 2023
JohnCremona added a commit to JohnCremona/sage that referenced this issue Nov 27, 2023
JohnCremona added a commit to JohnCremona/sage that referenced this issue Nov 27, 2023
vbraun pushed a commit to vbraun/sage that referenced this issue Dec 21, 2023
    
Fixes sagemath#36780.

For elliptic curves over number fields, with j-invariant 0 and 1728, the
function isogeny_degrees_cm was forgetting to multiply a degree bound by
3 or 2 respectively (half the number of units), resulting in some
isogenies being missed.


- [ x] The title is concise, informative, and self-explanatory.
- [ x] The description explains in detail what this PR is about.
- [ x] I have linked a relevant issue or discussion.
- [ x] I have created tests covering the changes.
- [ x] I have updated the documentation accordingly.
    
URL: sagemath#36786
Reported by: John Cremona
Reviewer(s): Frédéric Chapoton
vbraun pushed a commit to vbraun/sage that referenced this issue Dec 22, 2023
    
Fixes sagemath#36780.

For elliptic curves over number fields, with j-invariant 0 and 1728, the
function isogeny_degrees_cm was forgetting to multiply a degree bound by
3 or 2 respectively (half the number of units), resulting in some
isogenies being missed.


- [ x] The title is concise, informative, and self-explanatory.
- [ x] The description explains in detail what this PR is about.
- [ x] I have linked a relevant issue or discussion.
- [ x] I have created tests covering the changes.
- [ x] I have updated the documentation accordingly.
    
URL: sagemath#36786
Reported by: John Cremona
Reviewer(s): Frédéric Chapoton
vbraun pushed a commit to vbraun/sage that referenced this issue Dec 23, 2023
    
Fixes sagemath#36780.

For elliptic curves over number fields, with j-invariant 0 and 1728, the
function isogeny_degrees_cm was forgetting to multiply a degree bound by
3 or 2 respectively (half the number of units), resulting in some
isogenies being missed.


- [ x] The title is concise, informative, and self-explanatory.
- [ x] The description explains in detail what this PR is about.
- [ x] I have linked a relevant issue or discussion.
- [ x] I have created tests covering the changes.
- [ x] I have updated the documentation accordingly.
    
URL: sagemath#36786
Reported by: John Cremona
Reviewer(s): Frédéric Chapoton
vbraun pushed a commit to vbraun/sage that referenced this issue Dec 24, 2023
    
Fixes sagemath#36780.

For elliptic curves over number fields, with j-invariant 0 and 1728, the
function isogeny_degrees_cm was forgetting to multiply a degree bound by
3 or 2 respectively (half the number of units), resulting in some
isogenies being missed.


- [ x] The title is concise, informative, and self-explanatory.
- [ x] The description explains in detail what this PR is about.
- [ x] I have linked a relevant issue or discussion.
- [ x] I have created tests covering the changes.
- [ x] I have updated the documentation accordingly.
    
URL: sagemath#36786
Reported by: John Cremona
Reviewer(s): Frédéric Chapoton
vbraun pushed a commit to vbraun/sage that referenced this issue Dec 26, 2023
    
Fixes sagemath#36780.

For elliptic curves over number fields, with j-invariant 0 and 1728, the
function isogeny_degrees_cm was forgetting to multiply a degree bound by
3 or 2 respectively (half the number of units), resulting in some
isogenies being missed.


- [ x] The title is concise, informative, and self-explanatory.
- [ x] The description explains in detail what this PR is about.
- [ x] I have linked a relevant issue or discussion.
- [ x] I have created tests covering the changes.
- [ x] I have updated the documentation accordingly.
    
URL: sagemath#36786
Reported by: John Cremona
Reviewer(s): Frédéric Chapoton
@mkoeppe mkoeppe added this to the sage-10.3 milestone Dec 26, 2023
@JohnCremona JohnCremona reopened this May 1, 2024
@JohnCremona
Copy link
Member Author

The curve is defined by
sage: K. = NumberField(x^2-5)
sage: t = -4320 - 1944r
sage: E = EllipticCurve([0, -27
t^2, 0, 216t^3(t - 27), -432t^4(t - 27)^2])
sage: E.has_cm()
True
sage: E.cm_discriminant()
-75
sage: C = E.isogeny_class()
sage: len(C)
6
sage: C.matrix()[0]
(1, 25, 75, 3, 5, 15)

This is all correct, the class has size 6 and 3- and 5- isogenies suffice to fill it. But the class contains two curves defined over Q for example
sage: E1 = C[5]; E1.ainvs()
(0, 0, 1, 0, 1)
sage: E1.j_invariant()
0
sage: E1.base_field() == K
True

and computing the isogeny class starting with E1 does not find the whole class as it misses 5-isogenies:

sage: len(E1.isogeny_class())
2

The problem is in the function possible_isogeny_degrees_cm():
sage: from sage.schemes.elliptic_curves.isogeny_class import isogeny_degrees_cm
sage: isogeny_degrees_cm(E1, verbose=True)
CM case, discriminant = -3
initial primes: {2, 3}
ramified primes: {3}
downward split primes: {}
downward inert primes: {}
Complete set of primes: {2, 3}
[2, 3]

Here, "downward" primes are sgrees of isogenies to curves with a strictly smaller endomorphism ring and in this case should inlude 5. I cannot right now see the error in the code but am building the current development branch and will sort this out.

@JohnCremona
Copy link
Member Author

Sorry for the noise: I was testing on an old Sage, there is no problem now (10.4.beta4).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants