[BACK]Return to groebner.texi CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-doc / parts

Diff for /OpenXM/src/asir-doc/parts/groebner.texi between version 1.5 and 1.20

version 1.5, 2003/04/20 08:01:25 version 1.20, 2017/08/31 04:54:36
Line 1 
Line 1 
 @comment $OpenXM: OpenXM/src/asir-doc/parts/groebner.texi,v 1.4 2003/04/19 15:44:56 noro Exp $  @comment $OpenXM: OpenXM/src/asir-doc/parts/groebner.texi,v 1.19 2016/08/29 04:56:58 noro Exp $
 \BJP  \BJP
 @node $B%0%l%V%J4pDl$N7W;;(B,,, Top  @node $B%0%l%V%J4pDl$N7W;;(B,,, Top
 @chapter $B%0%l%V%J4pDl$N7W;;(B  @chapter $B%0%l%V%J4pDl$N7W;;(B
Line 15 
Line 15 
 * $B4pK\E*$JH!?t(B::  * $B4pK\E*$JH!?t(B::
 * $B7W;;$*$h$SI=<($N@)8f(B::  * $B7W;;$*$h$SI=<($N@)8f(B::
 * $B9`=g=x$N@_Dj(B::  * $B9`=g=x$N@_Dj(B::
   * Weight::
 * $BM-M}<0$r78?t$H$9$k%0%l%V%J4pDl7W;;(B::  * $BM-M}<0$r78?t$H$9$k%0%l%V%J4pDl7W;;(B::
 * $B4pDlJQ49(B::  * $B4pDlJQ49(B::
 * Weyl $BBe?t(B::  * Weyl $BBe?t(B::
Line 26 
Line 27 
 * Fundamental functions::  * Fundamental functions::
 * Controlling Groebner basis computations::  * Controlling Groebner basis computations::
 * Setting term orderings::  * Setting term orderings::
   * Weight::
 * Groebner basis computation with rational function coefficients::  * Groebner basis computation with rational function coefficients::
 * Change of ordering::  * Change of ordering::
 * Weyl algebra::  * Weyl algebra::
Line 199  In an @b{Asir} session, it is displayed in the form li
Line 201  In an @b{Asir} session, it is displayed in the form li
 \EG and also can be input in such a form.  \EG and also can be input in such a form.
   
 \BJP  \BJP
 @itemx $BF,C19`<0(B (head monomial)  
 @item $BF,9`(B (head term)  @item $BF,9`(B (head term)
   @itemx $BF,C19`<0(B (head monomial)
 @itemx $BF,78?t(B (head coefficient)  @itemx $BF,78?t(B (head coefficient)
 $BJ,;6I=8=B?9`<0$K$*$1$k3FC19`<0$O(B, $B9`=g=x$K$h$j@0Ns$5$l$k(B. $B$3$N;~=g(B  $BJ,;6I=8=B?9`<0$K$*$1$k3FC19`<0$O(B, $B9`=g=x$K$h$j@0Ns$5$l$k(B. $B$3$N;~=g(B
 $B=x:GBg$NC19`<0$rF,C19`<0(B, $B$=$l$K8=$l$k9`(B, $B78?t$r$=$l$>$lF,9`(B, $BF,78?t(B  $B=x:GBg$NC19`<0$rF,C19`<0(B, $B$=$l$K8=$l$k9`(B, $B78?t$r$=$l$>$lF,9`(B, $BF,78?t(B
 $B$H8F$V(B.  $B$H8F$V(B.
 \E  \E
 \BEG  \BEG
 @itemx head monomial  
 @item head term  @item head term
   @itemx head monomial
 @itemx head coefficient  @itemx head coefficient
   
 Monomials in a distributed polynomial is sorted by a total order.  Monomials in a distributed polynomial is sorted by a total order.
Line 218  the head term and the head coefficient respectively.
Line 220  the head term and the head coefficient respectively.
 \E  \E
 @end table  @end table
   
   @noindent
   ChangeLog
   @itemize @bullet
 \BJP  \BJP
   @item $BJ,;6I=8=B?9`<0$OG$0U$N%*%V%8%'%/%H$r78?t$K$b$F$k$h$&$K$J$C$?(B.
   $B$^$?2C72$N(Bk$B@.J,$NMWAG$r<!$N7A<0(B <<d0,d1,...:k>> $B$GI=8=$9$k$h$&$K$J$C$?(B (2017-08-31).
   \E
   \BEG
   @item Distributed polynomials accept objects as coefficients.
   The k-th element of a free module is expressed as <<d0,d1,...:k>> (2017-08-31).
   \E
   @item
   1.15 algnum.c,
   1.53 ctrl.c,
   1.66 dp-supp.c,
   1.105 dp.c,
   1.73 gr.c,
   1.4 reduct.c,
   1.16 _distm.c,
   1.17 dalg.c,
   1.52 dist.c,
   1.20 distm.c,
   1.8  gmpq.c,
   1.238 engine/nd.c,
   1.102  ca.h,
   1.411  version.h,
   1.28 cpexpr.c,
   1.42 pexpr.c,
   1.20 pexpr_body.c,
   1.40 spexpr.c,
   1.27 arith.c,
   1.77 eval.c,
   1.56 parse.h,
   1.37 parse.y,
   1.8 stdio.c,
   1.31 plotf.c
   @end itemize
   
   \BJP
 @node $B%U%!%$%k$NFI$_9~$_(B,,, $B%0%l%V%J4pDl$N7W;;(B  @node $B%U%!%$%k$NFI$_9~$_(B,,, $B%0%l%V%J4pDl$N7W;;(B
 @section $B%U%!%$%k$NFI$_9~$_(B  @section $B%U%!%$%k$NFI$_9~$_(B
 \E  \E
Line 449  If `on', various informations during a Groebner basis 
Line 489  If `on', various informations during a Groebner basis 
 displayed.  displayed.
 \E  \E
   
   @item PrintShort
   \JP on $B$G!"(BPrint $B$,(B off $B$N>l9g(B, $B%0%l%V%J4pDl7W;;$NESCf$N>pJs$rC;=L7A$GI=<($9$k(B.
   \BEG
   If `on' and Print is `off', short information during a Groebner basis computation is
   displayed.
   \E
   
 @item Stat  @item Stat
 \BJP  \BJP
 on $B$G(B @code{Print} $B$,(B off $B$J$i$P(B, @code{Print} $B$,(B on $B$N$H$-I=<($5(B  on $B$G(B @code{Print} $B$,(B off $B$J$i$P(B, @code{Print} $B$,(B on $B$N$H$-I=<($5(B
Line 471  is shown after every normal computation.  After comlet
Line 518  is shown after every normal computation.  After comlet
 computation the maximal value among the sums is shown.  computation the maximal value among the sums is shown.
 \E  \E
   
 @item Multiple  @item Content
   @itemx Multiple
 \BJP  \BJP
 0 $B$G$J$$@0?t$N;~(B, $BM-M}?t>e$N@55,7A7W;;$K$*$$$F(B, $B78?t$N%S%C%HD9$NOB$,(B  0 $B$G$J$$M-M}?t$N;~(B, $BM-M}?t>e$N@55,7A7W;;$K$*$$$F(B, $B78?t$N%S%C%HD9$NOB$,(B
 @code{Multiple} $BG\$K$J$k$4$H$K78?tA4BN$N(B GCD $B$,7W;;$5$l(B, $B$=$N(B GCD $B$G(B  @code{Content} $BG\$K$J$k$4$H$K78?tA4BN$N(B GCD $B$,7W;;$5$l(B, $B$=$N(B GCD $B$G(B
 $B3d$C$?B?9`<0$r4JLs$9$k(B. @code{Multiple} $B$,(B 1 $B$J$i$P(B, $B4JLs$9$k$4$H$K(B  $B3d$C$?B?9`<0$r4JLs$9$k(B. @code{Content} $B$,(B 1 $B$J$i$P(B, $B4JLs$9$k$4$H$K(B
 GCD $B7W;;$,9T$o$l0lHL$K$O8zN($,0-$/$J$k$,(B, @code{Multiple} $B$r(B 2 $BDxEY(B  GCD $B7W;;$,9T$o$l0lHL$K$O8zN($,0-$/$J$k$,(B, @code{Content} $B$r(B 2 $BDxEY(B
 $B$H$9$k$H(B, $B5pBg$J@0?t$,78?t$K8=$l$k>l9g(B, $B8zN($,NI$/$J$k>l9g$,$"$k(B.  $B$H$9$k$H(B, $B5pBg$J@0?t$,78?t$K8=$l$k>l9g(B, $B8zN($,NI$/$J$k>l9g$,$"$k(B.
   backward compatibility $B$N$?$a!"(B@code{Multiple} $B$G@0?tCM$r;XDj$G$-$k(B.
 \E  \E
 \BEG  \BEG
 If a non-zero integer, in a normal form computation  If a non-zero rational number, in a normal form computation
 over the rationals, the integer content of the polynomial being  over the rationals, the integer content of the polynomial being
 reduced is removed when its magnitude becomes @code{Multiple} times  reduced is removed when its magnitude becomes @code{Content} times
 larger than a registered value, which is set to the magnitude of the  larger than a registered value, which is set to the magnitude of the
 input polynomial. After each content removal the registered value is  input polynomial. After each content removal the registered value is
 set to the magnitude of the resulting polynomial. @code{Multiple} is  set to the magnitude of the resulting polynomial. @code{Content} is
 equal to 1, the simiplification is done after every normal form computation.  equal to 1, the simiplification is done after every normal form computation.
 It is empirically known that it is often efficient to set @code{Multiple} to 2  It is empirically known that it is often efficient to set @code{Content} to 2
 for the case where large integers appear during the computation.  for the case where large integers appear during the computation.
   An integer value can be set by the keyword @code{Multiple} for
   backward compatibility.
 \E  \E
   
 @item Demand  @item Demand
Line 1044  beforehand, and some heuristic trial may be inevitable
Line 1095  beforehand, and some heuristic trial may be inevitable
 \E  \E
   
 \BJP  \BJP
   @node Weight ,,, $B%0%l%V%J4pDl$N7W;;(B
   @section Weight
   \E
   \BEG
   @node Weight,,, Groebner basis computation
   @section Weight
   \E
   \BJP
   $BA0@a$G>R2p$7$?9`=g=x$O(B, $B3FJQ?t$K(B weight ($B=E$_(B) $B$r@_Dj$9$k$3$H$G(B
   $B$h$j0lHLE*$J$b$N$H$J$k(B.
   \E
   \BEG
   Term orderings introduced in the previous section can be generalized
   by setting a weight for each variable.
   \E
   @example
   [0] dp_td(<<1,1,1>>);
   3
   [1] dp_set_weight([1,2,3])$
   [2] dp_td(<<1,1,1>>);
   6
   @end example
   \BJP
   $BC19`<0$NA4<!?t$r7W;;$9$k:](B, $B%G%U%)%k%H$G$O(B
   $B3FJQ?t$N;X?t$NOB$rA4<!?t$H$9$k(B. $B$3$l$O3FJQ?t$N(B weight $B$r(B 1 $B$H(B
   $B9M$($F$$$k$3$H$KAjEv$9$k(B. $B$3$NNc$G$O(B, $BBh0l(B, $BBhFs(B, $BBh;0JQ?t$N(B
   weight $B$r$=$l$>$l(B 1,2,3 $B$H;XDj$7$F$$$k(B. $B$3$N$?$a(B, @code{<<1,1,1>>}
   $B$NA4<!?t(B ($B0J2<$G$O$3$l$rC19`<0$N(B weight $B$H8F$V(B) $B$,(B @code{1*1+1*2+1*3=6} $B$H$J$k(B.
   weight $B$r@_Dj$9$k$3$H$G(B, $BF1$89`=g=x7?$N$b$H$G0[$J$k9`=g=x$,Dj5A$G$-$k(B.
   $BNc$($P(B, weight $B$r$&$^$/@_Dj$9$k$3$H$G(B, $BB?9`<0$r(B weighted homogeneous
   $B$K$9$k$3$H$,$G$-$k>l9g$,$"$k(B.
   \E
   \BEG
   By default, the total degree of a monomial is equal to
   the sum of all exponents. This means that the weight for each variable
   is set to 1.
   In this example, the weights for the first, the second and the third
   variable are set to 1, 2 and 3 respectively.
   Therefore the total degree of @code{<<1,1,1>>} under this weight,
   which is called the weight of the monomial, is @code{1*1+1*2+1*3=6}.
   By setting weights, different term orderings can be set under a type of
   term ordeing. In some case a polynomial can
   be made weighted homogeneous by setting an appropriate weight.
   \E
   
   \BJP
   $B3FJQ?t$KBP$9$k(B weight $B$r$^$H$a$?$b$N$r(B weight vector $B$H8F$V(B.
   $B$9$Y$F$N@.J,$,@5$G$"$j(B, $B%0%l%V%J4pDl7W;;$K$*$$$F(B, $BA4<!?t$N(B
   $BBe$o$j$KMQ$$$i$l$k$b$N$rFC$K(B sugar weight $B$H8F$V$3$H$K$9$k(B.
   sugar strategy $B$K$*$$$F(B, $BA4<!?t$NBe$o$j$K;H$o$l$k$+$i$G$"$k(B.
   $B0lJ}$G(B, $B3F@.J,$,I,$:$7$b@5$H$O8B$i$J$$(B weight vector $B$O(B,
   sugar weight $B$H$7$F@_Dj$9$k$3$H$O$G$-$J$$$,(B, $B9`=g=x$N0lHL2=$K$O(B
   $BM-MQ$G$"$k(B. $B$3$l$i$O(B, $B9TNs$K$h$k9`=g=x$N@_Dj$K$9$G$K8=$l$F(B
   $B$$$k(B. $B$9$J$o$A(B, $B9`=g=x$rDj5A$9$k9TNs$N3F9T$,(B, $B0l$D$N(B weight vector
   $B$H8+$J$5$l$k(B. $B$^$?(B, $B%V%m%C%/=g=x$O(B, $B3F%V%m%C%/$N(B
   $BJQ?t$KBP1~$9$k@.J,$N$_(B 1 $B$GB>$O(B 0 $B$N(B weight vector $B$K$h$kHf3S$r(B
   $B:G=i$K9T$C$F$+$i(B, $B3F%V%m%C%/Kh$N(B tie breaking $B$r9T$&$3$H$KAjEv$9$k(B.
   \E
   
   \BEG
   A list of weights for all variables is called a weight vector.
   A weight vector is called a sugar weight vector if
   its elements are all positive and it is used for computing
   a weighted total degree of a monomial, because such a weight
   is used instead of total degree in sugar strategy.
   On the other hand, a weight vector whose elements are not necessarily
   positive cannot be set as a sugar weight, but it is useful for
   generalizing term order. In fact, such a weight vector already
   appeared in a matrix order. That is, each row of a matrix defining
   a term order is regarded as a weight vector. A block order
   is also considered as a refinement of comparison by weight vectors.
   It compares two terms by using a weight vector whose elements
   corresponding to variables in a block is 1 and 0 otherwise,
   then it applies a tie breaker.
   \E
   
   \BJP
   weight vector $B$N@_Dj$O(B @code{dp_set_weight()} $B$G9T$&$3$H$,$G$-$k(B
   $B$,(B, $B9`=g=x$r;XDj$9$k:]$NB>$N%Q%i%a%?(B ($B9`=g=x7?(B, $BJQ?t=g=x(B) $B$H(B
   $B$^$H$a$F@_Dj$G$-$k$3$H$,K>$^$7$$(B. $B$3$N$?$a(B, $B<!$N$h$&$J7A$G$b(B
   $B9`=g=x$,;XDj$G$-$k(B.
   \E
   \BEG
   A weight vector can be set by using @code{dp_set_weight()}.
   However it is more preferable if a weight vector can be set
   together with other parapmeters such as a type of term ordering
   and a variable order. This is realized as follows.
   \E
   
   @example
   [64] B=[x+y+z-6,x*y+y*z+z*x-11,x*y*z-6]$
   [65] dp_gr_main(B|v=[x,y,z],sugarweight=[3,2,1],order=0);
   [z^3-6*z^2+11*z-6,x+y+z-6,-y^2+(-z+6)*y-z^2+6*z-11]
   [66] dp_gr_main(B|v=[y,z,x],order=[[1,1,0],[0,1,0],[0,0,1]]);
   [x^3-6*x^2+11*x-6,x+y+z-6,-x^2+(-y+6)*x-y^2+6*y-11]
   [67] dp_gr_main(B|v=[y,z,x],order=[[x,1,y,2,z,3]]);
   [x+y+z-6,x^3-6*x^2+11*x-6,-x^2+(-y+6)*x-y^2+6*y-11]
   @end example
   
   \BJP
   $B$$$:$l$NNc$K$*$$$F$b(B, $B9`=g=x$O(B option $B$H$7$F;XDj$5$l$F$$$k(B.
   $B:G=i$NNc$G$O(B @code{v} $B$K$h$jJQ?t=g=x$r(B, @code{sugarweight} $B$K$h$j(B
   sugar weight vector $B$r(B, @code{order}$B$K$h$j9`=g=x7?$r;XDj$7$F$$$k(B.
   $BFs$DL\$NNc$K$*$1$k(B @code{order} $B$N;XDj$O(B matrix order $B$HF1MM$G$"$k(B.
   $B$9$J$o$A(B, $B;XDj$5$l$?(B weight vector $B$r:8$+$i=g$K;H$C$F(B weight $B$NHf3S(B
   $B$r9T$&(B. $B;0$DL\$NNc$bF1MM$G$"$k$,(B, $B$3$3$G$O(B weight vector $B$NMWAG$r(B
   $BJQ?tKh$K;XDj$7$F$$$k(B. $B;XDj$,$J$$$b$N$O(B 0 $B$H$J$k(B. $B;0$DL\$NNc$G$O(B,
   @code{order} $B$K$h$k;XDj$G$O9`=g=x$,7hDj$7$J$$(B. $B$3$N>l9g$K$O(B,
   tie breaker $B$H$7$FA4<!?t5U<-=q<0=g=x$,<+F0E*$K@_Dj$5$l$k(B.
   $B$3$N;XDjJ}K!$O(B, @code{dp_gr_main}, @code{dp_gr_mod_main} $B$J$I(B
   $B$NAH$_9~$_4X?t$G$N$_2DG=$G$"$j(B, @code{gr} $B$J$I$N%f!<%6Dj5A4X?t(B
   $B$G$OL$BP1~$G$"$k(B.
   \E
   \BEG
   In each example, a term ordering is specified as options.
   In the first example, a variable order, a sugar weight vector
   and a type of term ordering are specified by options @code{v},
   @code{sugarweight} and @code{order} respectively.
   In the second example, an option @code{order} is used
   to set a matrix ordering. That is, the specified weight vectors
   are used from left to right for comparing terms.
   The third example shows a variant of specifying a weight vector,
   where each component of a weight vector is specified variable by variable,
   and unspecified components are set to zero. In this example,
   a term order is not determined only by the specified weight vector.
   In such a case a tie breaker by the graded reverse lexicographic ordering
   is set automatically.
   This type of a term ordering specification can be applied only to builtin
   functions such as @code{dp_gr_main()}, @code{dp_gr_mod_main()}, not to
   user defined functions such as @code{gr()}.
   \E
   
   \BJP
 @node $BM-M}<0$r78?t$H$9$k%0%l%V%J4pDl7W;;(B,,, $B%0%l%V%J4pDl$N7W;;(B  @node $BM-M}<0$r78?t$H$9$k%0%l%V%J4pDl7W;;(B,,, $B%0%l%V%J4pDl$N7W;;(B
 @section $BM-M}<0$r78?t$H$9$k%0%l%V%J4pDl7W;;(B  @section $BM-M}<0$r78?t$H$9$k%0%l%V%J4pDl7W;;(B
 \E  \E
Line 1203  Refer to the sections for each functions.
Line 1387  Refer to the sections for each functions.
 \E  \E
   
 \BJP  \BJP
   @node Weyl $BBe?t(B,,, $B%0%l%V%J4pDl$N7W;;(B
   @section Weyl $BBe?t(B
   \E
   \BEG
   @node Weyl algebra,,, Groebner basis computation
   @section Weyl algebra
   \E
   
   @noindent
   
   \BJP
   $B$3$l$^$G$O(B, $BDL>o$N2D49$JB?9`<04D$K$*$1$k%0%l%V%J4pDl7W;;$K$D$$$F(B
   $B=R$Y$F$-$?$,(B, $B%0%l%V%J4pDl$NM}O@$O(B, $B$"$k>r7o$rK~$?$9Hs2D49$J(B
   $B4D$K$b3HD%$G$-$k(B. $B$3$N$h$&$J4D$NCf$G(B, $B1~MQ>e$b=EMW$J(B,
   Weyl $BBe?t(B, $B$9$J$o$AB?9`<04D>e$NHyJ,:nMQAG4D$N1i;;$*$h$S(B
   $B%0%l%V%J4pDl7W;;$,(B Risa/Asir $B$K<BAu$5$l$F$$$k(B.
   
   $BBN(B @code{K} $B>e$N(B @code{n} $B<!85(B Weyl $BBe?t(B
   @code{D=K<x1,@dots{},xn,D1,@dots{},Dn>} $B$O(B
   \E
   
   \BEG
   So far we have explained Groebner basis computation in
   commutative polynomial rings. However Groebner basis can be
   considered in more general non-commutative rings.
   Weyl algebra is one of such rings and
   Risa/Asir implements fundamental operations
   in Weyl algebra and Groebner basis computation in Weyl algebra.
   
   The @code{n} dimensional Weyl algebra over a field @code{K},
   @code{D=K<x1,@dots{},xn,D1,@dots{},Dn>} is a non-commutative
   algebra which has the following fundamental relations:
   \E
   
   @code{xi*xj-xj*xi=0}, @code{Di*Dj-Dj*Di=0}, @code{Di*xj-xj*Di=0} (@code{i!=j}),
   @code{Di*xi-xi*Di=1}
   
   \BJP
   $B$H$$$&4pK\4X78$r;}$D4D$G$"$k(B. @code{D} $B$O(B $BB?9`<04D(B @code{K[x1,@dots{},xn]} $B$r78?t(B
   $B$H$9$kHyJ,:nMQAG4D$G(B,  @code{Di} $B$O(B @code{xi} $B$K$h$kHyJ,$rI=$9(B. $B8r494X78$K$h$j(B,
   @code{D} $B$N85$O(B, @code{x1^i1*@dots{}*xn^in*D1^j1*@dots{}*Dn^jn} $B$J$kC19`(B
   $B<0$N(B @code{K} $B@~7A7k9g$H$7$F=q$-I=$9$3$H$,$G$-$k(B.
   Risa/Asir $B$K$*$$$F$O(B, $B$3$NC19`<0$r(B, $B2D49$JB?9`<0$HF1MM$K(B
   @code{<<i1,@dots{},in,j1,@dots{},jn>>} $B$GI=$9(B. $B$9$J$o$A(B, @code{D} $B$N85$b(B
   $BJ,;6I=8=B?9`<0$H$7$FI=$5$l$k(B. $B2C8:;;$O(B, $B2D49$N>l9g$HF1MM$K(B, @code{+}, @code{-}
   $B$K$h$j(B
   $B<B9T$G$-$k$,(B, $B>h;;$O(B, $BHs2D49@-$r9MN8$7$F(B @code{dp_weyl_mul()} $B$H$$$&4X?t(B
   $B$K$h$j<B9T$9$k(B.
   \E
   
   \BEG
   @code{D} is the ring of differential operators whose coefficients
   are polynomials in @code{K[x1,@dots{},xn]} and
   @code{Di} denotes the differentiation with respect to  @code{xi}.
   According to the commutation relation,
   elements of @code{D} can be represented as a @code{K}-linear combination
   of monomials @code{x1^i1*@dots{}*xn^in*D1^j1*@dots{}*Dn^jn}.
   In Risa/Asir, this type of monomial is represented
   by @code{<<i1,@dots{},in,j1,@dots{},jn>>} as in the case of commutative
   polynomial.
   That is, elements of @code{D} are represented by distributed polynomials.
   Addition and subtraction can be done by @code{+}, @code{-},
   but multiplication is done by calling @code{dp_weyl_mul()} because of
   the non-commutativity of @code{D}.
   \E
   
   @example
   [0] A=<<1,2,2,1>>;
   (1)*<<1,2,2,1>>
   [1] B=<<2,1,1,2>>;
   (1)*<<2,1,1,2>>
   [2] A*B;
   (1)*<<3,3,3,3>>
   [3] dp_weyl_mul(A,B);
   (1)*<<3,3,3,3>>+(1)*<<3,2,3,2>>+(4)*<<2,3,2,3>>+(4)*<<2,2,2,2>>
   +(2)*<<1,3,1,3>>+(2)*<<1,2,1,2>>
   @end example
   
   \BJP
   $B%0%l%V%J4pDl7W;;$K$D$$$F$b(B, Weyl $BBe?t@lMQ$N4X?t$H$7$F(B,
   $B<!$N4X?t$,MQ0U$7$F$"$k(B.
   \E
   \BEG
   The following functions are avilable for Groebner basis computation
   in Weyl algebra:
   \E
   @code{dp_weyl_gr_main()},
   @code{dp_weyl_gr_mod_main()},
   @code{dp_weyl_gr_f_main()},
   @code{dp_weyl_f4_main()},
   @code{dp_weyl_f4_mod_main()}.
   \BJP
   $B$^$?(B, $B1~MQ$H$7$F(B, global b $B4X?t$N7W;;$,<BAu$5$l$F$$$k(B.
   \E
   \BEG
   Computation of the global b function is implemented as an application.
   \E
   
   \BJP
 @node $B%0%l%V%J4pDl$K4X$9$kH!?t(B,,, $B%0%l%V%J4pDl$N7W;;(B  @node $B%0%l%V%J4pDl$K4X$9$kH!?t(B,,, $B%0%l%V%J4pDl$N7W;;(B
 @section $B%0%l%V%J4pDl$K4X$9$kH!?t(B  @section $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \E  \E
Line 1217  Refer to the sections for each functions.
Line 1500  Refer to the sections for each functions.
 * lex_hensel_gsl tolex_gsl tolex_gsl_d::  * lex_hensel_gsl tolex_gsl tolex_gsl_d::
 * gr_minipoly minipoly::  * gr_minipoly minipoly::
 * tolexm minipolym::  * tolexm minipolym::
 * dp_gr_main dp_gr_mod_main dp_gr_f_main::  * dp_gr_main dp_gr_mod_main dp_gr_f_main dp_weyl_gr_main dp_weyl_gr_mod_main dp_weyl_gr_f_main::
 * dp_f4_main dp_f4_mod_main::  * dp_f4_main dp_f4_mod_main dp_weyl_f4_main dp_weyl_f4_mod_main::
   * nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace::
 * dp_gr_flags dp_gr_print::  * dp_gr_flags dp_gr_print::
 * dp_ord::  * dp_ord::
   * dp_set_weight dp_set_top_weight dp_weyl_set_weight::
 * dp_ptod::  * dp_ptod::
 * dp_dtop::  * dp_dtop::
 * dp_mod dp_rat::  * dp_mod dp_rat::
 * dp_homo dp_dehomo::  * dp_homo dp_dehomo::
 * dp_ptozp dp_prim::  * dp_ptozp dp_prim::
 * dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod::  * dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod::
 * dp_hm dp_ht dp_hc dp_rest::  * dp_hm dp_ht dp_hc dp_rest::
 * dp_td dp_sugar::  * dp_td dp_sugar::
 * dp_lcm::  * dp_lcm::
Line 1244  Refer to the sections for each functions.
Line 1529  Refer to the sections for each functions.
 * lex_hensel_gsl tolex_gsl tolex_gsl_d::  * lex_hensel_gsl tolex_gsl tolex_gsl_d::
 * primadec primedec::  * primadec primedec::
 * primedec_mod::  * primedec_mod::
   * bfunction bfct generic_bfct ann ann0::
 @end menu  @end menu
   
 \JP @node gr hgr gr_mod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node gr hgr gr_mod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
Line 1294  Refer to the sections for each functions.
Line 1580  Refer to the sections for each functions.
 strategy $B$K$h$k7W;;(B, @code{hgr()} $B$O(B trace-lifting $B$*$h$S(B  strategy $B$K$h$k7W;;(B, @code{hgr()} $B$O(B trace-lifting $B$*$h$S(B
 $B@F<!2=$K$h$k(B $B6:@5$5$l$?(B sugar strategy $B$K$h$k7W;;$r9T$&(B.  $B@F<!2=$K$h$k(B $B6:@5$5$l$?(B sugar strategy $B$K$h$k7W;;$r9T$&(B.
 @item  @item
 @code{dgr()} $B$O(B, @code{gr()}, @code{dgr()} $B$r(B  @code{dgr()} $B$O(B, @code{gr()}, @code{hgr()} $B$r(B
 $B;R%W%m%;%9%j%9%H(B @var{procs} $B$N(B 2 $B$D$N%W%m%;%9$K$h$jF1;~$K7W;;$5$;(B,  $B;R%W%m%;%9%j%9%H(B @var{procs} $B$N(B 2 $B$D$N%W%m%;%9$K$h$jF1;~$K7W;;$5$;(B,
 $B@h$K7k2L$rJV$7$?J}$N7k2L$rJV$9(B. $B7k2L$OF10l$G$"$k$,(B, $B$I$A$i$NJ}K!$,(B  $B@h$K7k2L$rJV$7$?J}$N7k2L$rJV$9(B. $B7k2L$OF10l$G$"$k$,(B, $B$I$A$i$NJ}K!$,(B
 $B9bB.$+0lHL$K$OITL@$N$?$a(B, $B<B:]$N7P2a;~4V$rC;=L$9$k$N$KM-8z$G$"$k(B.  $B9bB.$+0lHL$K$OITL@$N$?$a(B, $B<B:]$N7P2a;~4V$rC;=L$9$k$N$KM-8z$G$"$k(B.
 @item  @item
 @code{dgr()} $B$GI=<($5$l$k;~4V$O(B, $B$3$NH!?t$,<B9T$5$l$F$$$k%W%m%;%9$G$N(B  @code{dgr()} $B$GI=<($5$l$k;~4V$O(B, $B$3$NH!?t$,<B9T$5$l$F$$$k%W%m%;%9$G$N(B
 CPU $B;~4V$G$"$j(B, $B$3$NH!?t$N>l9g$O$[$H$s$IDL?.$N$?$a$N;~4V$G$"$k(B.  CPU $B;~4V$G$"$j(B, $B$3$NH!?t$N>l9g$O$[$H$s$IDL?.$N$?$a$N;~4V$G$"$k(B.
   @item
   $BB?9`<0%j%9%H(B @var{plist} $B$NMWAG$,J,;6I=8=B?9`<0$N>l9g$O(B
   $B7k2L$bJ,;6I=8=B?9`<0$N%j%9%H$G$"$k(B.
   $B$3$N>l9g(B, $B0z?t$NJ,;6B?9`<0$OM?$($i$l$?=g=x$K=>$$(B @code{dp_sort} $B$G(B
   $B%=!<%H$5$l$F$+$i7W;;$5$l$k(B.
   $BB?9`<0%j%9%H$NMWAG$,J,;6I=8=B?9`<0$N>l9g$b(B
   $BJQ?t$N?tJ,$NITDj85$N%j%9%H$r(B @var{vlist} $B0z?t$H$7$FM?$($J$$$H$$$1$J$$(B
   ($B%@%_!<(B).
 \E  \E
 \BEG  \BEG
 @item  @item
Line 1329  Therefore this function is useful to reduce the actual
Line 1623  Therefore this function is useful to reduce the actual
 The CPU time shown after an exection of @code{dgr()} indicates  The CPU time shown after an exection of @code{dgr()} indicates
 that of the master process, and most of the time corresponds to the time  that of the master process, and most of the time corresponds to the time
 for communication.  for communication.
   @item
   When the elements of @var{plist} are distributed polynomials,
   the result is also a list of distributed polynomials.
   In this case, firstly  the elements of @var{plist} is sorted by @code{dp_sort}
   and the Grobner basis computation is started.
   Variables must be given in @var{vlist} even in this case
   (these variables are dummy).
 \E  \E
 @end itemize  @end itemize
   
Line 1346  for communication.
Line 1647  for communication.
 @table @t  @table @t
 \JP @item $B;2>H(B  \JP @item $B;2>H(B
 \EG @item References  \EG @item References
 @comment @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main},  @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main dp_weyl_gr_main dp_weyl_gr_mod_main dp_weyl_gr_f_main},
 @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main},  
 @fref{dp_ord}.  @fref{dp_ord}.
 @end table  @end table
   
Line 1564  processes.
Line 1864  processes.
 @table @t  @table @t
 \JP @item $B;2>H(B  \JP @item $B;2>H(B
 \EG @item References  \EG @item References
 @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main},  @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main dp_weyl_gr_main dp_weyl_gr_mod_main dp_weyl_gr_f_main},
 \JP @fref{dp_ord}, @fref{$BJ,;67W;;(B}  \JP @fref{dp_ord}, @fref{$BJ,;67W;;(B}
 \EG @fref{dp_ord}, @fref{Distributed computation}  \EG @fref{dp_ord}, @fref{Distributed computation}
 @end table  @end table
Line 1580  processes.
Line 1880  processes.
 @item lex_hensel_gsl(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})  @item lex_hensel_gsl(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})
 \JP :: GSL $B7A<0$N%$%G%"%k4pDl$N7W;;(B  \JP :: GSL $B7A<0$N%$%G%"%k4pDl$N7W;;(B
 \EG ::Computation of an GSL form ideal basis  \EG ::Computation of an GSL form ideal basis
 @item tolex_gsl(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})  @item tolex_gsl(@var{plist},@var{vlist1},@var{order},@var{vlist2})
 @itemx tolex_gsl_d(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo},@var{procs})  @itemx tolex_gsl_d(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{procs})
 \JP :: $B%0%l%V%J4pDl$rF~NO$H$9$k(B, GSL $B7A<0$N%$%G%"%k4pDl$N7W;;(B  \JP :: $B%0%l%V%J4pDl$rF~NO$H$9$k(B, GSL $B7A<0$N%$%G%"%k4pDl$N7W;;(B
 \EG :: Computation of an GSL form ideal basis stating from a Groebner basis  \EG :: Computation of an GSL form ideal basis stating from a Groebner basis
 @end table  @end table
Line 1842  z^32+11405*z^31+20868*z^30+21602*z^29+...
Line 2142  z^32+11405*z^31+20868*z^30+21602*z^29+...
 @fref{gr_minipoly minipoly}.  @fref{gr_minipoly minipoly}.
 @end table  @end table
   
 \JP @node dp_gr_main dp_gr_mod_main dp_gr_f_main,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node dp_gr_main dp_gr_mod_main dp_gr_f_main dp_weyl_gr_main dp_weyl_gr_mod_main dp_weyl_gr_f_main,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \EG @node dp_gr_main dp_gr_mod_main dp_gr_f_main,,, Functions for Groebner basis computation  \EG @node dp_gr_main dp_gr_mod_main dp_gr_f_main dp_weyl_gr_main dp_weyl_gr_mod_main dp_weyl_gr_f_main,,, Functions for Groebner basis computation
 @subsection @code{dp_gr_main}, @code{dp_gr_mod_main}, @code{dp_gr_f_main}  @subsection @code{dp_gr_main}, @code{dp_gr_mod_main}, @code{dp_gr_f_main}, @code{dp_weyl_gr_main}, @code{dp_weyl_gr_mod_main}, @code{dp_weyl_gr_f_main}
 @findex dp_gr_main  @findex dp_gr_main
 @findex dp_gr_mod_main  @findex dp_gr_mod_main
 @findex dp_gr_f_main  @findex dp_gr_f_main
   @findex dp_weyl_gr_main
   @findex dp_weyl_gr_mod_main
   @findex dp_weyl_gr_f_main
   
 @table @t  @table @t
 @item dp_gr_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})  @item dp_gr_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
 @itemx dp_gr_mod_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})  @itemx dp_gr_mod_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
 @itemx dp_gr_f_main(@var{plist},@var{vlist},@var{homo},@var{order})  @itemx dp_gr_f_main(@var{plist},@var{vlist},@var{homo},@var{order})
   @itemx dp_weyl_gr_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
   @itemx dp_weyl_gr_mod_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
   @itemx dp_weyl_gr_f_main(@var{plist},@var{vlist},@var{homo},@var{order})
 \JP :: $B%0%l%V%J4pDl$N7W;;(B ($BAH$_9~$_H!?t(B)  \JP :: $B%0%l%V%J4pDl$N7W;;(B ($BAH$_9~$_H!?t(B)
 \EG :: Groebner basis computation (built-in functions)  \EG :: Groebner basis computation (built-in functions)
 @end table  @end table
Line 1880  z^32+11405*z^31+20868*z^30+21602*z^29+...
Line 2186  z^32+11405*z^31+20868*z^30+21602*z^29+...
 @item  @item
 $B$3$l$i$NH!?t$O(B, $B%0%l%V%J4pDl7W;;$N4pK\E*AH$_9~$_H!?t$G$"$j(B, @code{gr()},  $B$3$l$i$NH!?t$O(B, $B%0%l%V%J4pDl7W;;$N4pK\E*AH$_9~$_H!?t$G$"$j(B, @code{gr()},
 @code{hgr()}, @code{gr_mod()} $B$J$I$O$9$Y$F$3$l$i$NH!?t$r8F$S=P$7$F7W;;(B  @code{hgr()}, @code{gr_mod()} $B$J$I$O$9$Y$F$3$l$i$NH!?t$r8F$S=P$7$F7W;;(B
 $B$r9T$C$F$$$k(B.  $B$r9T$C$F$$$k(B. $B4X?tL>$K(B weyl $B$,F~$C$F$$$k$b$N$O(B, Weyl $BBe?t>e$N7W;;(B
   $B$N$?$a$N4X?t$G$"$k(B.
 @item  @item
 @code{dp_gr_f_main()} $B$O(B, $B<o!9$NM-8BBN>e$N%0%l%V%J4pDl$r7W;;$9$k(B  @code{dp_gr_f_main()}, @code{dp_weyl_f_main()} $B$O(B, $B<o!9$NM-8BBN>e$N%0%l%V%J4pDl$r7W;;$9$k(B
 $B>l9g$KMQ$$$k(B. $BF~NO$O(B, $B$"$i$+$8$a(B, @code{simp_ff()} $B$J$I$G(B,  $B>l9g$KMQ$$$k(B. $BF~NO$O(B, $B$"$i$+$8$a(B, @code{simp_ff()} $B$J$I$G(B,
 $B9M$($kM-8BBN>e$K<M1F$5$l$F$$$kI,MW$,$"$k(B.  $B9M$($kM-8BBN>e$K<M1F$5$l$F$$$kI,MW$,$"$k(B.
 @item  @item
Line 1917  z^32+11405*z^31+20868*z^30+21602*z^29+...
Line 2224  z^32+11405*z^31+20868*z^30+21602*z^29+...
 @item  @item
 These functions are fundamental built-in functions for Groebner basis  These functions are fundamental built-in functions for Groebner basis
 computation and @code{gr()},@code{hgr()} and @code{gr_mod()}  computation and @code{gr()},@code{hgr()} and @code{gr_mod()}
 are all interfaces to these functions.  are all interfaces to these functions. Functions whose names
   contain weyl are those for computation in Weyl algebra.
 @item  @item
 @code{dp_gr_f_main()} is a function for Groebner basis computation  @code{dp_gr_f_main()} and @code{dp_weyl_gr_f_main()}
   are functions for Groebner basis computation
 over various finite fields. Coefficients of input polynomials  over various finite fields. Coefficients of input polynomials
 must be converted to elements of a finite field  must be converted to elements of a finite field
 currently specified by @code{setmod_ff()}.  currently specified by @code{setmod_ff()}.
Line 1966  Actual computation is controlled by various parameters
Line 2275  Actual computation is controlled by various parameters
 \EG @fref{Controlling Groebner basis computations}  \EG @fref{Controlling Groebner basis computations}
 @end table  @end table
   
 \JP @node dp_f4_main dp_f4_mod_main,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node dp_f4_main dp_f4_mod_main dp_weyl_f4_main dp_weyl_f4_mod_main,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \EG @node dp_f4_main dp_f4_mod_main,,, Functions for Groebner basis computation  \EG @node dp_f4_main dp_f4_mod_main dp_weyl_f4_main dp_weyl_f4_mod_main,,, Functions for Groebner basis computation
 @subsection @code{dp_f4_main}, @code{dp_f4_mod_main}  @subsection @code{dp_f4_main}, @code{dp_f4_mod_main}, @code{dp_weyl_f4_main}, @code{dp_weyl_f4_mod_main}
 @findex dp_f4_main  @findex dp_f4_main
 @findex dp_f4_mod_main  @findex dp_f4_mod_main
   @findex dp_weyl_f4_main
   @findex dp_weyl_f4_mod_main
   
 @table @t  @table @t
 @item dp_f4_main(@var{plist},@var{vlist},@var{order})  @item dp_f4_main(@var{plist},@var{vlist},@var{order})
 @itemx dp_f4_mod_main(@var{plist},@var{vlist},@var{order})  @itemx dp_f4_mod_main(@var{plist},@var{vlist},@var{order})
   @itemx dp_weyl_f4_main(@var{plist},@var{vlist},@var{order})
   @itemx dp_weyl_f4_mod_main(@var{plist},@var{vlist},@var{order})
 \JP :: F4 $B%"%k%4%j%:%`$K$h$k%0%l%V%J4pDl$N7W;;(B ($BAH$_9~$_H!?t(B)  \JP :: F4 $B%"%k%4%j%:%`$K$h$k%0%l%V%J4pDl$N7W;;(B ($BAH$_9~$_H!?t(B)
 \EG :: Groebner basis computation by F4 algorithm (built-in functions)  \EG :: Groebner basis computation by F4 algorithm (built-in functions)
 @end table  @end table
Line 2000  F4 $B%"%k%4%j%:%`$O(B, J.C. Faugere $B$K$h$jDs>'$5$
Line 2313  F4 $B%"%k%4%j%:%`$O(B, J.C. Faugere $B$K$h$jDs>'$5$
 $B;;K!$G$"$j(B, $BK\<BAu$O(B, $BCf9q>jM>DjM}$K$h$k@~7AJ}Dx<05a2r$rMQ$$$?(B  $B;;K!$G$"$j(B, $BK\<BAu$O(B, $BCf9q>jM>DjM}$K$h$k@~7AJ}Dx<05a2r$rMQ$$$?(B
 $B;n83E*$J<BAu$G$"$k(B.  $B;n83E*$J<BAu$G$"$k(B.
 @item  @item
 $B0z?t$*$h$SF0:n$O$=$l$>$l(B @code{dp_gr_main()}, @code{dp_gr_mod_main()}  $B@F<!2=$N0z?t$,$J$$$3$H$r=|$1$P(B, $B0z?t$*$h$SF0:n$O$=$l$>$l(B
   @code{dp_gr_main()}, @code{dp_gr_mod_main()},
   @code{dp_weyl_gr_main()}, @code{dp_weyl_gr_mod_main()}
 $B$HF1MM$G$"$k(B.  $B$HF1MM$G$"$k(B.
 \E  \E
 \BEG  \BEG
Line 2012  invented by J.C. Faugere. The current implementation o
Line 2327  invented by J.C. Faugere. The current implementation o
 uses Chinese Remainder theorem and not highly optimized.  uses Chinese Remainder theorem and not highly optimized.
 @item  @item
 Arguments and actions are the same as those of  Arguments and actions are the same as those of
 @code{dp_gr_main()}, @code{dp_gr_mod_main()}.  @code{dp_gr_main()}, @code{dp_gr_mod_main()},
   @code{dp_weyl_gr_main()}, @code{dp_weyl_gr_mod_main()},
   except for lack of the argument for controlling homogenization.
 \E  \E
 @end itemize  @end itemize
   
Line 2026  Arguments and actions are the same as those of 
Line 2343  Arguments and actions are the same as those of 
 \EG @fref{Controlling Groebner basis computations}  \EG @fref{Controlling Groebner basis computations}
 @end table  @end table
   
   \JP @node nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
   \EG @node nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace,,, Functions for Groebner basis computation
   @subsection @code{nd_gr}, @code{nd_gr_trace}, @code{nd_f4}, @code{nd_f4_trace}, @code{nd_weyl_gr}, @code{nd_weyl_gr_trace}
   @findex nd_gr
   @findex nd_gr_trace
   @findex nd_f4
   @findex nd_f4_trace
   @findex nd_weyl_gr
   @findex nd_weyl_gr_trace
   
   @table @t
   @item nd_gr(@var{plist},@var{vlist},@var{p},@var{order})
   @itemx nd_gr_trace(@var{plist},@var{vlist},@var{homo},@var{p},@var{order})
   @itemx nd_f4(@var{plist},@var{vlist},@var{modular},@var{order})
   @itemx nd_f4_trace(@var{plist},@var{vlist},@var{homo},@var{p},@var{order})
   @itemx nd_weyl_gr(@var{plist},@var{vlist},@var{p},@var{order})
   @itemx nd_weyl_gr_trace(@var{plist},@var{vlist},@var{homo},@var{p},@var{order})
   \JP :: $B%0%l%V%J4pDl$N7W;;(B ($BAH$_9~$_H!?t(B)
   \EG :: Groebner basis computation (built-in functions)
   @end table
   
   @table @var
   @item return
   \JP $B%j%9%H(B
   \EG list
   @item plist  vlist
   \JP $B%j%9%H(B
   \EG list
   @item order
   \JP $B?t(B, $B%j%9%H$^$?$O9TNs(B
   \EG number, list or matrix
   @item homo
   \JP $B%U%i%0(B
   \EG flag
   @item modular
   \JP $B%U%i%0$^$?$OAG?t(B
   \EG flag or prime
   @end table
   
   \BJP
   @itemize @bullet
   @item
   $B$3$l$i$NH!?t$O(B, $B%0%l%V%J4pDl7W;;AH$_9~$_4X?t$N?7<BAu$G$"$k(B.
   @item @code{nd_gr} $B$O(B, @code{p} $B$,(B 0 $B$N$H$-M-M}?tBN>e$N(B Buchberger
   $B%"%k%4%j%:%`$r<B9T$9$k(B. @code{p} $B$,(B 2 $B0J>e$N<+A3?t$N$H$-(B, GF(p) $B>e$N(B
   Buchberger $B%"%k%4%j%:%`$r<B9T$9$k(B.
   @item @code{nd_gr_trace} $B$*$h$S(B @code{nd_f4_trace}
   $B$OM-M}?tBN>e$G(B trace $B%"%k%4%j%:%`$r<B9T$9$k(B.
   @var{p} $B$,(B 0 $B$^$?$O(B 1 $B$N$H$-(B, $B<+F0E*$KA*$P$l$?AG?t$rMQ$$$F(B, $B@.8y$9$k(B
   $B$^$G(B trace $B%"%k%4%j%:%`$r<B9T$9$k(B.
   @var{p} $B$,(B 2 $B0J>e$N$H$-(B, trace $B$O(BGF(p) $B>e$G7W;;$5$l$k(B. trace $B%"%k%4%j%:%`(B
   $B$,<:GT$7$?>l9g(B 0 $B$,JV$5$l$k(B. @var{p} $B$,Ii$N>l9g(B, $B%0%l%V%J4pDl%A%'%C%/$O(B
   $B9T$o$J$$(B. $B$3$N>l9g(B, @var{p} $B$,(B -1 $B$J$i$P<+F0E*$KA*$P$l$?AG?t$,(B,
   $B$=$l0J30$O;XDj$5$l$?AG?t$rMQ$$$F%0%l%V%J4pDl8uJd$N7W;;$,9T$o$l$k(B.
   @code{nd_f4_trace} $B$O(B, $B3FA4<!?t$K$D$$$F(B, $B$"$kM-8BBN>e$G(B F4 $B%"%k%4%j%:%`(B
   $B$G9T$C$?7k2L$r$b$H$K(B, $B$=$NM-8BBN>e$G(B 0 $B$G$J$$4pDl$rM?$($k(B S-$BB?9`<0$N$_$r(B
   $BMQ$$$F9TNs@8@.$r9T$$(B, $B$=$NA4<!?t$K$*$1$k4pDl$r@8@.$9$kJ}K!$G$"$k(B. $BF@$i$l$k(B
   $BB?9`<0=89g$O$d$O$j%0%l%V%J4pDl8uJd$G$"$j(B, @code{nd_gr_trace} $B$HF1MM$N(B
   $B%A%'%C%/$,9T$o$l$k(B.
   @item
   @code{nd_f4} $B$O(B @code{modular} $B$,(B 0 $B$N$H$-M-M}?tBN>e$N(B, @code{modular} $B$,(B
   $B%^%7%s%5%$%:AG?t$N$H$-M-8BBN>e$N(B F4 $B%"%k%4%j%:%`$r<B9T$9$k(B.
   @item
   @var{plist} $B$,B?9`<0%j%9%H$N>l9g(B, @var{plist}$B$G@8@.$5$l$k%$%G%"%k$N%0%l%V%J!<4pDl$,(B
   $B7W;;$5$l$k(B. @var{plist} $B$,B?9`<0%j%9%H$N%j%9%H$N>l9g(B, $B3FMWAG$OB?9`<04D>e$N<+M32C72$N85$H8+$J$5$l(B,
   $B$3$l$i$,@8@.$9$kItJ,2C72$N%0%l%V%J!<4pDl$,7W;;$5$l$k(B. $B8e<T$N>l9g(B, $B9`=g=x$O2C72$KBP$9$k9`=g=x$r(B
   $B;XDj$9$kI,MW$,$"$k(B. $B$3$l$O(B @var{[s,ord]} $B$N7A$G;XDj$9$k(B. @var{s} $B$,(B 0 $B$J$i$P(B TOP (Term Over Position),
   1 $B$J$i$P(B POT (Position Over Term) $B$r0UL#$7(B, @var{ord} $B$OB?9`<04D$NC19`<0$KBP$9$k9`=g=x$G$"$k(B.
   @item
   @code{nd_weyl_gr}, @code{nd_weyl_gr_trace} $B$O(B Weyl $BBe?tMQ$G$"$k(B.
   @item
   @code{f4} $B7O4X?t0J30$O$9$Y$FM-M}4X?t78?t$N7W;;$,2DG=$G$"$k(B.
   @item
   $B0lHL$K(B @code{dp_gr_main}, @code{dp_gr_mod_main} $B$h$j9bB.$G$"$k$,(B,
   $BFC$KM-8BBN>e$N>l9g82Cx$G$"$k(B.
   @end itemize
   \E
   
   \BEG
   @itemize @bullet
   @item
   These functions are new implementations for computing Groebner bases.
   @item @code{nd_gr} executes Buchberger algorithm over the rationals
   if  @code{p} is 0, and that over GF(p) if @code{p} is a prime.
   @item @code{nd_gr_trace} executes the trace algorithm over the rationals.
   If @code{p} is 0 or 1, the trace algorithm is executed until it succeeds
   by using automatically chosen primes.
   If @code{p} a positive prime,
   the trace is comuted over GF(p).
   If the trace algorithm fails 0 is returned.
   If @code{p} is negative,
   the Groebner basis check and ideal-membership check are omitted.
   In this case, an automatically chosen prime if @code{p} is 1,
   otherwise the specified prime is used to compute a Groebner basis
   candidate.
   Execution of @code{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 @code{nd_gr_trace} is done.
   @item
   @code{nd_f4} executes F4 algorithm over Q if @code{modular} is equal to 0,
   or over a finite field GF(@code{modular})
   if @code{modular} is a prime number of machine size (<2^29).
   If @var{plist} is a list of polynomials, then a Groebner basis of the ideal generated by @var{plist}
   is computed. If @var{plist} is a list of lists of polynomials, then each list of polynomials are regarded
   as an element of a free module over a polynomial ring and a Groebner basis of the sub-module generated by @var{plist}
   in the free module. In the latter case a term order in the free module should be specified.
   This is specified by @var{[s,ord]}. If @var{s} is 0 then it means TOP (Term Over Position).
   If @var{s} is 1 then it means POT 1 (Position Over Term). @var{ord} is a term order in the base polynomial ring.
   @item
   @code{nd_weyl_gr}, @code{nd_weyl_gr_trace} are for Weyl algebra computation.
   @item
   Functions except for F4 related ones can handle rational coeffient cases.
   @item
   In general these functions are more efficient than
   @code{dp_gr_main}, @code{dp_gr_mod_main}, especially over finite fields.
   @end itemize
   \E
   
   @example
   [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)
   @end example
   
   @table @t
   \JP @item $B;2>H(B
   \EG @item References
   @fref{dp_ord},
   @fref{dp_gr_flags dp_gr_print},
   \JP @fref{$B7W;;$*$h$SI=<($N@)8f(B}.
   \EG @fref{Controlling Groebner basis computations}
   @end table
   
 \JP @node dp_gr_flags dp_gr_print,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node dp_gr_flags dp_gr_print,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \EG @node dp_gr_flags dp_gr_print,,, Functions for Groebner basis computation  \EG @node dp_gr_flags dp_gr_print,,, Functions for Groebner basis computation
 @subsection @code{dp_gr_flags}, @code{dp_gr_print}  @subsection @code{dp_gr_flags}, @code{dp_gr_print}
Line 2034  Arguments and actions are the same as those of 
Line 2497  Arguments and actions are the same as those of 
   
 @table @t  @table @t
 @item dp_gr_flags([@var{list}])  @item dp_gr_flags([@var{list}])
 @itemx dp_gr_print([@var{0|1}])  @itemx dp_gr_print([@var{i}])
 \JP :: $B7W;;$*$h$SI=<(MQ%Q%i%a%?$N@_Dj(B, $B;2>H(B  \JP :: $B7W;;$*$h$SI=<(MQ%Q%i%a%?$N@_Dj(B, $B;2>H(B
 \BEG :: Set and show various parameters for cotrolling computations  \BEG :: Set and show various parameters for cotrolling computations
 and showing informations.  and showing informations.
Line 2048  and showing informations.
Line 2511  and showing informations.
 @item list  @item list
 \JP $B%j%9%H(B  \JP $B%j%9%H(B
 \EG list  \EG list
   @item i
   \JP $B@0?t(B
   \EG integer
 @end table  @end table
   
 @itemize @bullet  @itemize @bullet
Line 2061  and showing informations.
Line 2527  and showing informations.
 $B0z?t$O(B, @code{["Print",1,"NoSugar",1,...]} $B$J$k7A$N%j%9%H$G(B, $B:8$+$i=g$K(B  $B0z?t$O(B, @code{["Print",1,"NoSugar",1,...]} $B$J$k7A$N%j%9%H$G(B, $B:8$+$i=g$K(B
 $B@_Dj$5$l$k(B. $B%Q%i%a%?L>$OJ8;zNs$GM?$($kI,MW$,$"$k(B.  $B@_Dj$5$l$k(B. $B%Q%i%a%?L>$OJ8;zNs$GM?$($kI,MW$,$"$k(B.
 @item  @item
 @code{dp_gr_print()} $B$O(B, $BFC$K%Q%i%a%?(B @code{Print} $B$NCM$rD>@\@_Dj(B, $B;2>H(B  @code{dp_gr_print()} $B$O(B, $BFC$K%Q%i%a%?(B @code{Print}, @code{PrintShort} $B$NCM$rD>@\@_Dj(B, $B;2>H(B
 $B$G$-$k(B. $B$3$l$O(B, @code{dp_gr_main()} $B$J$I$r%5%V%k!<%A%s$H$7$FMQ$$$k%f!<%6(B  $B$G$-$k(B. $B@_Dj$5$l$kCM$O<!$NDL$j$G$"$k!#(B
 $BH!?t$K$*$$$F(B, @code{Print} $B$NCM$r8+$F(B, $B$=$N%5%V%k!<%A%s$,Cf4V>pJs$NI=<((B  @table @var
   @item i=0
   @code{Print=0}, @code{PrintShort=0}
   @item i=1
   @code{Print=1}, @code{PrintShort=0}
   @item i=2
   @code{Print=0}, @code{PrintShort=1}
   @end table
   $B$3$l$O(B, @code{dp_gr_main()} $B$J$I$r%5%V%k!<%A%s$H$7$FMQ$$$k%f!<%6(B
   $BH!?t$K$*$$$F(B, $B$=$N%5%V%k!<%A%s$,Cf4V>pJs$NI=<((B
 $B$r9T$&:]$K(B, $B?WB.$K%U%i%0$r8+$k$3$H$,$G$-$k$h$&$KMQ0U$5$l$F$$$k(B.  $B$r9T$&:]$K(B, $B?WB.$K%U%i%0$r8+$k$3$H$,$G$-$k$h$&$KMQ0U$5$l$F$$$k(B.
 \E  \E
 \BEG  \BEG
Line 2078  Arguments must be specified as a list such as
Line 2553  Arguments must be specified as a list such as
 strings.  strings.
 @item  @item
 @code{dp_gr_print()} is used to set and show the value of a parameter  @code{dp_gr_print()} is used to set and show the value of a parameter
 @code{Print}. This functions is prepared to get quickly the value of  @code{Print} and @code{PrintShort}.
 @code{Print} when a user defined function calling @code{dp_gr_main()} etc.  @table @var
   @item i=0
   @code{Print=0}, @code{PrintShort=0}
   @item i=1
   @code{Print=1}, @code{PrintShort=0}
   @item i=2
   @code{Print=0}, @code{PrintShort=1}
   @end table
   This functions is prepared to get quickly the value
   when a user defined function calling @code{dp_gr_main()} etc.
 uses the value as a flag for showing intermediate informations.  uses the value as a flag for showing intermediate informations.
 \E  \E
 @end itemize  @end itemize
Line 2181  when functions other than top level functions are call
Line 2665  when functions other than top level functions are call
 \EG @fref{Setting term orderings}  \EG @fref{Setting term orderings}
 @end table  @end table
   
   \JP @node dp_set_weight dp_set_top_weight dp_weyl_set_weight,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
   \EG @node dp_set_weight dp_set_top_weight dp_weyl_set_weight,,, Functions for Groebner basis computation
   @subsection @code{dp_set_weight}, @code{dp_set_top_weight}, @code{dp_weyl_set_weight}
   @findex dp_set_weight
   @findex dp_set_top_weight
   @findex dp_weyl_set_weight
   
   @table @t
   @item dp_set_weight([@var{weight}])
   \JP :: sugar weight $B$N@_Dj(B, $B;2>H(B
   \EG :: Set and show the sugar weight.
   @item dp_set_top_weight([@var{weight}])
   \JP :: top weight $B$N@_Dj(B, $B;2>H(B
   \EG :: Set and show the top weight.
   @item dp_weyl_set_weight([@var{weight}])
   \JP :: weyl weight $B$N@_Dj(B, $B;2>H(B
   \EG :: Set and show the weyl weight.
   @end table
   
   @table @var
   @item return
   \JP $B%Y%/%H%k(B
   \EG a vector
   @item weight
   \JP $B@0?t$N%j%9%H$^$?$O%Y%/%H%k(B
   \EG a list or vector of integers
   @end table
   
   @itemize @bullet
   \BJP
   @item
   @code{dp_set_weight} $B$O(B sugar weight $B$r(B @var{weight} $B$K@_Dj$9$k(B. $B0z?t$,$J$$;~(B,
   $B8=:_@_Dj$5$l$F$$$k(B sugar weight $B$rJV$9(B. sugar weight $B$O@5@0?t$r@.J,$H$9$k%Y%/%H%k$G(B,
   $B3FJQ?t$N=E$_$rI=$9(B. $B<!?t$D$-=g=x$K$*$$$F(B, $BC19`<0$N<!?t$r7W;;$9$k:]$KMQ$$$i$l$k(B.
   $B@F<!2=JQ?tMQ$K(B, $BKvHx$K(B 1 $B$rIU$12C$($F$*$/$H0BA4$G$"$k(B.
   @item
   @code{dp_set_top_weight} $B$O(B top weight $B$r(B @var{weight} $B$K@_Dj$9$k(B. $B0z?t$,$J$$;~(B,
   $B8=:_@_Dj$5$l$F$$$k(B top weight $B$rJV$9(B. top weight $B$,@_Dj$5$l$F$$$k$H$-(B,
   $B$^$:(B top weight $B$K$h$kC19`<0Hf3S$r@h$K9T$&(B. tie breaker $B$H$7$F8=:_@_Dj$5$l$F$$$k(B
   $B9`=g=x$,MQ$$$i$l$k$,(B, $B$3$NHf3S$K$O(B top weight $B$OMQ$$$i$l$J$$(B.
   
   @item
   @code{dp_weyl_set_weight} $B$O(B weyl weight $B$r(B @var{weight} $B$K@_Dj$9$k(B. $B0z?t$,$J$$;~(B,
   $B8=:_@_Dj$5$l$F$$$k(B weyl weight $B$rJV$9(B. weyl weight w $B$r@_Dj$9$k$H(B,
   $B9`=g=x7?(B 11 $B$G$N7W;;$K$*$$$F(B, (-w,w) $B$r(B top weight, tie breaker $B$r(B graded reverse lex
   $B$H$7$?9`=g=x$,@_Dj$5$l$k(B.
   \E
   \BEG
   @item
   @code{dp_set_weight} sets the sugar weight=@var{weight}. It returns the current sugar weight.
   A sugar weight is a vector with positive integer components and it represents the weights of variables.
   It is used for computing the weight of a monomial in a graded ordering.
   It is recommended to append a component 1 at the end of the weight vector for a homogenizing variable.
   @item
   @code{dp_set_top_weight} sets the top weight=@var{weight}. It returns the current top weight.
   It a top weight is set, the weights of monomials under the top weight are firstly compared.
   If the the weights are equal then the current term ordering is applied as a tie breaker, but
   the top weight is not used in the tie breaker.
   
   @item
   @code{dp_weyl_set_weight} sets the weyl weigh=@var{weight}. It returns the current weyl weight.
   If a weyl weight w is set, in the comparsion by the term order type 11, a term order with
   the top weight=(-w,w) and the tie breaker=graded reverse lex is applied.
   \E
   @end itemize
   
   @table @t
   \JP @item $B;2>H(B
   \EG @item References
   @fref{Weight}
   @end table
   
   
 \JP @node dp_ptod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node dp_ptod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \EG @node dp_ptod,,, Functions for Groebner basis computation  \EG @node dp_ptod,,, Functions for Groebner basis computation
 @subsection @code{dp_ptod}  @subsection @code{dp_ptod}
Line 2363  converting the coefficients into elements of a finite 
Line 2920  converting the coefficients into elements of a finite 
 @table @t  @table @t
 \JP @item $B;2>H(B  \JP @item $B;2>H(B
 \EG @item References  \EG @item References
 @fref{dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod},  @fref{dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod},
 @fref{subst psubst},  @fref{subst psubst},
 @fref{setmod}.  @fref{setmod}.
 @end table  @end table
Line 2454  These are used internally in @code{hgr()} etc.
Line 3011  These are used internally in @code{hgr()} etc.
 into an integral distributed polynomial such that GCD of all its coefficients  into an integral distributed polynomial such that GCD of all its coefficients
 is 1.  is 1.
 \E  \E
 @itemx dp_prim(@var{dpoly})  @item dp_prim(@var{dpoly})
 \JP :: $BM-M}<0G\$7$F78?t$r@0?t78?tB?9`<078?t$+$D78?t$NB?9`<0(B GCD $B$r(B 1 $B$K$9$k(B.  \JP :: $BM-M}<0G\$7$F78?t$r@0?t78?tB?9`<078?t$+$D78?t$NB?9`<0(B GCD $B$r(B 1 $B$K$9$k(B.
 \BEG  \BEG
 :: Converts a distributed polynomial @var{poly} with rational function  :: Converts a distributed polynomial @var{poly} with rational function
Line 2507  polynomial contents included in the coefficients are n
Line 3064  polynomial contents included in the coefficients are n
 @fref{ptozp}.  @fref{ptozp}.
 @end table  @end table
   
 \JP @node dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \EG @node dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod,,, Functions for Groebner basis computation  \EG @node dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod,,, Functions for Groebner basis computation
 @subsection @code{dp_nf}, @code{dp_nf_mod}, @code{dp_true_nf}, @code{dp_true_nf_mod}  @subsection @code{dp_nf}, @code{dp_nf_mod}, @code{dp_true_nf}, @code{dp_true_nf_mod}
 @findex dp_nf  @findex dp_nf
 @findex  dp_true_nf  @findex  dp_true_nf
 @findex dp_nf_mod  @findex dp_nf_mod
 @findex  dp_true_nf_mod  @findex  dp_true_nf_mod
   @findex dp_weyl_nf
   @findex dp_weyl_nf_mod
   
 @table @t  @table @t
 @item dp_nf(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce})  @item dp_nf(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce})
   @item dp_weyl_nf(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce})
 @item dp_nf_mod(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce},@var{mod})  @item dp_nf_mod(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce},@var{mod})
   @item dp_weyl_nf_mod(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce},@var{mod})
 \JP :: $BJ,;6I=8=B?9`<0$N@55,7A$r5a$a$k(B. ($B7k2L$ODj?tG\$5$l$F$$$k2DG=@-$"$j(B)  \JP :: $BJ,;6I=8=B?9`<0$N@55,7A$r5a$a$k(B. ($B7k2L$ODj?tG\$5$l$F$$$k2DG=@-$"$j(B)
   
 \BEG  \BEG
Line 2559  is returned in such a list as @code{[numerator, denomi
Line 3120  is returned in such a list as @code{[numerator, denomi
 @item  @item
 $BJ,;6I=8=B?9`<0(B @var{dpoly} $B$N@55,7A$r5a$a$k(B.  $BJ,;6I=8=B?9`<0(B @var{dpoly} $B$N@55,7A$r5a$a$k(B.
 @item  @item
   $BL>A0$K(B weyl $B$r4^$`4X?t$O%o%$%kBe?t$K$*$1$k@55,7A7W;;$r9T$&(B. $B0J2<$N@bL@$O(B weyl $B$r4^$`$b$N$KBP$7$F$bF1MM$K@.N)$9$k(B.
   @item
 @code{dp_nf_mod()}, @code{dp_true_nf_mod()} $B$NF~NO$O(B, @code{dp_mod()} $B$J$I(B  @code{dp_nf_mod()}, @code{dp_true_nf_mod()} $B$NF~NO$O(B, @code{dp_mod()} $B$J$I(B
 $B$K$h$j(B, $BM-8BBN>e$NJ,;6I=8=B?9`<0$K$J$C$F$$$J$1$l$P$J$i$J$$(B.  $B$K$h$j(B, $BM-8BBN>e$NJ,;6I=8=B?9`<0$K$J$C$F$$$J$1$l$P$J$i$J$$(B.
 @item  @item
Line 2591  is returned in such a list as @code{[numerator, denomi
Line 3154  is returned in such a list as @code{[numerator, denomi
 @item  @item
 Computes the normal form of a distributed polynomial.  Computes the normal form of a distributed polynomial.
 @item  @item
   Functions whose name contain @code{weyl} compute normal forms in Weyl algebra. The description below also applies to
   the functions for Weyl algebra.
   @item
 @code{dp_nf_mod()} and @code{dp_true_nf_mod()} require  @code{dp_nf_mod()} and @code{dp_true_nf_mod()} require
 distributed polynomials with coefficients in a finite field as arguments.  distributed polynomials with coefficients in a finite field as arguments.
 @item  @item
Line 3372  refer to @code{dp_true_nf()} and @code{dp_true_nf_mod(
Line 3938  refer to @code{dp_true_nf()} and @code{dp_true_nf_mod(
 @fref{dp_ptod},  @fref{dp_ptod},
 @fref{dp_dtop},  @fref{dp_dtop},
 @fref{dp_ord},  @fref{dp_ord},
 @fref{dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod}.  @fref{dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod}.
 @end table  @end table
   
 \JP @node p_terms,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node p_terms,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
Line 3665  if an input ideal is not radical.
Line 4231  if an input ideal is not radical.
 \EG @fref{Setting term orderings}.  \EG @fref{Setting term orderings}.
 @end table  @end table
   
 \BJP  
 @node Weyl $BBe?t(B,,, $B%0%l%V%J4pDl$N7W;;(B  
 @section Weyl $BBe?t(B  
 \E  
 \BEG  
 @node Weyl algebra,,, Groebner basis computation  
 @section Weyl algebra  
 \E  
   
 @noindent  
   
 \BJP  
 $B$3$l$^$G$O(B, $BDL>o$N2D49$JB?9`<04D$K$*$1$k%0%l%V%J4pDl7W;;$K$D$$$F(B  
 $B=R$Y$F$-$?$,(B, $B%0%l%V%J4pDl$NM}O@$O(B, $B$"$k>r7o$rK~$?$9Hs2D49$J(B  
 $B4D$K$b3HD%$G$-$k(B. $B$3$N$h$&$J4D$NCf$G(B, $B1~MQ>e$b=EMW$J(B,  
 Weyl $BBe?t(B, $B$9$J$o$AB?9`<04D>e$NHyJ,:nMQAG4D$N1i;;$*$h$S(B  
 $B%0%l%V%J4pDl7W;;$,(B Risa/Asir $B$K<BAu$5$l$F$$$k(B.  
   
 $BBN(B @code{K} $B>e$N(B @code{n} $B<!85(B Weyl $BBe?t(B  
 @code{D=K<x1,@dots{},xn,D1,@dots{},Dn>} $B$O(B  
 \E  
   
 \BEG  
 So far we have explained Groebner basis computation in  
 commutative polynomial rings. However Groebner basis can be  
 considered in more general non-commutative rings.  
 Weyl algebra is one of such rings and  
 Risa/Asir implements fundamental operations  
 in Weyl algebra and Groebner basis computation in Weyl algebra.  
   
 The @code{n} dimensional Weyl algebra over a field @code{K},  
 @code{D=K<x1,@dots{},xn,D1,@dots{},Dn>} is a non-commutative  
 algebra which has the following fundamental relations:  
 \E  
   
 @code{xi*xj-xj*xi=0}, @code{Di*Dj-Dj*Di=0}, @code{Di*xj-xj*Di=0} (@code{i!=j}),  
 @code{Di*xi-xi*Di=1}  
   
 \BJP  
 $B$H$$$&4pK\4X78$r;}$D4D$G$"$k(B. @code{D} $B$O(B $BB?9`<04D(B @code{K[x1,@dots{},xn]} $B$r78?t(B  
 $B$H$9$kHyJ,:nMQAG4D$G(B,  @code{Di} $B$O(B @code{xi} $B$K$h$kHyJ,$rI=$9(B. $B8r494X78$K$h$j(B,  
 @code{D} $B$N85$O(B, @code{x1^i1*@dots{}*xn^in*D1^j1*@dots{}*Dn^jn} $B$J$kC19`(B  
 $B<0$N(B @code{K} $B@~7A7k9g$H$7$F=q$-I=$9$3$H$,$G$-$k(B.  
 Risa/Asir $B$K$*$$$F$O(B, $B$3$NC19`<0$r(B, $B2D49$JB?9`<0$HF1MM$K(B  
 @code{<<i1,@dots{},in,j1,@dots{},jn>>} $B$GI=$9(B. $B$9$J$o$A(B, @code{D} $B$N85$b(B  
 $BJ,;6I=8=B?9`<0$H$7$FI=$5$l$k(B. $B2C8:;;$O(B, $B2D49$N>l9g$HF1MM$K(B, @code{+}, @code{-}  
 $B$K$h$j(B  
 $B<B9T$G$-$k$,(B, $B>h;;$O(B, $BHs2D49@-$r9MN8$7$F(B @code{dp_weyl_mul()} $B$H$$$&4X?t(B  
 $B$K$h$j<B9T$9$k(B.  
 \E  
   
 \BEG  
 @code{D} is the ring of differential operators whose coefficients  
 are polynomials in @code{K[x1,@dots{},xn]} and  
 @code{Di} denotes the differentiation with respect to  @code{xi}.  
 According to the commutation relation,  
 elements of @code{D} can be represented as a @code{K}-linear combination  
 of monomials @code{x1^i1*@dots{}*xn^in*D1^j1*@dots{}*Dn^jn}.  
 In Risa/Asir, this type of monomial is represented  
 by @code{<<i1,@dots{},in,j1,@dots{},jn>>} as in the case of commutative  
 polynomial.  
 That is, elements of @code{D} are represented by distributed polynomials.  
 Addition and subtraction can be done by @code{+}, @code{-},  
 but multiplication is done by calling @code{dp_weyl_mul()} because of  
 the non-commutativity of @code{D}.  
 \E  
   
 @example  
 [0] A=<<1,2,2,1>>;  
 (1)*<<1,2,2,1>>  
 [1] B=<<2,1,1,2>>;  
 (1)*<<2,1,1,2>>  
 [2] A*B;  
 (1)*<<3,3,3,3>>  
 [3] dp_weyl_mul(A,B);  
 (1)*<<3,3,3,3>>+(1)*<<3,2,3,2>>+(4)*<<2,3,2,3>>+(4)*<<2,2,2,2>>  
 +(2)*<<1,3,1,3>>+(2)*<<1,2,1,2>>  
 @end example  
   
 \BJP  
 $B%0%l%V%J4pDl7W;;$K$D$$$F$b(B, Weyl $BBe?t@lMQ$N4X?t$H$7$F(B,  
 $B<!$N4X?t$,MQ0U$7$F$"$k(B.  
 \E  
 \BEG  
 The following functions are avilable for Groebner basis computation  
 in Weyl algebra:  
 \E  
 @code{dp_weyl_gr_main()},  
 @code{dp_weyl_gr_mod_main()},  
 @code{dp_weyl_gr_f_main()},  
 @code{dp_weyl_f4_main()},  
 @code{dp_weyl_f4_mod_main()}.  
 \BJP  
 $B$^$?(B, $B1~MQ$H$7$F(B, global b $B4X?t$N7W;;$,<BAu$5$l$F$$$k(B.  
 \E  
 \BEG  
 Computation of the global b function is implemented as an application.  
 \E  
   
 \JP @node primedec_mod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B  \JP @node primedec_mod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
 \EG @node primedec_mod,,, Functions for Groebner basis computation  \EG @node primedec_mod,,, Functions for Groebner basis computation
 @subsection @code{primedec_mod}  @subsection @code{primedec_mod}
Line 3814  Computation of the global b function is implemented as
Line 4281  Computation of the global b function is implemented as
 $BItJ,$r7W;;$9$k$3$H$K$h$k(B early termination $B$r9T$&(B. $B0lHL$K(B,  $BItJ,$r7W;;$9$k$3$H$K$h$k(B early termination $B$r9T$&(B. $B0lHL$K(B,
 $B%$%G%"%k$N<!85$,9b$$>l9g$KM-8z$@$,(B, 0 $B<!85$N>l9g$J$I(B, $B<!85$,>.$5$$(B  $B%$%G%"%k$N<!85$,9b$$>l9g$KM-8z$@$,(B, 0 $B<!85$N>l9g$J$I(B, $B<!85$,>.$5$$(B
 $B>l9g$K$O(B overhead $B$,Bg$-$$>l9g$,$"$k(B.  $B>l9g$K$O(B overhead $B$,Bg$-$$>l9g$,$"$k(B.
   @item
   $B7W;;ESCf$GFbIt>pJs$r8+$?$$>l9g$K$O!"(B
   $BA0$b$C$F(B @code{dp_gr_print(2)} $B$r<B9T$7$F$*$1$P$h$$(B.
 \E  \E
 \BEG  \BEG
 @item  @item
Line 3838  is tried by computing the intersection of obtained com
Line 4308  is tried by computing the intersection of obtained com
 incrementally. In general, this strategy is useful when the krull  incrementally. In general, this strategy is useful when the krull
 dimension of the ideal is high, but it may add some overhead  dimension of the ideal is high, but it may add some overhead
 if the dimension is small.  if the dimension is small.
   @item
   If you want to see internal information during the computation,
   execute @code{dp_gr_print(2)} in advance.
 \E  \E
 @end itemize  @end itemize
   
Line 3857  if the dimension is small.
Line 4330  if the dimension is small.
 \JP @item $B;2>H(B  \JP @item $B;2>H(B
 \EG @item References  \EG @item References
 @fref{modfctr},  @fref{modfctr},
 @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main},  @fref{dp_gr_main dp_gr_mod_main dp_gr_f_main dp_weyl_gr_main dp_weyl_gr_mod_main dp_weyl_gr_f_main},
 \JP @fref{$B9`=g=x$N@_Dj(B}.  \JP @fref{$B9`=g=x$N@_Dj(B}.
 \EG @fref{Setting term orderings}.  \EG @fref{Setting term orderings},
   @fref{dp_gr_flags dp_gr_print}.
 @end table  @end table
   
   \JP @node bfunction bfct generic_bfct ann ann0,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B
   \EG @node bfunction bfct generic_bfct ann ann0,,, Functions for Groebner basis computation
   @subsection @code{bfunction}, @code{bfct}, @code{generic_bfct}, @code{ann}, @code{ann0}
   @findex bfunction
   @findex bfct
   @findex generic_bfct
   @findex ann
   @findex ann0
   
   @table @t
   @item bfunction(@var{f})
   @itemx bfct(@var{f})
   @itemx generic_bfct(@var{plist},@var{vlist},@var{dvlist},@var{weight})
   \JP :: @var{b} $B4X?t$N7W;;(B
   \EG :: Computes the global @var{b} function of a polynomial or an ideal
   @item ann(@var{f})
   @itemx ann0(@var{f})
   \JP :: $BB?9`<0$N%Y%-$N(B annihilator $B$N7W;;(B
   \EG :: Computes the annihilator of a power of polynomial
   @end table
   
   @table @var
   @item return
   \JP $BB?9`<0$^$?$O%j%9%H(B
   \EG polynomial or list
   @item f
   \JP $BB?9`<0(B
   \EG polynomial
   @item plist
   \JP $BB?9`<0%j%9%H(B
   \EG list of polynomials
   @item vlist dvlist
   \JP $BJQ?t%j%9%H(B
   \EG list of variables
   @end table
   
   @itemize @bullet
   \BJP
   @item @samp{bfct} $B$GDj5A$5$l$F$$$k(B.
   @item @code{bfunction(@var{f})}, @code{bfct(@var{f})} $B$OB?9`<0(B @var{f} $B$N(B global @var{b} $B4X?t(B @code{b(s)} $B$r(B
   $B7W;;$9$k(B. @code{b(s)} $B$O(B, Weyl $BBe?t(B @code{D} $B>e$N0lJQ?tB?9`<04D(B @code{D[s]}
   $B$N85(B @code{P(x,s)} $B$,B8:_$7$F(B, @code{P(x,s)f^(s+1)=b(s)f^s} $B$rK~$?$9$h$&$J(B
   $BB?9`<0(B @code{b(s)} $B$NCf$G(B, $B<!?t$,:G$bDc$$$b$N$G$"$k(B.
   @item @code{generic_bfct(@var{f},@var{vlist},@var{dvlist},@var{weight})}
   $B$O(B, @var{plist} $B$G@8@.$5$l$k(B @code{D} $B$N:8%$%G%"%k(B @code{I} $B$N(B,
   $B%&%'%$%H(B @var{weight} $B$K4X$9$k(B global @var{b} $B4X?t$r7W;;$9$k(B.
   @var{vlist} $B$O(B @code{x}-$BJQ?t(B, @var{vlist} $B$OBP1~$9$k(B @code{D}-$BJQ?t(B
   $B$r=g$KJB$Y$k(B.
   @item @code{bfunction} $B$H(B @code{bfct} $B$G$OMQ$$$F$$$k%"%k%4%j%:%`$,(B
   $B0[$J$k(B. $B$I$A$i$,9bB.$+$OF~NO$K$h$k(B.
   @item @code{ann(@var{f})} $B$O(B, @code{@var{f}^s} $B$N(B annihilator ideal
   $B$N@8@.7O$rJV$9(B. @code{ann(@var{f})} $B$O(B, @code{[@var{a},@var{list}]}
   $B$J$k%j%9%H$rJV$9(B. $B$3$3$G(B, @var{a} $B$O(B @var{f} $B$N(B @var{b} $B4X?t$N:G>.@0?t:,(B,
   @var{list} $B$O(B @code{ann(@var{f})} $B$N7k2L$N(B @code{s}$ $B$K(B, @var{a} $B$r(B
   $BBeF~$7$?$b$N$G$"$k(B.
   @item $B>\:Y$K$D$$$F$O(B, [Saito,Sturmfels,Takayama] $B$r8+$h(B.
   \E
   \BEG
   @item These functions are defined in @samp{bfct}.
   @item @code{bfunction(@var{f})} and @code{bfct(@var{f})} compute the global @var{b}-function @code{b(s)} of
   a polynomial @var{f}.
   @code{b(s)} is a polynomial of the minimal degree
   such that there exists @code{P(x,s)} in D[s], which is a polynomial
   ring over Weyl algebra @code{D}, and @code{P(x,s)f^(s+1)=b(s)f^s} holds.
   @item @code{generic_bfct(@var{f},@var{vlist},@var{dvlist},@var{weight})}
   computes the global @var{b}-function of a left ideal @code{I} in @code{D}
   generated by @var{plist}, with respect to @var{weight}.
   @var{vlist} is the list of @code{x}-variables,
   @var{vlist} is the list of corresponding @code{D}-variables.
   @item @code{bfunction(@var{f})} and @code{bfct(@var{f})} implement
   different algorithms and the efficiency depends on inputs.
   @item @code{ann(@var{f})} returns the generator set of the annihilator
   ideal of @code{@var{f}^s}.
   @code{ann(@var{f})} returns a list @code{[@var{a},@var{list}]},
   where @var{a} is the minimal integral root of the global @var{b}-function
   of @var{f}, and @var{list} is a list of polynomials obtained by
   substituting @code{s} in @code{ann(@var{f})} with @var{a}.
   @item See [Saito,Sturmfels,Takayama] for the details.
   \E
   @end itemize
   
   @example
   [0] load("bfct")$
   [216] bfunction(x^3+y^3+z^3+x^2*y^2*z^2+x*y*z);
   -9*s^5-63*s^4-173*s^3-233*s^2-154*s-40
   [217] fctr(@@);
   [[-1,1],[s+2,1],[3*s+4,1],[3*s+5,1],[s+1,2]]
   [218] F = [4*x^3*dt+y*z*dt+dx,x*z*dt+4*y^3*dt+dy,
   x*y*dt+5*z^4*dt+dz,-x^4-z*y*x-y^4-z^5+t]$
   [219] generic_bfct(F,[t,z,y,x],[dt,dz,dy,dx],[1,0,0,0]);
   20000*s^10-70000*s^9+101750*s^8-79375*s^7+35768*s^6-9277*s^5
   +1278*s^4-72*s^3
   [220] P=x^3-y^2$
   [221] ann(P);
   [2*dy*x+3*dx*y^2,-3*dx*x-2*dy*y+6*s]
   [222] ann0(P);
   [-1,[2*dy*x+3*dx*y^2,-3*dx*x-2*dy*y-6]]
   @end example
   
   @table @t
   \JP @item $B;2>H(B
   \EG @item References
   \JP @fref{Weyl $BBe?t(B}.
   \EG @fref{Weyl algebra}.
   @end table
   

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.20

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>