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.