非可換環や加群の Groebner 基底計算について
|
使い方
|
|
Basis(F, T, opts)
MonomialOrder(A, tord, U)
|
|
パラメータ
|
|
F
|
-
|
多項式のリストか集合
|
T
|
-
|
単項式順序
|
opts
|
-
|
keyword=value の形のオプション引数
|
A
|
-
|
可換な多項式代数か Weyl 代数か Ore 代数
|
tord
|
-
|
単項式順序の短い記述
|
U
|
-
|
(オプション) 加群の要素の位置を定める変数
|
|
|
|
|
説明
|
|
•
|
Groebner[Basis] コマンドは可換、あるいは非可換の多項式環上のイデアルや加群の Groebner 基底を計算します。このヘルプページでは加群や非可換多項式環の Groebner 基底の計算について説明します。その他の一般的な多項式の場合については Basis をご参照ください。
|
•
|
Groebner パッケージのほとんどのコマンドは加群や非可換代数上での計算を行うことができます。いづれの場合も、Groebner 基底を計算する前には、次の 2 つの手順を踏みます:
|
|
|
可換な加群に対する Groebner 基底
|
|
•
|
多項式環 K[x1,...,xn] 上の加群を表現するのに Maple では要素の位置を定める (ダミーの) 変数 U = {u1,...,um} を用います。 同士による掛け算はできませんので、U = {u1,...,um} において異なる単項式は、加群の要素として異なる位置にあることになります。項は {x1,...,xn,u1,...,um} 上の任意の全順序で並べることができますが、通常既にある単項式順序を用います。
|
>
|
F := [x+y+z, x*y+y*z+z*x, x*y*z-1];
|
| (4.1) |
•
|
F の Groebner 基底を元の多項式で表現するために、加群の Groebner 基底を用います。各 F[i] による掛け算がどのように行われたか記録するため、以下に示すようなランク 4 の Q[x,y,z]-加群を構成します。
|
>
|
M := [seq(Vector(subsop(i+1=1, [F[i], 0, 0, 0])), i=1..3)];
|
| (4.2) |
•
|
この加群を Groebner パッケージで扱えるようにするには、加群の各要素を多項式に置き換えます。加群の要素の位置はダミーの変数 s のべきによって表現されます。s のべきが高いほうを上にある要素とします。
|
>
|
M := [seq( s^3*F[i] + s^(3-i), i=1..3)];
|
| (4.3) |
•
|
続いて における代数を構成し、単項式順序を選ばなくてはなりません。Q[x,y,z,s] の要素は可換なので、poly_algebra コマンドを用います。加群の要素を並べるには lexdeg([s], [x,y,z]) を用います。これは、最初は加群の要素の位置を比べ、同じだったときは tdeg(x,y,z) によって比較する、という指定です。これは Adams, Loustaunau の本の言葉では "position-over-term" あるいは "POT" 順序と呼ばれているものです。"term-over-position" あるいは "TOP" 順序を構成するためには lexdeg([x,y,z],[s]) を用いるか、一般的には積順序を用いて定義します。ダミーの変数は Groebner[MonomialOrder] コマンドにおいては第 3 引数として定義されます。
|
| (4.4) |
>
|
A := poly_algebra(x,y,z,s);
|
| (4.5) |
>
|
T := MonomialOrder(A, lexdeg([s], [x,y,z]), {s});
|
| (4.6) |
>
|
G := Groebner[Basis](M, T);
|
| (4.7) |
•
|
F のシジジー加群の Groebner 基底の計算を行いました。変数 s に関する最高次項は F の Groebner 基底を、それ以外の項はその基底の、元の F の生成元による表現を与えています。
|
>
|
G1 := select(proc(a) evalb(degree(a,s)=3) end proc, G);
|
| (4.8) |
>
|
[seq(Vector([seq(coeff(j,s,3-i), i=0..3)]), j=G1)];
|
| (4.9) |
•
|
変換行列 (F との内積は Groebner 基底を与える) は下 3 行を変換します。
|
>
|
C := Matrix([seq([seq(coeff(j,s,3-i), i=1..3)], j=G1)]);
|
| (4.10) |
>
|
GB := map(expand, convert(C.Vector(F), list));
|
| (4.11) |
>
|
Groebner[Basis](F, tdeg(x,y,z));
|
| (4.12) |
|
|
非可換の Groebner 基底
|
|
•
|
非可換の例として、i=1..N に対して D[i]*x[i] = x[i]*D[i] + 1 なる Weyl 代数を考えます。
|
>
|
A := diff_algebra(seq([D[i], x[i]], i=1..N), polynom={seq(x[i], i=1..N)});
|
| (5.1) |
•
|
次に MonomialOrder コマンドを用いて A 上の単項式順序を定義します。A は非可換多項式環であり、ダミーの変数はありません。
|
>
|
tord := tdeg(seq(D[i],i=1..N), seq(x[i],i=1..N));
|
| (5.2) |
>
|
T := MonomialOrder(A, tord);
|
| (5.3) |
•
|
F の生成元を構成し、T に関する Groebner 基底を計算します。
|
>
|
S := `+`(seq(x[i]*D[i], i=1..N)):
|
>
|
P := skew_product(S+1, S+1, A):
|
>
|
F := [seq(skew_product(D[i], x[i]*D[i], A) - P, i=1..N)]:
|
•
|
続いての例で、 を証明します。
|
>
|
A := shift_algebra([Sn,n], [Sk,k], polynom={n,k});
|
| (5.4) |
>
|
T := MonomialOrder(A, lexdeg([k], [n,Sn,Sk]));
|
| (5.5) |
>
|
Basis([(n+1-k)*Sn-(n+1),(k+1)*Sk-(n-k)], T);
|
| (5.6) |
>
|
map(factor,subs(Sk=1,remove(has,%,k)));
|
| (5.7) |
|
|