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.
