#14264: Fix negation of Jacobian morphisms
-------------------------------------+--------------------------------------
       Reporter:  SimonKing          |         Owner:  AlexGhitza  
           Type:  defect             |        Status:  needs_review
       Priority:  major              |     Milestone:  sage-5.9    
      Component:  algebra            |    Resolution:              
       Keywords:  Jacobian morphism  |   Work issues:              
Report Upstream:  N/A                |     Reviewers:              
        Authors:  Simon King         |     Merged in:              
   Dependencies:                     |      Stopgaps:              
-------------------------------------+--------------------------------------
Description changed by SimonKing:

Old description:

> The following fails with a coercion error:
> {{{
>
>             sage: P.<x> = QQ[]
>             sage: f = x^5 - x + 1; h = x
>             sage: C = HyperellipticCurve(f,h,'u,v')
>             sage: J = C.jacobian()
>             sage: K.<t> = NumberField(x^2-2)
>             sage: R.<x> = K[]
>             sage: Q = J(K)([x^2-t,R(1)])
>             sage: Q
>             (u^2 - t, v - 1)
>             sage: -Q
>             (u^2 - t, v + u + 1)
> }}}
>
> The reason is that in the `__neg__` method, the remainder of a polynomial
> h over the rationals is computed modulo a non-constant polynomial over a
> number field. The involved `__mod__` method of FLINT polynomials would
> try to coerce the modulus into the parent of h, which fails here for
> obvious reasons.
>
> I see two possible solutions:
>
> 1. Make sure in `JacobianMorphism_divisor_class_field.__neg__` that h and
> the modulus live in the same ring, e.g., by adding the modulus to h
> before computing the remainder (which won't change the result).
> 2. In the `__mod__` method of FLINT polynomials, invoke
> coercion_model.canonical_coercion on h and the modulus, rather than
> trying to coerce the modulus into the parent of h.
>
> With the second approach, the output of `__mod__` would potentially live
> in a different ring (which should not be the case!) and since it would
> imply a general slowdown of the `__mod__` method. Therefore I prefer the
> first approach.

New description:

 The following fails with a coercion error:
 {{{

             sage: P.<x> = QQ[]
             sage: f = x^5 - x + 1; h = x
             sage: C = HyperellipticCurve(f,h,'u,v')
             sage: J = C.jacobian()
             sage: K.<t> = NumberField(x^2-2)
             sage: R.<x> = K[]
             sage: Q = J(K)([x^2-t,R(1)])
             sage: Q
             (u^2 - t, v - 1)
             sage: -Q
             (u^2 - t, v + u + 1)
 }}}

 The reason is that in the `__neg__` method, the remainder of a polynomial
 h over the rationals is computed modulo a non-constant polynomial over a
 number field. The involved `__mod__` method of FLINT polynomials would try
 to coerce the modulus into the parent of h, which fails here for obvious
 reasons.

 I see two possible solutions:

 1. Make sure in `JacobianMorphism_divisor_class_field.__neg__` that h and
 the modulus live in the same ring, e.g., by adding the modulus to h before
 computing the remainder (which won't change the result).
 2. In the `__mod__` method of FLINT polynomials, invoke
 coercion_model.canonical_coercion on h and the modulus, rather than trying
 to coerce the modulus into the parent of h.

 With the second approach, the output of `__mod__` would potentially live
 in a different ring (which should not be the case!) and it would imply a
 general slowdown of the `__mod__` method. Therefore I prefer the first
 approach.

--

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14264#comment:3>
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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to