[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 63. grobner

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 63.1 Introduction to grobner

`grobner`は Maximaで Groebner基底を使うためのパッケージです。

以下の関数を使うには ``grobner.lisp'`パッケージをロードしなければいけません。

    load(grobner);

    demo("grobner.demo");

もしくは

    batch("grobner.demo")

でデモを開始することができます。

デモの中の計算のいくつかは長い時間かかります。 だから、デモの出力 ``grobner-demo.output'`を デモファイルと同じディレクトリに用意しています。

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 63.1.1 Notes on the grobner package

パッケージは

Marek Rychlik

http://alamos.math.arizona.edu

によって書かれ、 General Public License(GPL)の条件の下、 2002-05-24にリリースされました。 (ファイル ``grobner.lisp'`を参照してください。) このドキュメントはファイル

``README'`, ``grobner.lisp'`, ``grobner.demo'`, ``grobner-demo.output'`

から

Günter Nowakによって抽出されました。

ドキュメントの改善に関する提案は maximaメーリングリスト maxima@math.utexas.eduで議論することができます。 現在、コードは若干古くなっています。 モダンな実装は以下に記載されている高速の F4アルゴリズムを使います。

    A new efficient algorithm for computing Gröbner bases (F4)
    Jean-Charles Faugère
    LIP6/CNRS Université Paris VI
    January 20, 1999

Categories: Groebner bases · Share packages · Package grobner

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 63.1.2 Implementations of admissible monomial orders in grobner

- `lex`

  純粋に辞書式の、単項式比較のデフォルト順序。

- `grlex`

  全次数順序。同点は辞書式で決めます。

- `grevlex`

  全次数。同点は逆辞書式で決めます。

- `invlex`

  逆時書式順序。

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 63.2 Functions and Variables for grobner

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 63.2.1 Global switches for grobner

オブション変数: poly_monomial_order

  デフォルト値: `lex`

  このグローバルスイッチはどの単項式順序を多項式と Groebner基底計算で使うか制御します。 もし設定しないなら `lex`を使います。

  Categories: Package grobner

オブション変数: poly_coefficient_ring

  デフォルト値: `expression_ring`

  このスイッチは grober計算で使う多項式の係数環を示します。 もし設定しないなら maximaの 一般式環を使います。 もし望むならこの変数を `ring_of_integers`に設定できます。

  Categories: Package grobner

オブション変数: poly_primary_elimination_order

  デフォルト値: `false`

  消去ベース関数で消去される変数のデフォルト順序名。 設定しないなら `lex`を使います。

  Categories: Package grobner

オブション変数: poly_secondary_elimination_order

  デフォルト値: `false`

  消去ベース関数で保持される変数のデフォルト順序名。 設定しないなら `lex`を使います。

  Categories: Package grobner

オブション変数: poly_elimination_order

  デフォルト値: `false`

  消去計算で使われるデフォルト消去順序名。 設定したなら、 変数 `poly_primary_elimination_order`と `poly_secondary_elimination_order`の設定を上書きします。 ユーザーはこれが消去変数の数に有効な真の消去順序であることを保証しなければいけません。

  Categories: Package grobner

オブション変数: poly_return_term_list

  デフォルト値: `false`

  もし `true`に設定したなら、 このパッケージの関数すべては maxima一般式ではなく、 それぞれの多項式を現在の単項式順序で並べた項のリストとして返します。

  Categories: Package grobner

オブション変数: poly_grobner_debug

  デフォルト値: `false`

  もし `true`に設定したなら、 デバッグ用、トレース用出力を生成します。

  Categories: Package grobner

オブション変数: poly_grobner_algorithm

  デフォルト値: `buchberger`

  可能な値:

  Groebner基底を見つけるのに使うアルゴリズム名。

  Categories: Package grobner

オブション変数: poly_top_reduction_only

  デフォルト値: `false`

  もし `false`でないなら、 可能な時はいつでも、頭項簡約を使います。 頭項簡約は割り算アルゴリズムが最初の簡約後に停止することを意味します。

  Categories: Package grobner

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 63.2.2 Simple operators in grobner

`poly_add`, `poly_subtract`, `poly_multiply`, `poly_expt`は 多項式の算出演算子です。 これらは内部表現を使って実行されますが、 結果は maxima一般形式に変換されます。

関数: poly_add (poly1, poly2, varlist)

  2つの多項式 poly1と poly2を足します。

      (%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
                                          2
      (%o1)                              x  y + x

  Categories: Package grobner

関数: poly_subtract (poly1, poly2, varlist)

  多項式 poly1から poly2を引きます。

      (%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
                                            2
      (%o1)                          2 z + x  y - x

  Categories: Package grobner

関数: poly_multiply (poly1, poly2, varlist)

  多項式 poly1と poly2の積を返します。

      (%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
      (%o1)                                  0

  Categories: Package grobner

関数: poly_s_polynomial (poly1, poly2, varlist)

  2つの多項式 poly1と poly2の シジジー (syzygy)多項式 (S多項式)を返します。

  Categories: Package grobner

関数: poly_primitive_part (poly1, varlist)

  多項式 poly1を係数の GCDで割ったものを返します。

      (%i1) poly_primitive_part(35*y+21*x,[x,y]);
      (%o1)                              5 y + 3 x

  Categories: Package grobner

関数: poly_normalize (poly, varlist)

  多項式 poly1を主係数で割ったものを返します。 割り算が可能であることを仮定しています。 これは体の場合には大丈夫ですが、環の場合にはいつも可能なわけではありません。

  Categories: Package grobner

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 63.2.3 Other functions in grobner

関数: poly_expand (poly, varlist)

  この関数は多項式を内部形式にパースします。 もし polyが多項式を正確にパースしたら、それは `expand(poly)`と同値です。 もし表現が変数 varlistの多項式と互換性がないなら、結果はエラーです。 式が正確に内部表現にパースするかテストするのに使うことができます。 以下の例は添字付き変数と超越関数変数が許されることを例示します。

      (%i1) poly_expand((x-y)*(y+x),[x,y]);
                                           2    2
      (%o1)                               x  - y
      (%i2) poly_expand((y+x)^2,[x,y]);
                                      2            2
      (%o2)                          y  + 2 x y + x
      (%i3) poly_expand((y+x)^5,[x,y]);
                        5      4         2  3       3  2      4      5
      (%o3)            y  + 5 x y  + 10 x  y  + 10 x  y  + 5 x  y + x
      (%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]);
                                                2
                                        y      x
      (%o4)                       - x %e  + ------- - 1
                                             sqrt(y)

      (%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
                                      2
      (%o5)                      - sin (x) + sin(x) - 1

  Categories: Package grobner

関数: poly_expt (poly, number, varlist)

  polyの正の整数 numberのべき乗を返します。 もし numberが正の整数でないならエラーが生じます。

      (%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
      (%o1)                                  0

  Categories: Package grobner

関数: poly_content (poly. varlist)

  `poly_content`は係数の GCDを抽出します。

      (%i1) poly_content(35*y+21*x,[x,y]);
      (%o1)                                  7

  Categories: Package grobner

関数: poly_pseudo_divide (poly, polylist, varlist)

  多項式 polyを n個の多項式のリスト polylistで擬似的に割ります。 複数の値を返します。 一番目の値は商のリスト aです。 二番目の値は余り rです。 三番目の値は、係数環(体である必要はありません)内で polylistが c*polyを割れるようなスカラ係数 cです。 最後に四番目の値は実行された簡約の回数です。 結果のオブジェクトは以下の等式を満たします:

  c*poly=sum(a[i]*polylist[i],i=1...n)+r.

  Categories: Package grobner

関数: poly_exact_divide (poly1, poly2, varlist)

  多項式 poly1を多項式 poly2で割ります。 余りのない厳密な割り算が可能と仮定します。 商を返します。

  Categories: Package grobner

関数: poly_normal_form (poly, polylist, varlist)

  `poly_normal_form`は多項式の集合 polylistに関して多項式 polyの正規形を見つけます。

  Categories: Package grobner

関数: poly_buchberger_criterion (polylist, varlist)

  Buchberger判定 (criterion)を使ってもし polylistが現在の項順序に関して Groebner基底なら `true`を返します: Buchberger判定(criterion)は、 polylistの2つの多項式 h1と h2すべてに関して、 S多項式 S(h1,h2)が polylistを法として0に簡約されるというものです。

  Categories: Package grobner

関数: poly_buchberger (polylist_fl varlist)

  `poly_buchberger`は多項式のリスト上で Buchbergerアルゴリズムを実行し、結果の Groebner基底を返します。

  Categories: Package grobner

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

### 63.2.4 Standard postprocessing of Groebner Bases

K[ x[1],...,x[n] ]上のイデアル Iの k番目の消去イデアル I_kは イデアル intersect(I, K[ x[k+1],...,x[n] ])です。
コロンイデアル I:Jは イデアル {h|for all w in J: w*h in I}です。.
イデアル I:p^infはイデアル {h| there is a n in N: p^n*h in I}です。
イデアル I:J^infはイデアル {h| there is a n in N and a p in J: p^n*h in I}です。
The 根基イデアル sqrt(I)はイデアル {h| there is a n in N : h^n in I }です。

関数: poly_reduction (polylist, varlist)

  `poly_reduction`は多項式のリスト polylistを簡約します。 それぞれの多項式は他の多項式で完全に簡約されます。

  Categories: Package grobner

関数: poly_minimization (polylist, varlist)

  polylistと同じ単項式イデアルの最小全域である、 多項式リスト polylistの部分リストを返します。 すなわち、部分リストの中の多項式の主単項式はすべて、他の多項式の主単項式を割りません。

  Categories: Package grobner

関数: poly_normalize_list (polylist, varlist)

  `poly_normalize_list`は `poly_normalize`をリストの中の多項式それぞれに適用します。 これはリスト polylistの中のすべての多項式を主係数で割ることを意味します。

  Categories: Package grobner

関数: poly_grobner (polylist, varlist)

  多項式リスト polylistで張られたイデアルの Groebner基底を返します。 グローバルフラグで影響を受けます。

  Categories: Package grobner

関数: poly_reduced_grobner (polylist, varlist)

  多項式リスト polylistで張られたイデアルの簡約 Groebner基底を返します。

  Categories: Package grobner

関数: poly_depends_p (poly, var, varlist)

  `poly_depends`は多項式が変数 varに依存するかテストします。

  Categories: Package grobner · Predicate functions

関数: poly_elimination_ideal (polylist, number, varlist)

  `poly_elimination_ideal`は、 (必ずしも Groebner基底である必要はない)生成多項式のリストとして指定されたイデアルの number番目の消去イデアルの Groebner基底を返します。

  Categories: Package grobner

関数: poly_colon_ideal (polylist1, polylist2, varlist)

  コロンイデアル

  I(polylist1):I(polylist2)

  の簡約 Groebner基底を返します。

  ここで polylist1と polylist2は 2つの多項式リストです。

  Categories: Package grobner

関数: poly_ideal_intersection (polylist1, polylist2, varlist)

  `poly_ideal_intersection`は 2つのイデアルの交わりです。

  Categories: Package grobner

関数: poly_lcm (poly1, poly2, varlist)

  poly1と poly2の最小公倍数(式)を返します。

  Categories: Package grobner

関数: poly_gcd (poly1, poly2, varlist)

  poly1と poly2の最大公約数(式)を返します。

  `ezgcd`, `gcd`, `gcdex`, `gcdivide`も参照してください。

  例:

      (%i1) p1:6*x^3+19*x^2+19*x+6;
                              3       2
      (%o1)                6 x  + 19 x  + 19 x + 6
      (%i2) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
                        5       4       3       2
      (%o2)          6 x  + 13 x  + 12 x  + 13 x  + 6 x
      (%i3) poly_gcd(p1, p2, [x]);
                                  2
      (%o3)                    6 x  + 13 x + 6

  Categories: Package grobner

関数: poly_grobner_equal (polylist1, polylist2, varlist)

  `poly_grobner_equal`は 2つの Groebner基底が同じイデアルを生成するかテストします。 もし Groebner基底と仮定された2つの多項式リスト polylist1と polylist2が同じイデアルを生成するなら、 `true`を返します。 そうでないなら `false`を返します。 これは、一番目の基底のすべての多項式が二番目の基底を法として 0に簡約されるかとその逆をチェックすることと同値です。 以下の例では、一番目のリストが Groebner基底でないので結果が `false`であることに注意してください。

      (%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
      (%o1)                         false

  Categories: Package grobner

関数: poly_grobner_subsetp (polylist1, polylist2, varlist)

  `poly_grobner_subsetp`は polylist1が生成するイデアルが polylist2が生成するイデアルに含まれるかテストします。 このテストが常に成功するには polylist2が Groebner基底でなければいけません。

  Categories: Package grobner · Predicate functions

関数: poly_grobner_member (poly, polylist, varlist)

  もし多項式 polyが Groebner基底であると仮定された多項式リスト polylistが生成するイデアルに属するなら、 `true`を返します。 そうでないなら `false`を返します。

  `poly_grobner_member`は多項式が Groebner基底であると仮定された多項式のリストが生成するイデアルに属するかテストします。 `normal_form`が 0と同値です。

  Categories: Package grobner

関数: poly_ideal_saturation1 (polylist, poly, varlist)

  イデアル

  I(polylist):poly^inf の saturationの簡約 Groebner基底を返します。

  幾何学的に、代数的閉体上で、これは polyの多様体上で恒等的に 0とならない polylistが生成するイデアルの中の多項式の集合です。

  Categories: Package grobner

関数: poly_ideal_saturation (polylist1, polylist2, varlist)

  イデアル

  I(polylist1):I(polylist2)^inf の saturationの簡約 Groebner基底を返します。

  幾何学的に、代数的閉体上で、これは polylist2の多様体上で恒等的に 0とならない polylist1が生成するイデアルの中の多項式の集合です。

  Categories: Package grobner

関数: poly_ideal_polysaturation1 (polylist1, polylist2, varlist)

  polylist2は 2個の多項式のリスト `[poly1,...,polyn]`です。 多項式リスト polylist1が生成するイデアルの多項式リスト polylist2の多項式に関する連続 saturationの列によって得られるイデアル

  I(polylist):poly1^inf:...:polyn^inf

  の簡約 Groebner基底を返します。

  Categories: Package grobner

関数: poly_ideal_polysaturation (polylist, polylistlist, varlist)

  polylistlistは多項式リスト n個のリスト `[polylist1,...,polylistn]`です。 イデアル

  I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf の saturationの簡約 Groebner基底を返します。

  Categories: Package grobner

関数: poly_saturation_extension (poly, polylist, varlist1, varlist2)

  `poly_saturation_extension`は有名な Rabinowitzのトリックを実装します。

  Categories: Package grobner

関数: poly_polysaturation_extension (poly, polylist, varlist1, varlist2)

  Categories: Package grobner

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by 市川雄二 on October, 4 2018 using texi2html 1.76.