grobner (Maxima 5.50.0 Manual)

## 57 grobner ¶

### 57.1 Introduction to grobner ¶

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

Groebner基底に関するチュートリアルは以下で見つかります。

http://www.geocities.com/CapeCanaveral/Hall/3131/

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

    load("grobner");

    demo("grobner.demo");

もしくは

    batch("grobner.demo")

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

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

#### 57.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

Groebner bases · Share packages · Package grobner ·

#### 57.1.2 Implementations of admissible monomial orders in grobner ¶

- `lex`

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

- `grlex`

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

- `grevlex`

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

- `invlex`

  逆時書式順序。

### 57.2 Functions and Variables for grobner ¶

#### 57.2.1 Global switches for grobner ¶

オブション変数: poly_monomial_order ¶

  デフォルト値: `lex`

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

  Package grobner ·

オブション変数: poly_coefficient_ring ¶

  デフォルト値: `expression_ring`

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

  Package grobner ·

オブション変数: poly_primary_elimination_order ¶

  デフォルト値: `false`

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

  Package grobner ·

オブション変数: poly_secondary_elimination_order ¶

  デフォルト値: `false`

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

  Package grobner ·

オブション変数: poly_elimination_order ¶

  デフォルト値: `false`

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

  Package grobner ·

オブション変数: poly_return_term_list ¶

  デフォルト値: `false`

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

  Package grobner ·

オブション変数: poly_grobner_debug ¶

  デフォルト値: `false`

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

  Package grobner ·

オブション変数: poly_grobner_algorithm ¶

  デフォルト値: `buchberger`

  可能な値:

  - `buchberger`
  - `parallel_buchberger`
  - `gebauer_moeller`

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

  Package grobner ·

オブション変数: poly_top_reduction_only ¶

  デフォルト値: `false`

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

  Package grobner ·

#### 57.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

  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

  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

  Package grobner ·

関数: poly_s_polynomial (poly1, poly2, varlist) ¶

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

  Package grobner ·

関数: poly_primitive_part (poly1, varlist) ¶

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

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

  Package grobner ·

関数: poly_normalize (poly, varlist) ¶

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

  Package grobner ·

#### 57.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

  Package grobner ·

関数: poly_expt (poly, number, varlist) ¶

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

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

  Package grobner ·

関数: poly_content (poly. varlist) ¶

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

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

  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\).

  Package grobner ·

関数: poly_exact_divide (poly1, poly2, varlist) ¶

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

  Package grobner ·

関数: poly_normal_form (poly, polylist, varlist) ¶

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

  Package grobner ·

関数: poly_buchberger_criterion (polylist, varlist) ¶

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

  Package grobner ·

関数: poly_buchberger (polylist_fl varlist) ¶

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

  Package grobner ·

#### 57.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を簡約します。 それぞれの多項式は他の多項式で完全に簡約されます。

  Package grobner ·

関数: poly_minimization (polylist, varlist) ¶

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

  Package grobner ·

関数: poly_normalize_list (polylist, varlist) ¶

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

  Package grobner ·

関数: poly_grobner (polylist, varlist) ¶

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

  Package grobner ·

関数: poly_reduced_grobner (polylist, varlist) ¶

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

  Package grobner ·

関数: poly_depends_p (poly, var, varlist) ¶

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

  Package grobner · Predicate functions ·

関数: poly_elimination_ideal (polylist, number, varlist) ¶

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

  Package grobner ·

関数: poly_colon_ideal (polylist1, polylist2, varlist) ¶

  コロンイデアル

  \(I(polylist1):I(polylist2)\)

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

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

  Package grobner ·

関数: poly_ideal_intersection (polylist1, polylist2, varlist) ¶

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

  Package grobner ·

関数: poly_lcm (poly1, poly2, varlist) ¶

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

  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

  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

  Package grobner ·

関数: poly_grobner_subsetp (polylist1, polylist2, varlist) ¶

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

  Package grobner · Predicate functions ·

関数: poly_grobner_member (poly, polylist, varlist) ¶

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

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

  Package grobner ·

関数: poly_ideal_saturation1 (polylist, poly, varlist) ¶

  イデアル

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

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

  Package grobner ·

関数: poly_ideal_saturation (polylist1, polylist2, varlist) ¶

  イデアル

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

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

  Package grobner ·

関数: poly_ideal_polysaturation1 (polylist1, polylist2, varlist) ¶

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

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

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

  Package grobner ·

関数: poly_ideal_polysaturation (polylist, polylistlist, varlist) ¶

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

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

  Package grobner ·

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

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

  Package grobner ·

関数: poly_polysaturation_extension (poly, polylist, varlist1, varlist2) ¶
  Package grobner ·

JavaScript license information