Karim BELABAS on Fri, 25 Oct 2002 12:34:58 +0200 (MEST)


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

polredabs()


Hi pari-dev,

  prompted by a recent query of Igor, I looked out into the following
(documented) polredabs problem:
------------------------------------------------------------------------------
  Warning:  this  routine  uses an exponential-time algorithm to enumerate all
  potential  generators,   and  may be exceedingly slow when the number field
  has many subfields, hence a lot of elements of small T_2-norm.  E.g.  do not
  try it on the compositum of many quadratic fields, use polred instead.
------------------------------------------------------------------------------

Igor's original example was
{
  p10 = x^10-x^9+x^8-x^7+x^6-x^5+x^4-x^3+x^2-x+1;
  forprime(k=2, 9!,
    d = -5*k;
    if (!isfundamental(d), next);
    p20 = polcompositum(quadpoly(d), p10)[1];
    print1(k" "); gettime;
    t = polredabs(p20, 16);
    print(gettime);
  )
}
We polredabs() the generator of a degree 20 field, say K, where a
subfield/subspace of dimension 10 (= Q(zeta_11) ) is spanned by tiny
elements (roots of unity). Essentially, the search examines vectors in
[-300,300]^10 x [0,1]^10  (coordinates wrt a T2-LLL-reduced basis (b_i) of
some order of K, in general the maximal order). Where elements of the form
[-300,300]^10 x {0} always generate a subfield ---> huge futile search.

I had originally (~4 years ago) addressed this problem by computing the
compositum of the field generated by the first (b_i), finding out the largest
index k such that Q(b_1,...,b_k) is a strict subfield of K. Then I prune out
all the [x_1,...,x_k, 0, ..., 0] from the search tree.

The algorithm is still exponential (in the dimension), but I had hoped to
remove cheaply common worst case situations.

Unfortunately, computing a compositum is (was, see below) costly (~ computing
a resultant over Z[Y], then factoring in Z[X] the resulting polynomial whose
degree is the product of the compositum degree).  So I had placed a heuristic
limit for this strategy: if at some point the polynomial we will have to
factor has degree >= 64, abort the optimization and immediately start the
search [ Note: factorization worst case in this degree range is the
compositum of 5 quadratic fields, yielding 16 modular factors ~ 2^15
recombinations ].

In Igor's case, of polynomial of degree 10 x 10 = 100 appears [ compositum of
polcyclo(11) with a perturbated copy ], skipping part of the optimization
(we find k = 6, says instead of 10), making the search feasible, but very
slow.

Now that van Hoeij's factorizer has stabilized and trivializes (integral)
polynomial factorization, I have increased the limit to 128.  I will
eventually either remove it altogether [ changing Igor's p10 to p12 =
polcyclo(13), we hit the limit again, 144 > 128 ... ], or use more refined
heuristics.

For instance, in these compositum computations, we factor at worse a
polynomial of degree ( [K:Q]/2 )^2, but the degree is a poor indicator. It
would be worthwile to directly evaluate the number of modular factors by
computing the two-variable resultant and the factorization over Z/p for a few
(relatively large) small primes.

Does anybody see timing regressions for polredabs() at this point ?

Anybody wants to compile a list of interesting "tough" polynomials for
polredabs() ?

    Karim.
-- 
Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathematiques, Bat. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas/
--
PARI/GP Home Page: http://www.parigp-home.de/