#18611: Further isogeny improvement
-------------------------------------+-------------------------------------
       Reporter:  jdemeyer           |        Owner:
           Type:  enhancement        |       Status:  needs_review
       Priority:  major              |    Milestone:  sage-6.8
      Component:  elliptic curves    |   Resolution:
       Keywords:                     |    Merged in:
        Authors:  Jeroen Demeyer     |    Reviewers:
Report Upstream:  N/A                |  Work issues:
         Branch:                     |       Commit:
  u/jdemeyer/ticket/18611            |  7dfcc8e3a8d27b923afaae87a0b4764008146f5d
   Dependencies:  #18589             |     Stopgaps:
-------------------------------------+-------------------------------------
Description changed by jdemeyer:

Old description:

> To compute all `l`-isogenies, Sage uses a function `mult(f)` which
> computes
> {{{
> gcd( numerator(f(m)), psi )
> }}}
> where `m` is a rational function giving the multiplication-by-`m` map
> (the denominator of `m` is coprime to `psi`)
>
> Instead of the above computation, the inverse direction is actually
> easier to compute: given `g`, we want to find `f` such that
> {{{
> gcd( numerator(f(m)), psi ) = g
> }}}
> Using some theory, this is equivalent to
> {{{
> f(m) = 0 mod g
> }}}
> Since `f` must be irreducible, this is just the characteristic (=
> minimal) polynomial of `m mod g`.
>
> ----------
>
> Example timing:
>
> '''before'''
> {{{
> sage: %time from sage.schemes.elliptic_curves.isogeny_small_degree import
> isogenies_prime_degree_general; E = EllipticCurve(GF(3^3,'a'),
> [0,0,0,-1,0]); L = isogenies_prime_degree_general(E, 73)
> CPU times: user 1min 52s, sys: 16 ms, total: 1min 52s
> Wall time: 1min 52s
> }}}
>
> '''after'''
> {{{
> sage: %time from sage.schemes.elliptic_curves.isogeny_small_degree import
> isogenies_prime_degree_general; E = EllipticCurve(GF(3^3,'a'),
> [0,0,0,-1,0]); L = isogenies_prime_degree_general(E, 73)
> CPU times: user 33.1 s, sys: 107 ms, total: 33.2 s
> Wall time: 33.2 s
> }}}

New description:

 To compute all `l`-isogenies, Sage uses a function `mult(f)` which
 computes
 {{{
 gcd( numerator(f(m)), psi )
 }}}
 where `m` is a rational function giving the multiplication-by-`m` map (the
 denominator of `m` is coprime to `psi`)

 Instead of the above computation, the inverse direction is actually easier
 to compute: given `g`, we want to find `f` such that
 {{{
 gcd( numerator(f(m)), psi ) = g
 }}}
 Using some theory, this is equivalent to
 {{{
 f(m) = 0 mod g
 }}}
 Since `f` must be irreducible of the same degree as `g`, this is just the
 characteristic (= minimal) polynomial of `m mod g`.

 ----------

 Example timing:

 '''before'''
 {{{
 sage: %time from sage.schemes.elliptic_curves.isogeny_small_degree import
 isogenies_prime_degree_general; E = EllipticCurve(GF(3^3,'a'),
 [0,0,0,-1,0]); L = isogenies_prime_degree_general(E, 73)
 CPU times: user 1min 52s, sys: 16 ms, total: 1min 52s
 Wall time: 1min 52s
 }}}

 '''after'''
 {{{
 sage: %time from sage.schemes.elliptic_curves.isogeny_small_degree import
 isogenies_prime_degree_general; E = EllipticCurve(GF(3^3,'a'),
 [0,0,0,-1,0]); L = isogenies_prime_degree_general(E, 73)
 CPU times: user 33.1 s, sys: 107 ms, total: 33.2 s
 Wall time: 33.2 s
 }}}

--

--
Ticket URL: <http://trac.sagemath.org/ticket/18611#comment:8>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to