8.10.8 `nd_gr', `nd_gr_trace', `nd_f4', `nd_f4_trace', `nd_weyl_gr', `nd_weyl_gr_trace'
---------------------------------------------------------------------------------------

nd_gr(PLIST,VLIST,P,ORDER)
nd_gr_trace(PLIST,VLIST,HOMO,P,ORDER)
nd_f4(PLIST,VLIST,MODULAR,ORDER)
nd_f4_trace(PLIST,VLIST,HOMO,P,ORDER)

nd_weyl_gr(PLIST,VLIST,P,ORDER)
nd_weyl_gr_trace(PLIST,VLIST,HOMO,P,ORDER)
     :: Groebner basis computation (built-in functions)

RETURN
     list

PLIST  VLIST
     list

ORDER
     number, list or matrix

HOMO
     flag

MODULAR
     flag or prime

   * These functions are new implementations for computing Groebner
     bases.

   * `nd_gr' executes Buchberger algorithm over the rationals if  `p'
     is 0, and that over GF(p) if `p' is a prime.

   * `nd_gr_trace' executes the trace algorithm over the rationals.  If
     `p' is 0 or 1, the trace algorithm is executed until it succeeds
     by using automatically chosen primes.  If `p' a positive prime,
     the trace is comuted over GF(p).  If the trace algorithm fails 0
     is returned.  If `p' is negative, the Groebner basis check and
     ideal-membership check are omitted.  In this case, an
     automatically chosen prime if `p' is 1, otherwise the specified
     prime is used to compute a Groebner basis candidate.  Execution of
     `nd_f4_trace' is done as follows: For each total degree, an
     F4-reduction of S-polynomials over a finite field is done, and
     S-polynomials which give non-zero basis elements are gathered.
     Then F4-reduction over Q is done for the gathered S-polynomials.
     The obtained polynomial set is a Groebner basis candidate and the
     same check procedure as in the case of `nd_gr_trace' is done.

   * `nd_f4' executes F4 algorithm over Q if `modular' is equal to 0,
     or over a finite field GF(`modular') if `modular' is a prime
     number of machine size (<2^29).

   * `nd_weyl_gr', `nd_weyl_gr_trace' are for Weyl algebra computation.

   * Each function cannot handle rational function coefficient cases.

   * In general these functions are more efficient than `dp_gr_main',
     `dp_gr_mod_main', especially over finite fields.

     [38] load("cyclic")$
     [49] C=cyclic(7)$
     [50] V=vars(C)$
     [51] cputime(1)$
     [52] dp_gr_mod_main(C,V,0,31991,0)$
     26.06sec + gc : 0.313sec(26.4sec)
     [53] nd_gr(C,V,31991,0)$
     ndv_alloc=1477188
     5.737sec + gc : 0.1837sec(5.921sec)
     [54] dp_f4_mod_main(C,V,31991,0)$
     3.51sec + gc : 0.7109sec(4.221sec)
     [55] nd_f4(C,V,31991,0)$
     1.906sec + gc : 0.126sec(2.032sec)

References
     *Note `dp_ord': dp_ord, *Note `dp_gr_flags dp_gr_print':
     dp_gr_flags dp_gr_print, *Note `Controlling Groebner basis
     computations': Controlling Groebner basis computations.

