#18589: isogeny efficiency improvement
-------------------------+-------------------------------------------------
       Reporter:         |        Owner:
  cremona                |       Status:  needs_review
           Type:         |    Milestone:  sage-6.8
  enhancement            |   Resolution:
       Priority:  major  |    Merged in:
      Component:         |    Reviewers:
  elliptic curves        |  Work issues:
       Keywords:         |       Commit:
  isogeny                |  47ccfd587402b953c612fcd3cddaa541a6847bd3
        Authors:  John   |     Stopgaps:
  Cremona                |
Report Upstream:  N/A    |
         Branch:         |
  u/cremona/18589        |
   Dependencies:         |
-------------------------+-------------------------------------------------

Comment (by jdemeyer):

 Replying to [comment:9 cremona]:
 > I thought that we did use resultants... but looking again at Kimi's
 code, the relevant function is mult() on line 1960:  the effect of this
 function is to take the polynomial f and the rational function m, under
 the assumption that f is coprime to the denominator of m, and return the
 poly whose roots are m(alpha) as alpha runs over the roots of f.  If m
 were a polynomial that would be res_Y(X-m(Y),f(Y)).  I can see now that we
 could stil use that formula with m(Y) replaced by the polynomial p(Y)
 which satisfies p*d=n (mod f) where m=n/d which would amount to one
 extended gcd and one resultant.  This may be better than the current code
 since it does not use rational functions.

 I don't quite get what you're saying here. I think I said "resultants" too
 quickly before looking at the actual code.

 Mathematically, we need to compute
 {{{
 gcd( numerator( f(a/b) ), phi)
 }}}
 where `f`, `a`, `b`, `phi` are univariate polynomials and only `f`
 changes. I guess we know that the denominator of `f(a/b)` is `b^d` with
 `d` the degree of `f`. So we need
 {{{
 gcd( b^d f(a/b), phi)
 }}}
 Now suppose `c` is such that `a/b = c mod phi`, then we really need
 {{{
 gcd( b^d f(c), phi)
 }}}
 which equals
 {{{
 gcd(f(c), phi)
 }}}
 Now compute this in `R[x]/phi(x)` and this should be the most efficient
 way.

 (this was written up quickly, I haven't really checked that it's correct)

--
Ticket URL: <http://trac.sagemath.org/ticket/18589#comment:18>
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