Karim Belabas on Sun, 18 Jun 2017 17:48:55 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: polredabs not returning correct transformation map


Dear Maarten,

* Maarten Derickx [2017-06-18 01:24]:
> Find below an example where polredabs does not return the correct
> transformation map. The degree 12 example is the one that fails since one
> should have that subst(f,x,h) = 0, however polredabs almost gives the
> correct transformation map since subst(f,x,h/5) = 0 so it is just of by a
> factor of 5. Changing the leading monomial from x^12 to x^11 gives a
> working example.
[...]
> ? f = x^12 + x^7 - 1/5*x^6 - 3*x^5 + 13/5*x^4 + 11/5*x^3 + 2/5*x^2 + 2/5*x
> + 1/5;
> 
> ? gh = polredabs(f,1);
> 
> ? g=gh[1];
> 
> ? h=gh[2];
> 
> ? subst(f,x,h)
> 
> %5 = Mod(-195293748/5*x^11 + 244181236/5*x^10 - 634884076/5*x^9 +
> 3564400908/5*x^8 - 2539683564/5*x^7 + 166278100*x^6 - 14647209952/5*x^5 -
> 1269578400*x^4 + 4072182580*x^3 + 3017386300*x^2 - 1562284000*x -
> 7518315624/5, x^12 - 2*x^11 + 2*x^10 - 11*x^9 + 13*x^8 + 15*x^7 - x^6 -
> 5*x^5 + 5)

I just fixed the typo in commit 1420fa40a

? f = x^12 + x^7 - 1/5*x^6 - 3*x^5 + 13/5*x^4 + 11/5*x^3 + 2/5*x^2 + 2/5*x + 1/5;
? [g,h] = polredabs(f,1);
? subst(f,x,h) == 0
%3 = 1

This was due to the new code attached to nfcertify(): since polredabs()
promises a canonical result, we must compute correctly the integer basis;
if it turns out our initial guess (based on a cheap partial factorization
of the discriminant) is wrong, we must update it. This update mistakenly
used a transformed (integral and monic) f2 instead of the original f...

Thank you for your report !

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`