=================================================================== RCS file: /home/cvs/OpenXM/src/asir-doc/parts/groebner.texi,v retrieving revision 1.16 retrieving revision 1.22 diff -u -p -r1.16 -r1.22 --- OpenXM/src/asir-doc/parts/groebner.texi 2004/10/20 00:30:55 1.16 +++ OpenXM/src/asir-doc/parts/groebner.texi 2019/03/29 04:54:25 1.22 @@ -1,4 +1,4 @@ -@comment $OpenXM: OpenXM/src/asir-doc/parts/groebner.texi,v 1.15 2004/09/14 02:28:20 noro Exp $ +@comment $OpenXM: OpenXM/src/asir-doc/parts/groebner.texi,v 1.21 2018/09/06 05:42:43 takayama Exp $ \BJP @node $B%0%l%V%J4pDl$N7W;;(B,,, Top @chapter $B%0%l%V%J4pDl$N7W;;(B @@ -201,16 +201,16 @@ In an @b{Asir} session, it is displayed in the form li \EG and also can be input in such a form. \BJP -@itemx $BF,C19`<0(B (head monomial) @item $BF,9`(B (head term) +@itemx $BF,C19`<0(B (head monomial) @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 $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. \E \BEG -@itemx head monomial @item head term +@itemx head monomial @itemx head coefficient Monomials in a distributed polynomial is sorted by a total order. @@ -220,7 +220,45 @@ the head term and the head coefficient respectively. \E @end table +@noindent +ChangeLog +@itemize @bullet \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> $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 <> (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 @section $B%U%!%$%k$NFI$_9~$_(B \E @@ -1464,15 +1502,17 @@ Computation of the global b function is implemented as * tolexm minipolym:: * 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_weyl_f4_main dp_weyl_f4_mod_main:: -* nd_gr nd_gr_trace nd_f4 nd_weyl_gr nd_weyl_gr_trace:: +* nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace:: +* nd_gr_postproc nd_weyl_gr_postproc:: * dp_gr_flags dp_gr_print:: * dp_ord:: +* dp_set_weight dp_set_top_weight dp_weyl_set_weight:: * dp_ptod:: * dp_dtop:: * dp_mod dp_rat:: * dp_homo dp_dehomo:: * 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_td dp_sugar:: * dp_lcm:: @@ -1530,6 +1570,8 @@ Computation of the global b function is implemented as @item $BI8=`%i%$%V%i%j$N(B @samp{gr} $B$GDj5A$5$l$F$$$k(B. @item +gr $B$rL>A0$K4^$`4X?t$O8=:_%a%s%F$5$l$F$$$J$$(B. @code{nd_gr}$B7O$N4X?t$rBe$o$j$KMxMQ$9$Y$-$G$"$k(B(@fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace}). +@item $B$$$:$l$b(B, $BB?9`<0%j%9%H(B @var{plist} $B$N(B, $BJQ?t=g=x(B @var{vlist}, $B9`=g=x7?(B @var{order} $B$K4X$9$k%0%l%V%J4pDl$r5a$a$k(B. @code{gr()}, @code{hgr()} $B$O(B $BM-M}?t78?t(B, @code{gr_mod()} $B$O(B GF(@var{p}) $B78?t$H$7$F7W;;$9$k(B. @@ -1561,6 +1603,9 @@ CPU $B;~4V$G$"$j(B, $B$3$NH!?t$N>l9g$O$[$H$s$IDL?.$ @item These functions are defined in @samp{gr} in the standard library directory. +@item +Functions of which names contains gr are obsolted. +Functions of @code{nd_gr} families should be used (@fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace}). @item They compute a Groebner basis of a polynomial list @var{plist} with respect to the variable order @var{vlist} and the order type @var{order}. @@ -2304,12 +2349,13 @@ except for lack of the argument for controlling homoge \EG @fref{Controlling Groebner basis computations} @end table -\JP @node nd_gr nd_gr_trace nd_f4 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_weyl_gr nd_weyl_gr_trace,,, Functions for Groebner basis computation -@subsection @code{nd_gr}, @code{nd_gr_trace}, @code{nd_f4}, @code{nd_weyl_gr}, @code{nd_weyl_gr_trace} +\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 @@ -2317,7 +2363,8 @@ except for lack of the argument for controlling homoge @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}) -@item nd_weyl_gr(@var{plist},@var{vlist},@var{p},@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) @@ -2348,19 +2395,32 @@ except for lack of the argument for controlling homoge @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%:%`$re$N<+A3?t$N$H$-(B, GF(p) $B>e$N(B Buchberger $B%"%k%4%j%:%`$re$G(B trace $B%"%k%4%j%:%`$re$G(B trace $B%"%k%4%j%:%`$re$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. @code{p} $B$,Ii$N>l9g(B, $B%0%l%V%J4pDl%A%'%C%/$O(B -$B9T$o$J$$(B. $B$3$N>l9g(B, @code{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. +@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, $B3FA4e$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$=$NA4e$N(B F4 $B%"%k%4%j%:%`$re$N(B, @code{modular} $B$,(B +$B%^%7%s%5%$%:AG?t$N$H$-M-8BBN>e$N(B F4 $B%"%k%4%j%:%`$rl9g(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. $B8el9g(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 -$B$$$:$l$N4X?t$b(B, $BM-M}4X?tBN>e$N7W;;$OL$BP1~$G$"$k(B. +@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. @@ -2384,12 +2444,26 @@ the Groebner basis check and ideal-membership check ar 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 a finite field. +@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 -Each function cannot handle rational function coefficient cases. +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. @@ -2421,6 +2495,67 @@ ndv_alloc=1477188 \EG @fref{Controlling Groebner basis computations} @end table +\JP @node nd_gr_postproc nd_weyl_gr_postproc,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B +\EG @node nd_gr_postproc nd_weyl_gr_postproc,,, Functions for Groebner basis computation +@subsection @code{nd_gr_postproc}, @code{nd_weyl_gr_postproc} +@findex nd_gr_postproc +@findex nd_weyl_gr_postproc + +@table @t +@item nd_gr_postproc(@var{plist},@var{vlist},@var{p},@var{order},@var{check}) +@itemx nd_weyl_gr_postproc(@var{plist},@var{vlist},@var{p},@var{order},@var{check}) +\JP :: $B%0%l%V%J4pDl8uJd$N%A%'%C%/$*$h$SAj8_4JLs(B +\EG :: Check of Groebner basis candidate and inter-reduction +@end table + +@table @var +@item return +\JP $B%j%9%H(B $B$^$?$O(B 0 +\EG list or 0 +@item plist vlist +\JP $B%j%9%H(B +\EG list +@item p +\JP $BAG?t$^$?$O(B 0 +\EG prime or 0 +@item order +\JP $B?t(B, $B%j%9%H$^$?$O9TNs(B +\EG number, list or matrix +@item check +\JP 0 $B$^$?$O(B 1 +\EG 0 or 1 +@end table + +@itemize @bullet +\BJP +@item +$B%0%l%V%J4pDl(B($B8uJd(B)$B$NAj8_4JLs$r9T$&(B. +@item +@code{nd_weyl_gr_postproc} $B$O(B Weyl $BBe?tMQ$G$"$k(B. +@item +@var{check=1} $B$N>l9g(B, @var{plist} $B$,(B, @var{vlist}, @var{p}, @var{order} $B$G;XDj$5$l$kB?9`<04D(B, $B9`=g=x$G%0%l%V%J!<4pDl$K$J$C$F$$$k$+(B +$B$N%A%'%C%/$b9T$&(B. +@item +$B@Fl9g$KMQ$$$k(B. +\E +\BEG +@item +Perform the inter-reduction for a Groebner basis (candidate). +@item +@code{nd_weyl_gr_postproc} is for Weyl algebra. +@item +If @var{check=1} then the check whether @var{plist} is a Groebner basis with respect to a term order in a polynomial ring +or Weyl algebra specified by @var{vlist}, @var{p} and @var{order}. +@item +This function is used for inter-reduction of a non-reduced Groebner basis that is obtained by dehomogenizing a Groebner basis +computed via homogenization, or Groebner basis check of a Groebner basis candidate computed by CRT. +\E +@end itemize + +@example +afo +@end example + \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 @subsection @code{dp_gr_flags}, @code{dp_gr_print} @@ -2597,6 +2732,79 @@ when functions other than top level functions are call \EG @fref{Setting term orderings} @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. $BH(B +\EG @item References +@fref{Weight} +@end table + + \JP @node dp_ptod,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B \EG @node dp_ptod,,, Functions for Groebner basis computation @subsection @code{dp_ptod} @@ -2779,7 +2987,7 @@ converting the coefficients into elements of a finite @table @t \JP @item $B;2>H(B \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{setmod}. @end table @@ -2870,7 +3078,7 @@ These are used internally in @code{hgr()} etc. into an integral distributed polynomial such that GCD of all its coefficients is 1. \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. \BEG :: Converts a distributed polynomial @var{poly} with rational function @@ -2923,17 +3131,21 @@ polynomial contents included in the coefficients are n @fref{ptozp}. @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 -\EG @node dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod,,, Functions for Groebner basis computation +\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 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} @findex dp_nf @findex dp_true_nf @findex dp_nf_mod @findex dp_true_nf_mod +@findex dp_weyl_nf +@findex dp_weyl_nf_mod @table @t @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_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) \BEG @@ -2975,6 +3187,8 @@ is returned in such a list as @code{[numerator, denomi @item $BJ,;6I=8=B?9`<0(B @var{dpoly} $B$N@55,7A$r5a$a$k(B. @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 $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 @@ -3007,6 +3221,9 @@ is returned in such a list as @code{[numerator, denomi @item Computes the normal form of a distributed polynomial. @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 distributed polynomials with coefficients in a finite field as arguments. @item @@ -3788,7 +4005,7 @@ refer to @code{dp_true_nf()} and @code{dp_true_nf_mod( @fref{dp_ptod}, @fref{dp_dtop}, @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 \JP @node p_terms,,, $B%0%l%V%J4pDl$K4X$9$kH!?t(B