Skip to content

direct computation of .formal()[1] for elliptic-curve morphisms #33865

@yyyyx4

Description

@yyyyx4

Follow-up to #33216: We can compute .formal()[1] directly, i.e., without going through .formal(). This is beneficial as the latter uses the rational maps, which can be very expensive.

  • Composite isogenies have multiplicative .formal()[1].
  • Isogenies using Vélu's or Kohel's formulas are normalized, hence .formal()[1] == 1. We only need to account for pre- and post-isomorphism.
  • Weierstrass isomorphisms (u,r,s,t) have .formal()[1] == u.

Same example as for #33216:

E = EllipticCurve(j=GF(431^2)(4))
phi = E.isogeny(2^99*E.gens()[0])
_ = phi.dual()
%timeit phi._EllipticCurveIsogeny__dual = None; phi.dual()

Sage 9.6:

537 ms ± 6.75 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

This branch:

294 ms ± 1.71 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

CC: @defeo @JohnCremona @categorie

Component: elliptic curves

Author: Lorenz Panny

Branch/Commit: fb571d3

Reviewer: John Cremona

Issue created by migration from https://trac.sagemath.org/ticket/33865

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions