To add to John's answer. Even over Q, the issue appears
sage: E = EllipticCurve("11a1")
sage: A = EllipticCurve("11a2")
sage: A.isogeny(None,codomain=E,degree=5)
fails, but
sage: phi = E.isogeny(None,codomain=A,degree=5)
sage: phi.dual()
Isogeny of degree 5 from Elliptic Curve defined by y^2 + y = x^3 - x^2 -
7820*x - 263580 over Rational Field to Elliptic Curve defined by y^2 + y =
x^3 - x^2 - 10*x - 20 over Rational Field
works.
Instead of "normalized" I would have called it "étale" there as these are
the isogenies that extend to an étale map on the Néron model. (So I do
think they are interesting over number fields too :) )
Now over Q when the degree is prime, one or the other is normalized and so
you can always construct the isogeny in this way. It doesn't work between
your curves linked with a 4-isogeny, but maybe with an intermediate step it
could.
The implementation of isogenies is still very incomplete. A lot of code is
there but it could be simplified and improved a lot. A shame that I am busy
with many other things. Sorry.
Chris
On Thursday, 25 November 2021 at 14:17:19 UTC John Cremona wrote:
> "Normalised" means that the pull-back of the standard differential on
> E2 equals that of E1, and not just a nonzero multiple. It's a concept
> used mostly over finite fields, not over number fields where one
> chooses instead to make the models nicest, e.g. minimal.
>
> You are right that this should be easier. If you look at what
> E1.is_isogenous(E2) actually does in the end, it computes the full
> isogeny class of E1 and checks that E2 is in it (up to isomorphism).
> Getting the isogeny when it is not of prime degree is tricky since in
> computing the isogeny class we only compute isogenies of prime degree
> and iterate, so isogenies of composite degree are only there
> implicitly.
>
> Someone has been working on isogenies recently, allowing for more
> general ones, but I am not sure what additional functionality it will
> provide.
>
> If you do this:
>
> sage: C = E.isogeny_class()
> sage: [E3.is_isomorphic(E2) for E3 in C]
> [False, False, False, False, False, False, False, False, False, True]
> sage: C.matrix()
> [ 1 2 4 8 32 8 16 32 16 4]
> [ 2 1 2 4 16 4 8 16 8 2]
> [ 4 2 1 2 8 2 4 8 4 4]
> [ 8 4 2 1 16 4 8 16 8 8]
> [32 16 8 16 1 4 2 4 8 32]
> [ 8 4 2 4 4 1 2 4 2 8]
> [16 8 4 8 2 2 1 2 4 16]
> [32 16 8 16 4 4 2 1 8 32]
> [16 8 4 8 8 2 4 8 1 16]
> [ 4 2 4 8 32 8 16 32 16 1]
>
> you see that your E2 is the list in the list and the degree is indeed
> 4, and that there is a chain of 2-isogenies from E to E2 via the
> second curve in the list, and we could get hold of that curve and
> bothe the 2-isogenies, but not (currently, as far as I know) the
> 4-isogeny itself, at least not automatically. If you ask me nicely I
> could probably get it for you by working out the kernel polynomial....
> as some factor of
>
> sage: E.division_polynomial(4).factor()
> (8) * (x - 175*a - 67) * (x - 323/4*a - 35/4) * (x + 27/2*a + 99/2) *
> (x^2 + (82*a + 10)*x + 3783*a - 1030) * (x^4 + (164*a + 20)*x^3 +
> (22698*a - 6180)*x^2 + (1083136*a - 301700)*x + 18036372*a - 3131750)
>
> presumably the quadratic factor times one of the linears. Using the
> middle one of the linears gives the 2-division polynomial, so that is
> not it, and using either of the others gives a NotImplmentedError.
> Sorry!
>
> It certainly should work to do
>
> sage: E.isogeny(codomain=E2, degree=4, kernel=None)
>
> but that construction was implemented ages ago by someone who thought
> that only normalised isogenies were of interest. Replacing E2 by a
> suitably scaled model would work if one could work out what the
> scaling factor should be. I tried 2,1/2,4, 1/4, 8, 1/8 and then gave
> up as one should be able to work it out. For example,
>
> sage: E.isogeny(codomain=E2.change_weierstrass_model(1/2), degree=4,
> kernel=None)
>
> So I tried
>
> sage: embs = K.embeddings(CC)
> sage: (E.period_lattice(embs[0]).complex_area() /
> E2.period_lattice(embs[0]).complex_area())
> 6.85410196624968
>
> hoping to see a simple rational number, but was disappointed. Perhaps
> you can get the factor this way?
>
> John
>
> PS This isogeny class is in the LMFDB: see
> http://www.lmfdb.org/EllipticCurve/2.2.5.1/45.1/a/
>
> On Thu, 25 Nov 2021 at 13:44, David Loeffler <[email protected]> wrote:
> >
> > PS. Sorry, copy-paste error, I missed out the first line of the example,
> which was the usual incantation "sage: R.<x> = PolynomialRing(QQ)".
> >
> > On Thu, 25 Nov 2021 at 13:26, David Loeffler <[email protected]>
> wrote:
> >>
> >> If I have two elliptic curves over a number field, then Sage seems to
> know how to test if they are isogenous, and find the minimal degree of an
> isogeny between them; but is there any way of computing the actual isogeny?
> >>
> >> Here's an example (the Q-curve 45.1-a1 over Q(sqrt(5)) and its Galois
> conjugate):
> >>
> >> sage: K.<a> = NumberField(R([-1, -1, 1]))
> >> sage: E =
> EllipticCurve([K([0,1]),K([1,1]),K([1,0]),K([-7739,-4364]),K([-296465,-255406])])
> >> sage: si = K.Hom(K).list()[-1]
> >> sage: E2 = E.base_extend(si)
> >> sage: E.is_isogenous(E2)
> >> True
> >> sage: E.isogeny_degree(E2)
> >> 4
> >>
> >> There is a method "E.isogeny(...)" but it wants an explicit kernel. The
> docstring says that the kernel will be computed automatically if I specify
> "kernel=None", but that seems to result in an error:
> >>
> >> sage: E.isogeny(kernel=None, codomain=E2, degree=4)
> >> [...]
> >> ValueError: The two curves are not linked by a cyclic normalized
> isogeny of degree 4
> >>
> >> I'm not sure what "normalized" means here, but there is definitely a
> cyclic degree 4 isogeny from E to E2. What do I need to do to persuade Sage
> to find it?
> >>
> >> Regards, David
> >>
> >> --
> >> You received this message because you are subscribed to the Google
> Groups "sage-nt" group.
> >> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> >> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sage-nt/8ebce2b8-316c-4765-8236-e729f7b67b8dn%40googlegroups.com
> .
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "sage-nt" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> > To view this discussion on the web visit
> https://groups.google.com/d/msgid/sage-nt/CANDN%3Dhyd3TeUXPx5VamBkKSDA96epFfc41Yjphptb9pRwWMfZw%40mail.gmail.com
> .
>
--
You received this message because you are subscribed to the Google Groups
"sage-nt" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-nt/2671bcec-4b56-43e5-88c5-a67f451b1e90n%40googlegroups.com.