Annotation of OpenXM/src/asir-doc/parts/groebner.texi, Revision 1.26
1.26 ! noro 1: @comment $OpenXM: OpenXM/src/asir-doc/parts/groebner.texi,v 1.25 2020/09/07 05:16:41 noro Exp $
1.2 noro 2: \BJP
1.25 noro 3: @node グレブナ基底の計算,,, Top
4: @chapter グレブナ基底の計算
1.2 noro 5: \E
6: \BEG
7: @node Groebner basis computation,,, Top
8: @chapter Groebner basis computation
9: \E
1.1 noro 10:
11: @menu
1.2 noro 12: \BJP
1.25 noro 13: * 分散表現多項式::
14: * 基本的な函数::
15: * 計算および表示の制御::
16: * 項順序の設定::
1.13 noro 17: * Weight::
1.25 noro 18: * 有理式を係数とするグレブナ基底計算::
19: * 基底変換::
20: * Weyl 代数::
21: * 多項式環上の加群::
22: * グレブナ基底に関する函数::
1.2 noro 23: \E
24: \BEG
25: * Distributed polynomial::
26: * Reading files::
27: * Fundamental functions::
28: * Controlling Groebner basis computations::
29: * Setting term orderings::
1.13 noro 30: * Weight::
1.2 noro 31: * Groebner basis computation with rational function coefficients::
32: * Change of ordering::
1.5 noro 33: * Weyl algebra::
1.23 noro 34: * Module over a polynomial ring::
1.2 noro 35: * Functions for Groebner basis computation::
36: \E
1.1 noro 37: @end menu
38:
1.2 noro 39: \BJP
1.25 noro 40: @node 分散表現多項式,,, グレブナ基底の計算
41: @section 分散表現多項式
1.2 noro 42: \E
43: \BEG
44: @node Distributed polynomial,,, Groebner basis computation
45: @section Distributed polynomial
46: \E
1.1 noro 47:
48: @noindent
1.2 noro 49: \BJP
1.25 noro 50: 分散表現多項式とは, 多項式の内部形式の一つである. 通常の多項式
51: (@code{type} が 2) は, 再帰表現と呼ばれる形式で表現されている. すなわ
52: ち, 特定の変数を主変数とする 1 変数多項式で, その他の変数は, その 1 変
53: 数多項式の係数に, 主変数を含まない多項式として現れる. この係数が, また,
54: ある変数を主変数とする多項式となっていることから再帰表現と呼ばれる.
1.2 noro 55: \E
56: \BEG
57: A distributed polynomial is a polynomial with a special internal
58: representation different from the ordinary one.
59:
60: An ordinary polynomial (having @code{type} 2) is internally represented
61: in a format, called recursive representation.
62: In fact, it is represented as an uni-variate polynomial with respect to
63: a fixed variable, called main variable of that polynomial,
64: where the other variables appear in the coefficients which may again
65: polynomials in such variables other than the previous main variable.
66: A polynomial in the coefficients is again represented as
67: an uni-variate polynomial in a certain fixed variable,
68: the main variable. Thus, by this recursive structure of polynomial
69: representation, it is called the `recursive representation.'
70: \E
1.1 noro 71:
72: @iftex
73: @tex
1.2 noro 74: \JP $(x+y+z)^2 = 1 \cdot x^2 + (2 \cdot y + (2 \cdot z)) \cdot x + ((2 \cdot z) \cdot y + (1 \cdot z^2 ))$
75: \EG $(x+y+z)^2 = 1 \cdot x^2 + (2 \cdot y + (2 \cdot z)) \cdot x + ((2 \cdot z) \cdot y + (1 \cdot z^2 ))$
1.1 noro 76: @end tex
77: @end iftex
1.26 ! noro 78: @ifnottex
1.1 noro 79: @example
80: (x+y+z)^2 = 1 x^2 + (2 y + (2 z)) x + ((2 z) y + (1 z^2 ))
81: @end example
1.26 ! noro 82: @end ifnottex
1.1 noro 83:
84: @noindent
1.2 noro 85: \BJP
1.25 noro 86: これに対し, 多項式を, 変数の冪積と係数の積の和として表現したものを分散
87: 表現と呼ぶ.
1.2 noro 88: \E
89: \BEG
90: On the other hand,
91: we call a representation the distributed representation of a polynomial,
92: if a polynomial is represented, according to its original meaning,
93: as a sum of monomials,
94: where a monomial is the product of power product of variables
95: and a coefficient. We call a polynomial, represented in such an
96: internal format, a distributed polynomial. (This naming may sounds
97: something strange.)
98: \E
1.1 noro 99:
100: @iftex
101: @tex
1.2 noro 102: \JP $(x+y+z)^2 = 1 \cdot x^2 + 2 \cdot xy + 2 \cdot xz + 1 \cdot y^2 + 2 \cdot yz +1 \cdot z^2$
103: \EG $(x+y+z)^2 = 1 \cdot x^2 + 2 \cdot xy + 2 \cdot xz + 1 \cdot y^2 + 2 \cdot yz +1 \cdot z^2$
1.1 noro 104: @end tex
105: @end iftex
1.26 ! noro 106: @ifnottex
1.1 noro 107: @example
108: (x+y+z)^2 = 1 x^2 + 2 xy + 2 xz + 1 y^2 + 2 yz +1 z^2$
109: @end example
1.26 ! noro 110: @end ifnottex
1.1 noro 111:
112: @noindent
1.2 noro 113: \BJP
1.25 noro 114: グレブナ基底計算においては, 単項式に注目して操作を行うため多項式が分散表現
115: されている方がより効率のよい演算が可能になる. このため, 分散表現多項式が,
116: 識別子 9 の型として @b{Asir} のトップレベルから利用可能となっている.
117: ここで, 後の説明のために, いくつかの言葉を定義しておく.
1.2 noro 118: \E
119: \BEG
120: For computation of Groebner basis, efficient operation is expected if
121: polynomials are represented in a distributed representation,
122: because major operations for Groebner basis are performed with respect
123: to monomials.
124: From this view point, we provide the object type distributed polynomial
125: with its object identification number 9, and objects having such a type
126: are available by @b{Asir} language.
127:
128: Here, we provide several definitions for the later description.
129: \E
1.1 noro 130:
131: @table @b
1.2 noro 132: \BJP
1.25 noro 133: @item 項 (term)
134: 変数の冪積. すなわち, 係数 1 の単項式のこと. @b{Asir} においては,
1.2 noro 135: \E
136: \BEG
137: @item term
138: The power product of variables, i.e., a monomial with coefficient 1.
139: In an @b{Asir} session, it is displayed in the form like
140: \E
1.1 noro 141:
142: @example
143: <<0,1,2,3,4>>
144: @end example
145:
1.2 noro 146: \BJP
1.25 noro 147: という形で表示され, また, この形で入力可能である. この例は, 5 変数の項
148: を示す. 各変数を @code{a}, @code{b}, @code{c}, @code{d}, @code{e} とすると
149: この項は @code{b*c^2*d^3*e^4} を表す.
1.2 noro 150: \E
151: \BEG
152: and also can be input in such a form.
153: This example shows a term in 5 variables. If we assume the 5 variables
154: as @code{a}, @code{b}, @code{c}, @code{d}, and @code{e},
155: the term represents @code{b*c^2*d^3*e^4} in the ordinary expression.
156: \E
1.1 noro 157:
1.2 noro 158: \BJP
1.25 noro 159: @item 項順序 (term order)
160: 分散表現多項式における項は, 次の性質を満たす全順序により整列される.
1.2 noro 161: \E
162: \BEG
163: @item term order
164: Terms are ordered according to a total order with the following properties.
165: \E
1.1 noro 166:
167: @enumerate
168: @item
1.25 noro 169: \JP 任意の項 @code{t} に対し @code{t} > 1
1.2 noro 170: \EG For all @code{t} @code{t} > 1.
1.1 noro 171:
172: @item
1.25 noro 173: \JP @code{t}, @code{s}, @code{u} を項とする時, @code{t} > @code{s} ならば @code{tu} > @code{su}
1.2 noro 174: \EG For all @code{t}, @code{s}, @code{u} @code{t} > @code{s} implies @code{tu} > @code{su}.
1.1 noro 175: @end enumerate
176:
1.2 noro 177: \BJP
1.25 noro 178: この性質を満たす全順序を項順序と呼ぶ. この順序は変数順序 (変数のリスト)
179: と項順序型 (数, リストまたは行列) により指定される.
1.2 noro 180: \E
181: \BEG
182: Such a total order is called a term ordering. A term ordering is specified
183: by a variable ordering (a list of variables) and a type of term ordering
184: (an integer, a list or a matrix).
185: \E
1.1 noro 186:
1.2 noro 187: \BJP
1.25 noro 188: @item 単項式 (monomial)
189: 項と係数の積.
1.2 noro 190: \E
191: \BEG
192: @item monomial
193: The product of a term and a coefficient.
194: In an @b{Asir} session, it is displayed in the form like
195: \E
1.1 noro 196:
197: @example
198: 2*<<0,1,2,3,4>>
199: @end example
200:
1.25 noro 201: \JP という形で表示され, また, この形で入力可能である.
1.2 noro 202: \EG and also can be input in such a form.
1.1 noro 203:
1.2 noro 204: \BJP
1.25 noro 205: @item 頭項 (head term)
206: @itemx 頭単項式 (head monomial)
207: @itemx 頭係数 (head coefficient)
208: 分散表現多項式における各単項式は, 項順序により整列される. この時順
209: 序最大の単項式を頭単項式, それに現れる項, 係数をそれぞれ頭項, 頭係数
210: と呼ぶ.
1.2 noro 211: \E
212: \BEG
1.19 noro 213: @item head term
1.2 noro 214: @itemx head monomial
215: @itemx head coefficient
216:
217: Monomials in a distributed polynomial is sorted by a total order.
218: In such representation, we call the monomial that is maximum
219: with respect to the order the head monomial, and its term and coefficient
220: the head term and the head coefficient respectively.
221: \E
1.1 noro 222: @end table
223:
1.20 takayama 224: @noindent
225: ChangeLog
226: @itemize @bullet
227: \BJP
1.25 noro 228: @item 分散表現多項式は任意のオブジェクトを係数にもてるようになった.
229: また加群のk成分の要素を次の形式 <<d0,d1,...:k>> で表現するようになった (2017-08-31).
1.20 takayama 230: \E
231: \BEG
232: @item Distributed polynomials accept objects as coefficients.
233: The k-th element of a free module is expressed as <<d0,d1,...:k>> (2017-08-31).
234: \E
235: @item
236: 1.15 algnum.c,
237: 1.53 ctrl.c,
238: 1.66 dp-supp.c,
239: 1.105 dp.c,
240: 1.73 gr.c,
241: 1.4 reduct.c,
242: 1.16 _distm.c,
243: 1.17 dalg.c,
244: 1.52 dist.c,
245: 1.20 distm.c,
246: 1.8 gmpq.c,
247: 1.238 engine/nd.c,
248: 1.102 ca.h,
249: 1.411 version.h,
250: 1.28 cpexpr.c,
251: 1.42 pexpr.c,
252: 1.20 pexpr_body.c,
253: 1.40 spexpr.c,
254: 1.27 arith.c,
255: 1.77 eval.c,
256: 1.56 parse.h,
257: 1.37 parse.y,
258: 1.8 stdio.c,
259: 1.31 plotf.c
260: @end itemize
261:
1.2 noro 262: \BJP
1.25 noro 263: @node 基本的な函数,,, グレブナ基底の計算
264: @section 基本的な函数
1.2 noro 265: \E
266: \BEG
1.25 noro 267: @node Fundamental functions,,, Groebner basis computation
268: @section Fundamental functions
1.2 noro 269: \E
1.1 noro 270:
271: @noindent
1.2 noro 272: \BJP
1.25 noro 273: 2003 年以前の版においては, グレブナ基底を計算するための基本的な函数は @code{dp_gr_main()} および
1.5 noro 274: @code{dp_gr_mod_main()}, @code{dp_gr_f_main()}
1.25 noro 275: なる 3 つの組み込み函数であった. 通常は, パラメタ
276: 設定などを行ったのちこれらを呼び出すユーザ函数を用いるのが便利である.
277: これらのユーザ函数は, ファイル @samp{gr} を @code{load()} により読
278: み込むことにより使用可能となる. @samp{gr} は, @b{Asir} の標準
279: ライブラリディレクトリに置かれている.
280: @example
281: [0] load("gr")$
282: @end example
283:
284:
285: 現在の版においては, @code{nd_gr}, @code{nd_f4} などの新しい関数が実装されており,
286: 一般にこちらの方が効率よくグレブナー基底が計算できる
287: (@fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace}).
1.2 noro 288: \E
289: \BEG
1.25 noro 290: In the vesion before 2003,
291: facilities for computing Groebner bases are
1.5 noro 292: @code{dp_gr_main()}, @code{dp_gr_mod_main()}and @code{dp_gr_f_main()}.
293: To call these functions,
294: it is necessary to set several parameters correctly and it is convenient
295: to use a set of interface functions provided in the library file
296: @samp{gr}.
1.2 noro 297: The facilities will be ready to use after you load the package by
298: @code{load()}. The package @samp{gr} is placed in the standard library
1.5 noro 299: directory of @b{Asir}.
1.1 noro 300:
1.25 noro 301: In the current vesion, new functions such as @code{nd_gr}, @code{nd_f4} are available
302: and these function can compute Groebner bases more efficiently than old functions
303: (@fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace}).
1.2 noro 304: \E
1.1 noro 305:
306: @noindent
1.2 noro 307: \BJP
1.25 noro 308: 2003 年以前の版において
309: グレブナ基底を計算するためのトップレベルは次の 3 つである.
310: 以下で, @var{plist} は多項式のリスト, @var{vlist} は変数 (不定元) のリスト,
311: @var{order} は変数順序型, @var{p} は @code{2^27} 未満の素数である.
1.2 noro 312: \E
313: \BEG
314: There are many functions and options defined in the package @samp{gr}.
315: Usually not so many of them are used. Top level functions for Groebner
316: basis computation are the following three functions.
317:
318: In the following description, @var{plist}, @var{vlist}, @var{order}
319: and @var{p} stand for a list of polynomials, a list of variables
320: (indeterminates), a type of term ordering and a prime less than
321: @code{2^27} respectively.
322: \E
1.1 noro 323:
324: @table @code
325: @item gr(@var{plist},@var{vlist},@var{order})
326:
1.2 noro 327: \BJP
1.25 noro 328: Gebauer-Moeller による useless pair elimination criteria, sugar
329: strategy および Traverso による trace-lifting を用いた Buchberger アル
330: ゴリズムによる有理数係数グレブナ基底計算函数. 一般にはこの函数を用いる.
1.2 noro 331: \E
332: \BEG
333: Function that computes Groebner bases over the rationals. The
334: algorithm is Buchberger algorithm with useless pair elimination
335: criteria by Gebauer-Moeller, sugar strategy and trace-lifting by
336: Traverso. For ordinary computation, this function is used.
337: \E
1.1 noro 338:
339: @item hgr(@var{plist},@var{vlist},@var{order})
340:
1.2 noro 341: \BJP
1.25 noro 342: 入力多項式を斉次化した後 @code{gr()} のグレブナ基底候補生成部により候
343: 補生成し, 非斉次化, interreduce したものを @code{gr()} のグレブナ基底
344: チェック部でチェックする. 0 次元システム (解の個数が有限個の方程式系)
345: の場合, sugar strategy が係数膨張を引き起こす場合がある. このような場
346: 合, strategy を斉次化による strategy に置き換えることにより係数膨張を
347: 抑制することができる場合が多い.
1.2 noro 348: \E
349: \BEG
350: After homogenizing the input polynomials a candidate of the \gr basis
351: is computed by trace-lifting. Then the candidate is dehomogenized and
352: checked whether it is indeed a Groebner basis of the input. Sugar
353: strategy often causes intermediate coefficient swells. It is
354: empirically known that the combination of homogenization and supresses
355: the swells for such cases.
356: \E
1.1 noro 357:
358: @item gr_mod(@var{plist},@var{vlist},@var{order},@var{p})
359:
1.2 noro 360: \BJP
1.25 noro 361: Gebauer-Moeller による useless pair elimination criteria, sugar
362: strategy および Buchberger アルゴリズムによる GF(p) 係数グレブナ基底計
363: 算函数.
1.2 noro 364: \E
365: \BEG
366: Function that computes Groebner bases over GF(@var{p}). The same
367: algorithm as @code{gr()} is used.
368: \E
1.25 noro 369: @end table
1.1 noro 370:
1.25 noro 371: \BJP
372: 現在の版においては, これらに相当する機能は @code{nd_gr}, @code{nd_gr_trace} にまとめられている.
373: 詳しくは @fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace} 参照.
374: \E
375: \BEG
376: In the current version, the functions corresponding to these three interfaces are provided
377: by @code{nd_gr}, @code{nd_gr_trace}.
378: See @fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace}.
379: \E
1.1 noro 380:
1.2 noro 381: \BJP
1.25 noro 382: @node 計算および表示の制御,,, グレブナ基底の計算
383: @section 計算および表示の制御
1.2 noro 384: \E
385: \BEG
386: @node Controlling Groebner basis computations,,, Groebner basis computation
387: @section Controlling Groebner basis computations
388: \E
1.1 noro 389:
390: @noindent
1.2 noro 391: \BJP
1.25 noro 392: グレブナ基底の計算において, さまざまなパラメタ設定を行うことにより計算,
393: 表示を制御することができる. これらは, 組み込み函数 @code{dp_gr_flags()}
394: により設定参照することができる. 無引数で @code{dp_gr_flags()} を実行する
395: と, 現在設定されているパラメタが, 名前と値のリストで返される.
1.2 noro 396: \E
397: \BEG
398: One can cotrol a Groebner basis computation by setting various parameters.
399: These parameters can be set and examined by a built-in function
400: @code{dp_gr_flags()}. Without argument it returns the current settings.
401: \E
1.1 noro 402:
403: @example
404: [100] dp_gr_flags();
1.5 noro 405: [Demand,0,NoSugar,0,NoCriB,0,NoGC,0,NoMC,0,NoRA,0,NoGCD,0,Top,0,
406: ShowMag,1,Print,1,Stat,0,Reverse,0,InterReduce,0,Multiple,0]
1.1 noro 407: [101]
408: @end example
409:
1.2 noro 410: \BJP
1.25 noro 411: 以下で, 各パラメタの意味を説明する. on の場合とは, パラメタが 0 でない場合を
412: いう. これらのパラメタの初期値は全て 0 (off) である.
1.2 noro 413: \E
414: \BEG
415: The return value is a list which contains the names of parameters and their
416: values. The meaning of the parameters are as follows. `on' means that the
417: parameter is not zero.
418: \E
1.1 noro 419:
420: @table @code
421: @item NoSugar
1.2 noro 422: \BJP
1.25 noro 423: on の場合, sugar strategy の代わりに Buchbergerの normal strategy が用
424: いられる.
1.2 noro 425: \E
426: \BEG
427: If `on', Buchberger's normal strategy is used instead of sugar strategy.
428: \E
1.1 noro 429:
430: @item NoCriB
1.25 noro 431: \JP on の場合, 不必要対検出規準のうち, 規準 B を適用しない.
1.2 noro 432: \EG If `on', criterion B among the Gebauer-Moeller's criteria is not applied.
1.1 noro 433:
434: @item NoGC
1.25 noro 435: \JP on の場合, 結果がグレブナ基底になっているかどうかのチェックを行わない.
1.2 noro 436: \BEG
437: If `on', the check that a Groebner basis candidate is indeed a Groebner basis,
438: is not executed.
439: \E
1.1 noro 440:
441: @item NoMC
1.2 noro 442: \BJP
1.25 noro 443: on の場合, 結果が入力イデアルと同等のイデアルであるかどうかのチェック
444: を行わない.
1.2 noro 445: \E
446: \BEG
447: If `on', the check that the resulting polynomials generates the same ideal as
448: the ideal generated by the input, is not executed.
449: \E
1.1 noro 450:
451: @item NoRA
1.2 noro 452: \BJP
1.25 noro 453: on の場合, 結果を reduced グレブナ基底にするための
454: interreduce を行わない.
1.2 noro 455: \E
456: \BEG
457: If `on', the interreduction, which makes the Groebner basis reduced, is not
458: executed.
459: \E
1.1 noro 460:
461: @item NoGCD
1.2 noro 462: \BJP
1.25 noro 463: on の場合, 有理式係数のグレブナ基底計算において, 生成された多項式の,
464: 係数の content をとらない.
1.2 noro 465: \E
466: \BEG
467: If `on', content removals are not executed during a Groebner basis computation
468: over a rational function field.
469: \E
1.1 noro 470:
471: @item Top
1.25 noro 472: \JP on の場合, normal form 計算において頭項消去のみを行う.
1.2 noro 473: \EG If `on', Only the head term of the polynomial being reduced is reduced.
1.1 noro 474:
1.2 noro 475: @comment @item Interreduce
476: @comment \BJP
1.25 noro 477: @comment on の場合, 多項式を生成する毎に, それまで生成された基底をその多項式に
478: @comment よる normal form で置き換える.
1.2 noro 479: @comment \E
480: @comment \BEG
481: @comment If `on', intermediate basis elements are reduced by using a newly generated
482: @comment basis element.
483: @comment \E
1.1 noro 484:
485: @item Reverse
1.2 noro 486: \BJP
1.25 noro 487: on の場合, normal form 計算の際の reducer を, 新しく生成されたものを優
488: 先して選ぶ.
1.2 noro 489: \E
490: \BEG
491: If `on', the selection strategy of reducer in a normal form computation
492: is such that a newer reducer is used first.
493: \E
1.1 noro 494:
495: @item Print
1.25 noro 496: \JP on の場合, グレブナ基底計算の途中におけるさまざまな情報を表示する.
1.2 noro 497: \BEG
498: If `on', various informations during a Groebner basis computation is
499: displayed.
500: \E
1.1 noro 501:
1.7 noro 502: @item PrintShort
1.25 noro 503: \JP on で、Print が off の場合, グレブナ基底計算の途中の情報を短縮形で表示する.
1.7 noro 504: \BEG
505: If `on' and Print is `off', short information during a Groebner basis computation is
506: displayed.
507: \E
508:
1.1 noro 509: @item Stat
1.2 noro 510: \BJP
1.25 noro 511: on で @code{Print} が off ならば, @code{Print} が on のとき表示さ
512: れるデータの内, 集計データのみが表示される.
1.2 noro 513: \E
514: \BEG
515: If `on', a summary of informations is shown after a Groebner basis
516: computation. Note that the summary is always shown if @code{Print} is `on'.
517: \E
1.1 noro 518:
519: @item ShowMag
1.2 noro 520: \BJP
1.25 noro 521: on で @code{Print} が on ならば, 生成が生成される毎に, その多項式の
522: 係数のビット長の和を表示し, 最後に, それらの和の最大値を表示する.
1.2 noro 523: \E
524: \BEG
525: If `on' and @code{Print} is `on', the sum of bit length of
526: coefficients of a generated basis element, which we call @var{magnitude},
527: is shown after every normal computation. After comleting the
528: computation the maximal value among the sums is shown.
529: \E
1.1 noro 530:
1.7 noro 531: @item Content
532: @itemx Multiple
1.2 noro 533: \BJP
1.25 noro 534: 0 でない有理数の時, 有理数上の正規形計算において, 係数のビット長の和が
535: @code{Content} 倍になるごとに係数全体の GCD が計算され, その GCD で
536: 割った多項式を簡約する. @code{Content} が 1 ならば, 簡約するごとに
537: GCD 計算が行われ一般には効率が悪くなるが, @code{Content} を 2 程度
538: とすると, 巨大な整数が係数に現れる場合, 効率が良くなる場合がある.
539: backward compatibility のため、@code{Multiple} で整数値を指定できる.
1.2 noro 540: \E
541: \BEG
1.7 noro 542: If a non-zero rational number, in a normal form computation
1.2 noro 543: over the rationals, the integer content of the polynomial being
1.7 noro 544: reduced is removed when its magnitude becomes @code{Content} times
1.2 noro 545: larger than a registered value, which is set to the magnitude of the
546: input polynomial. After each content removal the registered value is
1.7 noro 547: set to the magnitude of the resulting polynomial. @code{Content} is
1.2 noro 548: equal to 1, the simiplification is done after every normal form computation.
1.7 noro 549: It is empirically known that it is often efficient to set @code{Content} to 2
1.2 noro 550: for the case where large integers appear during the computation.
1.7 noro 551: An integer value can be set by the keyword @code{Multiple} for
552: backward compatibility.
1.2 noro 553: \E
1.1 noro 554:
555: @item Demand
1.2 noro 556:
557: \BJP
1.25 noro 558: 正当なディレクトリ名 (文字列) を値に持つとき, 生成された多項式はメモリ
559: 中におかれず, そのディレクトリ中にバイナリデータとして置かれ, その多項
560: 式を用いる normal form 計算の際, 自動的にメモリ中にロードされる. 各多
561: 項式は, 内部でのインデックスをファイル名に持つファイルに格納される.
562: ここで指定されたディレクトリに書かれたファイルは自動的には消去されない
563: ため, ユーザが責任を持って消去する必要がある.
1.2 noro 564: \E
565: \BEG
566: If the value (a character string) is a valid directory name, then
567: generated basis elements are put in the directory and are loaded on
568: demand during normal form computations. Each elements is saved in the
569: binary form and its name coincides with the index internally used in
570: the computation. These binary files are not removed automatically
571: and one should remove them by hand.
572: \E
1.1 noro 573: @end table
574:
575: @noindent
1.25 noro 576: \JP @code{Print} が 0 でない場合次のようなデータが表示される.
1.2 noro 577: \EG If @code{Print} is `on', the following informations are shown.
1.1 noro 578:
579: @example
580: [93] gr(cyclic(4),[c0,c1,c2,c3],0)$
581: mod= 99999989, eval = []
582: (0)(0)<<0,2,0,0>>(2,3),nb=2,nab=5,rp=2,sugar=2,mag=4
583: (0)(0)<<0,1,2,0>>(1,2),nb=3,nab=6,rp=2,sugar=3,mag=4
584: (0)(0)<<0,1,1,2>>(0,1),nb=4,nab=7,rp=3,sugar=4,mag=6
585: .
586: (0)(0)<<0,0,3,2>>(5,6),nb=5,nab=8,rp=2,sugar=5,mag=4
587: (0)(0)<<0,1,0,4>>(4,6),nb=6,nab=9,rp=3,sugar=5,mag=4
588: (0)(0)<<0,0,2,4>>(6,8),nb=7,nab=10,rp=4,sugar=6,mag=6
589: ....gb done
590: reduceall
591: .......
592: membercheck
593: (0,0)(0,0)(0,0)(0,0)
594: gbcheck total 8 pairs
595: ........
1.5 noro 596: UP=(0,0)SP=(0,0)SPM=(0,0)NF=(0,0)NFM=(0.010002,0)ZNFM=(0.010002,0)
597: PZ=(0,0)NP=(0,0)MP=(0,0)RA=(0,0)MC=(0,0)GC=(0,0)T=40,B=0 M=8 F=6
598: D=12 ZR=5 NZR=6 Max_mag=6
1.1 noro 599: [94]
600: @end example
601:
602: @noindent
1.2 noro 603: \BJP
1.25 noro 604: 最初に表示される @code{mod}, @code{eval} は, trace-lifting で用いられる法
605: である. @code{mod} は素数, @code{eval} は有理式係数の場合に用いられる
606: 数のリストである.
1.2 noro 607: \E
608: \BEG
609: In this example @code{mod} and @code{eval} indicate moduli used in
610: trace-lifting. @code{mod} is a prime and @code{eval} is a list of integers
611: used for evaluation when the ground field is a field of rational functions.
612: \E
1.1 noro 613:
614: @noindent
1.25 noro 615: \JP 計算途中で多項式が生成される毎に次の形のデータが表示される.
1.2 noro 616: \EG The following information is shown after every normal form computation.
1.1 noro 617:
618: @example
619: (TNF)(TCONT)HT(INDEX),nb=NB,nab=NAB,rp=RP,sugar=S,mag=M
620: @end example
621:
622: @noindent
1.25 noro 623: \JP それらの意味は次の通り.
1.2 noro 624: \EG Meaning of each component is as follows.
1.1 noro 625:
626: @table @code
1.2 noro 627: \BJP
1.1 noro 628: @item TNF
1.2 noro 629:
1.25 noro 630: normal form 計算時間 (秒)
1.1 noro 631:
632: @item TCONT
1.2 noro 633:
1.25 noro 634: content 計算時間 (秒)
1.1 noro 635:
636: @item HT
1.2 noro 637:
1.25 noro 638: 生成された多項式の頭項
1.1 noro 639:
640: @item INDEX
1.2 noro 641:
1.25 noro 642: S-多項式を構成する多項式のインデックスのペア
1.1 noro 643:
644: @item NB
1.2 noro 645:
1.25 noro 646: 現在の, 冗長性を除いた基底の数
1.1 noro 647:
648: @item NAB
1.2 noro 649:
1.25 noro 650: 現在までに生成された基底の数
1.1 noro 651:
652: @item RP
1.2 noro 653:
1.25 noro 654: 残りのペアの数
1.1 noro 655:
656: @item S
1.2 noro 657:
1.25 noro 658: 生成された多項式の sugar の値
1.1 noro 659:
660: @item M
1.2 noro 661:
1.25 noro 662: 生成された多項式の係数のビット長の和 (@code{ShowMag} が on の時に表示される. )
1.2 noro 663: \E
664: \BEG
665: @item TNF
666:
667: CPU time for normal form computation (second)
668:
669: @item TCONT
670:
671: CPU time for content removal(second)
672:
673: @item HT
674:
675: Head term of the generated basis element
676:
677: @item INDEX
678:
679: Pair of indices which corresponds to the reduced S-polynomial
680:
681: @item NB
682:
683: Number of basis elements after removing redundancy
684:
685: @item NAB
686:
687: Number of all the basis elements
688:
689: @item RP
690:
691: Number of remaining pairs
692:
693: @item S
694:
695: Sugar of the generated basis element
696:
697: @item M
698:
699: Magnitude of the genrated basis element (shown if @code{ShowMag} is `on'.)
700: \E
1.1 noro 701: @end table
702:
703: @noindent
1.2 noro 704: \BJP
1.25 noro 705: 最後に, 集計データが表示される. 意味は次の通り.
706: (時間の表示において, 数字が 2 つあるものは, 計算時間と GC 時間のペアである.)
1.2 noro 707: \E
708: \BEG
709: The summary of the informations shown after a Groebner basis
710: computation is as follows. If a component shows timings and it
711: contains two numbers, they are a pair of time for computation and time
712: for garbage colection.
713: \E
1.1 noro 714:
715: @table @code
1.2 noro 716: \BJP
1.1 noro 717: @item UP
1.2 noro 718:
1.25 noro 719: ペアのリストの操作にかかった時間
1.1 noro 720:
721: @item SP
1.2 noro 722:
1.25 noro 723: 有理数上の S-多項式計算時間
1.1 noro 724:
725: @item SPM
1.2 noro 726:
1.25 noro 727: 有限体上の S-多項式計算時間
1.1 noro 728:
729: @item NF
1.2 noro 730:
1.25 noro 731: 有理数上の normal form 計算時間
1.1 noro 732:
733: @item NFM
1.2 noro 734:
1.25 noro 735: 有限体上の normal form 計算時間
1.1 noro 736:
737: @item ZNFM
1.2 noro 738:
1.25 noro 739: @code{NFM} の内, 0 への reduction にかかった時間
1.1 noro 740:
741: @item PZ
1.2 noro 742:
1.25 noro 743: content 計算時間
1.1 noro 744:
745: @item NP
1.2 noro 746:
1.25 noro 747: 有理数係数多項式の係数に対する剰余演算の計算時間
1.1 noro 748:
749: @item MP
1.2 noro 750:
1.25 noro 751: S-多項式を生成するペアの選択にかかった時間
1.1 noro 752:
753: @item RA
1.2 noro 754:
1.25 noro 755: interreduce 計算時間
1.1 noro 756:
757: @item MC
1.2 noro 758:
1.25 noro 759: trace-lifting における, 入力多項式のメンバシップ計算時間
1.1 noro 760:
761: @item GC
1.2 noro 762:
1.25 noro 763: 結果のグレブナ基底候補のグレブナ基底チェック時間
1.1 noro 764:
765: @item T
1.2 noro 766:
1.25 noro 767: 生成されたペアの数
1.1 noro 768:
769: @item B, M, F, D
1.2 noro 770:
1.25 noro 771: 各 criterion により除かれたペアの数
1.1 noro 772:
773: @item ZR
1.2 noro 774:
1.25 noro 775: 0 に reduce されたペアの数
1.1 noro 776:
777: @item NZR
1.2 noro 778:
1.25 noro 779: 0 でない多項式に reduce されたペアの数
1.1 noro 780:
781: @item Max_mag
1.2 noro 782:
1.25 noro 783: 生成された多項式の, 係数のビット長の和の最大値
1.2 noro 784: \E
785: \BEG
786: @item UP
787:
788: Time to manipulate the list of critical pairs
789:
790: @item SP
791:
792: Time to compute S-polynomials over the rationals
793:
794: @item SPM
795:
796: Time to compute S-polynomials over a finite field
797:
798: @item NF
799:
800: Time to compute normal forms over the rationals
801:
802: @item NFM
803:
804: Time to compute normal forms over a finite field
805:
806: @item ZNFM
807:
808: Time for zero reductions in @code{NFM}
809:
810: @item PZ
811:
812: Time to remove integer contets
813:
814: @item NP
815:
816: Time to compute remainders for coefficients of polynomials with coeffieints
817: in the rationals
818:
819: @item MP
820:
821: Time to select pairs from which S-polynomials are computed
822:
823: @item RA
824:
825: Time to interreduce the Groebner basis candidate
826:
827: @item MC
1.1 noro 828:
1.2 noro 829: Time to check that each input polynomial is a member of the ideal
830: generated by the Groebner basis candidate.
831:
832: @item GC
833:
834: Time to check that the Groebner basis candidate is a Groebner basis
835:
836: @item T
837:
838: Number of critical pairs generated
839:
840: @item B, M, F, D
841:
842: Number of critical pairs removed by using each criterion
843:
844: @item ZR
845:
846: Number of S-polynomials reduced to 0
847:
848: @item NZR
849:
850: Number of S-polynomials reduced to non-zero results
851:
852: @item Max_mag
853:
854: Maximal magnitude among all the generated polynomials
855: \E
1.1 noro 856: @end table
857:
1.2 noro 858: \BJP
1.25 noro 859: @node 項順序の設定,,, グレブナ基底の計算
860: @section 項順序の設定
1.2 noro 861: \E
862: \BEG
863: @node Setting term orderings,,, Groebner basis computation
864: @section Setting term orderings
865: \E
1.1 noro 866:
867: @noindent
1.2 noro 868: \BJP
1.25 noro 869: 項は内部では, 各変数に関する指数を成分とする整数ベクトルとして表現され
870: る. 多項式を分散表現多項式に変換する際, 各変数がどの成分に対応するかを
871: 指定するのが, 変数リストである. さらに, それら整数ベクトルの全順序を
872: 指定するのが項順序の型である. 項順序型は, 数, 数のリストあるいは
873: 行列で表現される.
1.2 noro 874: \E
875: \BEG
876: A term is internally represented as an integer vector whose components
877: are exponents with respect to variables. A variable list specifies the
878: correspondences between variables and components. A type of term ordering
879: specifies a total order for integer vectors. A type of term ordering is
880: represented by an integer, a list of integer or matrices.
881: \E
1.1 noro 882:
883: @noindent
1.25 noro 884: \JP 基本的な項順序型として次の 3 つがある.
1.2 noro 885: \EG There are following three fundamental types.
1.1 noro 886:
887: @table @code
1.25 noro 888: \JP @item 0 (DegRevLex; @b{全次数逆辞書式順序})
1.2 noro 889: \EG @item 0 (DegRevLex; @b{total degree reverse lexicographic ordering})
1.1 noro 890:
1.2 noro 891: \BJP
1.25 noro 892: 一般に, この順序によるグレブナ基底計算が最も高速である. ただし,
893: 方程式を解くという目的に用いることは, 一般にはできない. この
894: 順序によるグレブナ基底は, 解の個数の計算, イデアルのメンバシップや,
895: 他の変数順序への基底変換のためのソースとして用いられる.
1.2 noro 896: \E
897: \BEG
898: In general, computation by this ordering shows the fastest speed
899: in most Groebner basis computations.
900: However, for the purpose to solve polynomial equations, this type
901: of ordering is, in general, not so suitable.
902: The Groebner bases obtained by this ordering is used for computing
903: the number of solutions, solving ideal membership problem and seeds
904: for conversion to other Groebner bases under different ordering.
905: \E
1.1 noro 906:
1.25 noro 907: \JP @item 1 (DegLex; @b{全次数辞書式順序})
1.2 noro 908: \EG @item 1 (DegLex; @b{total degree lexicographic ordering})
1.1 noro 909:
1.2 noro 910: \BJP
1.25 noro 911: この順序も, 辞書式順序に比べて高速にグレブナ基底を求めることができるが,
912: @code{DegRevLex} と同様直接その結果を用いることは困難である. しかし,
913: 辞書式順序のグレブナ基底を求める際に, 斉次化後にこの順序でグレブナ基底
914: を求めている.
1.2 noro 915: \E
916: \BEG
917: By this type term ordering, Groebner bases are obtained fairly faster
918: than Lex (lexicographic) ordering, too.
919: Alike the @code{DegRevLex} ordering, the result, in general, cannot directly
920: be used for solving polynomial equations.
921: It is used, however, in such a way
922: that a Groebner basis is computed in this ordering after homogenization
923: to obtain the final lexicographic Groebner basis.
924: \E
1.1 noro 925:
1.25 noro 926: \JP @item 2 (Lex; @b{辞書式順序})
1.2 noro 927: \EG @item 2 (Lex; @b{lexicographic ordering})
1.1 noro 928:
1.2 noro 929: \BJP
1.25 noro 930: この順序によるグレブナ基底は, 方程式を解く場合に最適の形の基底を与えるが
931: 計算時間がかかり過ぎるのが難点である. 特に, 解が有限個の場合, 結果の
932: 係数が極めて長大な多倍長数になる場合が多い. この場合, @code{gr()},
933: @code{hgr()} による計算が極めて有効になる場合が多い.
1.2 noro 934: \E
935: \BEG
936: Groebner bases computed by this ordering give the most convenient
937: Groebner bases for solving the polynomial equations.
938: The only and serious shortcoming is the enormously long computation
939: time.
940: It is often observed that the number coefficients of the result becomes
941: very very long integers, especially if the ideal is 0-dimensional.
942: For such a case, it is empirically true for many cases
943: that i.e., computation by
944: @code{gr()} and/or @code{hgr()} may be quite effective.
945: \E
1.1 noro 946: @end table
947:
948: @noindent
1.2 noro 949: \BJP
1.25 noro 950: これらを組み合わせてリストで指定することにより, 様々な消去順序が指定できる.
951: これは,
1.2 noro 952: \E
953: \BEG
954: By combining these fundamental orderingl into a list, one can make
955: various term ordering called elimination orderings.
956: \E
1.1 noro 957:
958: @code{[[O1,L1],[O2,L2],...]}
959:
960: @noindent
1.2 noro 961: \BJP
1.25 noro 962: で指定される. @code{Oi} は 0, 1, 2 のいずれかで, @code{Li} は変数の個
963: 数を表す. この指定は, 変数を先頭から @code{L1}, @code{L2} , ...個
964: ずつの組に分け, それぞれの変数に関し, 順に @code{O1}, @code{O2},
965: ...の項順序型で大小が決定するまで比較することを意味する. この型の
966: 順序は一般に消去順序と呼ばれる.
1.2 noro 967: \E
968: \BEG
969: In this example @code{Oi} indicates 0, 1 or 2 and @code{Li} indicates
970: the number of variables subject to the correspoinding orderings.
971: This specification means the following.
972:
973: The variable list is separated into sub lists from left to right where
974: the @code{i}-th list contains @code{Li} members and it corresponds to
975: the ordering of type @code{Oi}. The result of a comparison is equal
976: to that for the leftmost different sub components. This type of ordering
977: is called an elimination ordering.
978: \E
1.1 noro 979:
980: @noindent
1.2 noro 981: \BJP
1.25 noro 982: さらに, 行列により項順序を指定することができる. 一般に, @code{n} 行
983: @code{m} 列の実数行列 @code{M} が次の性質を持つとする.
1.2 noro 984: \E
985: \BEG
986: Furthermore one can specify a term ordering by a matix.
987: Suppose that a real @code{n}, @code{m} matrix @code{M} has the
988: following properties.
989: \E
1.1 noro 990:
991: @enumerate
992: @item
1.25 noro 993: \JP 長さ @code{m} の整数ベクトル @code{v} に対し @code{Mv=0} と @code{v=0} は同値.
1.2 noro 994: \BEG
995: For all integer verctors @code{v} of length @code{m} @code{Mv=0} is equivalent
996: to @code{v=0}.
997: \E
1.1 noro 998:
999: @item
1.2 noro 1000: \BJP
1.25 noro 1001: 非負成分を持つ長さ @code{m} の 0 でない整数ベクトル @code{v} に対し,
1002: @code{Mv} の 0 でない最初の成分は非負.
1.2 noro 1003: \E
1004: \BEG
1005: For all non-negative integer vectors @code{v} the first non-zero component
1006: of @code{Mv} is non-negative.
1007: \E
1.1 noro 1008: @end enumerate
1009:
1010: @noindent
1.2 noro 1011: \BJP
1.25 noro 1012: この時, 2 つのベクトル @code{t}, @code{s} に対し,
1013: @code{t>s} を, @code{M(t-s)} の 0 でない最初の成分が非負,
1014: で定義することにより項順序が定義できる.
1.2 noro 1015: \E
1016: \BEG
1017: Then we can define a term ordering such that, for two vectors
1018: @code{t}, @code{s}, @code{t>s} means that the first non-zero component
1019: of @code{M(t-s)} is non-negative.
1020: \E
1.1 noro 1021:
1022: @noindent
1.2 noro 1023: \BJP
1.25 noro 1024: 項順序型は, @code{gr()} などの引数として指定される他, 組み込み函数
1025: @code{dp_ord()} で指定され, さまざまな函数の実行の際に参照される.
1.2 noro 1026: \E
1027: \BEG
1028: Types of term orderings are used as arguments of functions such as
1029: @code{gr()}. It is also set internally by @code{dp_ord()} and is used
1030: during executions of various functions.
1031: \E
1.1 noro 1032:
1033: @noindent
1.2 noro 1034: \BJP
1.25 noro 1035: これらの順序の具体的な定義およびグレブナ基底に関する更に詳しい解説は
1036: @code{[Becker,Weispfenning]} などを参照のこと.
1.2 noro 1037: \E
1038: \BEG
1039: For concrete definitions of term ordering and more information
1040: about Groebner basis, refer to, for example, the book
1041: @code{[Becker,Weispfenning]}.
1042: \E
1.1 noro 1043:
1044: @noindent
1.25 noro 1045: \JP 項順序型の設定の他に, 変数の順序自体も計算時間に大きな影響を与える.
1.2 noro 1046: \BEG
1047: Note that the variable ordering have strong effects on the computation
1048: time as well as the choice of types of term orderings.
1049: \E
1.1 noro 1050:
1051: @example
1052: [90] B=[x^10-t,x^8-z,x^31-x^6-x-y]$
1053: [91] gr(B,[x,y,z,t],2);
1054: [x^2-2*y^7+(-41*t^2-13*t-1)*y^2+(2*t^17-12*t^14+42*t^12+30*t^11-168*t^9
1055: -40*t^8+70*t^7+252*t^6+30*t^5-140*t^4-168*t^3+2*t^2-12*t+16)*z^2*y
1056: +(-12*t^16+72*t^13-28*t^11-180*t^10+112*t^8+240*t^7+28*t^6-127*t^5
1057: -167*t^4-55*t^3+30*t^2+58*t-15)*z^4,
1.5 noro 1058: (y+t^2*z^2)*x+y^7+(20*t^2+6*t+1)*y^2+(-t^17+6*t^14-21*t^12-15*t^11
1059: +84*t^9+20*t^8-35*t^7-126*t^6-15*t^5+70*t^4+84*t^3-t^2+5*t-9)*z^2*y
1060: +(6*t^16-36*t^13+14*t^11+90*t^10-56*t^8-120*t^7-14*t^6+64*t^5+84*t^4
1061: +27*t^3-16*t^2-30*t+7)*z^4,
1062: (t^3-1)*x-y^6+(-6*t^13+24*t^10-20*t^8-36*t^7+40*t^5+24*t^4-6*t^3-20*t^2
1063: -6*t-1)*y+(t^17-6*t^14+9*t^12+15*t^11-36*t^9-20*t^8-5*t^7+54*t^6+15*t^5
1064: +10*t^4-36*t^3-11*t^2-5*t+9)*z^2,
1.1 noro 1065: -y^8-8*t*y^3+16*z^2*y^2+(-8*t^16+48*t^13-56*t^11-120*t^10+224*t^8+160*t^7
1.5 noro 1066: -56*t^6-336*t^5-112*t^4+112*t^3+224*t^2+24*t-56)*z^4*y+(t^24-8*t^21
1067: +20*t^19+28*t^18-120*t^16-56*t^15+14*t^14+300*t^13+70*t^12-56*t^11
1068: -400*t^10-84*t^9+84*t^8+268*t^7+84*t^6-56*t^5-63*t^4-36*t^3+46*t^2
1069: -12*t+1)*z,2*t*y^5+z*y^2+(-2*t^11+8*t^8-20*t^6-12*t^5+40*t^3+8*t^2
1070: -10*t-20)*z^3*y+8*t^14-32*t^11+48*t^8-t^7-32*t^5-6*t^4+9*t^2-t,
1.1 noro 1071: -z*y^3+(t^7-2*t^4+3*t^2+t)*y+(-2*t^6+4*t^3+2*t-2)*z^2,
1.5 noro 1072: 2*t^2*y^3+z^2*y^2+(-2*t^5+4*t^2-6)*z^4*y
1073: +(4*t^8-t^7-8*t^5+2*t^4-4*t^3+5*t^2-t)*z,
1.1 noro 1074: z^3*y^2+2*t^3*y+(-t^7+2*t^4+t^2-t)*z^2,
1075: -t*z*y^2-2*z^3*y+t^8-2*t^5-t^3+t^2,
1.5 noro 1076: -t^3*y^2-2*t^2*z^2*y+(t^6-2*t^3-t+1)*z^4,z^5-t^4]
1.1 noro 1077: [93] gr(B,[t,z,y,x],2);
1078: [x^10-t,x^8-z,x^31-x^6-x-y]
1079: @end example
1080:
1081: @noindent
1.2 noro 1082: \BJP
1.25 noro 1083: 変数順序 @code{[x,y,z,t]} におけるグレブナ基底は, 基底の数も多く, それぞれの
1084: 式も大きい. しかし, 順序 @code{[t,z,y,x]} にもとでは, @code{B} がすでに
1085: グレブナ基底となっている. 大雑把にいえば, 辞書式順序でグレブナ基底を求める
1086: ことは, 左側の (順序の高い) 変数を, 右側の (順序の低い) 変数で書き表す
1087: ことであり, この例の場合は, @code{t}, @code{z}, @code{y} が既に
1088: @code{x} で表されていることからこのような極端な結果となったわけである.
1089: 実際に現れる計算においては, このように選ぶべき変数順序が明らかである
1090: ことは少なく, 試行錯誤が必要な場合もある.
1.2 noro 1091: \E
1092: \BEG
1093: As you see in the above example, the Groebner base under variable
1094: ordering @code{[x,y,z,t]} has a lot of bases and each base itself is
1095: large. Under variable ordering @code{[t,z,y,x]}, however, @code{B} itself
1096: is already the Groebner basis.
1097: Roughly speaking, to obtain a Groebner base under the lexicographic
1098: ordering is to express the variables on the left (having higher order)
1099: in terms of variables on the right (having lower order).
1100: In the example, variables @code{t}, @code{z}, and @code{y} are already
1101: expressed by variable @code{x}, and the above explanation justifies
1102: such a drastic experimental results.
1103: In practice, however, optimum ordering for variables may not known
1104: beforehand, and some heuristic trial may be inevitable.
1.13 noro 1105: \E
1106:
1107: \BJP
1.25 noro 1108: @node Weight ,,, グレブナ基底の計算
1.13 noro 1109: @section Weight
1110: \E
1111: \BEG
1112: @node Weight,,, Groebner basis computation
1113: @section Weight
1114: \E
1115: \BJP
1.25 noro 1116: 前節で紹介した項順序は, 各変数に weight (重み) を設定することで
1117: より一般的なものとなる.
1.13 noro 1118: \E
1119: \BEG
1.14 noro 1120: Term orderings introduced in the previous section can be generalized
1.13 noro 1121: by setting a weight for each variable.
1122: \E
1123: @example
1124: [0] dp_td(<<1,1,1>>);
1125: 3
1126: [1] dp_set_weight([1,2,3])$
1127: [2] dp_td(<<1,1,1>>);
1128: 6
1129: @end example
1130: \BJP
1.25 noro 1131: 単項式の全次数を計算する際, デフォルトでは
1132: 各変数の指数の和を全次数とする. これは各変数の weight を 1 と
1133: 考えていることに相当する. この例では, 第一, 第二, 第三変数の
1134: weight をそれぞれ 1,2,3 と指定している. このため, @code{<<1,1,1>>}
1135: の全次数 (以下ではこれを単項式の weight と呼ぶ) が @code{1*1+1*2+1*3=6} となる.
1136: weight を設定することで, 同じ項順序型のもとで異なる項順序が定義できる.
1137: 例えば, weight をうまく設定することで, 多項式を weighted homogeneous
1138: にすることができる場合がある.
1.13 noro 1139: \E
1140: \BEG
1141: By default, the total degree of a monomial is equal to
1142: the sum of all exponents. This means that the weight for each variable
1143: is set to 1.
1144: In this example, the weights for the first, the second and the third
1145: variable are set to 1, 2 and 3 respectively.
1146: Therefore the total degree of @code{<<1,1,1>>} under this weight,
1147: which is called the weight of the monomial, is @code{1*1+1*2+1*3=6}.
1.14 noro 1148: By setting weights, different term orderings can be set under a type of
1149: term ordeing. In some case a polynomial can
1150: be made weighted homogeneous by setting an appropriate weight.
1.13 noro 1151: \E
1152:
1153: \BJP
1.25 noro 1154: 各変数に対する weight をまとめたものを weight vector と呼ぶ.
1155: すべての成分が正であり, グレブナ基底計算において, 全次数の
1156: 代わりに用いられるものを特に sugar weight と呼ぶことにする.
1157: sugar strategy において, 全次数の代わりに使われるからである.
1158: 一方で, 各成分が必ずしも正とは限らない weight vector は,
1159: sugar weight として設定することはできないが, 項順序の一般化には
1160: 有用である. これらは, 行列による項順序の設定にすでに現れて
1161: いる. すなわち, 項順序を定義する行列の各行が, 一つの weight vector
1162: と見なされる. また, ブロック順序は, 各ブロックの
1163: 変数に対応する成分のみ 1 で他は 0 の weight vector による比較を
1164: 最初に行ってから, 各ブロック毎の tie breaking を行うことに相当する.
1.13 noro 1165: \E
1166:
1167: \BEG
1168: A list of weights for all variables is called a weight vector.
1169: A weight vector is called a sugar weight vector if
1170: its elements are all positive and it is used for computing
1171: a weighted total degree of a monomial, because such a weight
1172: is used instead of total degree in sugar strategy.
1173: On the other hand, a weight vector whose elements are not necessarily
1174: positive cannot be set as a sugar weight, but it is useful for
1175: generalizing term order. In fact, such a weight vector already
1176: appeared in a matrix order. That is, each row of a matrix defining
1177: a term order is regarded as a weight vector. A block order
1178: is also considered as a refinement of comparison by weight vectors.
1179: It compares two terms by using a weight vector whose elements
1180: corresponding to variables in a block is 1 and 0 otherwise,
1181: then it applies a tie breaker.
1.14 noro 1182: \E
1183:
1184: \BJP
1.25 noro 1185: weight vector の設定は @code{dp_set_weight()} で行うことができる
1186: が, 項順序を指定する際の他のパラメタ (項順序型, 変数順序) と
1187: まとめて設定できることが望ましい. このため, 次のような形でも
1188: 項順序が指定できる.
1.14 noro 1189: \E
1190: \BEG
1191: A weight vector can be set by using @code{dp_set_weight()}.
1192: However it is more preferable if a weight vector can be set
1193: together with other parapmeters such as a type of term ordering
1194: and a variable order. This is realized as follows.
1195: \E
1.13 noro 1196:
1.14 noro 1197: @example
1198: [64] B=[x+y+z-6,x*y+y*z+z*x-11,x*y*z-6]$
1199: [65] dp_gr_main(B|v=[x,y,z],sugarweight=[3,2,1],order=0);
1200: [z^3-6*z^2+11*z-6,x+y+z-6,-y^2+(-z+6)*y-z^2+6*z-11]
1201: [66] dp_gr_main(B|v=[y,z,x],order=[[1,1,0],[0,1,0],[0,0,1]]);
1202: [x^3-6*x^2+11*x-6,x+y+z-6,-x^2+(-y+6)*x-y^2+6*y-11]
1203: [67] dp_gr_main(B|v=[y,z,x],order=[[x,1,y,2,z,3]]);
1204: [x+y+z-6,x^3-6*x^2+11*x-6,-x^2+(-y+6)*x-y^2+6*y-11]
1205: @end example
1206:
1207: \BJP
1.25 noro 1208: いずれの例においても, 項順序は option として指定されている.
1209: 最初の例では @code{v} により変数順序を, @code{sugarweight} により
1210: sugar weight vector を, @code{order}により項順序型を指定している.
1211: 二つ目の例における @code{order} の指定は matrix order と同様である.
1212: すなわち, 指定された weight vector を左から順に使って weight の比較
1213: を行う. 三つ目の例も同様であるが, ここでは weight vector の要素を
1214: 変数毎に指定している. 指定がないものは 0 となる. 三つ目の例では,
1215: @code{order} による指定では項順序が決定しない. この場合には,
1216: tie breaker として全次数逆辞書式順序が自動的に設定される.
1217: この指定方法は, @code{dp_gr_main}, @code{dp_gr_mod_main} など
1218: の組み込み関数でのみ可能であり, @code{gr} などのユーザ定義関数
1219: では未対応である.
1.14 noro 1220: \E
1221: \BEG
1222: In each example, a term ordering is specified as options.
1223: In the first example, a variable order, a sugar weight vector
1224: and a type of term ordering are specified by options @code{v},
1225: @code{sugarweight} and @code{order} respectively.
1226: In the second example, an option @code{order} is used
1227: to set a matrix ordering. That is, the specified weight vectors
1228: are used from left to right for comparing terms.
1229: The third example shows a variant of specifying a weight vector,
1230: where each component of a weight vector is specified variable by variable,
1231: and unspecified components are set to zero. In this example,
1232: a term order is not determined only by the specified weight vector.
1233: In such a case a tie breaker by the graded reverse lexicographic ordering
1234: is set automatically.
1235: This type of a term ordering specification can be applied only to builtin
1236: functions such as @code{dp_gr_main()}, @code{dp_gr_mod_main()}, not to
1237: user defined functions such as @code{gr()}.
1.2 noro 1238: \E
1.1 noro 1239:
1.2 noro 1240: \BJP
1.25 noro 1241: @node 有理式を係数とするグレブナ基底計算,,, グレブナ基底の計算
1242: @section 有理式を係数とするグレブナ基底計算
1.2 noro 1243: \E
1244: \BEG
1245: @node Groebner basis computation with rational function coefficients,,, Groebner basis computation
1246: @section Groebner basis computation with rational function coefficients
1247: \E
1.1 noro 1248:
1249: @noindent
1.2 noro 1250: \BJP
1.25 noro 1251: @code{gr()} などのトップレベル函数は, いずれも, 入力多項式リストに
1252: 現れる変数 (不定元) と, 変数リストに現れる変数を比較して, 変数リストに
1253: ない変数が入力多項式に現れている場合には, 自動的に, その変数を, 係数
1254: 体の元として扱う.
1.2 noro 1255: \E
1256: \BEG
1257: Such variables that appear within the input polynomials but
1258: not appearing in the input variable list are automatically treated
1259: as elements in the coefficient field
1260: by top level functions, such as @code{gr()}.
1261: \E
1.1 noro 1262:
1263: @example
1264: [64] gr([a*x+b*y-c,d*x+e*y-f],[x,y],2);
1265: [(-e*a+d*b)*x-f*b+e*c,(-e*a+d*b)*y+f*a-d*c]
1266: @end example
1267:
1268: @noindent
1.2 noro 1269: \BJP
1.25 noro 1270: この例では, @code{a}, @code{b}, @code{c}, @code{d} が係数体の元として
1271: 扱われる. すなわち, 有理函数体
1272: @b{F} = @b{Q}(@code{a},@code{b},@code{c},@code{d}) 上の 2 変数多項式環
1273: @b{F}[@code{x},@code{y}] におけるグレブナ基底を求めることになる.
1274: 注意すべきことは,
1275: 係数が体として扱われていることである. すなわち, 係数の間に多項式
1276: としての共通因子があった場合には, 結果からその因子は除かれている
1277: ため, 有理数体上の多項式環上の問題として考えた場合の結果とは一般
1278: には異なる. また, 主として計算効率上の問題のため, 分散表現多項式
1279: の係数として実際に許されるのは多項式までである. すなわち, 分母を
1280: 持つ有理式は分散表現多項式の係数としては許されない.
1.2 noro 1281: \E
1282: \BEG
1283: In this example, variables @code{a}, @code{b}, @code{c}, and @code{d}
1284: are treated as elements in the coefficient field.
1285: In this case, a Groebner basis is computed
1286: on a bi-variate polynomial ring
1287: @b{F}[@code{x},@code{y}]
1288: over rational function field
1289: @b{F} = @b{Q}(@code{a},@code{b},@code{c},@code{d}).
1290: Notice that coefficients are considered as a member in a field.
1291: As a consequence, polynomial factors common to the coefficients
1292: are removed so that the result, in general, is different from
1293: the result that would be obtained when the problem is considered
1294: as a computation of Groebner basis over a polynomial ring
1295: with rational function coefficients.
1296: And note that coefficients of a distributed polynomial are limited
1297: to numbers and polynomials because of efficiency.
1298: \E
1.1 noro 1299:
1.2 noro 1300: \BJP
1.25 noro 1301: @node 基底変換,,, グレブナ基底の計算
1302: @section 基底変換
1.2 noro 1303: \E
1304: \BEG
1305: @node Change of ordering,,, Groebner basis computation
1306: @section Change of orderng
1307: \E
1.1 noro 1308:
1309: @noindent
1.2 noro 1310: \BJP
1.25 noro 1311: 辞書式順序のグレブナ基底を求める場合, 直接 @code{gr()} などを起動する
1312: より, 一旦他の順序 (例えば全次数逆辞書式順序) のグレブナ基底を計算して,
1313: それを入力として辞書式順序のグレブナ基底を計算する方が効率がよい場合
1314: がある. また, 入力が何らかの順序でのグレブナ基底になっている場合, 基底
1315: 変換と呼ばれる方法により, Buchberger アルゴリズムによらずに効率良く
1316: 辞書式順序のグレブナ基底が計算できる場合がある. このような目的のための
1317: 函数が, ユーザ定義函数として @samp{gr} にいくつか定義されている.
1318: 以下の 2 つの函数は, 変数順序 @var{vlist1}, 項順序型 @var{order} で
1319: 既にグレブナ基底となっている多項式リスト @var{gbase} を, 変数順序
1320: @var{vlist2} における辞書式順序のグレブナ基底に変換する函数である.
1.2 noro 1321: \E
1322: \BEG
1323: When we compute a lex order Groebner basis, it is often efficient to
1324: compute it via Groebner basis with respect to another order such as
1325: degree reverse lex order, rather than to compute it directory by
1326: @code{gr()} etc. If we know that an input is a Groebner basis with
1327: respect to an order, we can apply special methods called change of
1328: ordering for a Groebner basis computation with respect to another
1329: order, without using Buchberger algorithm. The following two functions
1330: are ones for change of ordering such that they convert a Groebner
1331: basis @var{gbase} with respect to the variable order @var{vlist1} and
1332: the order type @var{order} into a lex Groebner basis with respect
1333: to the variable order @var{vlist2}.
1334: \E
1.1 noro 1335:
1336: @table @code
1337: @item tolex(@var{gbase},@var{vlist1},@var{order},@var{vlist2})
1338:
1.2 noro 1339: \BJP
1.25 noro 1340: この函数は, @var{gbase} が有理数体上のシステムの場合にのみ使用可能である.
1341: この函数は, 辞書式順序のグレブナ基底を, 有限体上で計算されたグレブナ基底
1342: を雛型として, 未定係数法および Hensel 構成により求めるものである.
1.2 noro 1343: \E
1344: \BEG
1345: This function can be used only when @var{gbase} is an ideal over the
1346: rationals. The input @var{gbase} must be a Groebner basis with respect
1347: to the variable order @var{vlist1} and the order type @var{order}. Moreover
1348: the ideal generated by @var{gbase} must be zero-dimensional.
1349: This computes the lex Groebner basis of @var{gbase}
1350: by using the modular change of ordering algorithm. The algorithm first
1351: computes the lex Groebner basis over a finite field. Then each element
1352: in the lex Groebner basis over the rationals is computed with undetermined
1353: coefficient method and linear equation solving by Hensel lifting.
1354: \E
1.1 noro 1355:
1356: @item tolex_tl(@var{gbase},@var{vlist1},@var{order},@var{vlist2},@var{homo})
1357:
1.2 noro 1358: \BJP
1.25 noro 1359: この函数は, 辞書式順序のグレブナ基底を Buchberger アルゴリズムにより求
1360: めるものであるが, 入力がある順序におけるグレブナ基底である場合の
1361: trace-liftingにおけるグレブナ基底候補の頭項, 頭係数の性質を利用して,
1362: 最終的なグレブナ基底チェック, イデアルメンバシップチェックを省略してい
1363: るため, 単にBuchberger アルゴリズムを繰り返すより効率よく計算できる.
1364: 更に, 入力が 0 次元システムの場合, 自動的にもう 1 つの中間的な項順序を
1365: 経由して辞書式順序のグレブナ基底を計算する. 多くの場合, この方法は,
1366: 直接辞書式順序の計算を行うより効率がよい. (もちろん例外あり. )
1367: 引数 @var{homo} が 0 でない時, @code{hgr()} と同様に斉次化を経由して
1368: 計算を行う.
1.2 noro 1369: \E
1370: \BEG
1371: This function computes the lex Groebner basis of @var{gbase}. The
1372: input @var{gbase} must be a Groebner basis with respect to the
1373: variable order @var{vlist1} and the order type @var{order}.
1374: Buchberger algorithm with trace lifting is used to compute the lex
1375: Groebner basis, however the Groebner basis check and the ideal
1376: membership check can be omitted by using several properties derived
1377: from the fact that the input is a Groebner basis. So it is more
1378: efficient than simple repetition of Buchberger algorithm. If the input
1379: is zero-dimensional, this function inserts automatically a computation
1380: of Groebner basis with respect to an elimination order, which makes
1381: the whole computation more efficient for many cases. If @var{homo} is
1382: not equal to 0, homogenization is used in each step.
1383: \E
1.1 noro 1384: @end table
1385:
1386: @noindent
1.2 noro 1387: \BJP
1.25 noro 1388: その他, 0 次元システムに対し, 与えられた多項式の最小多項式を求める
1389: 函数, 0 次元システムの解を, よりコンパクトに表現するための函数などが
1390: @samp{gr} で定義されている. これらについては個々の函数の説明を参照のこと.
1.2 noro 1391: \E
1392: \BEG
1393: For zero-dimensional systems, there are several fuctions to
1394: compute the minimal polynomial of a polynomial and or a more compact
1395: representation for zeros of the system. They are all defined in @samp{gr}.
1396: Refer to the sections for each functions.
1397: \E
1.1 noro 1398:
1.2 noro 1399: \BJP
1.25 noro 1400: @node Weyl 代数,,, グレブナ基底の計算
1401: @section Weyl 代数
1.6 noro 1402: \E
1403: \BEG
1404: @node Weyl algebra,,, Groebner basis computation
1405: @section Weyl algebra
1406: \E
1407:
1408: @noindent
1409:
1410: \BJP
1.25 noro 1411: これまでは, 通常の可換な多項式環におけるグレブナ基底計算について
1412: 述べてきたが, グレブナ基底の理論は, ある条件を満たす非可換な
1413: 環にも拡張できる. このような環の中で, 応用上も重要な,
1414: Weyl 代数, すなわち多項式環上の微分作用素環の演算および
1415: グレブナ基底計算が Risa/Asir に実装されている.
1.6 noro 1416:
1.25 noro 1417: 体 @code{K} 上の @code{n} 次元 Weyl 代数
1418: @code{D=K<x1,@dots{},xn,D1,@dots{},Dn>} は
1.6 noro 1419: \E
1420:
1421: \BEG
1422: So far we have explained Groebner basis computation in
1423: commutative polynomial rings. However Groebner basis can be
1424: considered in more general non-commutative rings.
1425: Weyl algebra is one of such rings and
1426: Risa/Asir implements fundamental operations
1427: in Weyl algebra and Groebner basis computation in Weyl algebra.
1428:
1429: The @code{n} dimensional Weyl algebra over a field @code{K},
1430: @code{D=K<x1,@dots{},xn,D1,@dots{},Dn>} is a non-commutative
1431: algebra which has the following fundamental relations:
1432: \E
1433:
1434: @code{xi*xj-xj*xi=0}, @code{Di*Dj-Dj*Di=0}, @code{Di*xj-xj*Di=0} (@code{i!=j}),
1435: @code{Di*xi-xi*Di=1}
1436:
1437: \BJP
1.25 noro 1438: という基本関係を持つ環である. @code{D} は 多項式環 @code{K[x1,@dots{},xn]} を係数
1439: とする微分作用素環で, @code{Di} は @code{xi} による微分を表す. 交換関係により,
1440: @code{D} の元は, @code{x1^i1*@dots{}*xn^in*D1^j1*@dots{}*Dn^jn} なる単項
1441: 式の @code{K} 線形結合として書き表すことができる.
1442: Risa/Asir においては, この単項式を, 可換な多項式と同様に
1443: @code{<<i1,@dots{},in,j1,@dots{},jn>>} で表す. すなわち, @code{D} の元も
1444: 分散表現多項式として表される. 加減算は, 可換の場合と同様に, @code{+}, @code{-}
1445: により
1446: 実行できるが, 乗算は, 非可換性を考慮して @code{dp_weyl_mul()} という関数
1447: により実行する.
1.6 noro 1448: \E
1449:
1450: \BEG
1451: @code{D} is the ring of differential operators whose coefficients
1452: are polynomials in @code{K[x1,@dots{},xn]} and
1453: @code{Di} denotes the differentiation with respect to @code{xi}.
1454: According to the commutation relation,
1455: elements of @code{D} can be represented as a @code{K}-linear combination
1456: of monomials @code{x1^i1*@dots{}*xn^in*D1^j1*@dots{}*Dn^jn}.
1457: In Risa/Asir, this type of monomial is represented
1458: by @code{<<i1,@dots{},in,j1,@dots{},jn>>} as in the case of commutative
1459: polynomial.
1460: That is, elements of @code{D} are represented by distributed polynomials.
1461: Addition and subtraction can be done by @code{+}, @code{-},
1462: but multiplication is done by calling @code{dp_weyl_mul()} because of
1463: the non-commutativity of @code{D}.
1464: \E
1465:
1466: @example
1467: [0] A=<<1,2,2,1>>;
1468: (1)*<<1,2,2,1>>
1469: [1] B=<<2,1,1,2>>;
1470: (1)*<<2,1,1,2>>
1471: [2] A*B;
1472: (1)*<<3,3,3,3>>
1473: [3] dp_weyl_mul(A,B);
1474: (1)*<<3,3,3,3>>+(1)*<<3,2,3,2>>+(4)*<<2,3,2,3>>+(4)*<<2,2,2,2>>
1475: +(2)*<<1,3,1,3>>+(2)*<<1,2,1,2>>
1476: @end example
1477:
1478: \BJP
1.25 noro 1479: グレブナ基底計算についても, Weyl 代数専用の関数として,
1480: 次の関数が用意してある.
1.6 noro 1481: \E
1482: \BEG
1483: The following functions are avilable for Groebner basis computation
1484: in Weyl algebra:
1485: \E
1486: @code{dp_weyl_gr_main()},
1487: @code{dp_weyl_gr_mod_main()},
1488: @code{dp_weyl_gr_f_main()},
1489: @code{dp_weyl_f4_main()},
1490: @code{dp_weyl_f4_mod_main()}.
1491: \BJP
1.25 noro 1492: また, 応用として, global b 関数の計算が実装されている.
1.6 noro 1493: \E
1494: \BEG
1495: Computation of the global b function is implemented as an application.
1496: \E
1497:
1498: \BJP
1.25 noro 1499: @node 多項式環上の加群,,, グレブナ基底の計算
1500: @section 多項式環上の加群
1.23 noro 1501: \E
1502: \BEG
1503: @node Module over a polynomial ring,,, Groebner basis computation
1504: @section Module over a polynomial ring
1505: \E
1506:
1507: @noindent
1508:
1509: \BJP
1.25 noro 1510: 多項式環上の自由加群の元は, 加群単項式 te_i の線型和として内部表現される.
1511: ここで t は多項式環の単項式, e_i は自由加群の標準基底である. 加群単項式は, 多項式環の単項式
1512: に位置 i を追加した @code{<<a,b,...,c:i>>} で表す. 加群多項式, すなわち加群単項式の線型和は,
1513: 設定されている加群項順序にしたがって降順に整列される. 加群項順序には以下の3種類がある.
1.23 noro 1514:
1515: @table @code
1.25 noro 1516: @item TOP 順序
1.23 noro 1517:
1.25 noro 1518: これは, te_i > se_j となるのは t>s または (t=s かつ i<j) となるような項順序である. ここで,
1519: t, s の比較は多項式環に設定されている順序で行う.
1520: この型の順序は, @code{dp_ord([0,Ord])} に
1521: より設定する. ここで, @code{Ord} は多項式環の順序型である.
1522:
1523: @item POT 順序
1524:
1525: これは, te_i > se_j となるのは i<j または (i=j かつ t>s) となるような項順序である. ここで,
1526: t, s の比較は多項式環に設定されている順序で行う.
1527: この型の順序は, @code{dp_ord([1,Ord])} に
1528: より設定する. ここで, @code{Ord} は多項式環の順序型である.
1529:
1530: @item Schreyer 型順序
1531:
1532: 各標準基底 e_i に対し, 別の自由加群の加群単項式 T_i が与えられていて, te_i > se_j となるのは
1533: tT_i > sT_j または (tT_i=sT_j かつ i<j) となるような項順序である. ここで tT_i, sT_j の
1534: 比較は, これらが所属する自由加群に設定されている順序で行う.
1535: この型の順序は, 通常再帰的に設定される. すなわち, T_i が所属する自由加群の順序も Schreyer 型
1536: であるか, またはボトムとなる TOP, POT などの項順序となる.
1537: この型の順序は @code{dpm_set_schreyer([H_1,H_2,...])} により指定する. ここで,
1538: @code{H_i=[T_1,T_2,...]} は加群単項式のリストで, @code{[H_2,...]} で定義される Schreyer 型項順序を
1539: @code{tT_i} らに適用するという意味である.
1.23 noro 1540: @end table
1541:
1.25 noro 1542: 加群多項式を入力する方法としては, @code{<<a,b,...:i>>} なる形式で直接入力する他に,
1543: 多項式リストを作り, @code{dpm_ltod()} により変換する方法もある.
1.23 noro 1544: \E
1545: \BEG
1546: not yet
1547: \E
1548:
1549: \BJP
1.25 noro 1550: @node グレブナ基底に関する函数,,, グレブナ基底の計算
1551: @section グレブナ基底に関する函数
1.2 noro 1552: \E
1553: \BEG
1554: @node Functions for Groebner basis computation,,, Groebner basis computation
1555: @section Functions for Groebner basis computation
1556: \E
1.1 noro 1557:
1558: @menu
1559: * gr hgr gr_mod::
1560: * lex_hensel lex_tl tolex tolex_d tolex_tl::
1561: * lex_hensel_gsl tolex_gsl tolex_gsl_d::
1562: * gr_minipoly minipoly::
1563: * tolexm minipolym::
1.6 noro 1564: * 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::
1565: * dp_f4_main dp_f4_mod_main dp_weyl_f4_main dp_weyl_f4_mod_main::
1.17 noro 1566: * nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace::
1.22 noro 1567: * nd_gr_postproc nd_weyl_gr_postproc::
1.1 noro 1568: * dp_gr_flags dp_gr_print::
1569: * dp_ord::
1.18 noro 1570: * dp_set_weight dp_set_top_weight dp_weyl_set_weight::
1.1 noro 1571: * dp_ptod::
1572: * dp_dtop::
1573: * dp_mod dp_rat::
1574: * dp_homo dp_dehomo::
1575: * dp_ptozp dp_prim::
1.18 noro 1576: * dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod::
1.1 noro 1577: * dp_hm dp_ht dp_hc dp_rest::
1.23 noro 1578: * dpm_hm dpm_ht dpm_hc dpm_hp dpm_rest::
1.24 noro 1579: * dpm_sp::
1580: * dpm_redble::
1581: * dpm_nf dpm_nf_and_quotient::
1582: * dpm_dtol::
1583: * dpm_ltod::
1584: * dpm_dptodpm::
1.25 noro 1585: * dpm_schreyer_base::
1586: * dpm_schreyer_frame::
1587: * dpm_set_schreyer_level::
1588: * dpm_sp_nf::
1.1 noro 1589: * dp_td dp_sugar::
1590: * dp_lcm::
1591: * dp_redble::
1592: * dp_subd::
1593: * dp_mbase::
1594: * dp_mag::
1595: * dp_red dp_red_mod::
1596: * dp_sp dp_sp_mod::
1597: * p_nf p_nf_mod p_true_nf p_true_nf_mod ::
1598: * p_terms::
1599: * gb_comp::
1600: * katsura hkatsura cyclic hcyclic::
1601: * dp_vtoe dp_etov::
1602: * lex_hensel_gsl tolex_gsl tolex_gsl_d::
1.3 noro 1603: * primadec primedec::
1.5 noro 1604: * primedec_mod::
1.10 noro 1605: * bfunction bfct generic_bfct ann ann0::
1.1 noro 1606: @end menu
1607:
1.25 noro 1608: \JP @node gr hgr gr_mod,,, グレブナ基底に関する函数
1.2 noro 1609: \EG @node gr hgr gr_mod,,, Functions for Groebner basis computation
1.1 noro 1610: @subsection @code{gr}, @code{hgr}, @code{gr_mod}, @code{dgr}
1611: @findex gr
1612: @findex hgr
1613: @findex gr_mod
1614: @findex dgr
1615:
1616: @table @t
1617: @item gr(@var{plist},@var{vlist},@var{order})
1618: @itemx hgr(@var{plist},@var{vlist},@var{order})
1619: @itemx gr_mod(@var{plist},@var{vlist},@var{order},@var{p})
1620: @itemx dgr(@var{plist},@var{vlist},@var{order},@var{procs})
1.25 noro 1621: \JP :: グレブナ基底の計算
1.2 noro 1622: \EG :: Groebner basis computation
1.1 noro 1623: @end table
1624:
1625: @table @var
1626: @item return
1.25 noro 1627: \JP リスト
1.2 noro 1628: \EG list
1.4 noro 1629: @item plist vlist procs
1.25 noro 1630: \JP リスト
1.2 noro 1631: \EG list
1.1 noro 1632: @item order
1.25 noro 1633: \JP 数, リストまたは行列
1.2 noro 1634: \EG number, list or matrix
1.1 noro 1635: @item p
1.25 noro 1636: \JP 2^27 未満の素数
1.2 noro 1637: \EG prime less than 2^27
1.1 noro 1638: @end table
1639:
1640: @itemize @bullet
1.2 noro 1641: \BJP
1.1 noro 1642: @item
1.25 noro 1643: 標準ライブラリの @samp{gr} で定義されている.
1.1 noro 1644: @item
1.25 noro 1645: gr を名前に含む関数は現在メンテされていない. @code{nd_gr}系の関数を代わりに利用すべきである(@fref{nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace}).
1.21 takayama 1646: @item
1.25 noro 1647: いずれも, 多項式リスト @var{plist} の, 変数順序 @var{vlist}, 項順序型
1648: @var{order} に関するグレブナ基底を求める. @code{gr()}, @code{hgr()}
1649: は 有理数係数, @code{gr_mod()} は GF(@var{p}) 係数として計算する.
1650: @item
1651: @var{vlist} は不定元のリスト. @var{vlist} に現れない不定元は,
1652: 係数体に属すると見なされる.
1653: @item
1654: @code{gr()}, trace-lifting (モジュラ演算を用いた高速化) および sugar
1655: strategy による計算, @code{hgr()} は trace-lifting および
1656: 斉次化による 矯正された sugar strategy による計算を行う.
1657: @item
1658: @code{dgr()} は, @code{gr()}, @code{hgr()} を
1659: 子プロセスリスト @var{procs} の 2 つのプロセスにより同時に計算させ,
1660: 先に結果を返した方の結果を返す. 結果は同一であるが, どちらの方法が
1661: 高速か一般には不明のため, 実際の経過時間を短縮するのに有効である.
1662: @item
1663: @code{dgr()} で表示される時間は, この函数が実行されているプロセスでの
1664: CPU 時間であり, この函数の場合はほとんど通信のための時間である.
1665: @item
1666: 多項式リスト @var{plist} の要素が分散表現多項式の場合は
1667: 結果も分散表現多項式のリストである.
1668: この場合, 引数の分散多項式は与えられた順序に従い @code{dp_sort} で
1669: ソートされてから計算される.
1670: 多項式リストの要素が分散表現多項式の場合も
1671: 変数の数分の不定元のリストを @var{vlist} 引数として与えないといけない
1672: (ダミー).
1.2 noro 1673: \E
1674: \BEG
1675: @item
1676: These functions are defined in @samp{gr} in the standard library
1677: directory.
1.21 takayama 1678: @item
1679: Functions of which names contains gr are obsolted.
1680: 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}).
1.2 noro 1681: @item
1682: They compute a Groebner basis of a polynomial list @var{plist} with
1683: respect to the variable order @var{vlist} and the order type @var{order}.
1684: @code{gr()} and @code{hgr()} compute a Groebner basis over the rationals
1685: and @code{gr_mod} computes over GF(@var{p}).
1686: @item
1687: Variables not included in @var{vlist} are regarded as
1688: included in the ground field.
1689: @item
1690: @code{gr()} uses trace-lifting (an improvement by modular computation)
1691: and sugar strategy.
1692: @code{hgr()} uses trace-lifting and a cured sugar strategy
1693: by using homogenization.
1694: @item
1695: @code{dgr()} executes @code{gr()}, @code{dgr()} simultaneously on
1696: two process in a child process list @var{procs} and returns
1697: the result obtained first. The results returned from both the process
1698: should be equal, but it is not known in advance which method is faster.
1699: Therefore this function is useful to reduce the actual elapsed time.
1700: @item
1701: The CPU time shown after an exection of @code{dgr()} indicates
1702: that of the master process, and most of the time corresponds to the time
1703: for communication.
1.12 takayama 1704: @item
1705: When the elements of @var{plist} are distributed polynomials,
1706: the result is also a list of distributed polynomials.
1707: In this case, firstly the elements of @var{plist} is sorted by @code{dp_sort}
1708: and the Grobner basis computation is started.
1709: Variables must be given in @var{vlist} even in this case
1710: (these variables are dummy).
1.2 noro 1711: \E
1.1 noro 1712: @end itemize
1713:
1714: @example
1715: [0] load("gr")$
1716: [64] load("cyclic")$
1717: [74] G=gr(cyclic(5),[c0,c1,c2,c3,c4],2);
1718: [c4^15+122*c4^10-122*c4^5-1,...]
1719: [75] GM=gr_mod(cyclic(5),[c0,c1,c2,c3,c4],2,31991)$
1720: 24628*c4^15+29453*c4^10+2538*c4^5+7363
1721: [76] (G[0]*24628-GM[0])%31991;
1722: 0
1723: @end example
1724:
1725: @table @t
1.25 noro 1726: \JP @item 参照
1.2 noro 1727: \EG @item References
1.6 noro 1728: @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},
1.1 noro 1729: @fref{dp_ord}.
1730: @end table
1731:
1.25 noro 1732: \JP @node lex_hensel lex_tl tolex tolex_d tolex_tl,,, グレブナ基底に関する函数
1.2 noro 1733: \EG @node lex_hensel lex_tl tolex tolex_d tolex_tl,,, Functions for Groebner basis computation
1.1 noro 1734: @subsection @code{lex_hensel}, @code{lex_tl}, @code{tolex}, @code{tolex_d}, @code{tolex_tl}
1735: @findex lex_hensel
1736: @findex lex_tl
1737: @findex tolex
1738: @findex tolex_d
1739: @findex tolex_tl
1740:
1741: @table @t
1742: @item lex_hensel(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})
1743: @itemx lex_tl(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})
1.25 noro 1744: \JP :: 基底変換による辞書式順序グレブナ基底の計算
1.2 noro 1745: \EG:: Groebner basis computation with respect to a lex order by change of ordering
1.1 noro 1746: @item tolex(@var{plist},@var{vlist1},@var{order},@var{vlist2})
1747: @itemx tolex_d(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{procs})
1748: @itemx tolex_tl(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})
1.25 noro 1749: \JP :: グレブナ基底を入力とする, 基底変換による辞書式順序グレブナ基底の計算
1.2 noro 1750: \EG :: Groebner basis computation with respect to a lex order by change of ordering, starting from a Groebner basis
1.1 noro 1751: @end table
1752:
1753: @table @var
1754: @item return
1.25 noro 1755: \JP リスト
1.2 noro 1756: \EG list
1.4 noro 1757: @item plist vlist1 vlist2 procs
1.25 noro 1758: \JP リスト
1.2 noro 1759: \EG list
1.1 noro 1760: @item order
1.25 noro 1761: \JP 数, リストまたは行列
1.2 noro 1762: \EG number, list or matrix
1.1 noro 1763: @item homo
1.25 noro 1764: \JP フラグ
1.2 noro 1765: \EG flag
1.1 noro 1766: @end table
1767:
1768: @itemize @bullet
1.2 noro 1769: \BJP
1.1 noro 1770: @item
1.25 noro 1771: 標準ライブラリの @samp{gr} で定義されている.
1.1 noro 1772: @item
1.25 noro 1773: @code{lex_hensel()}, @code{lex_tl()} は,
1774: 多項式リスト @var{plist} の, 変数順序 @var{vlist1}, 項順序型
1775: @var{order} に関するグレブナ基底を求め, それを, 変数順序 @var{vlist2}
1776: の辞書式順序グレブナ基底に変換する.
1777: @item
1778: @code{tolex()}, @code{tolex_tl()} は,
1779: 変数順序 @var{vlist1}, 項順序型 @var{order} に関するグレブナ基底である
1780: 多項式リスト @var{plist} を変数順序 @var{vlist2} の辞書式順序グレブナ
1781: 基底に変換する.
1782: @code{tolex_d()} は, @code{tolex()} における, 各基底の計算を, 子プロセス
1783: リスト @var{procs} の各プロセスに分散計算させる.
1.1 noro 1784: @item
1.25 noro 1785: @code{lex_hensel()}, @code{lex_tl()} においては, 辞書式順序グレブナ基底の
1786: 計算は次のように行われる. (@code{[Noro,Yokoyama]} 参照.)
1.1 noro 1787: @enumerate
1788: @item
1.25 noro 1789: @var{vlist1}, @var{order} に関するグレブナ基底 @var{G0} を計算する.
1790: (@code{lex_hensel()} のみ. )
1.1 noro 1791: @item
1.25 noro 1792: @var{G0} の各元の @var{vlist2} に関する辞書式順序における頭係数を割らない
1793: ような素数 @var{p} を選び, GF(@var{p}) 上での辞書式順序グレブナ基底
1794: @var{Gp} を計算する.
1.1 noro 1795: @item
1.25 noro 1796: @var{Gp} に現れるすべての項の, @var{G0} に関する正規形 @var{NF} を計算する.
1.1 noro 1797: @item
1.25 noro 1798: @var{Gp} の各元 @var{f} につき, @var{f} の係数を未定係数で,
1799: @var{f} の各項を対応する @var{NF} の元で置き換え, 各項の係数を 0 と置いた,
1800: 未定係数に関する線形方程式系 @var{Lf} を作る.
1.1 noro 1801: @item
1.25 noro 1802: @var{Lf} が, 法 @var{p} で一意解を持つことを用いて @var{Lf} の解を
1803: 法 @var{p}の解から Hensel 構成により求める.
1.1 noro 1804: @item
1.25 noro 1805: すべての @var{Gp} の元につき線形方程式が解けたらその解全体が求める
1806: 辞書式順序でのグレブナ基底. もしどれかの線形方程式の求解に失敗したら,
1807: @var{p} をとり直してやり直す.
1.1 noro 1808: @end enumerate
1809:
1810: @item
1.25 noro 1811: @code{lex_tl()}, @code{tolex_tl()} においては, 辞書式順序グレブナ基底の
1812: 計算は次のように行われる.
1.1 noro 1813:
1814: @enumerate
1815: @item
1.25 noro 1816: @var{vlist1}, @var{order} に関するグレブナ基底 @var{G0} を計算する.
1817: (@code{lex_hensel()} のみ. )
1.1 noro 1818: @item
1.25 noro 1819: @var{G0} が 0 次元システムでないとき, @var{G0} を入力として,
1820: @var{G0} の各元の @var{vlist2} に関する辞書式順序における頭係数を割らない
1821: ような素数 @var{p} を選び, @var{p} を用いた trace-lifting により辞書式
1822: 順序のグレブナ基底候補を求め, もし求まったならチェックなしにそれが求める
1823: グレブナ基底となる. もし失敗したら, @var{p} をとり直してやり直す.
1824: @item
1825: @var{G0} が 0 次元システムのとき, @var{G0} を入力として,
1826: まず, @var{vlist2} の最後の変数以外を消去する消去順序により
1827: グレブナ基底 @var{G1} を計算し, それから辞書式順序のグレブナ基底を
1828: 計算する. その際, 各ステップでは, 入力の各元の, 求める順序における
1829: 頭係数を割らない素数を用いた trace-lifting でグレブナ基底候補を求め,
1830: もし求まったらチェックなしにそれがその順序でのグレブナ基底となる.
1.1 noro 1831: @end enumerate
1832:
1833: @item
1.25 noro 1834: 有理式係数の計算は, @code{lex_tl()}, @code{tolex_tl()} のみ受け付ける.
1.1 noro 1835: @item
1.25 noro 1836: @code{homo} が 0 でない場合, 内部で起動される Buchberger アルゴリズムに
1837: おいて, 斉次化が行われる.
1.1 noro 1838: @item
1.25 noro 1839: @code{tolex_d()} で表示される時間は, この函数が実行されているプロセスに
1840: おいて行われた計算に対応していて, 子プロセスにおける時間は含まれない.
1.2 noro 1841: \E
1842: \BEG
1843: @item
1844: These functions are defined in @samp{gr} in the standard library
1845: directory.
1846: @item
1847: @code{lex_hensel()} and @code{lex_tl()} first compute a Groebner basis
1848: with respect to the variable order @var{vlist1} and the order type @var{order}.
1849: Then the Groebner basis is converted into a lex order Groebner basis
1850: with respect to the varable order @var{vlist2}.
1851: @item
1852: @code{tolex()} and @code{tolex_tl()} convert a Groebner basis @var{plist}
1853: with respect to the variable order @var{vlist1} and the order type @var{order}
1854: into a lex order Groebner basis
1855: with respect to the varable order @var{vlist2}.
1856: @code{tolex_d()} does computations of basis elements in @code{tolex()}
1857: in parallel on the processes in a child process list @var{procs}.
1858: @item
1859: In @code{lex_hensel()} and @code{tolex_hensel()} a lex order Groebner basis
1860: is computed as follows.(Refer to @code{[Noro,Yokoyama]}.)
1861: @enumerate
1862: @item
1863: Compute a Groebner basis @var{G0} with respect to @var{vlist1} and @var{order}.
1864: (Only in @code{lex_hensel()}. )
1865: @item
1866: Choose a prime which does not divide head coefficients of elements in @var{G0}
1867: with respect to @var{vlist1} and @var{order}. Then compute a lex order
1868: Groebner basis @var{Gp} over GF(@var{p}) with respect to @var{vlist2}.
1869: @item
1870: Compute @var{NF}, the set of all the normal forms with respect to
1871: @var{G0} of terms appearing in @var{Gp}.
1872: @item
1873: For each element @var{f} in @var{Gp}, replace coefficients and terms in @var{f}
1874: with undetermined coefficients and the corresponding polynomials in @var{NF}
1875: respectively, and generate a system of liear equation @var{Lf} by equating
1876: the coefficients of terms in the replaced polynomial with 0.
1877: @item
1878: Solve @var{Lf} by Hensel lifting, starting from the unique mod @var{p}
1879: solution.
1880: @item
1881: If all the linear equations generated from the elements in @var{Gp}
1882: could be solved, then the set of solutions corresponds to a lex order
1883: Groebner basis. Otherwise redo the whole process with another @var{p}.
1884: @end enumerate
1885:
1886: @item
1887: In @code{lex_tl()} and @code{tolex_tl()} a lex order Groebner basis
1888: is computed as follows.(Refer to @code{[Noro,Yokoyama]}.)
1889:
1890: @enumerate
1891: @item
1892: Compute a Groebner basis @var{G0} with respect to @var{vlist1} and @var{order}.
1893: (Only in @code{lex_tl()}. )
1894: @item
1895: If @var{G0} is not zero-dimensional, choose a prime which does not divide
1896: head coefficients of elements in @var{G0} with respect to @var{vlist1} and
1897: @var{order}. Then compute a candidate of a lex order Groebner basis
1898: via trace lifting with @var{p}. If it succeeds the candidate is indeed
1899: a lex order Groebner basis without any check. Otherwise redo the whole
1900: process with another @var{p}.
1901: @item
1902:
1903: If @var{G0} is zero-dimensional, starting from @var{G0},
1904: compute a Groebner basis @var{G1} with respect to an elimination order
1905: to eliminate variables other than the last varibale in @var{vlist2}.
1906: Then compute a lex order Groebner basis stating from @var{G1}. These
1907: computations are done by trace lifting and the selection of a mudulus
1908: @var{p} is the same as in non zero-dimensional cases.
1909: @end enumerate
1910:
1911: @item
1912: Computations with rational function coefficients can be done only by
1913: @code{lex_tl()} and @code{tolex_tl()}.
1914: @item
1915: If @code{homo} is not equal to 0, homogenization is used in Buchberger
1916: algorithm.
1917: @item
1918: The CPU time shown after an execution of @code{tolex_d()} indicates
1919: that of the master process, and it does not include the time in child
1920: processes.
1921: \E
1.1 noro 1922: @end itemize
1923:
1924: @example
1925: [78] K=katsura(5)$
1926: 30msec + gc : 20msec
1927: [79] V=[u5,u4,u3,u2,u1,u0]$
1928: 0msec
1929: [80] G0=hgr(K,V,2)$
1930: 91.558sec + gc : 15.583sec
1931: [81] G1=lex_hensel(K,V,0,V,0)$
1932: 49.049sec + gc : 9.961sec
1933: [82] G2=lex_tl(K,V,0,V,1)$
1934: 31.186sec + gc : 3.500sec
1935: [83] gb_comp(G0,G1);
1936: 1
1937: 10msec
1938: [84] gb_comp(G0,G2);
1939: 1
1940: @end example
1941:
1942: @table @t
1.25 noro 1943: \JP @item 参照
1.2 noro 1944: \EG @item References
1.6 noro 1945: @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},
1.25 noro 1946: \JP @fref{dp_ord}, @fref{分散計算}
1.2 noro 1947: \EG @fref{dp_ord}, @fref{Distributed computation}
1.1 noro 1948: @end table
1949:
1.25 noro 1950: \JP @node lex_hensel_gsl tolex_gsl tolex_gsl_d,,, グレブナ基底に関する函数
1.2 noro 1951: \EG @node lex_hensel_gsl tolex_gsl tolex_gsl_d,,, Functions for Groebner basis computation
1.1 noro 1952: @subsection @code{lex_hensel_gsl}, @code{tolex_gsl}, @code{tolex_gsl_d}
1953: @findex lex_hensel_gsl
1954: @findex tolex_gsl
1955: @findex tolex_gsl_d
1956:
1957: @table @t
1958: @item lex_hensel_gsl(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{homo})
1.25 noro 1959: \JP :: GSL 形式のイデアル基底の計算
1.2 noro 1960: \EG ::Computation of an GSL form ideal basis
1.8 noro 1961: @item tolex_gsl(@var{plist},@var{vlist1},@var{order},@var{vlist2})
1962: @itemx tolex_gsl_d(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{procs})
1.25 noro 1963: \JP :: グレブナ基底を入力とする, GSL 形式のイデアル基底の計算
1.2 noro 1964: \EG :: Computation of an GSL form ideal basis stating from a Groebner basis
1.1 noro 1965: @end table
1966:
1967: @table @var
1968: @item return
1.25 noro 1969: \JP リスト
1.2 noro 1970: \EG list
1.4 noro 1971: @item plist vlist1 vlist2 procs
1.25 noro 1972: \JP リスト
1.2 noro 1973: \EG list
1.1 noro 1974: @item order
1.25 noro 1975: \JP 数, リストまたは行列
1.2 noro 1976: \EG number, list or matrix
1.1 noro 1977: @item homo
1.25 noro 1978: \JP フラグ
1.2 noro 1979: \EG flag
1.1 noro 1980: @end table
1981:
1982: @itemize @bullet
1.2 noro 1983: \BJP
1.1 noro 1984: @item
1.25 noro 1985: @code{lex_hensel_gsl()} は @code{lex_hensel()} の, @code{tolex_gsl()} は
1986: @code{tolex()} の変種で, 結果のみが異なる.
1987: @code{tolex_gsl_d()} は, 基底計算を, @code{procs} で指定される子プロセスに
1988: 分散計算させる.
1989: @item
1990: 入力が 0 次元システムで, その辞書式順序グレブナ基底が
1991: @code{[f0,x1-f1,...,xn-fn]} (@code{f0},...,@code{fn} は
1992: @code{x0} の 1 変数多項式) なる形 (これを SL 形式と呼ぶ) を持つ場合,
1993: @code{[[x1,g1,d1],...,[xn,gn,dn],[x0,f0,f0']]} なるリスト (これを GSL 形式と呼ぶ)
1994: を返す.
1995: ここで, @code{gi} は, @code{di*f0'*fi-gi} が @code{f0} で割り切れるような
1996: @code{x0} の1 変数多項式で,
1997: 解は @code{f0(x0)=0} なる @code{x0} に対し, @code{[x1=g1/(d1*f0'),...,xn=gn/(dn*f0')]}
1998: となる. 辞書式順序グレブナ基底が上のような形でない場合, @code{tolex()} に
1999: よる通常のグレブナ基底を返す.
2000: @item
2001: GSL 形式により表される基底はグレブナ基底ではないが, 一般に係数が SL 形式
2002: のグレブナ基底より非常に小さいため計算も速く, 解も求めやすい.
2003: @code{tolex_gsl_d()} で表示される時間は, この函数が実行されているプロセスに
2004: おいて行われた計算に対応していて, 子プロセスにおける時間は含まれない.
1.2 noro 2005: \E
2006: \BEG
2007: @item
2008: @code{lex_hensel_gsl()} and @code{lex_hensel()} are variants of
2009: @code{tolex_gsl()} and @code{tolex()} respectively. The results are
2010: Groebner basis or a kind of ideal basis, called GSL form.
2011: @code{tolex_gsl_d()} does basis computations in parallel on child
2012: processes specified in @code{procs}.
2013:
2014: @item
2015: If the input is zero-dimensional and a lex order Groebner basis has
2016: the form @code{[f0,x1-f1,...,xn-fn]} (@code{f0},...,@code{fn} are
2017: univariate polynomials of @code{x0}; SL form), then this these
2018: functions return a list such as
2019: @code{[[x1,g1,d1],...,[xn,gn,dn],[x0,f0,f0']]} (GSL form). In this list
2020: @code{gi} is a univariate polynomial of @code{x0} such that
2021: @code{di*f0'*fi-gi} divides @code{f0} and the roots of the input ideal is
2022: @code{[x1=g1/(d1*f0'),...,xn=gn/(dn*f0')]} for @code{x0}
2023: such that @code{f0(x0)=0}.
2024: If the lex order Groebner basis does not have the above form,
2025: these functions return
2026: a lex order Groebner basis computed by @code{tolex()}.
2027: @item
2028: Though an ideal basis represented as GSL form is not a Groebner basis
2029: we can expect that the coefficients are much smaller than those in a Groebner
2030: basis and that the computation is efficient.
2031: The CPU time shown after an execution of @code{tolex_gsl_d()} indicates
2032: that of the master process, and it does not include the time in child
2033: processes.
2034: \E
1.1 noro 2035: @end itemize
2036:
2037: @example
2038: [103] K=katsura(5)$
2039: [104] V=[u5,u4,u3,u2,u1,u0]$
2040: [105] G0=gr(K,V,0)$
2041: [106] GSL=tolex_gsl(G0,V,0,V)$
2042: [107] GSL[0];
2043: [u1,8635837421130477667200000000*u0^31-...]
2044: [108] GSL[1];
2045: [u2,10352277157007342793600000000*u0^31-...]
2046: [109] GSL[5];
1.5 noro 2047: [u0,11771021876193064124640000000*u0^32-...,
2048: 376672700038178051988480000000*u0^31-...]
1.1 noro 2049: @end example
2050:
2051: @table @t
1.25 noro 2052: \JP @item 参照
1.2 noro 2053: \EG @item References
1.1 noro 2054: @fref{lex_hensel lex_tl tolex tolex_d tolex_tl},
1.25 noro 2055: \JP @fref{分散計算}
1.2 noro 2056: \EG @fref{Distributed computation}
1.1 noro 2057: @end table
2058:
1.25 noro 2059: \JP @node gr_minipoly minipoly,,, グレブナ基底に関する函数
1.2 noro 2060: \EG @node gr_minipoly minipoly,,, Functions for Groebner basis computation
1.1 noro 2061: @subsection @code{gr_minipoly}, @code{minipoly}
2062: @findex gr_minipoly
2063: @findex minipoly
2064:
2065: @table @t
2066: @item gr_minipoly(@var{plist},@var{vlist},@var{order},@var{poly},@var{v},@var{homo})
1.25 noro 2067: \JP :: 多項式の, イデアルを法とした最小多項式の計算
1.2 noro 2068: \EG :: Computation of the minimal polynomial of a polynomial modulo an ideal
1.1 noro 2069: @item minipoly(@var{plist},@var{vlist},@var{order},@var{poly},@var{v})
1.25 noro 2070: \JP :: グレブナ基底を入力とする, 多項式の最小多項式の計算
1.2 noro 2071: \EG :: Computation of the minimal polynomial of a polynomial modulo an ideal
1.1 noro 2072: @end table
2073:
2074: @table @var
2075: @item return
1.25 noro 2076: \JP 多項式
1.2 noro 2077: \EG polynomial
1.4 noro 2078: @item plist vlist
1.25 noro 2079: \JP リスト
1.2 noro 2080: \EG list
1.1 noro 2081: @item order
1.25 noro 2082: \JP 数, リストまたは行列
1.2 noro 2083: \EG number, list or matrix
1.1 noro 2084: @item poly
1.25 noro 2085: \JP 多項式
1.2 noro 2086: \EG polynomial
1.1 noro 2087: @item v
1.25 noro 2088: \JP 不定元
1.2 noro 2089: \EG indeterminate
1.1 noro 2090: @item homo
1.25 noro 2091: \JP フラグ
1.2 noro 2092: \EG flag
1.1 noro 2093: @end table
2094:
2095: @itemize @bullet
1.2 noro 2096: \BJP
1.1 noro 2097: @item
1.25 noro 2098: @code{gr_minipoly()} はグレブナ基底の計算から行い, @code{minipoly()} は
2099: 入力をグレブナ基底とみなす.
1.1 noro 2100: @item
1.25 noro 2101: イデアル I が体 K 上の多項式環 K[X] の 0 次元イデアルの時,
2102: K[@var{v}] の元 f(@var{v}) に f(@var{p}) mod I を対応させる
2103: 環準同型の核は 0 でない多項式により生成される. この生成元を @var{p}
2104: の, 法 @var{I} での最小多項式と呼ぶ.
2105: @item
2106: @code{gr_minipoly()}, @code{minipoly()} は, 多項式 @var{p} の最小多項式
2107: を求め, @var{v} を変数とする多項式として返す.
2108: @item
2109: 最小多項式は, グレブナ基底の 1 つの元として計算することもできるが,
2110: 最小多項式のみを求めたい場合, @code{minipoly()}, @code{gr_minipoly()} は
2111: グレブナ基底を用いる方法に比べて効率がよい.
1.1 noro 2112: @item
1.25 noro 2113: @code{gr_minipoly()} に指定する項順序としては, 通常全次数逆辞書式順序を
2114: 用いる.
1.2 noro 2115: \E
2116: \BEG
2117: @item
2118: @code{gr_minipoly()} begins by computing a Groebner basis.
2119: @code{minipoly()} regards an input as a Groebner basis with respect to
2120: the variable order @var{vlist} and the order type @var{order}.
2121: @item
2122: Let K be a field. If an ideal @var{I} in K[X] is zero-dimensional, then, for
2123: a polynomial @var{p} in K[X], the kernel of a homomorphism from
2124: K[@var{v}] to K[X]/@var{I} which maps f(@var{v}) to f(@var{p}) mod @var{I}
2125: is generated by a polynomial. The generator is called the minimal polynomial
2126: of @var{p} modulo @var{I}.
2127: @item
2128: @code{gr_minipoly()} and @code{minipoly()} computes the minimal polynomial
2129: of a polynomial @var{p} and returns it as a polynomial of @var{v}.
2130: @item
2131: The minimal polynomial can be computed as an element of a Groebner basis.
2132: But if we are only interested in the minimal polynomial,
2133: @code{minipoly()} and @code{gr_minipoly()} can compute it more efficiently
2134: than methods using Groebner basis computation.
2135: @item
2136: It is recommended to use a degree reverse lex order as a term order
2137: for @code{gr_minipoly()}.
2138: \E
1.1 noro 2139: @end itemize
2140:
2141: @example
2142: [117] G=tolex(G0,V,0,V)$
2143: 43.818sec + gc : 11.202sec
2144: [118] GSL=tolex_gsl(G0,V,0,V)$
2145: 17.123sec + gc : 2.590sec
2146: [119] MP=minipoly(G0,V,0,u0,z)$
2147: 4.370sec + gc : 780msec
2148: @end example
2149:
2150: @table @t
1.25 noro 2151: \JP @item 参照
1.2 noro 2152: \EG @item References
1.1 noro 2153: @fref{lex_hensel lex_tl tolex tolex_d tolex_tl}.
2154: @end table
2155:
1.25 noro 2156: \JP @node tolexm minipolym,,, グレブナ基底に関する函数
1.2 noro 2157: \EG @node tolexm minipolym,,, Functions for Groebner basis computation
1.1 noro 2158: @subsection @code{tolexm}, @code{minipolym}
2159: @findex tolexm
2160: @findex minipolym
2161:
2162: @table @t
2163: @item tolexm(@var{plist},@var{vlist1},@var{order},@var{vlist2},@var{mod})
1.25 noro 2164: \JP :: 法 @var{mod} での基底変換によるグレブナ基底計算
1.2 noro 2165: \EG :: Groebner basis computation modulo @var{mod} by change of ordering.
1.1 noro 2166: @item minipolym(@var{plist},@var{vlist1},@var{order},@var{poly},@var{v},@var{mod})
1.25 noro 2167: \JP :: 法 @var{mod} でのグレブナ基底による多項式の最小多項式の計算
1.2 noro 2168: \EG :: Minimal polynomial computation modulo @var{mod} the same method as
1.1 noro 2169: @end table
2170:
2171: @table @var
2172: @item return
1.25 noro 2173: \JP @code{tolexm()} : リスト, @code{minipolym()} : 多項式
1.2 noro 2174: \EG @code{tolexm()} : list, @code{minipolym()} : polynomial
1.4 noro 2175: @item plist vlist1 vlist2
1.25 noro 2176: \JP リスト
1.2 noro 2177: \EG list
1.1 noro 2178: @item order
1.25 noro 2179: \JP 数, リストまたは行列
1.2 noro 2180: \EG number, list or matrix
1.1 noro 2181: @item mod
1.25 noro 2182: \JP 素数
1.2 noro 2183: \EG prime
1.1 noro 2184: @end table
2185:
2186: @itemize @bullet
1.2 noro 2187: \BJP
1.1 noro 2188: @item
1.25 noro 2189: 入力 @var{plist} はいずれも 変数順序 @var{vlist1}, 項順序型 @var{order},
2190: 法 @var{mod} におけるグレブナ基底でなければならない.
1.1 noro 2191: @item
1.25 noro 2192: @code{minipolym()} は @code{minipoly} に対応する計算を法 @var{mod}で行う.
1.1 noro 2193: @item
1.25 noro 2194: @code{tolexm()} は FGLM 法による基底変換により @var{vlist2},
2195: 辞書式順序によるグレブナ基底を計算する.
1.2 noro 2196: \E
2197: \BEG
2198: @item
2199: An input @var{plist} must be a Groebner basis modulo @var{mod}
2200: with respect to the variable order @var{vlist1} and the order type @var{order}.
2201: @item
2202: @code{minipolym()} executes the same computation as in @code{minipoly}.
2203: @item
2204: @code{tolexm()} computes a lex order Groebner basis modulo @var{mod}
2205: with respect to the variable order @var{vlist2}, by using FGLM algorithm.
2206: \E
1.1 noro 2207: @end itemize
2208:
2209: @example
2210: [197] tolexm(G0,V,0,V,31991);
2211: [8271*u0^31+10435*u0^30+816*u0^29+26809*u0^28+...,...]
2212: [198] minipolym(G0,V,0,u0,z,31991);
2213: z^32+11405*z^31+20868*z^30+21602*z^29+...
2214: @end example
2215:
2216: @table @t
1.25 noro 2217: \JP @item 参照
1.2 noro 2218: \EG @item References
1.1 noro 2219: @fref{lex_hensel lex_tl tolex tolex_d tolex_tl},
2220: @fref{gr_minipoly minipoly}.
2221: @end table
2222:
1.25 noro 2223: \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,,, グレブナ基底に関する函数
1.6 noro 2224: \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
2225: @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}
1.1 noro 2226: @findex dp_gr_main
2227: @findex dp_gr_mod_main
1.5 noro 2228: @findex dp_gr_f_main
1.6 noro 2229: @findex dp_weyl_gr_main
2230: @findex dp_weyl_gr_mod_main
2231: @findex dp_weyl_gr_f_main
1.1 noro 2232:
2233: @table @t
2234: @item dp_gr_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
2235: @itemx dp_gr_mod_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
1.5 noro 2236: @itemx dp_gr_f_main(@var{plist},@var{vlist},@var{homo},@var{order})
1.6 noro 2237: @itemx dp_weyl_gr_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
2238: @itemx dp_weyl_gr_mod_main(@var{plist},@var{vlist},@var{homo},@var{modular},@var{order})
2239: @itemx dp_weyl_gr_f_main(@var{plist},@var{vlist},@var{homo},@var{order})
1.25 noro 2240: \JP :: グレブナ基底の計算 (組み込み函数)
1.2 noro 2241: \EG :: Groebner basis computation (built-in functions)
1.1 noro 2242: @end table
2243:
2244: @table @var
2245: @item return
1.25 noro 2246: \JP リスト
1.2 noro 2247: \EG list
1.4 noro 2248: @item plist vlist
1.25 noro 2249: \JP リスト
1.2 noro 2250: \EG list
1.1 noro 2251: @item order
1.25 noro 2252: \JP 数, リストまたは行列
1.2 noro 2253: \EG number, list or matrix
1.1 noro 2254: @item homo
1.25 noro 2255: \JP フラグ
1.2 noro 2256: \EG flag
1.1 noro 2257: @item modular
1.25 noro 2258: \JP フラグまたは素数
1.2 noro 2259: \EG flag or prime
1.1 noro 2260: @end table
2261:
2262: @itemize @bullet
1.2 noro 2263: \BJP
1.1 noro 2264: @item
1.25 noro 2265: これらの函数は, グレブナ基底計算の基本的組み込み函数であり, @code{gr()},
2266: @code{hgr()}, @code{gr_mod()} などはすべてこれらの函数を呼び出して計算
2267: を行っている. 関数名に weyl が入っているものは, Weyl 代数上の計算
2268: のための関数である.
2269: @item
2270: @code{dp_gr_f_main()}, @code{dp_weyl_f_main()} は, 種々の有限体上のグレブナ基底を計算する
2271: 場合に用いる. 入力は, あらかじめ, @code{simp_ff()} などで,
2272: 考える有限体上に射影されている必要がある.
2273: @item
2274: フラグ @var{homo} が 0 でない時, 入力を斉次化してから Buchberger アルゴリズム
2275: を実行する.
2276: @item
2277: @code{dp_gr_mod_main()} に対しては, @var{modular} は, GF(@var{modular}) 上
2278: での計算を意味する.
2279: @code{dp_gr_main()} に対しては, @var{modular} は次のような意味を持つ.
1.1 noro 2280: @enumerate
2281: @item
1.25 noro 2282: @var{modular} が 1 の時, trace-lifting による計算を行う. 素数は
2283: @code{lprime(0)} から順に成功するまで @code{lprime()} を呼び出して生成する.
1.1 noro 2284: @item
1.25 noro 2285: @var{modular} が 2 以上の自然数の時, その値を素数とみなして trace-lifting
2286: を行う. その素数で失敗した場合, 0 を返す.
1.1 noro 2287: @item
1.25 noro 2288: @var{modular} が負の場合,
2289: @var{-modular} に対して上述の規則が適用されるが, trace-lifting の最終
2290: 段階のグレブナ基底チェックとイデアルメンバシップチェックが省略される.
1.1 noro 2291: @end enumerate
2292:
2293: @item
1.25 noro 2294: @code{gr(P,V,O)} は @code{dp_gr_main(P,V,0,1,O)}, @code{hgr(P,V,O)} は
2295: @code{dp_gr_main(P,V,1,1,O)}, @code{gr_mod(P,V,O,M)} は
2296: @code{dp_gr_mod_main(P,V,0,M,O)} をそれぞれ実行する.
1.1 noro 2297: @item
1.25 noro 2298: @var{homo}, @var{modular} の他に, @code{dp_gr_flags()} で設定される
2299: さまざまなフラグにより計算が制御される.
1.2 noro 2300: \E
2301: \BEG
2302: @item
2303: These functions are fundamental built-in functions for Groebner basis
2304: computation and @code{gr()},@code{hgr()} and @code{gr_mod()}
1.6 noro 2305: are all interfaces to these functions. Functions whose names
2306: contain weyl are those for computation in Weyl algebra.
1.2 noro 2307: @item
1.6 noro 2308: @code{dp_gr_f_main()} and @code{dp_weyl_gr_f_main()}
2309: are functions for Groebner basis computation
1.5 noro 2310: over various finite fields. Coefficients of input polynomials
2311: must be converted to elements of a finite field
2312: currently specified by @code{setmod_ff()}.
2313: @item
1.2 noro 2314: If @var{homo} is not equal to 0, homogenization is applied before entering
2315: Buchberger algorithm
2316: @item
2317: For @code{dp_gr_mod_main()}, @var{modular} means a computation over
2318: GF(@var{modular}).
2319: For @code{dp_gr_main()}, @var{modular} has the following mean.
2320: @enumerate
2321: @item
2322: If @var{modular} is 1 , trace lifting is used. Primes for trace lifting
2323: are generated by @code{lprime()}, starting from @code{lprime(0)}, until
2324: the computation succeeds.
2325: @item
2326: If @var{modular} is an integer greater than 1, the integer is regarded as a
2327: prime and trace lifting is executed by using the prime. If the computation
2328: fails then 0 is returned.
2329: @item
2330: If @var{modular} is negative, the above rule is applied for @var{-modular}
2331: but the Groebner basis check and ideal-membership check are omitted in
2332: the last stage of trace lifting.
2333: @end enumerate
2334:
2335: @item
2336: @code{gr(P,V,O)}, @code{hgr(P,V,O)} and @code{gr_mod(P,V,O,M)} execute
2337: @code{dp_gr_main(P,V,0,1,O)}, @code{dp_gr_main(P,V,1,1,O)}
2338: and @code{dp_gr_mod_main(P,V,0,M,O)} respectively.
2339: @item
2340: Actual computation is controlled by various parameters set by
2341: @code{dp_gr_flags()}, other then by @var{homo} and @var{modular}.
2342: \E
1.1 noro 2343: @end itemize
2344:
2345: @table @t
1.25 noro 2346: \JP @item 参照
1.2 noro 2347: \EG @item References
1.1 noro 2348: @fref{dp_ord},
2349: @fref{dp_gr_flags dp_gr_print},
2350: @fref{gr hgr gr_mod},
1.5 noro 2351: @fref{setmod_ff},
1.25 noro 2352: \JP @fref{計算および表示の制御}.
1.2 noro 2353: \EG @fref{Controlling Groebner basis computations}
1.1 noro 2354: @end table
2355:
1.25 noro 2356: \JP @node dp_f4_main dp_f4_mod_main dp_weyl_f4_main dp_weyl_f4_mod_main,,, グレブナ基底に関する函数
1.6 noro 2357: \EG @node dp_f4_main dp_f4_mod_main dp_weyl_f4_main dp_weyl_f4_mod_main,,, Functions for Groebner basis computation
2358: @subsection @code{dp_f4_main}, @code{dp_f4_mod_main}, @code{dp_weyl_f4_main}, @code{dp_weyl_f4_mod_main}
1.1 noro 2359: @findex dp_f4_main
2360: @findex dp_f4_mod_main
1.6 noro 2361: @findex dp_weyl_f4_main
2362: @findex dp_weyl_f4_mod_main
1.1 noro 2363:
2364: @table @t
2365: @item dp_f4_main(@var{plist},@var{vlist},@var{order})
2366: @itemx dp_f4_mod_main(@var{plist},@var{vlist},@var{order})
1.6 noro 2367: @itemx dp_weyl_f4_main(@var{plist},@var{vlist},@var{order})
2368: @itemx dp_weyl_f4_mod_main(@var{plist},@var{vlist},@var{order})
1.25 noro 2369: \JP :: F4 アルゴリズムによるグレブナ基底の計算 (組み込み函数)
1.2 noro 2370: \EG :: Groebner basis computation by F4 algorithm (built-in functions)
1.1 noro 2371: @end table
2372:
2373: @table @var
2374: @item return
1.25 noro 2375: \JP リスト
1.2 noro 2376: \EG list
1.4 noro 2377: @item plist vlist
1.25 noro 2378: \JP リスト
1.2 noro 2379: \EG list
1.1 noro 2380: @item order
1.25 noro 2381: \JP 数, リストまたは行列
1.2 noro 2382: \EG number, list or matrix
1.1 noro 2383: @end table
2384:
2385: @itemize @bullet
1.2 noro 2386: \BJP
1.1 noro 2387: @item
1.25 noro 2388: F4 アルゴリズムによりグレブナ基底の計算を行う.
1.1 noro 2389: @item
1.25 noro 2390: F4 アルゴリズムは, J.C. Faugere により提唱された新世代グレブナ基底
2391: 算法であり, 本実装は, 中国剰余定理による線形方程式求解を用いた
2392: 試験的な実装である.
1.1 noro 2393: @item
1.25 noro 2394: 斉次化の引数がないことを除けば, 引数および動作はそれぞれ
1.6 noro 2395: @code{dp_gr_main()}, @code{dp_gr_mod_main()},
2396: @code{dp_weyl_gr_main()}, @code{dp_weyl_gr_mod_main()}
1.25 noro 2397: と同様である.
1.2 noro 2398: \E
2399: \BEG
2400: @item
2401: These functions compute Groebner bases by F4 algorithm.
2402: @item
2403: F4 is a new generation algorithm for Groebner basis computation
2404: invented by J.C. Faugere. The current implementation of @code{dp_f4_main()}
2405: uses Chinese Remainder theorem and not highly optimized.
2406: @item
2407: Arguments and actions are the same as those of
1.6 noro 2408: @code{dp_gr_main()}, @code{dp_gr_mod_main()},
2409: @code{dp_weyl_gr_main()}, @code{dp_weyl_gr_mod_main()},
2410: except for lack of the argument for controlling homogenization.
1.2 noro 2411: \E
1.1 noro 2412: @end itemize
2413:
2414: @table @t
1.25 noro 2415: \JP @item 参照
1.2 noro 2416: \EG @item References
1.1 noro 2417: @fref{dp_ord},
2418: @fref{dp_gr_flags dp_gr_print},
2419: @fref{gr hgr gr_mod},
1.25 noro 2420: \JP @fref{計算および表示の制御}.
1.15 noro 2421: \EG @fref{Controlling Groebner basis computations}
2422: @end table
2423:
1.25 noro 2424: \JP @node nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace,,, グレブナ基底に関する函数
1.17 noro 2425: \EG @node nd_gr nd_gr_trace nd_f4 nd_f4_trace nd_weyl_gr nd_weyl_gr_trace,,, Functions for Groebner basis computation
2426: @subsection @code{nd_gr}, @code{nd_gr_trace}, @code{nd_f4}, @code{nd_f4_trace}, @code{nd_weyl_gr}, @code{nd_weyl_gr_trace}
1.15 noro 2427: @findex nd_gr
2428: @findex nd_gr_trace
2429: @findex nd_f4
1.17 noro 2430: @findex nd_f4_trace
1.15 noro 2431: @findex nd_weyl_gr
2432: @findex nd_weyl_gr_trace
2433:
2434: @table @t
1.23 noro 2435: @item nd_gr(@var{plist},@var{vlist},@var{p},@var{order}[|@var{option=value,...}])
2436: @itemx nd_gr_trace(@var{plist},@var{vlist},@var{homo},@var{p},@var{order}[|@var{option=value,...}])
2437: @itemx nd_f4(@var{plist},@var{vlist},@var{modular},@var{order}[|@var{option=value,...}])
2438: @itemx nd_f4_trace(@var{plist},@var{vlist},@var{homo},@var{p},@var{order}[|@var{option=value,...}])
2439: @itemx nd_weyl_gr(@var{plist},@var{vlist},@var{p},@var{order}[|@var{option=value,...}])
2440: @itemx nd_weyl_gr_trace(@var{plist},@var{vlist},@var{homo},@var{p},@var{order}[|@var{option=value,...}])
1.25 noro 2441: \JP :: グレブナ基底の計算 (組み込み函数)
1.15 noro 2442: \EG :: Groebner basis computation (built-in functions)
2443: @end table
2444:
2445: @table @var
2446: @item return
1.25 noro 2447: \JP リスト
1.15 noro 2448: \EG list
2449: @item plist vlist
1.25 noro 2450: \JP リスト
1.15 noro 2451: \EG list
2452: @item order
1.25 noro 2453: \JP 数, リストまたは行列
1.15 noro 2454: \EG number, list or matrix
2455: @item homo
1.25 noro 2456: \JP フラグ
1.15 noro 2457: \EG flag
2458: @item modular
1.25 noro 2459: \JP フラグまたは素数
1.15 noro 2460: \EG flag or prime
2461: @end table
2462:
2463: \BJP
2464: @itemize @bullet
2465: @item
1.25 noro 2466: これらの函数は, グレブナ基底計算組み込み関数の新実装である.
2467: @item @code{nd_gr} は, @code{p} が 0 のとき有理数体上の Buchberger
2468: アルゴリズムを実行する. @code{p} が 2 以上の自然数のとき, GF(p) 上の
2469: Buchberger アルゴリズムを実行する.
2470: @item @code{nd_gr_trace} および @code{nd_f4_trace}
2471: は有理数体上で trace アルゴリズムを実行する.
2472: @var{p} が 0 または 1 のとき, 自動的に選ばれた素数を用いて, 成功する
2473: まで trace アルゴリズムを実行する.
2474: @var{p} が 2 以上のとき, trace はGF(p) 上で計算される. trace アルゴリズム
2475: が失敗した場合 0 が返される. @var{p} が負の場合, グレブナ基底チェックは
2476: 行わない. この場合, @var{p} が -1 ならば自動的に選ばれた素数が,
2477: それ以外は指定された素数を用いてグレブナ基底候補の計算が行われる.
2478: @code{nd_f4_trace} は, 各全次数について, ある有限体上で F4 アルゴリズム
2479: で行った結果をもとに, その有限体上で 0 でない基底を与える S-多項式のみを
2480: 用いて行列生成を行い, その全次数における基底を生成する方法である. 得られる
2481: 多項式集合はやはりグレブナ基底候補であり, @code{nd_gr_trace} と同様の
2482: チェックが行われる.
2483: @item
2484: @code{nd_f4} は @code{modular} が 0 のとき有理数体上の, @code{modular} が
2485: マシンサイズ素数のとき有限体上の F4 アルゴリズムを実行する.
2486: @item
2487: @var{plist} が多項式リストの場合, @var{plist}で生成されるイデアルのグレブナー基底が
2488: 計算される. @var{plist} が多項式リストのリストの場合, 各要素は多項式環上の自由加群の元と見なされ,
2489: これらが生成する部分加群のグレブナー基底が計算される. 後者の場合, 項順序は加群に対する項順序を
2490: 指定する必要がある. これは @var{[s,ord]} の形で指定する. @var{s} が 0 ならば TOP (Term Over Position),
2491: 1 ならば POT (Position Over Term) を意味し, @var{ord} は多項式環の単項式に対する項順序である.
1.18 noro 2492: @item
1.25 noro 2493: @code{nd_weyl_gr}, @code{nd_weyl_gr_trace} は Weyl 代数用である.
1.15 noro 2494: @item
1.25 noro 2495: @code{f4} 系関数以外はすべて有理関数係数の計算が可能である.
1.15 noro 2496: @item
1.25 noro 2497: 一般に @code{dp_gr_main}, @code{dp_gr_mod_main} より高速であるが,
2498: 特に有限体上の場合顕著である.
1.23 noro 2499: @item
1.25 noro 2500: 以下のオプションが指定できる.
1.23 noro 2501: @table @code
2502: @item homo
1.25 noro 2503: 1 のとき, 斉次化を経由して計算する. (@code{nd_gr}, @code{nd_f4} のみ)
1.23 noro 2504: @item dp
1.25 noro 2505: 1 のとき, 分散表現多項式 (加群の場合には加群多項式) を結果として返す.
1.23 noro 2506: @item nora
1.25 noro 2507: 1 のとき, 結果の相互簡約を行わない.
1.23 noro 2508: @end table
1.15 noro 2509: @end itemize
2510: \E
2511:
2512: \BEG
2513: @itemize @bullet
2514: @item
2515: These functions are new implementations for computing Groebner bases.
2516: @item @code{nd_gr} executes Buchberger algorithm over the rationals
2517: if @code{p} is 0, and that over GF(p) if @code{p} is a prime.
2518: @item @code{nd_gr_trace} executes the trace algorithm over the rationals.
2519: If @code{p} is 0 or 1, the trace algorithm is executed until it succeeds
2520: by using automatically chosen primes.
2521: If @code{p} a positive prime,
2522: the trace is comuted over GF(p).
2523: If the trace algorithm fails 0 is returned.
2524: If @code{p} is negative,
2525: the Groebner basis check and ideal-membership check are omitted.
2526: In this case, an automatically chosen prime if @code{p} is 1,
2527: otherwise the specified prime is used to compute a Groebner basis
2528: candidate.
1.17 noro 2529: Execution of @code{nd_f4_trace} is done as follows:
2530: For each total degree, an F4-reduction of S-polynomials over a finite field
2531: is done, and S-polynomials which give non-zero basis elements are gathered.
2532: Then F4-reduction over Q is done for the gathered S-polynomials.
2533: The obtained polynomial set is a Groebner basis candidate and the same
2534: check procedure as in the case of @code{nd_gr_trace} is done.
2535: @item
2536: @code{nd_f4} executes F4 algorithm over Q if @code{modular} is equal to 0,
2537: or over a finite field GF(@code{modular})
2538: if @code{modular} is a prime number of machine size (<2^29).
1.18 noro 2539: If @var{plist} is a list of polynomials, then a Groebner basis of the ideal generated by @var{plist}
2540: is computed. If @var{plist} is a list of lists of polynomials, then each list of polynomials are regarded
2541: as an element of a free module over a polynomial ring and a Groebner basis of the sub-module generated by @var{plist}
2542: in the free module. In the latter case a term order in the free module should be specified.
2543: This is specified by @var{[s,ord]}. If @var{s} is 0 then it means TOP (Term Over Position).
2544: If @var{s} is 1 then it means POT 1 (Position Over Term). @var{ord} is a term order in the base polynomial ring.
1.15 noro 2545: @item
2546: @code{nd_weyl_gr}, @code{nd_weyl_gr_trace} are for Weyl algebra computation.
2547: @item
1.18 noro 2548: Functions except for F4 related ones can handle rational coeffient cases.
1.15 noro 2549: @item
2550: In general these functions are more efficient than
2551: @code{dp_gr_main}, @code{dp_gr_mod_main}, especially over finite fields.
1.23 noro 2552: @item
2553: The fallowing options can be specified.
2554: @table @code
2555: @item homo
2556: If set to 1, the computation is done via homogenization. (only for @code{nd_gr} and @code{nd_f4})
2557: @item dp
2558: If set to 1, the functions return a list of distributed polynomials (a list of
2559: module polynomials when the input is a sub-module).
2560: @item nora
2561: If set to 1, the inter-reduction is not performed.
2562: @end table
1.15 noro 2563: @end itemize
2564: \E
2565:
2566: @example
2567: [38] load("cyclic")$
2568: [49] C=cyclic(7)$
2569: [50] V=vars(C)$
2570: [51] cputime(1)$
2571: [52] dp_gr_mod_main(C,V,0,31991,0)$
2572: 26.06sec + gc : 0.313sec(26.4sec)
2573: [53] nd_gr(C,V,31991,0)$
2574: ndv_alloc=1477188
2575: 5.737sec + gc : 0.1837sec(5.921sec)
2576: [54] dp_f4_mod_main(C,V,31991,0)$
2577: 3.51sec + gc : 0.7109sec(4.221sec)
2578: [55] nd_f4(C,V,31991,0)$
2579: 1.906sec + gc : 0.126sec(2.032sec)
2580: @end example
2581:
2582: @table @t
1.25 noro 2583: \JP @item 参照
1.15 noro 2584: \EG @item References
2585: @fref{dp_ord},
2586: @fref{dp_gr_flags dp_gr_print},
1.25 noro 2587: \JP @fref{計算および表示の制御}.
1.2 noro 2588: \EG @fref{Controlling Groebner basis computations}
1.1 noro 2589: @end table
2590:
1.25 noro 2591: \JP @node nd_gr_postproc nd_weyl_gr_postproc,,, グレブナ基底に関する函数
1.22 noro 2592: \EG @node nd_gr_postproc nd_weyl_gr_postproc,,, Functions for Groebner basis computation
2593: @subsection @code{nd_gr_postproc}, @code{nd_weyl_gr_postproc}
2594: @findex nd_gr_postproc
2595: @findex nd_weyl_gr_postproc
2596:
2597: @table @t
2598: @item nd_gr_postproc(@var{plist},@var{vlist},@var{p},@var{order},@var{check})
2599: @itemx nd_weyl_gr_postproc(@var{plist},@var{vlist},@var{p},@var{order},@var{check})
1.25 noro 2600: \JP :: グレブナ基底候補のチェックおよび相互簡約
1.22 noro 2601: \EG :: Check of Groebner basis candidate and inter-reduction
2602: @end table
2603:
2604: @table @var
2605: @item return
1.25 noro 2606: \JP リスト または 0
1.22 noro 2607: \EG list or 0
2608: @item plist vlist
1.25 noro 2609: \JP リスト
1.22 noro 2610: \EG list
2611: @item p
1.25 noro 2612: \JP 素数または 0
1.22 noro 2613: \EG prime or 0
2614: @item order
1.25 noro 2615: \JP 数, リストまたは行列
1.22 noro 2616: \EG number, list or matrix
2617: @item check
1.25 noro 2618: \JP 0 または 1
1.22 noro 2619: \EG 0 or 1
2620: @end table
2621:
2622: @itemize @bullet
2623: \BJP
2624: @item
1.25 noro 2625: グレブナ基底(候補)の相互簡約を行う.
1.22 noro 2626: @item
1.25 noro 2627: @code{nd_weyl_gr_postproc} は Weyl 代数用である.
1.22 noro 2628: @item
1.25 noro 2629: @var{check=1} の場合, @var{plist} が, @var{vlist}, @var{p}, @var{order} で指定される多項式環, 項順序でグレブナー基底になっているか
2630: のチェックも行う.
1.22 noro 2631: @item
1.25 noro 2632: 斉次化して計算したグレブナー基底を非斉次化したものを相互簡約を行う, CRT で計算したグレブナー基底候補のチェックを行うなどの場合に用いる.
1.22 noro 2633: \E
2634: \BEG
2635: @item
2636: Perform the inter-reduction for a Groebner basis (candidate).
2637: @item
2638: @code{nd_weyl_gr_postproc} is for Weyl algebra.
2639: @item
2640: If @var{check=1} then the check whether @var{plist} is a Groebner basis with respect to a term order in a polynomial ring
2641: or Weyl algebra specified by @var{vlist}, @var{p} and @var{order}.
2642: @item
2643: This function is used for inter-reduction of a non-reduced Groebner basis that is obtained by dehomogenizing a Groebner basis
2644: computed via homogenization, or Groebner basis check of a Groebner basis candidate computed by CRT.
2645: \E
2646: @end itemize
2647:
2648: @example
2649: afo
2650: @end example
2651:
1.25 noro 2652: \JP @node dp_gr_flags dp_gr_print,,, グレブナ基底に関する函数
1.2 noro 2653: \EG @node dp_gr_flags dp_gr_print,,, Functions for Groebner basis computation
1.1 noro 2654: @subsection @code{dp_gr_flags}, @code{dp_gr_print}
2655: @findex dp_gr_flags
2656: @findex dp_gr_print
2657:
2658: @table @t
2659: @item dp_gr_flags([@var{list}])
1.7 noro 2660: @itemx dp_gr_print([@var{i}])
1.25 noro 2661: \JP :: 計算および表示用パラメタの設定, 参照
1.2 noro 2662: \BEG :: Set and show various parameters for cotrolling computations
2663: and showing informations.
2664: \E
1.1 noro 2665: @end table
2666:
2667: @table @var
2668: @item return
1.25 noro 2669: \JP 設定値
1.2 noro 2670: \EG value currently set
1.1 noro 2671: @item list
1.25 noro 2672: \JP リスト
1.2 noro 2673: \EG list
1.7 noro 2674: @item i
1.25 noro 2675: \JP 整数
1.7 noro 2676: \EG integer
1.1 noro 2677: @end table
2678:
2679: @itemize @bullet
1.2 noro 2680: \BJP
1.1 noro 2681: @item
1.25 noro 2682: @code{dp_gr_main()}, @code{dp_gr_mod_main()}, @code{dp_gr_f_main()} 実行時におけるさまざま
2683: なパラメタを設定, 参照する.
1.1 noro 2684: @item
1.25 noro 2685: 引数がない場合, 現在の設定が返される.
1.1 noro 2686: @item
1.25 noro 2687: 引数は, @code{["Print",1,"NoSugar",1,...]} なる形のリストで, 左から順に
2688: 設定される. パラメタ名は文字列で与える必要がある.
1.1 noro 2689: @item
1.25 noro 2690: @code{dp_gr_print()} は, 特にパラメタ @code{Print}, @code{PrintShort} の値を直接設定, 参照
2691: できる. 設定される値は次の通りである。
1.7 noro 2692: @table @var
2693: @item i=0
2694: @code{Print=0}, @code{PrintShort=0}
2695: @item i=1
2696: @code{Print=1}, @code{PrintShort=0}
2697: @item i=2
2698: @code{Print=0}, @code{PrintShort=1}
2699: @end table
1.25 noro 2700: これは, @code{dp_gr_main()} などをサブルーチンとして用いるユーザ
2701: 函数において, そのサブルーチンが中間情報の表示
2702: を行う際に, 迅速にフラグを見ることができるように用意されている.
1.2 noro 2703: \E
2704: \BEG
2705: @item
2706: @code{dp_gr_flags()} sets and shows various parameters for Groebner basis
2707: computation.
2708: @item
2709: If no argument is specified the current settings are returned.
2710: @item
2711: Arguments must be specified as a list such as
2712: @code{["Print",1,"NoSugar",1,...]}. Names of parameters must be character
2713: strings.
2714: @item
2715: @code{dp_gr_print()} is used to set and show the value of a parameter
1.7 noro 2716: @code{Print} and @code{PrintShort}.
2717: @table @var
2718: @item i=0
2719: @code{Print=0}, @code{PrintShort=0}
2720: @item i=1
2721: @code{Print=1}, @code{PrintShort=0}
2722: @item i=2
2723: @code{Print=0}, @code{PrintShort=1}
2724: @end table
2725: This functions is prepared to get quickly the value
2726: when a user defined function calling @code{dp_gr_main()} etc.
1.2 noro 2727: uses the value as a flag for showing intermediate informations.
2728: \E
1.1 noro 2729: @end itemize
2730:
2731: @table @t
1.25 noro 2732: \JP @item 参照
1.2 noro 2733: \EG @item References
1.25 noro 2734: \JP @fref{計算および表示の制御}
1.2 noro 2735: \EG @fref{Controlling Groebner basis computations}
1.1 noro 2736: @end table
2737:
1.25 noro 2738: \JP @node dp_ord,,, グレブナ基底に関する函数
1.2 noro 2739: \EG @node dp_ord,,, Functions for Groebner basis computation
1.1 noro 2740: @subsection @code{dp_ord}
2741: @findex dp_ord
2742:
2743: @table @t
2744: @item dp_ord([@var{order}])
1.25 noro 2745: \JP :: 変数順序型の設定, 参照
1.2 noro 2746: \EG :: Set and show the ordering type.
1.1 noro 2747: @end table
2748:
2749: @table @var
2750: @item return
1.25 noro 2751: \JP 変数順序型 (数, リストまたは行列)
1.2 noro 2752: \EG ordering type (number, list or matrix)
1.1 noro 2753: @item order
1.25 noro 2754: \JP 数, リストまたは行列
1.2 noro 2755: \EG number, list or matrix
1.1 noro 2756: @end table
2757:
2758: @itemize @bullet
1.2 noro 2759: \BJP
1.1 noro 2760: @item
1.25 noro 2761: 引数がある時, 変数順序型を @var{order} に設定する. 引数がない時,
2762: 現在設定されている変数順序型を返す.
1.1 noro 2763:
2764: @item
1.25 noro 2765: 分散表現多項式に関する函数, 演算は引数として変数順序型をとるものととらないもの
2766: があり, とらないものに関しては, その時点で設定されている値を用いて計算が
2767: 行われる.
1.1 noro 2768:
2769: @item
1.25 noro 2770: @code{gr()} など, 引数として変数順序型をとるものは, 内部で @code{dp_ord()}
2771: を呼び出し, 変数順序型を設定する. この設定は, 計算終了後も生き残る.
1.1 noro 2772:
2773: @item
1.25 noro 2774: 分散表現多項式の四則演算も, 設定されている値を用いて計算される. 従って,
2775: その多項式が生成された時点における変数順序型が, 四則演算時に正しく設定
2776: されていなければならない. また, 演算対象となる多項式は, 同一の変数順序
2777: 型に基づいて生成されたものでなければならない.
1.1 noro 2778:
2779: @item
1.25 noro 2780: トップレベル函数以外の函数を直接呼び出す場合には, この函数により
2781: 変数順序型を正しく設定しなければならない.
1.23 noro 2782:
2783: @item
1.25 noro 2784: 引数がリストの場合, 自由加群における項順序型を設定する. 引数が@code{[0,Ord]} の場合,
2785: 多項式環上で @code{Ord} で指定される項順序に基づく TOP 順序, 引数が @code{[1,Ord]} の場合
2786: OPT 順序を設定する.
1.23 noro 2787:
1.2 noro 2788: \E
2789: \BEG
2790: @item
2791: If an argument is specified, the function
2792: sets the current ordering type to @var{order}.
2793: If no argument is specified, the function returns the ordering
2794: type currently set.
2795:
2796: @item
2797: There are two types of functions concerning distributed polynomial,
2798: functions which take a ordering type and those which don't take it.
2799: The latter ones use the current setting.
2800:
2801: @item
2802: Functions such as @code{gr()}, which need a ordering type as an argument,
2803: call @code{dp_ord()} internally during the execution.
2804: The setting remains after the execution.
2805:
2806: Fundamental arithmetics for distributed polynomial also use the current
2807: setting. Therefore, when such arithmetics for distributed polynomials
2808: are done, the current setting must coincide with the ordering type
2809: which was used upon the creation of the polynomials. It is assumed
2810: that such polynomials were generated under the same ordering type.
2811:
2812: @item
2813: Type of term ordering must be correctly set by this function
2814: when functions other than top level functions are called directly.
1.23 noro 2815:
2816: @item
2817: If the argument is a list, then an ordering type in a free module is set.
2818: If the argument is @code{[0,Ord]} then a TOP ordering based on the ordering type specified
2819: by @code{Ord} is set.
2820: If the argument is @code{[1,Ord]} then a POT ordering is set.
1.2 noro 2821: \E
1.1 noro 2822: @end itemize
2823:
2824: @example
2825: [19] dp_ord(0)$
2826: [20] <<1,2,3>>+<<3,1,1>>;
2827: (1)*<<1,2,3>>+(1)*<<3,1,1>>
2828: [21] dp_ord(2)$
2829: [22] <<1,2,3>>+<<3,1,1>>;
2830: (1)*<<3,1,1>>+(1)*<<1,2,3>>
2831: @end example
2832:
2833: @table @t
1.25 noro 2834: \JP @item 参照
1.2 noro 2835: \EG @item References
1.25 noro 2836: \JP @fref{項順序の設定}
1.2 noro 2837: \EG @fref{Setting term orderings}
1.1 noro 2838: @end table
2839:
1.25 noro 2840: \JP @node dp_set_weight dp_set_top_weight dp_weyl_set_weight,,, グレブナ基底に関する函数
1.18 noro 2841: \EG @node dp_set_weight dp_set_top_weight dp_weyl_set_weight,,, Functions for Groebner basis computation
2842: @subsection @code{dp_set_weight}, @code{dp_set_top_weight}, @code{dp_weyl_set_weight}
2843: @findex dp_set_weight
2844: @findex dp_set_top_weight
2845: @findex dp_weyl_set_weight
2846:
2847: @table @t
2848: @item dp_set_weight([@var{weight}])
1.25 noro 2849: \JP :: sugar weight の設定, 参照
1.18 noro 2850: \EG :: Set and show the sugar weight.
2851: @item dp_set_top_weight([@var{weight}])
1.25 noro 2852: \JP :: top weight の設定, 参照
1.18 noro 2853: \EG :: Set and show the top weight.
2854: @item dp_weyl_set_weight([@var{weight}])
1.25 noro 2855: \JP :: weyl weight の設定, 参照
1.18 noro 2856: \EG :: Set and show the weyl weight.
2857: @end table
2858:
2859: @table @var
2860: @item return
1.25 noro 2861: \JP ベクトル
1.18 noro 2862: \EG a vector
2863: @item weight
1.25 noro 2864: \JP 整数のリストまたはベクトル
1.18 noro 2865: \EG a list or vector of integers
2866: @end table
2867:
2868: @itemize @bullet
2869: \BJP
2870: @item
1.25 noro 2871: @code{dp_set_weight} は sugar weight を @var{weight} に設定する. 引数がない時,
2872: 現在設定されている sugar weight を返す. sugar weight は正整数を成分とするベクトルで,
2873: 各変数の重みを表す. 次数つき順序において, 単項式の次数を計算する際に用いられる.
2874: 斉次化変数用に, 末尾に 1 を付け加えておくと安全である.
2875: @item
2876: @code{dp_set_top_weight} は top weight を @var{weight} に設定する. 引数がない時,
2877: 現在設定されている top weight を返す. top weight が設定されているとき,
2878: まず top weight による単項式比較を先に行う. tie breaker として現在設定されている
2879: 項順序が用いられるが, この比較には top weight は用いられない.
1.18 noro 2880:
2881: @item
1.25 noro 2882: @code{dp_weyl_set_weight} は weyl weight を @var{weight} に設定する. 引数がない時,
2883: 現在設定されている weyl weight を返す. weyl weight w を設定すると,
2884: 項順序型 11 での計算において, (-w,w) を top weight, tie breaker を graded reverse lex
2885: とした項順序が設定される.
1.18 noro 2886: \E
2887: \BEG
2888: @item
2889: @code{dp_set_weight} sets the sugar weight=@var{weight}. It returns the current sugar weight.
2890: A sugar weight is a vector with positive integer components and it represents the weights of variables.
2891: It is used for computing the weight of a monomial in a graded ordering.
2892: It is recommended to append a component 1 at the end of the weight vector for a homogenizing variable.
2893: @item
2894: @code{dp_set_top_weight} sets the top weight=@var{weight}. It returns the current top weight.
2895: It a top weight is set, the weights of monomials under the top weight are firstly compared.
2896: If the the weights are equal then the current term ordering is applied as a tie breaker, but
2897: the top weight is not used in the tie breaker.
2898:
2899: @item
2900: @code{dp_weyl_set_weight} sets the weyl weigh=@var{weight}. It returns the current weyl weight.
2901: If a weyl weight w is set, in the comparsion by the term order type 11, a term order with
2902: the top weight=(-w,w) and the tie breaker=graded reverse lex is applied.
2903: \E
2904: @end itemize
2905:
2906: @table @t
1.25 noro 2907: \JP @item 参照
1.18 noro 2908: \EG @item References
2909: @fref{Weight}
2910: @end table
2911:
2912:
1.25 noro 2913: \JP @node dp_ptod,,, グレブナ基底に関する函数
1.2 noro 2914: \EG @node dp_ptod,,, Functions for Groebner basis computation
1.1 noro 2915: @subsection @code{dp_ptod}
2916: @findex dp_ptod
2917:
2918: @table @t
2919: @item dp_ptod(@var{poly},@var{vlist})
1.25 noro 2920: \JP :: 多項式を分散表現多項式に変換する.
1.2 noro 2921: \EG :: Converts an ordinary polynomial into a distributed polynomial.
1.1 noro 2922: @end table
2923:
2924: @table @var
2925: @item return
1.25 noro 2926: \JP 分散表現多項式
1.2 noro 2927: \EG distributed polynomial
1.1 noro 2928: @item poly
1.25 noro 2929: \JP 多項式
1.2 noro 2930: \EG polynomial
1.1 noro 2931: @item vlist
1.25 noro 2932: \JP リスト
1.2 noro 2933: \EG list
1.1 noro 2934: @end table
2935:
2936: @itemize @bullet
1.2 noro 2937: \BJP
1.1 noro 2938: @item
1.25 noro 2939: 変数順序 @var{vlist} および現在の変数順序型に従って分散表現多項式に変換する.
1.1 noro 2940: @item
1.25 noro 2941: @var{vlist} に含まれない不定元は, 係数体に属するとして変換される.
1.2 noro 2942: \E
2943: \BEG
2944: @item
2945: According to the variable ordering @var{vlist} and current
2946: type of term ordering, this function converts an ordinary
2947: polynomial into a distributed polynomial.
2948: @item
2949: Indeterminates not included in @var{vlist} are regarded to belong to
2950: the coefficient field.
2951: \E
1.1 noro 2952: @end itemize
2953:
2954: @example
2955: [50] dp_ord(0);
2956: 1
2957: [51] dp_ptod((x+y+z)^2,[x,y,z]);
2958: (1)*<<2,0,0>>+(2)*<<1,1,0>>+(1)*<<0,2,0>>+(2)*<<1,0,1>>+(2)*<<0,1,1>>
2959: +(1)*<<0,0,2>>
2960: [52] dp_ptod((x+y+z)^2,[x,y]);
1.5 noro 2961: (1)*<<2,0>>+(2)*<<1,1>>+(1)*<<0,2>>+(2*z)*<<1,0>>+(2*z)*<<0,1>>
2962: +(z^2)*<<0,0>>
1.1 noro 2963: @end example
2964:
2965: @table @t
1.25 noro 2966: \JP @item 参照
1.2 noro 2967: \EG @item References
1.1 noro 2968: @fref{dp_dtop},
2969: @fref{dp_ord}.
2970: @end table
2971:
1.25 noro 2972: \JP @node dpm_dptodpm,,, グレブナ基底に関する函数
1.23 noro 2973: \EG @node dpm_dptodpm,,, Functions for Groebner basis computation
2974: @subsection @code{dpm_dptodpm}
2975: @findex dpm_dptodpm
2976:
2977: @table @t
2978: @item dpm_dptodpm(@var{dpoly},@var{pos})
1.25 noro 2979: \JP :: 分散表現多項式を加群多項式に変換する.
1.23 noro 2980: \EG :: Converts a distributed polynomial into a module polynomial.
2981: @end table
2982:
2983: @table @var
2984: @item return
1.25 noro 2985: \JP 加群多項式
1.23 noro 2986: \EG module polynomial
2987: @item dpoly
1.25 noro 2988: \JP 分散表現多項式
1.23 noro 2989: \EG distributed polynomial
2990: @item pos
1.25 noro 2991: \JP 正整数
1.23 noro 2992: \EG positive integer
2993: @end table
2994:
2995: @itemize @bullet
2996: \BJP
2997: @item
1.25 noro 2998: 分散表現多項式を加群多項式に変換する.
1.23 noro 2999: @item
1.25 noro 3000: 出力は加群多項式 @code{dpoly e_pos} である.
1.23 noro 3001: \E
3002: \BEG
3003: @item
3004: This function converts a distributed polynomial into a module polynomial.
3005: @item
3006: The output is @code{dpoly e_pos}.
3007: \E
3008: @end itemize
3009:
3010: @example
3011: [50] dp_ord([0,0])$
3012: [51] D=dp_ptod((x+y+z)^2,[x,y,z]);
3013: (1)*<<2,0,0>>+(2)*<<1,1,0>>+(1)*<<0,2,0>>+(2)*<<1,0,1>>+(2)*<<0,1,1>>
3014: +(1)*<<0,0,2>>
3015: [52] dp_dptodpm(D,2);
3016: (1)*<<2,0,0:2>>+(2)*<<1,1,0:2>>+(1)*<<0,2,0:2>>+(2)*<<1,0,1:2>>
3017: +(2)*<<0,1,1:2>>+(1)*<<0,0,2:2>>
3018: @end example
3019:
3020: @table @t
1.25 noro 3021: \JP @item 参照
1.23 noro 3022: \EG @item References
3023: @fref{dp_ptod},
3024: @fref{dp_ord}.
3025: @end table
3026:
1.25 noro 3027: \JP @node dpm_ltod,,, グレブナ基底に関する函数
1.23 noro 3028: \EG @node dpm_ltod,,, Functions for Groebner basis computation
3029: @subsection @code{dpm_ltod}
3030: @findex dpm_ltod
3031:
3032: @table @t
3033: @item dpm_dptodpm(@var{plist},@var{vlist})
1.25 noro 3034: \JP :: 多項式リストを加群多項式に変換する.
1.23 noro 3035: \EG :: Converts a list of polynomials into a module polynomial.
3036: @end table
3037:
3038: @table @var
3039: @item return
1.25 noro 3040: \JP 加群多項式
1.23 noro 3041: \EG module polynomial
3042: @item plist
1.25 noro 3043: \JP 多項式リスト
1.23 noro 3044: \EG list of polynomials
3045: @item vlist
1.25 noro 3046: \JP 変数リスト
1.23 noro 3047: \EG list of variables
3048: @end table
3049:
3050: @itemize @bullet
3051: \BJP
3052: @item
1.25 noro 3053: 多項式リストを加群多項式に変換する.
1.23 noro 3054: @item
1.25 noro 3055: @code{[p1,...,pm]} は @code{p1 e1+...+pm em} に変換される.
1.23 noro 3056: \E
3057: \BEG
3058: @item
3059: This function converts a list of polynomials into a module polynomial.
3060: @item
3061: @code{[p1,...,pm]} is converted into @code{p1 e1+...+pm em}.
3062: \E
3063: @end itemize
3064:
3065: @example
3066: [2126] dp_ord([0,0])$
3067: [2127] dpm_ltod([x^2+y^2,x,y-z],[x,y,z]);
3068: (1)*<<2,0,0:1>>+(1)*<<0,2,0:1>>+(1)*<<1,0,0:2>>+(1)*<<0,1,0:3>>
3069: +(-1)*<<0,0,1:3>>
3070: @end example
3071:
3072: @table @t
1.25 noro 3073: \JP @item 参照
1.23 noro 3074: \EG @item References
3075: @fref{dpm_dtol},
3076: @fref{dp_ord}.
3077: @end table
3078:
1.25 noro 3079: \JP @node dpm_dtol,,, グレブナ基底に関する函数
1.23 noro 3080: \EG @node dpm_dtol,,, Functions for Groebner basis computation
3081: @subsection @code{dpm_dtol}
3082: @findex dpm_dtol
3083:
3084: @table @t
3085: @item dpm_dptodpm(@var{poly},@var{vlist})
1.25 noro 3086: \JP :: 加群多項式を多項式リストに変換する.
1.23 noro 3087: \EG :: Converts a module polynomial into a list of polynomials.
3088: @end table
3089:
3090: @table @var
3091: @item return
1.25 noro 3092: \JP 多項式リスト
1.23 noro 3093: \EG list of polynomials
3094: @item poly
1.25 noro 3095: \JP 加群多項式
1.23 noro 3096: \EG module polynomial
3097: @item vlist
1.25 noro 3098: \JP 変数リスト
1.23 noro 3099: \EG list of variables
3100: @end table
3101:
3102: @itemize @bullet
3103: \BJP
3104: @item
1.25 noro 3105: 加群多項式を多項式リストに変換する.
1.23 noro 3106: @item
1.25 noro 3107: @code{p1 e1+...+pm em} は @code{[p1,...,pm]} に変換される.
1.23 noro 3108: @item
1.25 noro 3109: 出力リストの長さは, @code{poly} に含まれる標準基底の最大インデックスとなる.
1.23 noro 3110: \E
3111: \BEG
3112: @item
3113: This function converts a module polynomial into a list of polynomials.
3114: @item
3115: @code{p1 e1+...+pm em} is converted into @code{[p1,...,pm]}.
3116: @item
3117: The length of the output list is equal to the largest index among those of the standard bases
3118: containd in @code{poly}.
3119: \E
3120: @end itemize
3121:
3122: @example
3123: [2126] dp_ord([0,0])$
3124: [2127] D=(1)*<<2,0,0:1>>+(1)*<<0,2,0:1>>+(1)*<<1,0,0:2>>+(1)*<<0,1,0:3>>
3125: +(-1)*<<0,0,1:3>>$
3126: [2128] dpm_dtol(D,[x,y,z]);
3127: [x^2+y^2,x,y-z]
3128: @end example
3129:
3130: @table @t
1.25 noro 3131: \JP @item 参照
1.23 noro 3132: \EG @item References
3133: @fref{dpm_ltod},
3134: @fref{dp_ord}.
3135: @end table
3136:
1.25 noro 3137: \JP @node dp_dtop,,, グレブナ基底に関する函数
1.2 noro 3138: \EG @node dp_dtop,,, Functions for Groebner basis computation
1.1 noro 3139: @subsection @code{dp_dtop}
3140: @findex dp_dtop
3141:
3142: @table @t
3143: @item dp_dtop(@var{dpoly},@var{vlist})
1.25 noro 3144: \JP :: 分散表現多項式を多項式に変換する.
1.2 noro 3145: \EG :: Converts a distributed polynomial into an ordinary polynomial.
1.1 noro 3146: @end table
3147:
3148: @table @var
3149: @item return
1.25 noro 3150: \JP 多項式
1.2 noro 3151: \EG polynomial
1.1 noro 3152: @item dpoly
1.25 noro 3153: \JP 分散表現多項式
1.2 noro 3154: \EG distributed polynomial
1.1 noro 3155: @item vlist
1.25 noro 3156: \JP リスト
1.2 noro 3157: \EG list
1.1 noro 3158: @end table
3159:
3160: @itemize @bullet
1.2 noro 3161: \BJP
1.1 noro 3162: @item
1.25 noro 3163: 分散表現多項式を, 与えられた不定元リストを用いて多項式に変換する.
1.1 noro 3164: @item
1.25 noro 3165: 不定元リストは, 長さ分散表現多項式の変数の個数と一致していれば何でもよい.
1.2 noro 3166: \E
3167: \BEG
3168: @item
3169: This function converts a distributed polynomial into an ordinary polynomial
3170: according to a list of indeterminates @var{vlist}.
3171: @item
3172: @var{vlist} is such a list that its length coincides with the number of
3173: variables of @var{dpoly}.
3174: \E
1.1 noro 3175: @end itemize
3176:
3177: @example
3178: [53] T=dp_ptod((x+y+z)^2,[x,y]);
1.5 noro 3179: (1)*<<2,0>>+(2)*<<1,1>>+(1)*<<0,2>>+(2*z)*<<1,0>>+(2*z)*<<0,1>>
3180: +(z^2)*<<0,0>>
1.1 noro 3181: [54] P=dp_dtop(T,[a,b]);
3182: z^2+(2*a+2*b)*z+a^2+2*b*a+b^2
3183: @end example
3184:
1.25 noro 3185: \JP @node dp_mod dp_rat,,, グレブナ基底に関する函数
1.2 noro 3186: \EG @node dp_mod dp_rat,,, Functions for Groebner basis computation
1.1 noro 3187: @subsection @code{dp_mod}, @code{dp_rat}
3188: @findex dp_mod
3189: @findex dp_rat
3190:
3191: @table @t
3192: @item dp_mod(@var{p},@var{mod},@var{subst})
1.25 noro 3193: \JP :: 有理数係数分散表現多項式の有限体係数への変換
1.2 noro 3194: \EG :: Converts a disributed polynomial into one with coefficients in a finite field.
1.1 noro 3195: @item dp_rat(@var{p})
1.25 noro 3196: \JP :: 有限体係数分散表現多項式の有理数係数への変換
1.2 noro 3197: \BEG
3198: :: Converts a distributed polynomial with coefficients in a finite field into
3199: one with coefficients in the rationals.
3200: \E
1.1 noro 3201: @end table
3202:
3203: @table @var
3204: @item return
1.25 noro 3205: \JP 分散表現多項式
1.2 noro 3206: \EG distributed polynomial
1.1 noro 3207: @item p
1.25 noro 3208: \JP 分散表現多項式
1.2 noro 3209: \EG distributed polynomial
1.1 noro 3210: @item mod
1.25 noro 3211: \JP 素数
1.2 noro 3212: \EG prime
1.1 noro 3213: @item subst
1.25 noro 3214: \JP リスト
1.2 noro 3215: \EG list
1.1 noro 3216: @end table
3217:
3218: @itemize @bullet
1.2 noro 3219: \BJP
1.1 noro 3220: @item
1.25 noro 3221: @code{dp_nf_mod()}, @code{dp_true_nf_mod()} は, 入力として有限体係数の
3222: 分散表現多項式を必要とする. このような場合, @code{dp_mod()} により
3223: 有理数係数分散表現多項式を変換して用いることができる. また, 得られた
3224: 結果は, 有限体係数多項式とは演算できるが, 有理数係数多項式とは演算できない
3225: ため, @code{dp_rat()} により変換する必要がある.
3226: @item
3227: 有限体係数の演算においては, あらかじめ @code{setmod()} により有限体の元の
3228: 個数を指定しておく必要がある.
3229: @item
3230: @var{subst} は, 係数が有理式の場合, その有理式の変数にあらかじめ数を代入
3231: した後有限体係数に変換するという操作を行う際の, 代入値を指定するもので,
3232: @code{[[@var{var},@var{value}],...]} の形のリストである.
1.2 noro 3233: \E
3234: \BEG
3235: @item
3236: @code{dp_nf_mod()} and @code{dp_true_nf_mod()} require
3237: distributed polynomials with coefficients in a finite field as arguments.
3238: @code{dp_mod()} is used to convert distributed polynomials with rational
3239: number coefficients into appropriate ones.
3240: Polynomials with coefficients in a finite field
3241: cannot be used as inputs of operations with polynomials
3242: with rational number coefficients. @code{dp_rat()} is used for such cases.
3243: @item
3244: The ground finite field must be set in advance by using @code{setmod()}.
3245: @item
3246: @var{subst} is such a list as @code{[[@var{var},@var{value}],...]}.
3247: This is valid when the ground field of the input polynomial is a
3248: rational function field. @var{var}'s are variables in the ground field and
3249: the list means that @var{value} is substituted for @var{var} before
3250: converting the coefficients into elements of a finite field.
3251: \E
1.1 noro 3252: @end itemize
3253:
3254: @example
3255: @end example
3256:
3257: @table @t
1.25 noro 3258: \JP @item 参照
1.2 noro 3259: \EG @item References
1.18 noro 3260: @fref{dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod},
1.1 noro 3261: @fref{subst psubst},
3262: @fref{setmod}.
3263: @end table
3264:
1.25 noro 3265: \JP @node dp_homo dp_dehomo,,, グレブナ基底に関する函数
1.2 noro 3266: \EG @node dp_homo dp_dehomo,,, Functions for Groebner basis computation
1.1 noro 3267: @subsection @code{dp_homo}, @code{dp_dehomo}
3268: @findex dp_homo
3269: @findex dp_dehomo
3270:
3271: @table @t
3272: @item dp_homo(@var{dpoly})
1.25 noro 3273: \JP :: 分散表現多項式の斉次化
1.2 noro 3274: \EG :: Homogenize a distributed polynomial
1.1 noro 3275: @item dp_dehomo(@var{dpoly})
1.25 noro 3276: \JP :: 斉次分散表現多項式の非斉次化
1.2 noro 3277: \EG :: Dehomogenize a homogenious distributed polynomial
1.1 noro 3278: @end table
3279:
3280: @table @var
3281: @item return
1.25 noro 3282: \JP 分散表現多項式
1.2 noro 3283: \EG distributed polynomial
1.1 noro 3284: @item dpoly
1.25 noro 3285: \JP 分散表現多項式
1.2 noro 3286: \EG distributed polynomial
1.1 noro 3287: @end table
3288:
3289: @itemize @bullet
1.2 noro 3290: \BJP
1.1 noro 3291: @item
1.25 noro 3292: @code{dp_homo()} は, @var{dpoly} の 各項 @var{t} について, 指数ベクトルの長さを
3293: 1 伸ばし, 最後の成分の値を @var{d}-@code{deg(@var{t})}
3294: (@var{d} は @var{dpoly} の全次数) とした分散表現多項式を返す.
1.1 noro 3295: @item
1.25 noro 3296: @code{dp_dehomo()} は, @var{dpoly} の各項について, 指数ベクトルの最後の成分
3297: を取り除いた分散多項式を返す.
1.1 noro 3298: @item
1.25 noro 3299: いずれも, 生成された多項式を用いた演算を行う場合, それらに適合する項順序を
3300: 正しく設定する必要がある.
1.1 noro 3301: @item
1.25 noro 3302: @code{hgr()} などにおいて, 内部的に用いられている.
1.2 noro 3303: \E
3304: \BEG
3305: @item
3306: @code{dp_homo()} makes a copy of @var{dpoly}, extends
3307: the length of the exponent vector of each term @var{t} in the copy by 1,
3308: and sets the value of the newly appended
3309: component to @var{d}-@code{deg(@var{t})}, where @var{d} is the total
3310: degree of @var{dpoly}.
3311: @item
3312: @code{dp_dehomo()} make a copy of @var{dpoly} and removes the last component
3313: of each terms in the copy.
3314: @item
3315: Appropriate term orderings must be set when the results are used as inputs
3316: of some operations.
3317: @item
3318: These are used internally in @code{hgr()} etc.
3319: \E
1.1 noro 3320: @end itemize
3321:
3322: @example
3323: [202] X=<<1,2,3>>+3*<<1,2,1>>;
3324: (1)*<<1,2,3>>+(3)*<<1,2,1>>
3325: [203] dp_homo(X);
3326: (1)*<<1,2,3,0>>+(3)*<<1,2,1,2>>
3327: [204] dp_dehomo(@@);
3328: (1)*<<1,2,3>>+(3)*<<1,2,1>>
3329: @end example
3330:
3331: @table @t
1.25 noro 3332: \JP @item 参照
1.2 noro 3333: \EG @item References
1.1 noro 3334: @fref{gr hgr gr_mod}.
3335: @end table
3336:
1.25 noro 3337: \JP @node dp_ptozp dp_prim,,, グレブナ基底に関する函数
1.2 noro 3338: \EG @node dp_ptozp dp_prim,,, Functions for Groebner basis computation
1.1 noro 3339: @subsection @code{dp_ptozp}, @code{dp_prim}
3340: @findex dp_ptozp
3341: @findex dp_prim
3342:
3343: @table @t
3344: @item dp_ptozp(@var{dpoly})
1.25 noro 3345: \JP :: 定数倍して係数を整数係数かつ係数の整数 GCD を 1 にする.
1.2 noro 3346: \BEG
3347: :: Converts a distributed polynomial @var{poly} with rational coefficients
3348: into an integral distributed polynomial such that GCD of all its coefficients
3349: is 1.
3350: \E
1.19 noro 3351: @item dp_prim(@var{dpoly})
1.25 noro 3352: \JP :: 有理式倍して係数を整数係数多項式係数かつ係数の多項式 GCD を 1 にする.
1.2 noro 3353: \BEG
3354: :: Converts a distributed polynomial @var{poly} with rational function
3355: coefficients into an integral distributed polynomial such that polynomial
3356: GCD of all its coefficients is 1.
3357: \E
1.1 noro 3358: @end table
3359:
3360: @table @var
3361: @item return
1.25 noro 3362: \JP 分散表現多項式
1.2 noro 3363: \EG distributed polynomial
1.1 noro 3364: @item dpoly
1.25 noro 3365: \JP 分散表現多項式
1.2 noro 3366: \EG distributed polynomial
1.1 noro 3367: @end table
3368:
3369: @itemize @bullet
1.2 noro 3370: \BJP
1.1 noro 3371: @item
1.25 noro 3372: @code{dp_ptozp()} は, @code{ptozp()} に相当する操作を分散表現多項式に
3373: 対して行う. 係数が多項式を含む場合, 係数に含まれる多項式共通因子は
3374: 取り除かない.
1.1 noro 3375: @item
1.25 noro 3376: @code{dp_prim()} は, 係数が多項式を含む場合, 係数に含まれる多項式共通因子
3377: を取り除く.
1.2 noro 3378: \E
3379: \BEG
3380: @item
3381: @code{dp_ptozp()} executes the same operation as @code{ptozp()} for
3382: a distributed polynomial. If the coefficients include polynomials,
3383: polynomial contents included in the coefficients are not removed.
3384: @item
3385: @code{dp_prim()} removes polynomial contents.
3386: \E
1.1 noro 3387: @end itemize
3388:
3389: @example
3390: [208] X=dp_ptod(3*(x-y)*(y-z)*(z-x),[x]);
3391: (-3*y+3*z)*<<2>>+(3*y^2-3*z^2)*<<1>>+(-3*z*y^2+3*z^2*y)*<<0>>
3392: [209] dp_ptozp(X);
3393: (-y+z)*<<2>>+(y^2-z^2)*<<1>>+(-z*y^2+z^2*y)*<<0>>
3394: [210] dp_prim(X);
3395: (1)*<<2>>+(-y-z)*<<1>>+(z*y)*<<0>>
3396: @end example
3397:
3398: @table @t
1.25 noro 3399: \JP @item 参照
1.2 noro 3400: \EG @item References
1.1 noro 3401: @fref{ptozp}.
3402: @end table
3403:
1.25 noro 3404: \JP @node dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod,,, グレブナ基底に関する函数
1.18 noro 3405: \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
1.1 noro 3406: @subsection @code{dp_nf}, @code{dp_nf_mod}, @code{dp_true_nf}, @code{dp_true_nf_mod}
3407: @findex dp_nf
3408: @findex dp_true_nf
3409: @findex dp_nf_mod
3410: @findex dp_true_nf_mod
1.18 noro 3411: @findex dp_weyl_nf
3412: @findex dp_weyl_nf_mod
1.1 noro 3413:
3414: @table @t
3415: @item dp_nf(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce})
1.18 noro 3416: @item dp_weyl_nf(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce})
1.1 noro 3417: @item dp_nf_mod(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce},@var{mod})
1.18 noro 3418: @item dp_weyl_nf_mod(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce},@var{mod})
1.25 noro 3419: \JP :: 分散表現多項式の正規形を求める. (結果は定数倍されている可能性あり)
1.1 noro 3420:
1.2 noro 3421: \BEG
3422: :: Computes the normal form of a distributed polynomial.
3423: (The result may be multiplied by a constant in the ground field.)
3424: \E
1.1 noro 3425: @item dp_true_nf(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce})
3426: @item dp_true_nf_mod(@var{indexlist},@var{dpoly},@var{dpolyarray},@var{fullreduce},@var{mod})
1.25 noro 3427: \JP :: 分散表現多項式の正規形を求める. (真の結果を @code{[分子, 分母]} の形で返す)
1.2 noro 3428: \BEG
3429: :: Computes the normal form of a distributed polynomial. (The true result
3430: is returned in such a list as @code{[numerator, denominator]})
3431: \E
1.1 noro 3432: @end table
3433:
3434: @table @var
3435: @item return
1.25 noro 3436: \JP @code{dp_nf()} : 分散表現多項式, @code{dp_true_nf()} : リスト
1.2 noro 3437: \EG @code{dp_nf()} : distributed polynomial, @code{dp_true_nf()} : list
1.1 noro 3438: @item indexlist
1.25 noro 3439: \JP リスト
1.2 noro 3440: \EG list
1.1 noro 3441: @item dpoly
1.25 noro 3442: \JP 分散表現多項式
1.2 noro 3443: \EG distributed polynomial
1.1 noro 3444: @item dpolyarray
1.25 noro 3445: \JP 配列
1.2 noro 3446: \EG array of distributed polynomial
1.1 noro 3447: @item fullreduce
1.25 noro 3448: \JP フラグ
1.2 noro 3449: \EG flag
1.1 noro 3450: @item mod
1.25 noro 3451: \JP 素数
1.2 noro 3452: \EG prime
1.1 noro 3453: @end table
3454:
3455: @itemize @bullet
1.2 noro 3456: \BJP
1.1 noro 3457: @item
1.25 noro 3458: 分散表現多項式 @var{dpoly} の正規形を求める.
1.1 noro 3459: @item
1.25 noro 3460: 名前に weyl を含む関数はワイル代数における正規形計算を行う. 以下の説明は weyl を含むものに対しても同様に成立する.
1.18 noro 3461: @item
1.25 noro 3462: @code{dp_nf_mod()}, @code{dp_true_nf_mod()} の入力は, @code{dp_mod()} など
3463: により, 有限体上の分散表現多項式になっていなければならない.
1.1 noro 3464: @item
1.25 noro 3465: 結果に有理数, 有理式が含まれるのを避けるため, @code{dp_nf()} は
3466: 真の値の定数倍の値を返す. 有理式係数の場合の @code{dp_nf_mod()} も同様
3467: であるが, 係数体が有限体の場合 @code{dp_nf_mod()} は真の値を返す.
1.1 noro 3468: @item
1.25 noro 3469: @code{dp_true_nf()}, @code{dp_true_nf_mod()} は,
3470: @code{[@var{nm},@var{dn}]} なる形のリストを返す.
3471: ただし, @var{nm} は係数に分数, 有理式を含まない分散表現多項式, @var{dn} は
3472: 数または多項式で @var{nm}/@var{dn} が真の値となる.
1.1 noro 3473: @item
1.25 noro 3474: @var{dpolyarray} は分散表現多項式を要素とするベクトル,
3475: @var{indexlist} は正規化計算に用いる @var{dpolyarray} の要素のインデックス
3476: のリスト.
1.1 noro 3477: @item
1.25 noro 3478: @var{fullreduce} が 0 でないとき全ての項に対して簡約を行う. @var{fullreduce}
3479: が 0 のとき頭項のみに対して簡約を行う.
1.1 noro 3480: @item
1.25 noro 3481: @var{indexlist} で指定された多項式は, 前の方のものが優先的に使われる.
1.1 noro 3482: @item
1.25 noro 3483: 一般には @var{indexlist} の与え方により函数の値は異なる可能性があるが,
3484: グレブナ基底に対しては一意的に定まる.
1.1 noro 3485: @item
1.25 noro 3486: 分散表現でない固定された多項式集合による正規形を多数求める必要がある場合
3487: に便利である. 単一の演算に関しては, @code{p_nf}, @code{p_true_nf} を
3488: 用いるとよい.
1.2 noro 3489: \E
3490: \BEG
3491: @item
3492: Computes the normal form of a distributed polynomial.
3493: @item
1.18 noro 3494: Functions whose name contain @code{weyl} compute normal forms in Weyl algebra. The description below also applies to
3495: the functions for Weyl algebra.
3496: @item
1.2 noro 3497: @code{dp_nf_mod()} and @code{dp_true_nf_mod()} require
3498: distributed polynomials with coefficients in a finite field as arguments.
3499: @item
3500: The result of @code{dp_nf()} may be multiplied by a constant in the
3501: ground field in order to make the result integral. The same is true
3502: for @code{dp_nf_mod()}, but it returns the true normal form if
3503: the ground field is a finite field.
3504: @item
3505: @code{dp_true_nf()} and @code{dp_true_nf_mod()} return
3506: such a list as @code{[@var{nm},@var{dn}]}.
3507: Here @var{nm} is a distributed polynomial whose coefficients are integral
3508: in the ground field, @var{dn} is an integral element in the ground
3509: field and @var{nm}/@var{dn} is the true normal form.
3510: @item
3511: @var{dpolyarray} is a vector whose components are distributed polynomials
3512: and @var{indexlist} is a list of indices which is used for the normal form
3513: computation.
3514: @item
3515: When argument @var{fullreduce} has non-zero value,
3516: all terms are reduced. When it has value 0,
3517: only the head term is reduced.
3518: @item
3519: As for the polynomials specified by @var{indexlist}, one specified by
3520: an index placed at the preceding position has priority to be selected.
3521: @item
3522: In general, the result of the function may be different depending on
3523: @var{indexlist}. However, the result is unique for Groebner bases.
3524: @item
3525: These functions are useful when a fixed non-distributed polynomial set
3526: is used as a set of reducers to compute normal forms of many polynomials.
3527: For single computation @code{p_nf} and @code{p_true_nf} are sufficient.
3528: \E
1.1 noro 3529: @end itemize
3530:
3531: @example
3532: [0] load("gr")$
3533: [64] load("katsura")$
3534: [69] K=katsura(4)$
3535: [70] dp_ord(2)$
3536: [71] V=[u0,u1,u2,u3,u4]$
3537: [72] DP1=newvect(length(K),map(dp_ptod,K,V))$
3538: [73] G=gr(K,V,2)$
3539: [74] DP2=newvect(length(G),map(dp_ptod,G,V))$
3540: [75] T=dp_ptod((u0-u1+u2-u3+u4)^2,V)$
3541: [76] dp_dtop(dp_nf([0,1,2,3,4],T,DP1,1),V);
1.5 noro 3542: u4^2+(6*u3+2*u2+6*u1-2)*u4+9*u3^2+(6*u2+18*u1-6)*u3+u2^2
3543: +(6*u1-2)*u2+9*u1^2-6*u1+1
1.1 noro 3544: [77] dp_dtop(dp_nf([4,3,2,1,0],T,DP1,1),V);
3545: -5*u4^2+(-4*u3-4*u2-4*u1)*u4-u3^2-3*u3-u2^2+(2*u1-1)*u2-2*u1^2-3*u1+1
3546: [78] dp_dtop(dp_nf([0,1,2,3,4],T,DP2,1),V);
1.5 noro 3547: -11380879768451657780886122972730785203470970010204714556333530492210
3548: 456775930005716505560062087150928400876150217079820311439477560587583
3549: 488*u4^15+...
1.1 noro 3550: [79] dp_dtop(dp_nf([4,3,2,1,0],T,DP2,1),V);
1.5 noro 3551: -11380879768451657780886122972730785203470970010204714556333530492210
3552: 456775930005716505560062087150928400876150217079820311439477560587583
3553: 488*u4^15+...
1.1 noro 3554: [80] @@78==@@79;
3555: 1
3556: @end example
3557:
3558: @table @t
1.25 noro 3559: \JP @item 参照
1.2 noro 3560: \EG @item References
1.1 noro 3561: @fref{dp_dtop},
3562: @fref{dp_ord},
3563: @fref{dp_mod dp_rat},
3564: @fref{p_nf p_nf_mod p_true_nf p_true_nf_mod}.
3565: @end table
3566:
1.25 noro 3567: \JP @node dpm_nf dpm_nf_and_quotient,,, グレブナ基底に関する函数
1.23 noro 3568: \EG @node dpm_nf dpm_nf_and_quotient,,, Functions for Groebner basis computation
3569: @subsection @code{dpm_nf}, @code{dpm_nf_and_quotient}
3570: @findex dpm_nf
3571: @findex dpm_nf_and_quotient
3572:
3573: @table @t
3574: @item dpm_nf([@var{indexlist},]@var{dpoly},@var{dpolyarray},@var{fullreduce})
1.25 noro 3575: \JP :: 加群多項式の正規形を求める. (結果は定数倍されている可能性あり)
1.23 noro 3576:
3577: \BEG
3578: :: Computes the normal form of a module polynomial.
3579: (The result may be multiplied by a constant in the ground field.)
3580: \E
3581: @item dpm_nf_and_quotient([@var{indexlist},]@var{dpoly},@var{dpolyarray})
1.25 noro 3582: \JP :: 加群多項式の正規形と商を求める.
1.23 noro 3583: \BEG
3584: :: Computes the normal form of a module polynomial and the quotient.
3585: \E
3586: @end table
3587:
3588: @table @var
3589: @item return
1.25 noro 3590: \JP @code{dpm_nf()} : 加群多項式, @code{dpm_nf_and_quotient()} : リスト
1.23 noro 3591: \EG @code{dpm_nf()} : module polynomial, @code{dpm_nf_and_quotient()} : list
3592: @item indexlist
1.25 noro 3593: \JP リスト
1.23 noro 3594: \EG list
3595: @item dpoly
1.25 noro 3596: \JP 加群多項式
1.23 noro 3597: \EG module polynomial
3598: @item dpolyarray
1.25 noro 3599: \JP 配列
1.23 noro 3600: \EG array of module polynomial
3601: @end table
3602:
3603: @itemize @bullet
3604: \BJP
3605: @item
1.25 noro 3606: 加群多項式 @var{dpoly} の正規形を求める.
1.23 noro 3607: @item
1.25 noro 3608: 結果に有理数, 有理式が含まれるのを避けるため, @code{dpm_nf()} は
3609: 真の値の定数倍の値を返す.
1.23 noro 3610: @item
1.25 noro 3611: @var{dpolyarray} は加群多項式を要素とするベクトル,
3612: @var{indexlist} は正規化計算に用いる @var{dpolyarray} の要素のインデックス
1.23 noro 3613: @item
1.25 noro 3614: @var{indexlist} が与えられている場合, @var{dpolyarray} の中で, @var{indexlist} で指定されたもののみが, 前の方から優先的に使われる.
3615: @var{indexlist} が与えられていない場合には, @var{dpolyarray} の中の全ての多項式が前の方から優先的に使われる.
3616: @item
3617: @code{dpm_nf_and_quotient()} は,
3618: @code{[@var{nm},@var{dn},@var{quo}]} なる形のリストを返す.
3619: ただし, @var{nm} は係数に分数を含まない加群多項式, @var{dn} は
3620: 数または多項式で @var{nm}/@var{dn} が真の値となる.
3621: @var{quo} は除算の商を表す配列で, @var{dn}@var{dpoly}=@var{nm}+@var{quo[0]dpolyarray[0]+...} が成り立つ.
3622: のリスト.
1.23 noro 3623: @item
1.25 noro 3624: @var{fullreduce} が 0 でないとき全ての項に対して簡約を行う. @var{fullreduce}
3625: が 0 のとき頭項のみに対して簡約を行う.
1.23 noro 3626: \E
3627: \BEG
3628: @item
3629: Computes the normal form of a module polynomial.
3630: @item
3631: The result of @code{dpm_nf()} may be multiplied by a constant in the
3632: ground field in order to make the result integral.
3633: @item
3634: @var{dpolyarray} is a vector whose components are module polynomials
3635: and @var{indexlist} is a list of indices which is used for the normal form
3636: computation.
3637: @item
3638: If @var{indexlist} is given, only the polynomials in @var{dpolyarray} specified in @var{indexlist}
3639: is used in the division. An index placed at the preceding position has priority to be selected.
3640: If @var{indexlist} is not given, all the polynomials in @var{dpolyarray} are used.
3641: @item
3642: @code{dpm_nf_and_quotient()} returns
3643: such a list as @code{[@var{nm},@var{dn},@var{quo}]}.
3644: Here @var{nm} is a module polynomial whose coefficients are integral
3645: in the ground field, @var{dn} is an integral element in the ground
3646: field and @var{nm}/@var{dn} is the true normal form.
3647: @var{quo} is an array containing the quotients of the division satisfying
3648: @var{dn}@var{dpoly}=@var{nm}+@var{quo[0]dpolyarray[0]+...}.
3649: @item
3650: When argument @var{fullreduce} has non-zero value,
3651: all terms are reduced. When it has value 0,
3652: only the head term is reduced.
3653: \E
3654: @end itemize
3655:
3656: @example
3657: [2126] dp_ord([1,0])$
3658: [2127] S=ltov([(1)*<<0,0,2,0:1>>+(1)*<<0,0,1,1:1>>+(1)*<<0,0,0,2:1>>
3659: +(-1)*<<3,0,0,0:2>>+(-1)*<<0,0,2,1:2>>+(-1)*<<0,0,1,2:2>>
3660: +(1)*<<3,0,1,0:3>>+(1)*<<3,0,0,1:3>>+(1)*<<0,0,2,2:3>>,
3661: (-1)*<<0,1,0,0:1>>+(-1)*<<0,0,1,0:1>>+(-1)*<<0,0,0,1:1>>
3662: +(-1)*<<3,0,0,0:3>>+(1)*<<0,1,1,1:3>>,(1)*<<0,1,0,0:2>>
3663: +(1)*<<0,0,1,0:2>>+(1)*<<0,0,0,1:2>>+(-1)*<<0,1,1,0:3>>
3664: +(-1)*<<0,1,0,1:3>>+(-1)*<<0,0,1,1:3>>])$
3665: [2128] U=dpm_sp(S[0],S[1]);
3666: (1)*<<0,0,3,0:1>>+(-1)*<<0,1,1,1:1>>+(1)*<<0,0,2,1:1>>
3667: +(-1)*<<0,1,0,2:1>>+(1)*<<3,1,0,0:2>>+(1)*<<0,1,2,1:2>>
3668: +(1)*<<0,1,1,2:2>>+(-1)*<<3,1,1,0:3>>+(1)*<<3,0,2,0:3>>
3669: +(-1)*<<3,1,0,1:3>>+(-1)*<<0,1,3,1:3>>+(-1)*<<0,1,2,2:3>>
3670: [2129] dpm_nf(U,S,1);
3671: 0
3672: [2130] L=dpm_nf_and_quotient(U,S)$
3673: [2131] Q=L[2]$
3674: [2132] D=L[1]$
3675: [2133] D*U-(Q[1]*S[1]+Q[2]*S[2]);
3676: 0
3677: @end example
3678:
3679: @table @t
1.25 noro 3680: \JP @item 参照
1.23 noro 3681: \EG @item References
3682: @fref{dpm_sp},
3683: @fref{dp_ord}.
3684: @end table
3685:
3686:
1.25 noro 3687: \JP @node dp_hm dp_ht dp_hc dp_rest,,, グレブナ基底に関する函数
1.2 noro 3688: \EG @node dp_hm dp_ht dp_hc dp_rest,,, Functions for Groebner basis computation
1.1 noro 3689: @subsection @code{dp_hm}, @code{dp_ht}, @code{dp_hc}, @code{dp_rest}
3690: @findex dp_hm
3691: @findex dp_ht
3692: @findex dp_hc
3693: @findex dp_rest
3694:
3695: @table @t
3696: @item dp_hm(@var{dpoly})
1.25 noro 3697: \JP :: 頭単項式を取り出す.
1.2 noro 3698: \EG :: Gets the head monomial.
1.1 noro 3699: @item dp_ht(@var{dpoly})
1.25 noro 3700: \JP :: 頭項を取り出す.
1.2 noro 3701: \EG :: Gets the head term.
1.1 noro 3702: @item dp_hc(@var{dpoly})
1.25 noro 3703: \JP :: 頭係数を取り出す.
1.2 noro 3704: \EG :: Gets the head coefficient.
1.1 noro 3705: @item dp_rest(@var{dpoly})
1.25 noro 3706: \JP :: 頭単項式を取り除いた残りを返す.
1.2 noro 3707: \EG :: Gets the remainder of the polynomial where the head monomial is removed.
1.1 noro 3708: @end table
3709:
3710: @table @var
1.2 noro 3711: \BJP
1.1 noro 3712: @item return
1.25 noro 3713: @code{dp_hm()}, @code{dp_ht()}, @code{dp_rest()} : 分散表現多項式,
3714: @code{dp_hc()} : 数または多項式
1.1 noro 3715: @item dpoly
1.25 noro 3716: 分散表現多項式
1.2 noro 3717: \E
3718: \BEG
3719: @item return
3720: @code{dp_hm()}, @code{dp_ht()}, @code{dp_rest()} : distributed polynomial
3721: @code{dp_hc()} : number or polynomial
3722: @item dpoly
3723: distributed polynomial
3724: \E
1.1 noro 3725: @end table
3726:
3727: @itemize @bullet
1.2 noro 3728: \BJP
1.1 noro 3729: @item
1.25 noro 3730: これらは, 分散表現多項式の各部分を取り出すための函数である.
1.1 noro 3731: @item
1.25 noro 3732: 分散表現多項式 @var{p} に対し次が成り立つ.
1.2 noro 3733: \E
3734: \BEG
3735: @item
3736: These are used to get various parts of a distributed polynomial.
3737: @item
3738: The next equations hold for a distributed polynomial @var{p}.
3739: \E
1.1 noro 3740: @table @code
3741: @item @var{p} = dp_hm(@var{p}) + dp_rest(@var{p})
3742: @item dp_hm(@var{p}) = dp_hc(@var{p}) dp_ht(@var{p})
3743: @end table
3744: @end itemize
3745:
3746: @example
3747: [87] dp_ord(0)$
3748: [88] X=ptozp((a46^2+7/10*a46+7/48)*u3^4-50/27*a46^2-35/27*a46-49/216)$
3749: [89] T=dp_ptod(X,[u3,u4,a46])$
3750: [90] dp_hm(T);
3751: (2160)*<<4,0,2>>
3752: [91] dp_ht(T);
3753: (1)*<<4,0,2>>
3754: [92] dp_hc(T);
3755: 2160
3756: [93] dp_rest(T);
3757: (1512)*<<4,0,1>>+(315)*<<4,0,0>>+(-4000)*<<0,0,2>>+(-2800)*<<0,0,1>>
3758: +(-490)*<<0,0,0>>
3759: @end example
3760:
1.25 noro 3761: \JP @node dpm_hm dpm_ht dpm_hc dpm_hp dpm_rest,,, グレブナ基底に関する函数
1.23 noro 3762: \EG @node dpm_hm dpm_ht dpm_hc dpm_hp dpm_rest,,, Functions for Groebner basis computation
3763: @subsection @code{dpm_hm}, @code{dpm_ht}, @code{dpm_hc}, @code{dpm_hp}, @code{dpm_rest}
3764: @findex dpm_hm
3765: @findex dpm_ht
3766: @findex dpm_hc
3767: @findex dpm_hp
3768: @findex dpm_rest
3769:
3770: @table @t
3771: @item dpm_hm(@var{dpoly})
1.25 noro 3772: \JP :: 加群多項式の頭単項式を取り出す.
1.23 noro 3773: \EG :: Gets the head monomial of a module polynomial.
3774: @item dpm_ht(@var{dpoly})
1.25 noro 3775: \JP :: 加群多項式の頭項を取り出す.
1.23 noro 3776: \EG :: Gets the head term of a module polynomial.
3777: @item dpm_hc(@var{dpoly})
1.25 noro 3778: \JP :: 加群多項式の頭係数を取り出す.
1.23 noro 3779: \EG :: Gets the head coefficient of a module polynomial.
3780: @item dpm_hp(@var{dpoly})
1.25 noro 3781: \JP :: 加群多項式の頭位置を取り出す.
1.23 noro 3782: \EG :: Gets the head position of a module polynomial.
3783: @item dpm_rest(@var{dpoly})
1.25 noro 3784: \JP :: 加群多項式の頭単項式を取り除いた残りを返す.
1.23 noro 3785: \EG :: Gets the remainder of a module polynomial where the head monomial is removed.
3786: @end table
3787:
3788: @table @var
3789: \BJP
3790: @item return
1.25 noro 3791: @code{dp_hm()}, @code{dp_ht()}, @code{dp_rest()} : 加群多項式,
3792: @code{dp_hc()} : 数または多項式
1.23 noro 3793: @item dpoly
1.25 noro 3794: 加群多項式
1.23 noro 3795: \E
3796: \BEG
3797: @item return
3798: @code{dpm_hm()}, @code{dpm_ht()}, @code{dpm_rest()} : module polynomial
3799: @code{dpm_hc()} : monomial
3800: @item dpoly
3801: distributed polynomial
3802: \E
3803: @end table
3804:
3805: @itemize @bullet
3806: \BJP
3807: @item
1.25 noro 3808: これらは, 加群多項式の各部分を取り出すための函数である.
1.23 noro 3809: @item
1.25 noro 3810: @code{dpm_hc()} は, @code{dpm_hm()} の, 標準基底に関する係数である単項式を返す.
3811: スカラー係数を取り出すには, さらに @code{dp_hc()} を実行する.
1.23 noro 3812: @item
1.25 noro 3813: @code{dpm_hp()} は, 頭加群単項式に含まれる標準基底のインデックスを返す.
1.23 noro 3814: \E
3815: \BEG
3816: @item
3817: These are used to get various parts of a module polynomial.
3818: @item
3819: @code{dpm_hc()} returns the monomial that is the coefficient of @code{dpm_hm()} with respect to the
3820: standard base.
3821: For getting its scalar coefficient apply @code{dp_hc()}.
3822: @item
3823: @code{dpm_hp()} returns the index of the standard base conteind in the head module monomial.
3824: \E
3825: @end itemize
3826:
3827: @example
3828: [2126] dp_ord([1,0]);
3829: [1,0]
3830: [2127] F=2*<<1,2,0:2>>-3*<<1,0,2:3>>+<<2,1,0:2>>;
3831: (1)*<<2,1,0:2>>+(2)*<<1,2,0:2>>+(-3)*<<1,0,2:3>>
3832: [2128] M=dpm_hm(F);
3833: (1)*<<2,1,0:2>>
3834: [2129] C=dpm_hc(F);
3835: (1)*<<2,1,0>>
3836: [2130] R=dpm_rest(F);
3837: (2)*<<1,2,0:2>>+(-3)*<<1,0,2:3>>
3838: [2131] dpm_hp(F);
3839: 2
3840: @end example
3841:
3842:
1.25 noro 3843: \JP @node dp_td dp_sugar,,, グレブナ基底に関する函数
1.2 noro 3844: \EG @node dp_td dp_sugar,,, Functions for Groebner basis computation
1.1 noro 3845: @subsection @code{dp_td}, @code{dp_sugar}
3846: @findex dp_td
3847: @findex dp_sugar
3848:
3849: @table @t
3850: @item dp_td(@var{dpoly})
1.25 noro 3851: \JP :: 頭項の全次数を返す.
1.2 noro 3852: \EG :: Gets the total degree of the head term.
1.1 noro 3853: @item dp_sugar(@var{dpoly})
1.25 noro 3854: \JP :: 多項式の @code{sugar} を返す.
1.2 noro 3855: \EG :: Gets the @code{sugar} of a polynomial.
1.1 noro 3856: @end table
3857:
3858: @table @var
3859: @item return
1.25 noro 3860: \JP 自然数
1.2 noro 3861: \EG non-negative integer
1.1 noro 3862: @item dpoly
1.25 noro 3863: \JP 分散表現多項式
1.2 noro 3864: \EG distributed polynomial
1.1 noro 3865: @item onoff
1.25 noro 3866: \JP フラグ
1.2 noro 3867: \EG flag
1.1 noro 3868: @end table
3869:
3870: @itemize @bullet
1.2 noro 3871: \BJP
1.1 noro 3872: @item
1.25 noro 3873: @code{dp_td()} は, 頭項の全次数, すなわち各変数の指数の和を返す.
1.1 noro 3874: @item
1.25 noro 3875: 分散表現多項式が生成されると, @code{sugar} と呼ばれるある整数が付与
3876: される. この値は 仮想的に斉次化して計算した場合に結果が持つ全次数の値となる.
1.1 noro 3877: @item
1.25 noro 3878: @code{sugar} は, グレブナ基底計算における正規化対の選択のストラテジを
3879: 決定するための重要な指針となる.
1.2 noro 3880: \E
3881: \BEG
3882: @item
3883: Function @code{dp_td()} returns the total degree of the head term,
3884: i.e., the sum of all exponent of variables in that term.
3885: @item
3886: Upon creation of a distributed polynomial, an integer called @code{sugar}
3887: is associated. This value is
3888: the total degree of the virtually homogenized one of the original
3889: polynomial.
3890: @item
3891: The quantity @code{sugar} is an important guide to determine the
3892: selection strategy of critical pairs in Groebner basis computation.
3893: \E
1.1 noro 3894: @end itemize
3895:
3896: @example
3897: [74] dp_ord(0)$
3898: [75] X=<<1,2>>+<<0,1>>$
3899: [76] Y=<<1,2>>+<<1,0>>$
3900: [77] Z=X-Y;
3901: (-1)*<<1,0>>+(1)*<<0,1>>
3902: [78] dp_sugar(T);
3903: 3
3904: @end example
3905:
1.25 noro 3906: \JP @node dp_lcm,,, グレブナ基底に関する函数
1.2 noro 3907: \EG @node dp_lcm,,, Functions for Groebner basis computation
1.1 noro 3908: @subsection @code{dp_lcm}
3909: @findex dp_lcm
3910:
3911: @table @t
3912: @item dp_lcm(@var{dpoly1},@var{dpoly2})
1.25 noro 3913: \JP :: 最小公倍項を返す.
1.2 noro 3914: \EG :: Returns the least common multiple of the head terms of the given two polynomials.
1.1 noro 3915: @end table
3916:
3917: @table @var
3918: @item return
1.25 noro 3919: \JP 分散表現多項式
1.2 noro 3920: \EG distributed polynomial
1.4 noro 3921: @item dpoly1 dpoly2
1.25 noro 3922: \JP 分散表現多項式
1.2 noro 3923: \EG distributed polynomial
1.1 noro 3924: @end table
3925:
3926: @itemize @bullet
1.2 noro 3927: \BJP
1.1 noro 3928: @item
1.25 noro 3929: それぞれの引数の頭項の最小公倍項を返す. 係数は 1 である.
1.2 noro 3930: \E
3931: \BEG
3932: @item
3933: Returns the least common multiple of the head terms of the given
3934: two polynomials, where coefficient is always set to 1.
3935: \E
1.1 noro 3936: @end itemize
3937:
3938: @example
3939: [100] dp_lcm(<<1,2,3,4,5>>,<<5,4,3,2,1>>);
3940: (1)*<<5,4,3,4,5>>
3941: @end example
3942:
3943: @table @t
1.25 noro 3944: \JP @item 参照
1.2 noro 3945: \EG @item References
1.1 noro 3946: @fref{p_nf p_nf_mod p_true_nf p_true_nf_mod}.
3947: @end table
3948:
1.25 noro 3949: \JP @node dp_redble,,, グレブナ基底に関する函数
1.2 noro 3950: \EG @node dp_redble,,, Functions for Groebner basis computation
1.1 noro 3951: @subsection @code{dp_redble}
3952: @findex dp_redble
3953:
3954: @table @t
3955: @item dp_redble(@var{dpoly1},@var{dpoly2})
1.25 noro 3956: \JP :: 頭項どうしが整除可能かどうか調べる.
1.2 noro 3957: \EG :: Checks whether one head term is divisible by the other head term.
1.1 noro 3958: @end table
3959:
3960: @table @var
3961: @item return
1.25 noro 3962: \JP 整数
1.2 noro 3963: \EG integer
1.4 noro 3964: @item dpoly1 dpoly2
1.25 noro 3965: \JP 分散表現多項式
1.2 noro 3966: \EG distributed polynomial
1.1 noro 3967: @end table
3968:
3969: @itemize @bullet
1.2 noro 3970: \BJP
1.1 noro 3971: @item
1.25 noro 3972: @var{dpoly1} の頭項が @var{dpoly2} の頭項で割り切れれば 1, 割り切れなければ
3973: 0 を返す.
1.1 noro 3974: @item
1.25 noro 3975: 多項式の簡約を行う際, どの項を簡約できるかを探すのに用いる.
1.2 noro 3976: \E
3977: \BEG
3978: @item
3979: Returns 1 if the head term of @var{dpoly2} divides the head term of
3980: @var{dpoly1}; otherwise 0.
3981: @item
3982: Used for finding candidate terms at reduction of polynomials.
3983: \E
1.1 noro 3984: @end itemize
3985:
3986: @example
3987: [148] C;
3988: (1)*<<1,1,1,0,0>>+(1)*<<0,1,1,1,0>>+(1)*<<1,1,0,0,1>>+(1)*<<1,0,0,1,1>>
3989: [149] T;
3990: (3)*<<2,1,0,0,0>>+(3)*<<1,2,0,0,0>>+(1)*<<0,3,0,0,0>>+(6)*<<1,1,1,0,0>>
3991: [150] for ( ; T; T = dp_rest(T)) print(dp_redble(T,C));
3992: 0
3993: 0
3994: 0
3995: 1
3996: @end example
3997:
3998: @table @t
1.25 noro 3999: \JP @item 参照
1.2 noro 4000: \EG @item References
1.1 noro 4001: @fref{dp_red dp_red_mod}.
4002: @end table
4003:
1.25 noro 4004: \JP @node dpm_redble,,, グレブナ基底に関する函数
1.23 noro 4005: \EG @node dpm_redble,,, Functions for Groebner basis computation
4006: @subsection @code{dpm_redble}
4007: @findex dpm_redble
4008:
4009: @table @t
4010: @item dpm_redble(@var{dpoly1},@var{dpoly2})
1.25 noro 4011: \JP :: 頭項どうしが整除可能かどうか調べる.
1.23 noro 4012: \EG :: Checks whether one head term is divisible by the other head term.
4013: @end table
4014:
4015: @table @var
4016: @item return
1.25 noro 4017: \JP 整数
1.23 noro 4018: \EG integer
4019: @item dpoly1 dpoly2
1.25 noro 4020: \JP 加群多項式
1.23 noro 4021: \EG module polynomial
4022: @end table
4023:
4024: @itemize @bullet
4025: \BJP
4026: @item
1.25 noro 4027: @var{dpoly1} の頭項が @var{dpoly2} の頭項で割り切れれば 1, 割り切れなければ
4028: 0 を返す.
1.23 noro 4029: @item
1.25 noro 4030: 多項式の簡約を行う際, どの項を簡約できるかを探すのに用いる.
1.23 noro 4031: \E
4032: \BEG
4033: @item
4034: Returns 1 if the head term of @var{dpoly2} divides the head term of
4035: @var{dpoly1}; otherwise 0.
4036: @item
4037: Used for finding candidate terms at reduction of polynomials.
4038: \E
4039: @end itemize
4040:
1.25 noro 4041: \JP @node dp_subd,,, グレブナ基底に関する函数
1.2 noro 4042: \EG @node dp_subd,,, Functions for Groebner basis computation
1.1 noro 4043: @subsection @code{dp_subd}
4044: @findex dp_subd
4045:
4046: @table @t
4047: @item dp_subd(@var{dpoly1},@var{dpoly2})
1.25 noro 4048: \JP :: 頭項の商単項式を返す.
1.2 noro 4049: \EG :: Returns the quotient monomial of the head terms.
1.1 noro 4050: @end table
4051:
4052: @table @var
4053: @item return
1.25 noro 4054: \JP 分散表現多項式
1.2 noro 4055: \EG distributed polynomial
1.4 noro 4056: @item dpoly1 dpoly2
1.25 noro 4057: \JP 分散表現多項式
1.2 noro 4058: \EG distributed polynomial
1.1 noro 4059: @end table
4060:
4061: @itemize @bullet
1.2 noro 4062: \BJP
1.1 noro 4063: @item
1.25 noro 4064: @code{dp_ht(@var{dpoly1})/dp_ht(@var{dpoly2})} を求める. 結果の係数は 1
4065: である.
1.1 noro 4066: @item
1.25 noro 4067: 割り切れることがあらかじめわかっている必要がある.
1.2 noro 4068: \E
4069: \BEG
4070: @item
4071: Gets @code{dp_ht(@var{dpoly1})/dp_ht(@var{dpoly2})}.
4072: The coefficient of the result is always set to 1.
4073: @item
4074: Divisibility assumed.
4075: \E
1.1 noro 4076: @end itemize
4077:
4078: @example
4079: [162] dp_subd(<<1,2,3,4,5>>,<<1,1,2,3,4>>);
4080: (1)*<<0,1,1,1,1>>
4081: @end example
4082:
4083: @table @t
1.25 noro 4084: \JP @item 参照
1.2 noro 4085: \EG @item References
1.1 noro 4086: @fref{dp_red dp_red_mod}.
4087: @end table
4088:
1.25 noro 4089: \JP @node dp_vtoe dp_etov,,, グレブナ基底に関する函数
1.2 noro 4090: \EG @node dp_vtoe dp_etov,,, Functions for Groebner basis computation
1.1 noro 4091: @subsection @code{dp_vtoe}, @code{dp_etov}
4092: @findex dp_vtoe
4093: @findex dp_etov
4094:
4095: @table @t
4096: @item dp_vtoe(@var{vect})
1.25 noro 4097: \JP :: 指数ベクトルを項に変換
1.2 noro 4098: \EG :: Converts an exponent vector into a term.
1.1 noro 4099: @item dp_etov(@var{dpoly})
1.25 noro 4100: \JP :: 頭項を指数ベクトルに変換
1.2 noro 4101: \EG :: Convert the head term of a distributed polynomial into an exponent vector.
1.1 noro 4102: @end table
4103:
4104: @table @var
4105: @item return
1.25 noro 4106: \JP @code{dp_vtoe} : 分散表現多項式, @code{dp_etov} : ベクトル
1.2 noro 4107: \EG @code{dp_vtoe} : distributed polynomial, @code{dp_etov} : vector
1.1 noro 4108: @item vect
1.25 noro 4109: \JP ベクトル
1.2 noro 4110: \EG vector
1.1 noro 4111: @item dpoly
1.25 noro 4112: \JP 分散表現多項式
1.2 noro 4113: \EG distributed polynomial
1.1 noro 4114: @end table
4115:
4116: @itemize @bullet
1.2 noro 4117: \BJP
1.1 noro 4118: @item
1.25 noro 4119: @code{dp_vtoe()} は, ベクトル @var{vect} を指数ベクトルとする項を生成する.
1.1 noro 4120: @item
1.25 noro 4121: @code{dp_etov()} は, 分散表現多項式 @code{dpoly} の頭項の指数ベクトルを
4122: ベクトルに変換する.
1.2 noro 4123: \E
4124: \BEG
4125: @item
4126: @code{dp_vtoe()} generates a term whose exponent vector is @var{vect}.
4127: @item
4128: @code{dp_etov()} generates a vector which is the exponent vector of the
4129: head term of @code{dpoly}.
4130: \E
1.1 noro 4131: @end itemize
4132:
4133: @example
4134: [211] X=<<1,2,3>>;
4135: (1)*<<1,2,3>>
4136: [212] V=dp_etov(X);
4137: [ 1 2 3 ]
4138: [213] V[2]++$
4139: [214] Y=dp_vtoe(V);
4140: (1)*<<1,2,4>>
4141: @end example
4142:
1.25 noro 4143: \JP @node dp_mbase,,, グレブナ基底に関する函数
1.2 noro 4144: \EG @node dp_mbase,,, Functions for Groebner basis computation
1.1 noro 4145: @subsection @code{dp_mbase}
4146: @findex dp_mbase
4147:
4148: @table @t
4149: @item dp_mbase(@var{dplist})
1.25 noro 4150: \JP :: monomial 基底の計算
1.2 noro 4151: \EG :: Computes the monomial basis
1.1 noro 4152: @end table
4153:
4154: @table @var
4155: @item return
1.25 noro 4156: \JP 分散表現多項式のリスト
1.2 noro 4157: \EG list of distributed polynomial
1.1 noro 4158: @item dplist
1.25 noro 4159: \JP 分散表現多項式のリスト
1.2 noro 4160: \EG list of distributed polynomial
1.1 noro 4161: @end table
4162:
4163: @itemize @bullet
1.2 noro 4164: \BJP
1.1 noro 4165: @item
1.25 noro 4166: ある順序でグレブナ基底となっている多項式集合の, その順序に関する分散表現
4167: である @var{dplist} について,
4168: @var{dplist} が K[X] 中で生成するイデアル I が 0 次元の時,
4169: K 上有限次元線形空間である K[X]/I の monomial による基底を求める.
1.1 noro 4170: @item
1.25 noro 4171: 得られた基底の個数が, K[X]/I の K-線形空間としての次元に等しい.
1.2 noro 4172: \E
4173: \BEG
4174: @item
4175: Assuming that @var{dplist} is a list of distributed polynomials which
4176: is a Groebner basis with respect to the current ordering type and
4177: that the ideal @var{I} generated by @var{dplist} in K[X] is zero-dimensional,
4178: this function computes the monomial basis of a finite dimenstional K-vector
4179: space K[X]/I.
4180: @item
4181: The number of elements in the monomial basis is equal to the
4182: K-dimenstion of K[X]/I.
4183: \E
1.1 noro 4184: @end itemize
4185:
4186: @example
4187: [215] K=katsura(5)$
4188: [216] V=[u5,u4,u3,u2,u1,u0]$
4189: [217] G0=gr(K,V,0)$
4190: [218] H=map(dp_ptod,G0,V)$
4191: [219] map(dp_ptod,dp_mbase(H),V)$
4192: [u0^5,u4*u0^3,u3*u0^3,u2*u0^3,u1*u0^3,u0^4,u3^2*u0,u2*u3*u0,u1*u3*u0,
4193: u1*u2*u0,u1^2*u0,u4*u0^2,u3*u0^2,u2*u0^2,u1*u0^2,u0^3,u3^2,u2*u3,u1*u3,
4194: u1*u2,u1^2,u4*u0,u3*u0,u2*u0,u1*u0,u0^2,u4,u3,u2,u1,u0,1]
4195: @end example
4196:
4197: @table @t
1.25 noro 4198: \JP @item 参照
1.2 noro 4199: \EG @item References
1.1 noro 4200: @fref{gr hgr gr_mod}.
4201: @end table
4202:
1.25 noro 4203: \JP @node dp_mag,,, グレブナ基底に関する函数
1.2 noro 4204: \EG @node dp_mag,,, Functions for Groebner basis computation
1.1 noro 4205: @subsection @code{dp_mag}
4206: @findex dp_mag
4207:
4208: @table @t
4209: @item dp_mag(@var{p})
1.25 noro 4210: \JP :: 係数のビット長の和を返す
1.2 noro 4211: \EG :: Computes the sum of bit lengths of coefficients of a distributed polynomial.
1.1 noro 4212: @end table
4213:
4214: @table @var
4215: @item return
1.25 noro 4216: \JP 数
1.2 noro 4217: \EG integer
1.1 noro 4218: @item p
1.25 noro 4219: \JP 分散表現多項式
1.2 noro 4220: \EG distributed polynomial
1.1 noro 4221: @end table
4222:
4223: @itemize @bullet
1.2 noro 4224: \BJP
1.1 noro 4225: @item
1.25 noro 4226: 分散表現多項式の係数に現れる有理数につき, その分母分子 (整数の場合は分子)
4227: のビット長の総和を返す.
1.1 noro 4228: @item
1.25 noro 4229: 対象となる多項式の大きさの目安として有効である. 特に, 0 次元システムにおいては
4230: 係数膨張が問題となり, 途中生成される多項式が係数膨張を起こしているかどうか
4231: の判定に役立つ.
1.1 noro 4232: @item
1.25 noro 4233: @code{dp_gr_flags()} で, @code{ShowMag}, @code{Print} を on にすることにより
4234: 途中生成される多項式にたいする @code{dp_mag()} の値を見ることができる.
1.2 noro 4235: \E
4236: \BEG
4237: @item
4238: This function computes the sum of bit lengths of coefficients of a
4239: distributed polynomial @var{p}. If a coefficient is non integral,
4240: the sum of bit lengths of the numerator and the denominator is taken.
4241: @item
4242: This is a measure of the size of a polynomial. Especially for
4243: zero-dimensional system coefficient swells are often serious and
4244: the returned value is useful to detect such swells.
4245: @item
4246: If @code{ShowMag} and @code{Print} for @code{dp_gr_flags()} are on,
4247: values of @code{dp_mag()} for intermediate basis elements are shown.
4248: \E
1.1 noro 4249: @end itemize
4250:
4251: @example
4252: [221] X=dp_ptod((x+2*y)^10,[x,y])$
4253: [222] dp_mag(X);
4254: 115
4255: @end example
4256:
4257: @table @t
1.25 noro 4258: \JP @item 参照
1.2 noro 4259: \EG @item References
1.1 noro 4260: @fref{dp_gr_flags dp_gr_print}.
4261: @end table
4262:
1.25 noro 4263: \JP @node dp_red dp_red_mod,,, グレブナ基底に関する函数
1.2 noro 4264: \EG @node dp_red dp_red_mod,,, Functions for Groebner basis computation
1.1 noro 4265: @subsection @code{dp_red}, @code{dp_red_mod}
4266: @findex dp_red
4267: @findex dp_red_mod
4268:
4269: @table @t
4270: @item dp_red(@var{dpoly1},@var{dpoly2},@var{dpoly3})
4271: @item dp_red_mod(@var{dpoly1},@var{dpoly2},@var{dpoly3},@var{mod})
1.25 noro 4272: \JP :: 一回の簡約操作
1.2 noro 4273: \EG :: Single reduction operation
1.1 noro 4274: @end table
4275:
4276: @table @var
4277: @item return
1.25 noro 4278: \JP リスト
1.2 noro 4279: \EG list
1.4 noro 4280: @item dpoly1 dpoly2 dpoly3
1.25 noro 4281: \JP 分散表現多項式
1.2 noro 4282: \EG distributed polynomial
1.1 noro 4283: @item vlist
1.25 noro 4284: \JP リスト
1.2 noro 4285: \EG list
1.1 noro 4286: @item mod
1.25 noro 4287: \JP 素数
1.2 noro 4288: \EG prime
1.1 noro 4289: @end table
4290:
4291: @itemize @bullet
1.2 noro 4292: \BJP
1.1 noro 4293: @item
1.25 noro 4294: @var{dpoly1} + @var{dpoly2} なる分散表現多項式を @var{dpoly3} で
4295: 1 回簡約する.
1.1 noro 4296: @item
1.25 noro 4297: @code{dp_red_mod()} の入力は, 全て有限体係数に変換されている必要がある.
1.1 noro 4298: @item
1.25 noro 4299: 簡約される項は @var{dpoly2} の頭項である. 従って, @var{dpoly2} の
4300: 頭項が @var{dpoly3} の頭項で割り切れることがあらかじめわかっていなければ
4301: ならない.
1.1 noro 4302: @item
1.25 noro 4303: 引数が整数係数の時, 簡約は, 分数が現れないよう, 整数 @var{a}, @var{b},
4304: 項 @var{t} により @var{a}(@var{dpoly1} + @var{dpoly2})-@var{bt} @var{dpoly3} として計算される.
1.1 noro 4305: @item
1.25 noro 4306: 結果は, @code{[@var{a dpoly1},@var{a dpoly2 - bt dpoly3}]} なるリストである.
1.2 noro 4307: \E
4308: \BEG
4309: @item
4310: Reduces a distributed polynomial, @var{dpoly1} + @var{dpoly2},
4311: by @var{dpoly3} for single time.
4312: @item
4313: An input for @code{dp_red_mod()} must be converted into a distributed
4314: polynomial with coefficients in a finite field.
4315: @item
4316: This implies that
4317: the divisibility of the head term of @var{dpoly2} by the head term of
4318: @var{dpoly3} is assumed.
4319: @item
4320: When integral coefficients, computation is so carefully performed that
4321: no rational operations appear in the reduction procedure.
4322: It is computed for integers @var{a} and @var{b}, and a term @var{t} as:
1.4 noro 4323: @var{a}(@var{dpoly1} + @var{dpoly2})-@var{bt} @var{dpoly3}.
1.2 noro 4324: @item
4325: The result is a list @code{[@var{a dpoly1},@var{a dpoly2 - bt dpoly3}]}.
4326: \E
1.1 noro 4327: @end itemize
4328:
4329: @example
4330: [157] D=(3)*<<2,1,0,0,0>>+(3)*<<1,2,0,0,0>>+(1)*<<0,3,0,0,0>>;
4331: (3)*<<2,1,0,0,0>>+(3)*<<1,2,0,0,0>>+(1)*<<0,3,0,0,0>>
4332: [158] R=(6)*<<1,1,1,0,0>>;
4333: (6)*<<1,1,1,0,0>>
4334: [159] C=12*<<1,1,1,0,0>>+(1)*<<0,1,1,1,0>>+(1)*<<1,1,0,0,1>>;
4335: (12)*<<1,1,1,0,0>>+(1)*<<0,1,1,1,0>>+(1)*<<1,1,0,0,1>>
4336: [160] dp_red(D,R,C);
1.5 noro 4337: [(6)*<<2,1,0,0,0>>+(6)*<<1,2,0,0,0>>+(2)*<<0,3,0,0,0>>,
4338: (-1)*<<0,1,1,1,0>>+(-1)*<<1,1,0,0,1>>]
1.1 noro 4339: @end example
4340:
4341: @table @t
1.25 noro 4342: \JP @item 参照
1.2 noro 4343: \EG @item References
1.1 noro 4344: @fref{dp_mod dp_rat}.
4345: @end table
4346:
1.25 noro 4347: \JP @node dp_sp dp_sp_mod,,, グレブナ基底に関する函数
1.2 noro 4348: \EG @node dp_sp dp_sp_mod,,, Functions for Groebner basis computation
1.1 noro 4349: @subsection @code{dp_sp}, @code{dp_sp_mod}
4350: @findex dp_sp
4351: @findex dp_sp_mod
4352:
4353: @table @t
4354: @item dp_sp(@var{dpoly1},@var{dpoly2})
4355: @item dp_sp_mod(@var{dpoly1},@var{dpoly2},@var{mod})
1.25 noro 4356: \JP :: S-多項式の計算
1.2 noro 4357: \EG :: Computation of an S-polynomial
1.1 noro 4358: @end table
4359:
4360: @table @var
4361: @item return
1.25 noro 4362: \JP 分散表現多項式
1.2 noro 4363: \EG distributed polynomial
1.4 noro 4364: @item dpoly1 dpoly2
1.25 noro 4365: \JP 分散表現多項式
1.2 noro 4366: \EG distributed polynomial
1.1 noro 4367: @item mod
1.25 noro 4368: \JP 素数
1.2 noro 4369: \EG prime
1.1 noro 4370: @end table
4371:
4372: @itemize @bullet
1.2 noro 4373: \BJP
1.1 noro 4374: @item
1.25 noro 4375: @var{dpoly1}, @var{dpoly2} の S-多項式を計算する.
1.1 noro 4376: @item
1.25 noro 4377: @code{dp_sp_mod()} の入力は, 全て有限体係数に変換されている必要がある.
1.1 noro 4378: @item
1.25 noro 4379: 結果に有理数, 有理式が入るのを避けるため, 結果が定数倍, あるいは多項式
4380: 倍されている可能性がある.
1.2 noro 4381: \E
4382: \BEG
4383: @item
4384: This function computes the S-polynomial of @var{dpoly1} and @var{dpoly2}.
4385: @item
4386: Inputs of @code{dp_sp_mod()} must be polynomials with coefficients in a
4387: finite field.
4388: @item
4389: The result may be multiplied by a constant in the ground field in order to
4390: make the result integral.
4391: \E
1.1 noro 4392: @end itemize
4393:
4394: @example
4395: [227] X=dp_ptod(x^2*y+x*y,[x,y]);
4396: (1)*<<2,1>>+(1)*<<1,1>>
4397: [228] Y=dp_ptod(x*y^2+x*y,[x,y]);
4398: (1)*<<1,2>>+(1)*<<1,1>>
4399: [229] dp_sp(X,Y);
4400: (-1)*<<2,1>>+(1)*<<1,2>>
4401: @end example
4402:
4403: @table @t
1.25 noro 4404: \JP @item 参照
1.2 noro 4405: \EG @item References
1.1 noro 4406: @fref{dp_mod dp_rat}.
4407: @end table
1.23 noro 4408:
1.25 noro 4409: \JP @node dpm_sp,,, グレブナ基底に関する函数
1.23 noro 4410: \EG @node dmp_sp,,, Functions for Groebner basis computation
4411: @subsection @code{dpm_sp}
4412: @findex dpm_sp
4413:
4414: @table @t
4415: @item dpm_sp(@var{dpoly1},@var{dpoly2}[|coef=1])
1.25 noro 4416: \JP :: S-多項式の計算
1.23 noro 4417: \EG :: Computation of an S-polynomial
4418: @end table
4419:
4420: @table @var
4421: @item return
1.25 noro 4422: \JP 加群多項式またはリスト
1.23 noro 4423: \EG module polynomial or list
4424: @item dpoly1 dpoly2
1.25 noro 4425: \JP 加群多項式
1.23 noro 4426: \EG module polynomial
1.25 noro 4427: \JP 分散表現多項式
1.23 noro 4428: @end table
4429:
4430: @itemize @bullet
4431: \BJP
4432: @item
1.25 noro 4433: @var{dpoly1}, @var{dpoly2} の S-多項式を計算する.
1.23 noro 4434: @item
1.25 noro 4435: オプション @var{coef=1} が指定されている場合, @code{[S,t1,t2]} なるリストを返す.
4436: ここで, @code{t1}, @code{t2} はS-多項式を作る際の係数単項式で @code{S=t1 dpoly1-t2 dpoly2}
4437: を満たす.
1.23 noro 4438: \E
4439: \BEG
4440: @item
4441: This function computes the S-polynomial of @var{dpoly1} and @var{dpoly2}.
4442: @item
4443: If an option @var{coef=1} is specified, it returns a list @code{[S,t1,t2]},
4444: where @code{S} is the S-polynmial and @code{t1}, @code{t2} are monomials satisfying @code{S=t1 dpoly1-t2 dpoly2}.
4445: \E
4446: @end itemize
4447:
1.25 noro 4448: \JP @node dpm_schreyer_base,,, グレブナ基底に関する函数
4449: \EG @node dmp_schreyer_base,,, Functions for Groebner basis computation
4450: @subsection @code{dpm_schreyer_base}
4451: @findex dpm_schreyer_base
4452:
4453: @table @t
4454: @item dpm_schreyer_base(@var{G})
4455: \JP :: szygy 加群のグレブナー基底の計算
4456: \EG :: Computation of a Groebner basis of the syzygy module
4457: @end table
4458:
4459: @table @var
4460: @item return
4461: \JP 加群多項式リスト
4462: \EG list of module polynomials
4463: @item G
4464: \JP 加群多項式リスト
4465: \EG list of module polynomials
4466: @end table
4467:
4468: @itemize @bullet
4469: \BJP
4470: @item
4471: 加群多項式で表された簡約グレブナー基底 @var{G} に対し, @var{syz(G)} の極小グレブナー基底を計算して返す.
4472: @item
4473: 得られる結果は, @var{G} の先頭項から定まる Schreyer 順序に関するグレブナー基底である.
4474: 副作用として, この Schreyer 順序が自動的に設定される.
4475: \E
4476: \BEG
4477: @item
4478: This function computes a minimal Groebner basis of @var{syz(G)} for a Groenber basis @var{G}
4479: that is represented as a list of module polynomials.
4480: @item
4481: The result is a Groebner basis with respect to a Schreyer ordering determined by the leading terms of
4482: @var{G}. As a side effect, this Schreyer ordering is autoatically set.
4483: \E
4484: @end itemize
4485:
4486: \JP @node dpm_schreyer_frame,,, グレブナ基底に関する函数
4487: \EG @node dmp_schreyer_frame,,, Functions for Groebner basis computation
4488: @subsection @code{dpm_schreyer_frame}
4489: @findex dpm_schreyer_frame
4490:
4491: @table @t
4492: @item dpm_schreyer_frame(@var{G})
4493: \JP :: Schreyer フレームの計算
4494: \EG :: Computation of the Schreyer frame
4495: @end table
4496:
4497: @table @var
4498: @item return
4499: \JP 加群単項式リストのリスト
4500: \EG a list of lists of module monomials
4501: @item G
4502: \JP 加群多項式リスト
4503: \EG list of module polynomials
4504: @end table
4505:
4506: @itemize @bullet
4507: \BJP
4508: @item
4509: @var{G} の先頭項からスタートして, Schreyer フレーム, すなわち Schreyer の自由分解に現れるグレブナー基底の,
4510: Schreyer 順序に関する先頭単項式を計算する.
4511: @item
1.26 ! noro 4512: 得られる結果は, 自由分解における @var{F}_i の標準基底の像の先頭単項式のリスト @var{M}_i のリスト
! 4513: [@var{M}_m,...,@var{M}_1] である.
1.25 noro 4514: @item
4515: 副作用として, 各レベルにおける Schreyer 順序を設定するためのデータが作られる. このデータは
4516: @code{dpm_set_schreyer_level} により, 各レベルの Schreyer 順序を設定する際に用いられる.
4517: \E
4518: \BEG
4519: @item
4520: This function computes the Schreyer frame starting from a Groebner basis @var{G}, that is the lists of leading monomials of Groebner bases
4521: of syzygy modules with respect to Schreyer orderings in the Schreyer free resolution.
4522: @item
1.26 ! noro 4523: The result is a list [@var{M}_m,...,@var{M}_1], where @var{M}_i is the list of leading monomials of
! 4524: the images of standard bases of the free module @var{F}_i in the Schreyer free resolution.
1.25 noro 4525: @item
4526: As a by-product, data for setting a Schreyer order in each level are created. The date are
4527: used by @code{dpm_set_schreyer_level} for setting a Schreyer order in each level.
4528: \E
4529: @end itemize
4530:
4531: \JP @node dpm_set_schreyer_level,,, グレブナ基底に関する函数
4532: \EG @node dmp_set_schreyer_level,,, Functions for Groebner basis computation
4533: @subsection @code{dpm_set_schreyer_level}
4534: @findex dpm_set_schreyer_level
4535:
4536: @table @t
4537: @item dpm_set_schreyer_level(@var{L})
4538: \JP :: 指定されたレベルの Schreyer ordering の設定
4539: \EG :: Setting the Schreyer ordering of a specified level
4540: @end table
4541:
4542: @table @var
4543: @item return
4544: \JP 非負整数
4545: \EG a non-negative integer
4546: @item G
4547: \JP 非負整数
4548: \EG a non-negative integer
4549: @end table
4550:
4551: @itemize @bullet
4552: \BJP
4553: @item
4554: @var{G} の先頭項からスタートして, Schreyer フレーム, すなわち Schreyer の自由分解に現れるグレブナー基底の,
4555: Schreyer 順序に関する先頭単項式を計算する.
4556: @item
1.26 ! noro 4557: 得られる結果は, 自由分解における @var{F}_i の標準基底の像の先頭単項式のリスト @var{M}_i のリスト
! 4558: [@var{M}_m,...,@var{M}_1] である.
1.25 noro 4559: @item
4560: 副作用として, 各レベルにおける Schreyer 順序を設定するためのデータが作られる. このデータは
4561: @code{dpm_set_schreyer_level} により, 各レベルの Schreyer 順序を設定する際に用いられる.
4562: \E
4563: \BEG
4564: @item
4565: This function computes the Schreyer frame starting from a Groebner basis @var{G}, that is the lists of leading monomials of Groebner bases
4566: of syzygy modules with respect to Schreyer orderings in the Schreyer free resolution.
4567: @item
1.26 ! noro 4568: The result is a list [@var{M}_m,...,@var{M}_1], where @var{M}_i is the list of leading monomials of
! 4569: the images of standard bases of the free module @var{F}_i in the Schreyer free resolution.
1.25 noro 4570: @item
4571: As a by-product, data for setting a Schreyer order in each level are created. The date are
4572: used by @code{dpm_set_schreyer_level} for setting a Schreyer order in each level.
4573: \E
4574: @end itemize
4575:
4576: \JP @node dpm_sp_nf,,, グレブナ基底に関する函数
4577: \EG @node dmp_sp_nf,,, Functions for Groebner basis computation
4578: @subsection @code{dpm_sp_nf}
4579: @findex dpm_sp_nf
4580:
4581: @table @t
4582: @item dpm_sp_nf(@var{C},@var{Z},@var{P},@var{Q})
4583: \JP :: S-多項式を多項式配列で割った余りの計算
4584: \EG :: Computation of a remainder of an S-polynomial modulo a polynomial array
4585: @end table
4586:
4587: @table @var
4588: @item return
4589: \JP 加群単項式のリスト
4590: \EG a list of module monomials
4591: @item C
4592: \JP 加群多項式配列
4593: \EG an array of module polynomials
4594: @item Z
4595: \JP 整数リストの配列
4596: \EG an array of integer lists
4597: @item P
4598: @itemx Q
4599: \JP 整数
4600: \EG integers
4601: @end table
4602:
4603: @itemize @bullet
4604: \BJP
4605: @item
1.26 ! noro 4606: @iftex
! 4607: @var{C[P]}, @var{C[Q]} の S-多項式を C で割った余り f が
! 4608: @tex
! 4609: $$ct C[P]-c't'C[Q]=g_1C[1]+\cdots+g_LC[L]+f$$
! 4610: @end tex
! 4611: と表されるとき
! 4612: @tex
! 4613: $$g'=ct e_P-c't' e_Q-(g_1 e_1+...+g_L e_L)$$
! 4614: @end tex
! 4615: に対し
! 4616: @tex
! 4617: [g',f]
! 4618: @end tex
! 4619: を返す.
! 4620: @end iftex
! 4621: @ifnottex
! 4622: @var{C[P]}, @var{C[Q]} の S-多項式を C で割った余り f が
! 4623: ct @var{C[P]}-c't'@var{C[Q]}=g_1@var{C[1]}+...+g_L@var{C[L]}+f
! 4624: と表されるとき
! 4625: g'=ct e_P-c't' e_Q-(g_1 e_1+...+g_L e_L)
! 4626: に対し
! 4627: [g',f]
! 4628: を返す.
! 4629: @end ifnottex
1.25 noro 4630: @item
4631: 配列 @var{Z} の第 I 成分は, 先頭項の位置が @var{I} であるような @var{C} の元の配列インデックスのリストである.
4632: \E
4633: \BEG
4634: @item
1.26 ! noro 4635: @iftex
! 4636: When the remainder of the S-polynomial of @var{C[P]} and @var{C[Q]} modulo @var{C}
! 4637: is represented as
! 4638: @tex
! 4639: $$ct C[P]-c't'C[Q]=g_1C[1]+\cdots+g_LC[L]+f$$
! 4640: @end tex
! 4641: this function returns a list
! 4642: @tex
! 4643: [g',f],
! 4644: @end tex
! 4645: where
! 4646: @tex
! 4647: $$g'=ct e_P-c't' e_Q-(g_1 e_1+...+g_L e_L).$$
! 4648: @end tex
! 4649: @end iftex
! 4650: @ifnottex
1.25 noro 4651: When the remainder of the S-polynomial of @var{C[P]} and @var{C[Q]} modulo @var{C}
1.26 ! noro 4652: is represented as
! 4653: ct @var{C[P]}-c't'@var{C[Q]}=g_1@var{C[1]}+...+g_L@var{C[L]}+f,
! 4654: this function returns a list [g',f], where
! 4655: g'=ct eP-c't' eQ-(g_1 e1+...+gL e_L).
! 4656: @end ifnottex
1.25 noro 4657: @item
4658: The @var{I}-th element of an array @var{Z} is a list of indices of elements of @var{C}
4659: whose leading position is @var{I}.
4660: \E
4661: @end itemize
4662:
4663:
4664:
4665: \JP @node p_nf p_nf_mod p_true_nf p_true_nf_mod,,, グレブナ基底に関する函数
1.2 noro 4666: \EG @node p_nf p_nf_mod p_true_nf p_true_nf_mod,,, Functions for Groebner basis computation
1.1 noro 4667: @subsection @code{p_nf}, @code{p_nf_mod}, @code{p_true_nf}, @code{p_true_nf_mod}
4668: @findex p_nf
4669: @findex p_nf_mod
4670: @findex p_true_nf
4671: @findex p_true_nf_mod
4672:
4673: @table @t
4674: @item p_nf(@var{poly},@var{plist},@var{vlist},@var{order})
4675: @itemx p_nf_mod(@var{poly},@var{plist},@var{vlist},@var{order},@var{mod})
1.25 noro 4676: \JP :: 表現多項式の正規形を求める. (結果は定数倍されている可能性あり)
1.2 noro 4677: \BEG
4678: :: Computes the normal form of the given polynomial.
4679: (The result may be multiplied by a constant.)
4680: \E
1.1 noro 4681: @item p_true_nf(@var{poly},@var{plist},@var{vlist},@var{order})
4682: @itemx p_true_nf_mod(@var{poly},@var{plist},@var{vlist},@var{order},@var{mod})
1.25 noro 4683: \JP :: 表現多項式の正規形を求める. (真の結果を @code{[分子, 分母]} の形で返す)
1.2 noro 4684: \BEG
4685: :: Computes the normal form of the given polynomial. (The result is returned
4686: as a form of @code{[numerator, denominator]})
4687: \E
1.1 noro 4688: @end table
4689:
4690: @table @var
4691: @item return
1.25 noro 4692: \JP @code{p_nf} : 多項式, @code{p_true_nf} : リスト
1.2 noro 4693: \EG @code{p_nf} : polynomial, @code{p_true_nf} : list
1.1 noro 4694: @item poly
1.25 noro 4695: \JP 多項式
1.2 noro 4696: \EG polynomial
1.4 noro 4697: @item plist vlist
1.25 noro 4698: \JP リスト
1.2 noro 4699: \EG list
1.1 noro 4700: @item order
1.25 noro 4701: \JP 数, リストまたは行列
1.2 noro 4702: \EG number, list or matrix
1.1 noro 4703: @item mod
1.25 noro 4704: \JP 素数
1.2 noro 4705: \EG prime
1.1 noro 4706: @end table
4707:
4708: @itemize @bullet
1.2 noro 4709: \BJP
1.1 noro 4710: @item
1.25 noro 4711: @samp{gr} で定義されている.
1.1 noro 4712: @item
1.25 noro 4713: 多項式の, 多項式リストによる正規形を求める.
1.1 noro 4714: @item
4715: @code{dp_nf()}, @code{dp_true_nf()}, @code{dp_nf_mod()}, @code{dp_true_nf_mod}
1.25 noro 4716: に対するインタフェースである.
1.1 noro 4717: @item
1.25 noro 4718: @var{poly} および @var{plist} は, 変数順序 @var{vlist} および
4719: 変数順序型 @var{otype} に従って分散表現多項式に変換され,
1.1 noro 4720: @code{dp_nf()}, @code{dp_true_nf()}, @code{dp_nf_mod()},
1.25 noro 4721: @code{dp_true_nf_mod()} に渡される.
1.1 noro 4722: @item
4723: @code{dp_nf()}, @code{dp_true_nf()}, @code{dp_nf_mod()},
1.25 noro 4724: @code{dp_true_nf_mod()} は @var{fullreduce} が 1 で呼び出される.
1.1 noro 4725: @item
1.25 noro 4726: 結果は多項式に変換されて出力される.
1.1 noro 4727: @item
1.25 noro 4728: @code{p_true_nf()}, @code{p_true_nf_mod()} の出力に関しては,
4729: @code{dp_true_nf()}, @code{dp_true_nf_mod()} の項を参照.
1.2 noro 4730: \E
4731: \BEG
4732: @item
4733: Defined in the package @samp{gr}.
4734: @item
4735: Obtains the normal form of a polynomial by a polynomial list.
4736: @item
4737: These are interfaces to @code{dp_nf()}, @code{dp_true_nf()}, @code{dp_nf_mod()},
4738: @code{dp_true_nf_mod}
4739: @item
4740: The polynomial @var{poly} and the polynomials in @var{plist} is
4741: converted, according to the variable ordering @var{vlist} and
4742: type of term ordering @var{otype}, into their distributed polynomial
4743: counterparts and passed to @code{dp_nf()}.
4744: @item
4745: @code{dp_nf()}, @code{dp_true_nf()}, @code{dp_nf_mod()} and
4746: @code{dp_true_nf_mod()}
4747: is called with value 1 for @var{fullreduce}.
4748: @item
4749: The result is converted back into an ordinary polynomial.
4750: @item
4751: As for @code{p_true_nf()}, @code{p_true_nf_mod()}
4752: refer to @code{dp_true_nf()} and @code{dp_true_nf_mod()}.
4753: \E
1.1 noro 4754: @end itemize
4755:
4756: @example
4757: [79] K = katsura(5)$
4758: [80] V = [u5,u4,u3,u2,u1,u0]$
4759: [81] G = hgr(K,V,2)$
4760: [82] p_nf(K[1],G,V,2);
4761: 0
4762: [83] L = p_true_nf(K[1]+1,G,V,2);
4763: [-1503...,-1503...]
4764: [84] L[0]/L[1];
4765: 1
4766: @end example
4767:
4768: @table @t
1.25 noro 4769: \JP @item 参照
1.2 noro 4770: \EG @item References
1.1 noro 4771: @fref{dp_ptod},
4772: @fref{dp_dtop},
4773: @fref{dp_ord},
1.19 noro 4774: @fref{dp_nf dp_nf_mod dp_true_nf dp_true_nf_mod dp_weyl_nf dp_weyl_nf_mod}.
1.1 noro 4775: @end table
4776:
1.25 noro 4777: \JP @node p_terms,,, グレブナ基底に関する函数
1.2 noro 4778: \EG @node p_terms,,, Functions for Groebner basis computation
1.1 noro 4779: @subsection @code{p_terms}
4780: @findex p_terms
4781:
4782: @table @t
4783: @item p_terms(@var{poly},@var{vlist},@var{order})
1.25 noro 4784: \JP :: 多項式にあらわれる単項をリストにする.
1.2 noro 4785: \EG :: Monomials appearing in the given polynomial is collected into a list.
1.1 noro 4786: @end table
4787:
4788: @table @var
4789: @item return
1.25 noro 4790: \JP リスト
1.2 noro 4791: \EG list
1.1 noro 4792: @item poly
1.25 noro 4793: \JP 多項式
1.2 noro 4794: \EG polynomial
1.1 noro 4795: @item vlist
1.25 noro 4796: \JP リスト
1.2 noro 4797: \EG list
1.1 noro 4798: @item order
1.25 noro 4799: \JP 数, リストまたは行列
1.2 noro 4800: \EG number, list or matrix
1.1 noro 4801: @end table
4802:
4803: @itemize @bullet
1.2 noro 4804: \BJP
1.1 noro 4805: @item
1.25 noro 4806: @samp{gr} で定義されている.
1.1 noro 4807: @item
1.25 noro 4808: 多項式を単項に展開した時に現れる項をリストにして返す.
4809: @var{vlist} および @var{order} により定まる項順序により, 順序の高いもの
4810: がリストの先頭に来るようにソートされる.
1.1 noro 4811: @item
1.25 noro 4812: グレブナ基底はしばしば係数が巨大になるため, 実際にどの項が現れて
4813: いるのかを見るためなどに用いる.
1.2 noro 4814: \E
4815: \BEG
4816: @item
4817: Defined in the package @samp{gr}.
4818: @item
4819: This returns a list which contains all non-zero monomials in the given
4820: polynomial. The monomials are ordered according to the current
4821: type of term ordering and @var{vlist}.
4822: @item
4823: Since polynomials in a Groebner base often have very large coefficients,
4824: examining a polynomial as it is may sometimes be difficult to perform.
4825: For such a case, this function enables to examine which term is really
4826: exists.
4827: \E
1.1 noro 4828: @end itemize
4829:
4830: @example
4831: [233] G=gr(katsura(5),[u5,u4,u3,u2,u1,u0],2)$
4832: [234] p_terms(G[0],[u5,u4,u3,u2,u1,u0],2);
1.5 noro 4833: [u5,u0^31,u0^30,u0^29,u0^28,u0^27,u0^26,u0^25,u0^24,u0^23,u0^22,
4834: u0^21,u0^20,u0^19,u0^18,u0^17,u0^16,u0^15,u0^14,u0^13,u0^12,u0^11,
4835: u0^10,u0^9,u0^8,u0^7,u0^6,u0^5,u0^4,u0^3,u0^2,u0,1]
1.1 noro 4836: @end example
4837:
1.25 noro 4838: \JP @node gb_comp,,, グレブナ基底に関する函数
1.2 noro 4839: \EG @node gb_comp,,, Functions for Groebner basis computation
1.1 noro 4840: @subsection @code{gb_comp}
4841: @findex gb_comp
4842:
4843: @table @t
4844: @item gb_comp(@var{plist1}, @var{plist2})
1.25 noro 4845: \JP :: 多項式リストが, 符号を除いて集合として等しいかどうか調べる.
1.2 noro 4846: \EG :: Checks whether two polynomial lists are equal or not as a set
1.1 noro 4847: @end table
4848:
4849: @table @var
1.25 noro 4850: \JP @item return 0 または 1
1.2 noro 4851: \EG @item return 0 or 1
1.4 noro 4852: @item plist1 plist2
1.1 noro 4853: @end table
4854:
4855: @itemize @bullet
1.2 noro 4856: \BJP
1.1 noro 4857: @item
1.25 noro 4858: @var{plist1}, @var{plist2} について, 符号を除いて集合として等しいかどうか
4859: 調べる.
1.1 noro 4860: @item
1.25 noro 4861: 異なる方法で求めたグレブナ基底は, 基底の順序, 符号が異なる場合があり,
4862: それらが等しいかどうかを調べるために用いる.
1.2 noro 4863: \E
4864: \BEG
4865: @item
4866: This function checks whether @var{plist1} and @var{plist2} are equal or
4867: not as a set .
4868: @item
4869: For the same input and the same term ordering different
4870: functions for Groebner basis computations may produce different outputs
4871: as lists. This function compares such lists whether they are equal
4872: as a generating set of an ideal.
4873: \E
1.1 noro 4874: @end itemize
4875:
4876: @example
4877: [243] C=cyclic(6)$
4878: [244] V=[c0,c1,c2,c3,c4,c5]$
4879: [245] G0=gr(C,V,0)$
4880: [246] G=tolex(G0,V,0,V)$
4881: [247] GG=lex_tl(C,V,0,V,0)$
4882: [248] gb_comp(G,GG);
4883: 1
4884: @end example
4885:
1.25 noro 4886: \JP @node katsura hkatsura cyclic hcyclic,,, グレブナ基底に関する函数
1.2 noro 4887: \EG @node katsura hkatsura cyclic hcyclic,,, Functions for Groebner basis computation
1.1 noro 4888: @subsection @code{katsura}, @code{hkatsura}, @code{cyclic}, @code{hcyclic}
4889: @findex katsura
4890: @findex hkatsura
4891: @findex cyclic
4892: @findex hcyclic
4893:
4894: @table @t
4895: @item katsura(@var{n})
4896: @item hkatsura(@var{n})
4897: @item cyclic(@var{n})
4898: @item hcyclic(@var{n})
1.25 noro 4899: \JP :: 多項式リストの生成
1.2 noro 4900: \EG :: Generates a polynomial list of standard benchmark.
1.1 noro 4901: @end table
4902:
4903: @table @var
4904: @item return
1.25 noro 4905: \JP リスト
1.2 noro 4906: \EG list
1.1 noro 4907: @item n
1.25 noro 4908: \JP 整数
1.2 noro 4909: \EG integer
1.1 noro 4910: @end table
4911:
4912: @itemize @bullet
1.2 noro 4913: \BJP
1.1 noro 4914: @item
1.25 noro 4915: @code{katsura()} は @samp{katsura}, @code{cyclic()} は @samp{cyclic}
4916: で定義されている.
1.1 noro 4917: @item
1.25 noro 4918: グレブナ基底計算でしばしばテスト, ベンチマークに用いられる @code{katsura},
4919: @code{cyclic} およびその斉次化を生成する.
1.1 noro 4920: @item
1.25 noro 4921: @code{cyclic} は @code{Arnborg}, @code{Lazard}, @code{Davenport} などの
4922: 名で呼ばれることもある.
1.2 noro 4923: \E
4924: \BEG
4925: @item
4926: Function @code{katsura()} is defined in @samp{katsura}, and
4927: function @code{cyclic()} in @samp{cyclic}.
4928: @item
4929: These functions generate a series of polynomial sets, respectively,
4930: which are often used for testing and bench marking:
4931: @code{katsura}, @code{cyclic} and their homogenized versions.
4932: @item
4933: Polynomial set @code{cyclic} is sometimes called by other name:
4934: @code{Arnborg}, @code{Lazard}, and @code{Davenport}.
4935: \E
1.1 noro 4936: @end itemize
4937:
4938: @example
4939: [74] load("katsura")$
4940: [79] load("cyclic")$
4941: [89] katsura(5);
4942: [u0+2*u4+2*u3+2*u2+2*u1+2*u5-1,2*u4*u0-u4+2*u1*u3+u2^2+2*u5*u1,
1.5 noro 4943: 2*u3*u0+2*u1*u4-u3+(2*u1+2*u5)*u2,2*u2*u0+2*u2*u4+(2*u1+2*u5)*u3
4944: -u2+u1^2,2*u1*u0+(2*u3+2*u5)*u4+2*u2*u3+2*u1*u2-u1,
1.1 noro 4945: u0^2-u0+2*u4^2+2*u3^2+2*u2^2+2*u1^2+2*u5^2]
4946: [90] hkatsura(5);
4947: [-t+u0+2*u4+2*u3+2*u2+2*u1+2*u5,
4948: -u4*t+2*u4*u0+2*u1*u3+u2^2+2*u5*u1,-u3*t+2*u3*u0+2*u1*u4+(2*u1+2*u5)*u2,
4949: -u2*t+2*u2*u0+2*u2*u4+(2*u1+2*u5)*u3+u1^2,
4950: -u1*t+2*u1*u0+(2*u3+2*u5)*u4+2*u2*u3+2*u1*u2,
4951: -u0*t+u0^2+2*u4^2+2*u3^2+2*u2^2+2*u1^2+2*u5^2]
4952: [91] cyclic(6);
4953: [c5*c4*c3*c2*c1*c0-1,
4954: ((((c4+c5)*c3+c5*c4)*c2+c5*c4*c3)*c1+c5*c4*c3*c2)*c0+c5*c4*c3*c2*c1,
4955: (((c3+c5)*c2+c5*c4)*c1+c5*c4*c3)*c0+c4*c3*c2*c1+c5*c4*c3*c2,
4956: ((c2+c5)*c1+c5*c4)*c0+c3*c2*c1+c4*c3*c2+c5*c4*c3,
4957: (c1+c5)*c0+c2*c1+c3*c2+c4*c3+c5*c4,c0+c1+c2+c3+c4+c5]
4958: [92] hcyclic(6);
4959: [-c^6+c5*c4*c3*c2*c1*c0,
4960: ((((c4+c5)*c3+c5*c4)*c2+c5*c4*c3)*c1+c5*c4*c3*c2)*c0+c5*c4*c3*c2*c1,
4961: (((c3+c5)*c2+c5*c4)*c1+c5*c4*c3)*c0+c4*c3*c2*c1+c5*c4*c3*c2,
4962: ((c2+c5)*c1+c5*c4)*c0+c3*c2*c1+c4*c3*c2+c5*c4*c3,
4963: (c1+c5)*c0+c2*c1+c3*c2+c4*c3+c5*c4,c0+c1+c2+c3+c4+c5]
4964: @end example
4965:
4966: @table @t
1.25 noro 4967: \JP @item 参照
1.2 noro 4968: \EG @item References
1.1 noro 4969: @fref{dp_dtop}.
4970: @end table
4971:
1.25 noro 4972: \JP @node primadec primedec,,, グレブナ基底に関する函数
1.3 noro 4973: \EG @node primadec primedec,,, Functions for Groebner basis computation
4974: @subsection @code{primadec}, @code{primedec}
4975: @findex primadec
4976: @findex primedec
4977:
4978: @table @t
4979: @item primadec(@var{plist},@var{vlist})
4980: @item primedec(@var{plist},@var{vlist})
1.25 noro 4981: \JP :: イデアルの分解
1.3 noro 4982: \EG :: Computes decompositions of ideals.
4983: @end table
4984:
4985: @table @var
4986: @item return
4987: @itemx plist
1.25 noro 4988: \JP 多項式リスト
1.3 noro 4989: \EG list of polynomials
4990: @item vlist
1.25 noro 4991: \JP 変数リスト
1.3 noro 4992: \EG list of variables
4993: @end table
4994:
4995: @itemize @bullet
4996: \BJP
4997: @item
1.25 noro 4998: ここで解説されているイデアル分解については, 新しいパッケージ @samp{noro_pd.rr}
4999: においてより高速な実装が利用できる.
5000: @item
5001: @code{primadec()}, @code{primedec} は @samp{primdec} で定義されている.
1.3 noro 5002: @item
1.25 noro 5003: @code{primadec()}, @code{primedec()} はそれぞれ有理数体上でのイデアルの
5004: 準素分解, 根基の素イデアル分解を行う.
1.3 noro 5005: @item
1.25 noro 5006: 引数は多項式リストおよび変数リストである. 多項式は有理数係数のみが許される.
1.3 noro 5007: @item
1.25 noro 5008: @code{primadec} は @code{[準素成分, 付属素イデアル]} のリストを返す.
1.3 noro 5009: @item
1.25 noro 5010: @code{primadec} は 素因子のリストを返す.
1.3 noro 5011: @item
1.25 noro 5012: 結果において, 多項式リストとして表示されている各イデアルは全て
5013: グレブナ基底である. 対応する項順序は, それぞれ
5014: 変数 @code{PRIMAORD}, @code{PRIMEORD} に格納されている.
1.3 noro 5015: @item
1.25 noro 5016: @code{primadec} は @code{[Shimoyama,Yokoyama]} の準素分解アルゴリズム
5017: を実装している.
1.3 noro 5018: @item
1.25 noro 5019: もし素因子のみを求めたいなら, @code{primedec} を使う方がよい.
5020: これは, 入力イデアルが根基イデアルでない場合に, @code{primadec}
5021: の計算に余分なコストが必要となる場合があるからである.
1.3 noro 5022: \E
5023: \BEG
5024: @item
1.25 noro 5025: A new package @samp{noro_pd.rr} provides more efficient functions for ideal decomposition.
5026: @item
1.3 noro 5027: Function @code{primadec()} and @code{primedec} are defined in @samp{primdec}.
5028: @item
5029: @code{primadec()}, @code{primedec()} are the function for primary
5030: ideal decomposition and prime decomposition of the radical over the
5031: rationals respectively.
5032: @item
5033: The arguments are a list of polynomials and a list of variables.
5034: These functions accept ideals with rational function coefficients only.
5035: @item
5036: @code{primadec} returns the list of pair lists consisting a primary component
5037: and its associated prime.
5038: @item
5039: @code{primedec} returns the list of prime components.
5040: @item
5041: Each component is a Groebner basis and the corresponding term order
5042: is indicated by the global variables @code{PRIMAORD}, @code{PRIMEORD}
5043: respectively.
5044: @item
5045: @code{primadec} implements the primary decompostion algorithm
5046: in @code{[Shimoyama,Yokoyama]}.
5047: @item
5048: If one only wants to know the prime components of an ideal, then
5049: use @code{primedec} because @code{primadec} may need additional costs
5050: if an input ideal is not radical.
5051: \E
5052: @end itemize
5053:
5054: @example
5055: [84] load("primdec")$
5056: [102] primedec([p*q*x-q^2*y^2+q^2*y,-p^2*x^2+p^2*x+p*q*y,
5057: (q^3*y^4-2*q^3*y^3+q^3*y^2)*x-q^3*y^4+q^3*y^3,
5058: -q^3*y^4+2*q^3*y^3+(-q^3+p*q^2)*y^2],[p,q,x,y]);
5059: [[y,x],[y,p],[x,q],[q,p],[x-1,q],[y-1,p],[(y-1)*x-y,q*y^2-2*q*y-p+q]]
5060: [103] primadec([x,z*y,w*y^2,w^2*y-z^3,y^3],[x,y,z,w]);
5061: [[[x,z*y,y^2,w^2*y-z^3],[z,y,x]],[[w,x,z*y,z^3,y^3],[w,z,y,x]]]
5062: @end example
5063:
5064: @table @t
1.25 noro 5065: \JP @item 参照
1.3 noro 5066: \EG @item References
5067: @fref{fctr sqfr},
1.25 noro 5068: \JP @fref{項順序の設定}.
1.3 noro 5069: \EG @fref{Setting term orderings}.
5070: @end table
1.5 noro 5071:
1.25 noro 5072: \JP @node primedec_mod,,, グレブナ基底に関する函数
1.5 noro 5073: \EG @node primedec_mod,,, Functions for Groebner basis computation
5074: @subsection @code{primedec_mod}
5075: @findex primedec_mod
5076:
5077: @table @t
5078: @item primedec_mod(@var{plist},@var{vlist},@var{ord},@var{mod},@var{strategy})
1.25 noro 5079: \JP :: イデアルの分解
1.5 noro 5080: \EG :: Computes decompositions of ideals over small finite fields.
5081: @end table
5082:
5083: @table @var
5084: @item return
5085: @itemx plist
1.25 noro 5086: \JP 多項式リスト
1.5 noro 5087: \EG list of polynomials
5088: @item vlist
1.25 noro 5089: \JP 変数リスト
1.5 noro 5090: \EG list of variables
5091: @item ord
1.25 noro 5092: \JP 数, リストまたは行列
1.5 noro 5093: \EG number, list or matrix
5094: @item mod
1.25 noro 5095: \JP 正整数
1.5 noro 5096: \EG positive integer
5097: @item strategy
1.25 noro 5098: \JP 整数
1.5 noro 5099: \EG integer
5100: @end table
5101:
5102: @itemize @bullet
5103: \BJP
5104: @item
1.25 noro 5105: @code{primedec_mod()} は @samp{primdec_mod}
5106: で定義されている. @code{[Yokoyama]} の素イデアル分解アルゴリズム
5107: を実装している.
5108: @item
5109: @code{primedec_mod()} は有限体上でのイデアルの
5110: 根基の素イデアル分解を行い, 素イデアルのリストを返す.
5111: @item
5112: @code{primedec_mod()} は, GF(@var{mod}) 上での分解を与える.
5113: 結果の各成分の生成元は, 整数係数多項式である.
5114: @item
5115: 結果において, 多項式リストとして表示されている各イデアルは全て
5116: [@var{vlist},@var{ord}] で指定される項順序に関するグレブナ基底である.
5117: @item
5118: @var{strategy} が 0 でないとき, incremental に component の共通
5119: 部分を計算することによる early termination を行う. 一般に,
5120: イデアルの次元が高い場合に有効だが, 0 次元の場合など, 次元が小さい
5121: 場合には overhead が大きい場合がある.
1.7 noro 5122: @item
1.25 noro 5123: 計算途中で内部情報を見たい場合には、
5124: 前もって @code{dp_gr_print(2)} を実行しておけばよい.
1.5 noro 5125: \E
5126: \BEG
5127: @item
5128: Function @code{primedec_mod()}
5129: is defined in @samp{primdec_mod} and implements the prime decomposition
5130: algorithm in @code{[Yokoyama]}.
5131: @item
5132: @code{primedec_mod()}
5133: is the function for prime ideal decomposition
5134: of the radical of a polynomial ideal over small finite field,
5135: and they return a list of prime ideals, which are associated primes
5136: of the input ideal.
5137: @item
5138: @code{primedec_mod()} gives the decomposition over GF(@var{mod}).
5139: The generators of each resulting component consists of integral polynomials.
5140: @item
5141: Each resulting component is a Groebner basis with respect to
5142: a term order specified by [@var{vlist},@var{ord}].
5143: @item
5144: If @var{strategy} is non zero, then the early termination strategy
5145: is tried by computing the intersection of obtained components
5146: incrementally. In general, this strategy is useful when the krull
5147: dimension of the ideal is high, but it may add some overhead
5148: if the dimension is small.
1.7 noro 5149: @item
5150: If you want to see internal information during the computation,
5151: execute @code{dp_gr_print(2)} in advance.
1.5 noro 5152: \E
5153: @end itemize
5154:
5155: @example
5156: [0] load("primdec_mod")$
5157: [246] PP444=[x^8+x^2+t,y^8+y^2+t,z^8+z^2+t]$
5158: [247] primedec_mod(PP444,[x,y,z,t],0,2,1);
5159: [[y+z,x+z,z^8+z^2+t],[x+y,y^2+y+z^2+z+1,z^8+z^2+t],
5160: [y+z+1,x+z+1,z^8+z^2+t],[x+z,y^2+y+z^2+z+1,z^8+z^2+t],
5161: [y+z,x^2+x+z^2+z+1,z^8+z^2+t],[y+z+1,x^2+x+z^2+z+1,z^8+z^2+t],
5162: [x+z+1,y^2+y+z^2+z+1,z^8+z^2+t],[y+z+1,x+z,z^8+z^2+t],
5163: [x+y+1,y^2+y+z^2+z+1,z^8+z^2+t],[y+z,x+z+1,z^8+z^2+t]]
5164: [248]
5165: @end example
5166:
5167: @table @t
1.25 noro 5168: \JP @item 参照
1.5 noro 5169: \EG @item References
5170: @fref{modfctr},
1.6 noro 5171: @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},
1.25 noro 5172: \JP @fref{項順序の設定}.
1.7 noro 5173: \EG @fref{Setting term orderings},
5174: @fref{dp_gr_flags dp_gr_print}.
1.5 noro 5175: @end table
5176:
1.25 noro 5177: \JP @node bfunction bfct generic_bfct ann ann0,,, グレブナ基底に関する函数
1.10 noro 5178: \EG @node bfunction bfct generic_bfct ann ann0,,, Functions for Groebner basis computation
5179: @subsection @code{bfunction}, @code{bfct}, @code{generic_bfct}, @code{ann}, @code{ann0}
1.6 noro 5180: @findex bfunction
1.9 noro 5181: @findex bfct
1.6 noro 5182: @findex generic_bfct
1.10 noro 5183: @findex ann
5184: @findex ann0
1.5 noro 5185:
1.6 noro 5186: @table @t
5187: @item bfunction(@var{f})
1.10 noro 5188: @itemx bfct(@var{f})
5189: @itemx generic_bfct(@var{plist},@var{vlist},@var{dvlist},@var{weight})
1.25 noro 5190: \JP :: @var{b} 関数の計算
1.10 noro 5191: \EG :: Computes the global @var{b} function of a polynomial or an ideal
5192: @item ann(@var{f})
5193: @itemx ann0(@var{f})
1.25 noro 5194: \JP :: 多項式のベキの annihilator の計算
1.10 noro 5195: \EG :: Computes the annihilator of a power of polynomial
1.6 noro 5196: @end table
1.10 noro 5197:
1.6 noro 5198: @table @var
5199: @item return
1.25 noro 5200: \JP 多項式またはリスト
1.10 noro 5201: \EG polynomial or list
5202: @item f
1.25 noro 5203: \JP 多項式
1.6 noro 5204: \EG polynomial
5205: @item plist
1.25 noro 5206: \JP 多項式リスト
1.6 noro 5207: \EG list of polynomials
5208: @item vlist dvlist
1.25 noro 5209: \JP 変数リスト
1.6 noro 5210: \EG list of variables
5211: @end table
1.5 noro 5212:
1.6 noro 5213: @itemize @bullet
5214: \BJP
1.25 noro 5215: @item @samp{bfct} で定義されている.
5216: @item @code{bfunction(@var{f})}, @code{bfct(@var{f})} は多項式 @var{f} の global @var{b} 関数 @code{b(s)} を
5217: 計算する. @code{b(s)} は, Weyl 代数 @code{D} 上の一変数多項式環 @code{D[s]}
5218: の元 @code{P(x,s)} が存在して, @code{P(x,s)f^(s+1)=b(s)f^s} を満たすような
5219: 多項式 @code{b(s)} の中で, 次数が最も低いものである.
1.6 noro 5220: @item @code{generic_bfct(@var{f},@var{vlist},@var{dvlist},@var{weight})}
1.25 noro 5221: は, @var{plist} で生成される @code{D} の左イデアル @code{I} の,
5222: ウェイト @var{weight} に関する global @var{b} 関数を計算する.
5223: @var{vlist} は @code{x}-変数, @var{vlist} は対応する @code{D}-変数
5224: を順に並べる.
5225: @item @code{bfunction} と @code{bfct} では用いているアルゴリズムが
5226: 異なる. どちらが高速かは入力による.
5227: @item @code{ann(@var{f})} は, @code{@var{f}^s} の annihilator ideal
5228: の生成系を返す. @code{ann(@var{f})} は, @code{[@var{a},@var{list}]}
5229: なるリストを返す. ここで, @var{a} は @var{f} の @var{b} 関数の最小整数根,
5230: @var{list} は @code{ann(@var{f})} の結果の @code{s}$ に, @var{a} を
5231: 代入したものである.
5232: @item 詳細については, [Saito,Sturmfels,Takayama] を見よ.
1.6 noro 5233: \E
5234: \BEG
5235: @item These functions are defined in @samp{bfct}.
1.10 noro 5236: @item @code{bfunction(@var{f})} and @code{bfct(@var{f})} compute the global @var{b}-function @code{b(s)} of
1.6 noro 5237: a polynomial @var{f}.
5238: @code{b(s)} is a polynomial of the minimal degree
5239: such that there exists @code{P(x,s)} in D[s], which is a polynomial
5240: ring over Weyl algebra @code{D}, and @code{P(x,s)f^(s+1)=b(s)f^s} holds.
5241: @item @code{generic_bfct(@var{f},@var{vlist},@var{dvlist},@var{weight})}
1.10 noro 5242: computes the global @var{b}-function of a left ideal @code{I} in @code{D}
1.6 noro 5243: generated by @var{plist}, with respect to @var{weight}.
5244: @var{vlist} is the list of @code{x}-variables,
5245: @var{vlist} is the list of corresponding @code{D}-variables.
1.9 noro 5246: @item @code{bfunction(@var{f})} and @code{bfct(@var{f})} implement
5247: different algorithms and the efficiency depends on inputs.
1.10 noro 5248: @item @code{ann(@var{f})} returns the generator set of the annihilator
5249: ideal of @code{@var{f}^s}.
5250: @code{ann(@var{f})} returns a list @code{[@var{a},@var{list}]},
5251: where @var{a} is the minimal integral root of the global @var{b}-function
5252: of @var{f}, and @var{list} is a list of polynomials obtained by
5253: substituting @code{s} in @code{ann(@var{f})} with @var{a}.
1.7 noro 5254: @item See [Saito,Sturmfels,Takayama] for the details.
1.6 noro 5255: \E
5256: @end itemize
5257:
5258: @example
5259: [0] load("bfct")$
5260: [216] bfunction(x^3+y^3+z^3+x^2*y^2*z^2+x*y*z);
5261: -9*s^5-63*s^4-173*s^3-233*s^2-154*s-40
5262: [217] fctr(@@);
5263: [[-1,1],[s+2,1],[3*s+4,1],[3*s+5,1],[s+1,2]]
5264: [218] F = [4*x^3*dt+y*z*dt+dx,x*z*dt+4*y^3*dt+dy,
5265: x*y*dt+5*z^4*dt+dz,-x^4-z*y*x-y^4-z^5+t]$
5266: [219] generic_bfct(F,[t,z,y,x],[dt,dz,dy,dx],[1,0,0,0]);
5267: 20000*s^10-70000*s^9+101750*s^8-79375*s^7+35768*s^6-9277*s^5
5268: +1278*s^4-72*s^3
1.10 noro 5269: [220] P=x^3-y^2$
5270: [221] ann(P);
5271: [2*dy*x+3*dx*y^2,-3*dx*x-2*dy*y+6*s]
5272: [222] ann0(P);
5273: [-1,[2*dy*x+3*dx*y^2,-3*dx*x-2*dy*y-6]]
1.6 noro 5274: @end example
5275:
5276: @table @t
1.25 noro 5277: \JP @item 参照
1.6 noro 5278: \EG @item References
1.25 noro 5279: \JP @fref{Weyl 代数}.
1.6 noro 5280: \EG @fref{Weyl algebra}.
5281: @end table
1.5 noro 5282:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>