#11891: NumberField(...).pari_polynomial() should return an integral polynomial
-----------------------------+----------------------------------------------
   Reporter:  jdemeyer       |          Owner:  davidloeffler 
       Type:  enhancement    |         Status:  needs_review  
   Priority:  major          |      Milestone:  sage-4.7.3    
  Component:  number fields  |       Keywords:                
Work_issues:                 |       Upstream:  N/A           
   Reviewer:                 |         Author:  Jeroen Demeyer
     Merged:                 |   Dependencies:                
-----------------------------+----------------------------------------------
Changes (by jdemeyer):

  * status:  new => needs_review
  * milestone:  sage-4.7.2 => sage-4.7.3


Old description:

> Mostly, PARI only works with number fields defined by monic integral
> polynomials.  A few functions (like `factornf()`) also work for non-monic
> polynomials.  In these cases, PARI always requires the polynomial to have
> integer coefficients.  So, PARI prefers `2*x^2 - 1` over `x^2 - 1/2` for
> defining a number field.  The `NumberField` method `pari_polynomial`
> should reflect this.
>
> This change allows allows one to define number field towers with non-
> integral polynomials.  Example from vanilla sage-4.7.1:
> {{{
> sage: k.<a, c> = NumberField([x^2 + 1/3, x^2 + 1/4])
> ---------------------------------------------------------------------------
> PariError                                 Traceback (most recent call
> last)
>
> /home/jdemeyer/<ipython console> in <module>()
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field.pyc in
> NumberField(polynomial, name, check, names, cache, embedding, latex_name,
> assume_disc_small, maximize_at_primes)
>     435
>     436     if isinstance(polynomial, (list, tuple)):
> --> 437         return NumberFieldTower(polynomial, name,
> embeddings=embedding)
>     438
>     439     name = sage.structure.parent_gens.normalize_names(1, name)
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field.pyc in NumberFieldTower(v,
> names, check, embeddings)
>     622     #    return z
>     623     #else:
> --> 624     return w.extension(f, name, check=check,
> embedding=embeddings[0])
>     625
>     626
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field.pyc in extension(self,
> poly, name, names, check, embedding)
>    3570             raise TypeError, "the variable name must be
> specified."
>    3571         from sage.rings.number_field.number_field_rel import
> NumberField_relative
> -> 3572         return NumberField_relative(self, poly, str(name),
> check=check, embedding=embedding)
>    3573
>    3574     def factor(self, n):
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/rings/number_field/number_field_rel.pyc in __init__(self,
> base, polynomial, name, latex_name, names, check, embedding)
>     293
>     294         if check:
> --> 295             if not
> self.pari_relative_polynomial().polisirreducible():
>     296                 # this is *much* faster than
>     297                 # polynomial.is_irreducible() at some point in
> the
>
> /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
> packages/sage/libs/pari/gen.so in sage.libs.pari.gen._pari_trap
> (sage/libs/pari/gen.c:47834)()
>
> PariError: inconsistent data (12)
> }}}
> With the patch, this works.

New description:

 Mostly, PARI only works with number fields defined by monic integral
 polynomials.  A few functions (like `factornf()`) also work for non-monic
 polynomials.  In these cases, PARI always requires the polynomial to have
 integer coefficients.  So, PARI prefers `2*x^2 - 1` over `x^2 - 1/2` for
 defining a number field.  The `NumberField` method `pari_polynomial`
 should reflect this.

 This change allows one to define number field towers with non-integral
 polynomials.  Example from vanilla sage-4.7.1:
 {{{
 sage: k.<a, c> = NumberField([x^2 + 1/3, x^2 + 1/4])
 ---------------------------------------------------------------------------
 PariError                                 Traceback (most recent call
 last)

 /home/jdemeyer/<ipython console> in <module>()

 /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
 packages/sage/rings/number_field/number_field.pyc in
 NumberField(polynomial, name, check, names, cache, embedding, latex_name,
 assume_disc_small, maximize_at_primes)
     435
     436     if isinstance(polynomial, (list, tuple)):
 --> 437         return NumberFieldTower(polynomial, name,
 embeddings=embedding)
     438
     439     name = sage.structure.parent_gens.normalize_names(1, name)

 /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
 packages/sage/rings/number_field/number_field.pyc in NumberFieldTower(v,
 names, check, embeddings)
     622     #    return z
     623     #else:
 --> 624     return w.extension(f, name, check=check,
 embedding=embeddings[0])
     625
     626

 /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
 packages/sage/rings/number_field/number_field.pyc in extension(self, poly,
 name, names, check, embedding)
    3570             raise TypeError, "the variable name must be
 specified."
    3571         from sage.rings.number_field.number_field_rel import
 NumberField_relative
 -> 3572         return NumberField_relative(self, poly, str(name),
 check=check, embedding=embedding)
    3573
    3574     def factor(self, n):

 /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
 packages/sage/rings/number_field/number_field_rel.pyc in __init__(self,
 base, polynomial, name, latex_name, names, check, embedding)
     293
     294         if check:
 --> 295             if not
 self.pari_relative_polynomial().polisirreducible():
     296                 # this is *much* faster than
     297                 # polynomial.is_irreducible() at some point in the

 /usr/local/src/sage-4.7.1/local/lib/python2.6/site-
 packages/sage/libs/pari/gen.so in sage.libs.pari.gen._pari_trap
 (sage/libs/pari/gen.c:47834)()

 PariError: inconsistent data (12)
 }}}
 With the patch, this works.

--

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