Thanks, i will try the workaround. Should this be reported upstream to
pari?

On 30 ene, 20:54, Nils Bruin <nbr...@sfu.ca> wrote:
> Looks like a known problem:
>
> http://trac.sagemath.org/sage_trac/ticket/13054
>
> The routine in question tries to find a better defining polynomial for
> a given field. With
>
> R.<y>=QQ['y']
> poly=y^4 - 4294967296*y^2 + 54265257667816538374400
>
> it executes:
>
>     degree = poly.degree()
>     pari_poly = pari(poly)
>
>     red_table = pari_poly.polred(3)
>
>     best = None
>     best_discr = None
>
>     for i in range(red_table.nrows()):
>         red_poly = red_table[i,1]
>         if red_poly.poldegree() < degree:
>             continue
>         red_discr = red_poly.poldisc().abs()
>         if best_discr is None or red_discr < best_discr:
>             best = red_poly
>             best_discr = red_discr
>             best_elt = red_table[i,0]
>     assert(best is not None)
>
> After which (this happened for i==3) we have best_discr == 0, so the
> found element generates only a subfield and polred, quite
> misleadingly, only reports the characteristic polynomial rather than
> the minimal polynomial. We could avoid this problem by
> testing "red_descr > 0 and ( best_discr is None or red_discr <
> best_discr)". The pari documentation of polred suggests there is
> always at least one element that passes that test, so the assertion
> should still hold.
>
> According to the documentation, this is an error in pari, since it
> should be returning the minimal poly.
>
> GP session illustrating the error: (GP/PARI 2.5.3 (development
> git-6fd07f9))
>
> ? poly=x^4 - 4294967296*x^2 + 54265257667816538374400
> %1 = x^4 - 4294967296*x^2 + 54265257667816538374400
> ? L=polred(poly,3)
> %2 =
> [1 x - 1]
>
> [1/145522114880*x^3 - 67108864/2273783045*x x^4 - 11005853696*x^2 +
> 356327727107810941435025]
>
> [1/4*x x^4 - 268435456*x^2 + 211973662764908353025]
>
> [1/16*x^2 - 134217728 x^4 + 423911296732797742082*x^2 +
> 44925196874420524410175311836119348423681]
>
> ? elt=Mod(L[4,1],poly)
> %3 = Mod(1/16*x^2 - 134217728, x^4 - 4294967296*x^2 +
> 54265257667816538374400)
> ? minpoly(elt)
> %4 = x^2 + 211955648366398871041
> ? factor(L[4,2])
> %5 =
> [x^2 + 211955648366398871041 2]
>
> As you can see L[4,2] is the square of the minimal polynomial.

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to