#11930: disallow non-smooth hyperelliptic curves, and let hyperelliptic curves 
know
they are not singular
-------------------------------------------------------------+--------------
       Reporter:  dkrenn                                     |         Owner:  
cremona                                  
           Type:  defect                                     |        Status:  
needs_review                             
       Priority:  major                                      |     Milestone:  
sage-5.1                                 
      Component:  elliptic curves                            |    Resolution:   
                                        
       Keywords:  hyperelliptic curve singular smooth sd35   |   Work issues:   
                                        
Report Upstream:  N/A                                        |     Reviewers:  
Marco Streng, Damiano Testa, David Eklund
        Authors:  Daniel Krenn, Marco Streng, Damiano Testa  |     Merged in:   
                                        
   Dependencies:                                             |      Stopgaps:   
                                        
-------------------------------------------------------------+--------------

Old description:

> Hyperelliptic curves are smooth curves mathematically. These patches add
> a check for this to the constructor and implement {{{is_singular}}} to
> always return {{{False}}}
>
> Example
> {{{
> sage: R.<x> = PolynomialRing(GF(3))
> sage: H=HyperellipticCurve(x^5+1)
> sage: H.is_singular()
> # used to return True, now returns False
> sage: H.is_smooth()
> # used to return False, now returns True
> sage: HyperellipticCurve(x^5)
> # used to return a curve y^2 = x^5, now raises an error
> }}}
>
> Apply
>
>  * [attachment:11930c.patch]
>  * [attachment:11930_is_singular2.patch]

New description:

 Hyperelliptic curves are smooth curves mathematically. These patches add a
 check for this to the constructor and implement {{{is_singular}}} to
 always return {{{False}}}

 Example
 {{{
 sage: R.<x> = PolynomialRing(GF(3))
 sage: H=HyperellipticCurve(x^5+1)
 sage: H.is_singular()
 # used to return True, now returns False
 sage: H.is_smooth()
 # used to return False, now returns True
 sage: HyperellipticCurve(x^5)
 # used to return a curve y^2 = x^5, now raises an error
 }}}

 Apply

  * [attachment:11930d.patch]
  * [attachment:11930_is_singular2.patch]

--

Comment (by mstreng):

 Here's a diff between the c and d patches, excluding changed line numbers
 and hashes:
 {{{
 < +    This class also allows curves of genus zero or one, which are
 stricly
 > +    This class also allows curves of genus zero or one, which are
 strictly
 126,127c126,130
 < +    A hyperelliptic curve should not be given by polynomials of degree
 greater
 < +    than `2g+2`, where `g` is the genus.::
 > +    The input for a (smooth) hyperelliptic curve of genus `g` should
 not
 > +    contain polynomials of degree greater than `2g+2`. In the following
 > +    example, the hyperelliptic curve has genus 2 and there exists a
 model
 > +    `y^2 = F` of degree 6, so the model `y^2 + yh = f` of degree 200 is
 not
 > +    allowed.::
 137c140
 < +
 > +
 152c155,157
 < +    as base ring, but only checks smoothness over `QQ`, not `ZZ`::
 ---
 > +    as base ring, but only checks smoothness over `\QQ`, not over
 Spec(`\ZZ`).
 > +    In other words, it is checked that the discriminant is non-zero,
 but it is
 > +    not checked whether the discriminant is a unit in `\ZZ^*`.::
 155,156c160,161
 < +        sage: HyperellipticCurve(4*x^7+8*x+8)
 < +        Hyperelliptic Curve over Integer Ring defined by y^2 = 4*x^7 +
 8*x + 8
 > +        sage: HyperellipticCurve(3*x^7+6*x+6)
 > +        Hyperelliptic Curve over Integer Ring defined by y^2 = 3*x^7 +
 6*x + 6
 264c269
 < +            ValueError: curve is not smooth
 > +            ValueError: curve is not smooth
 273c278
 < +            raise ValueError, "curve is not smooth"
 > +            raise ValueError, "curve is not smooth"
 308c313
 <          #checking first that Cartier matrix is not already cached.
 Since it can be called by either Hasse_Witt or a_number
 >          #checking first that Cartier matrix is not already cached.
 Since
 }}}

 Apply 11930d.patch and then 11930_is_singular2.patch

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/11930#comment:37>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to