So it seems accessible to get Sage to find a chain of prime-degree
isogenies, going from E1 to E2 via some intermediate curves (presumably
using "isogenies_prime_degree"). That's sufficient for my application
(indeed possibly better than a single composite isogeny, since the degrees
of the polynomials will be much smaller this way).

Thanks, John and Chris!

Best wishes, David

On Fri, 26 Nov 2021 at 09:14, chris wuthrich <[email protected]>
wrote:

>
> 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 a topic in the
> Google Groups "sage-nt" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sage-nt/hy4-Q4bD2gM/unsubscribe.
> To unsubscribe from this group and all its topics, 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
> <https://groups.google.com/d/msgid/sage-nt/2671bcec-4b56-43e5-88c5-a67f451b1e90n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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%3Dhw792-Kz5BmNKaEAW_zkHpkJjuKSe6Y-jx-Qiq-wm%3DzDQ%40mail.gmail.com.

Reply via email to