#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.