Maxima で綴る数学の旅

紙と鉛筆の代わりに、数式処理システムMaxima / Macsyma を使って、数学を楽しみましょう

-数学- ガロア群の計算とSagemath, Pari/GP, GAP,,,

ガロア群の計算、というトピックで調べると多くの数式処理システムで専用のコマンドが実装されていることがわかります。Sage (Sagemath), Pari/GP, GAPなどは群論が実装されており、専用のコマンドでガロア群を計算出来るようです。

Sagemathを使って\( x^4-x^2-1 \)のガロア群を計算する方法の一例は以下の通りです。

R.<x> = PolynomialRing(QQ)
f=x^4-x^2-1
G=f.galois_group(pari_group=True)
print(G)
print(G.permutation_group().list())

1行目で有理体上の多項式環を定義します。変数xを使った多項式は自動的にこの有理多項式環の元となります。

2行目で変数xを使った多項式\( x^4-x^2-1 \)を定義します。

3行目でSagemathはPari/GPを呼び出してガロア群を計算します。

4行目と5行目でガロア群と、その置換群を表示します。

 

すると以下のように出力されます。

PARI group [8, -1, 3, "D(4)"] of degree 4
[(), (1,3), (1,2,3,4), (1,3)(2,4), (1,2)(3,4), (1,4)(2,3), (1,4,3,2), (2,4)]

最初の行はGの説明です。D(4)から正方形の2面体群(Dihedral Group)であることがわかります。 2行目は8つの要素からなるこの置換群を巡回置換記法で求めています。

 

実行は以下の公開サーバのWebページ上で行いました。

 

SagemathやPari/GP, GAPなどは専門的な機能(楕円曲線、有限群、数体など)が充実しており、使い方を覚えようと思います。

 

ちなみに一連の記事で紹介してきたMaximaで記述したガロア群計算プログラム(の改良版)を 利用して、上記の\( x^4-x^2-1 \)のガロア群を求めると以下のようになります。一番下の方に置換群としてのガロア群が求まっていますが、Sageが出力した置換群と同じであることを確認してみてください。

 

改良版のダウンロードはこちらからどうぞ。

 

(%i1) load(sym)$
(%i2) load(grobner)$
(%i3) p1:x^4-x^2-1;
$$ \tag{%o3} x^4-x^2-1 $$
(%i4) first(ezgcd(p1,diff(p1,x)));
$$ \tag{%o4} 1 $$
(%i5) polynome2ele(p1,x);
$$ \tag{%o5} \left[ 4 , 0 , -1 , 0 , -1 \right] $$
(%i6) (DEGp1:first(%), SymCond:makelist(eval_string(sconcat("e",i))=%[i+1],i,1,first(%)));
$$ \tag{%o6} \left[ \mathrm{e1}=0 , \mathrm{e2}=-1 , \mathrm{e3}=0 , \mathrm{e4}=-1 \right] $$
(%i7) p1sollist:makelist(eval_string(ascii(96+i)),i,DEGp1);
$$ \tag{%o7} \left[ a , b , c , d \right] $$
(%i8) phi(xlist):=ev(sum(xlist[i]*cl[i],i,1,DEGp1),cl:[1,-3,10,-7,2]);
$$ \tag{%o8} \varphi\left(\mathrm{xlist}\right):=\mathrm{ev}\left(\mathrm{sum}\left(\mathrm{xlist}_{i}\,\mathrm{cl}_{i} , i , 1 , \mathrm{DEGp1}\right) , \mathrm{cl}:\left[ 1 , -3 , 10 , -7 , 2 \right] \right) $$
(%i9) phi(xlist):=ev(sum(xlist[i]*cl[i],i,1,DEGp1),cl:[-1,2,3,4,5]);
$$ \tag{%o9} \varphi\left(\mathrm{xlist}\right):=\mathrm{ev}\left(\mathrm{sum}\left(\mathrm{xlist}_{i}\,\mathrm{cl}_{i} , i , 1 , \mathrm{DEGp1}\right) , \mathrm{cl}:\left[ -1 , 2 , 3 , 4 , 5 \right] \right) $$
(%i10) Vperm:orbit(phi(p1sollist),p1sollist);
$$ \tag{%o10} \left[ 3\,d+4\,c+2\,b-a , 2\,d+4\,c+3\,b-a , 2\,d+3\,c+4\,b-a , 4\,d+2\,c+3\,b-a , 3\,d+2\,c+4\,b-a , -d+2\,c+4\,b+3\,a , -d+3\,c+4\,b+2\,a , -d+4\,c+3\,b+2\,a , -d+3\,c+2\,b+4\,a , -d+4\,c+2\,b+3\,a , -d+2\,c+3\,b+4\,a , 2\,d-c+4\,b+3\,a , 3\,d-c+4\,b+2\,a , 4\,d-c+3\,b+2\,a , 3\,d-c+2\,b+4\,a , 4\,d-c+2\,b+3\,a , 2\,d-c+3\,b+4\,a , 4\,d+2\,c-b+3\,a , 4\,d+3\,c-b+2\,a , 3\,d+4\,c-b+2\,a , 2\,d+3\,c-b+4\,a , 2\,d+4\,c-b+3\,a , 3\,d+2\,c-b+4\,a , 4\,d+3\,c+2\,b-a \right] $$
(%i11) VCond:makelist(V[DEGp1!+1-i]=Vperm[i],i,1,DEGp1!);
$$ \tag{%o11} \left[ V_{24}=3\,d+4\,c+2\,b-a , V_{23}=2\,d+4\,c+3\,b-a , V_{22}=2\,d+3\,c+4\,b-a , V_{21}=4\,d+2\,c+3\,b-a , V_{20}=3\,d+2\,c+4\,b-a , V_{19}=-d+2\,c+4\,b+3\,a , V_{18}=-d+3\,c+4\,b+2\,a , V_{17}=-d+4\,c+3\,b+2\,a , V_{16}=-d+3\,c+2\,b+4\,a , V_{15}=-d+4\,c+2\,b+3\,a , V_{14}=-d+2\,c+3\,b+4\,a , V_{13}=2\,d-c+4\,b+3\,a , V_{12}=3\,d-c+4\,b+2\,a , V_{11}=4\,d-c+3\,b+2\,a , V_{10}=3\,d-c+2\,b+4\,a , V_{9}=4\,d-c+2\,b+3\,a , V_{8}=2\,d-c+3\,b+4\,a , V_{7}=4\,d+2\,c-b+3\,a , V_{6}=4\,d+3\,c-b+2\,a , V_{5}=3\,d+4\,c-b+2\,a , V_{4}=2\,d+3\,c-b+4\,a , V_{3}=2\,d+4\,c-b+3\,a , V_{2}=3\,d+2\,c-b+4\,a , V_{1}=4\,d+3\,c+2\,b-a \right] $$
(%i12) p2:rat(1,V,a,b,c,d,e,f,g,h);
$$ \tag{%o12} 1 $$
(%i13) for i:1 thru DEGp1! do
(p2:fasttimes(rat(ev(V-V[i],VCond),V,a,b,c,d,e,f,g,h),p2));
$$ \tag{%o13} \mathbf{done} $$
(%i14) CL:makelist(coeff(p2,V,i),i,0,DEGp1!)$
(%i15) CLRes:map(lambda([cf],block([pp],ev(elem([DEGp1],tcontract(cf,p1sollist),p1sollist),SymCond,eval))),CL)$
(%i16) (res:0,for i:1 thru DEGp1!+1 do res:res+CLRes[i]*V^(i-1))$
(%i17) p4:factor(res);
$$ \tag{%o17} \left(V^8-52\,V^6-226\,V^4+23452\,V^2+491401\right)\,\left(V^8-40\,V^6+752\,V^4-7040\,V^2+215296\right)\,\left(V^8-20\,V^6+62\,V^4+380\,V^2+11881\right) $$
(%i18) minpoly:if op(p4)="+" then p4 else second(p4);
$$ \tag{%o18} V^8-40\,V^6+752\,V^4-7040\,V^2+215296 $$
(%i19) first(ezgcd(p4,diff(p4,V)));
$$ \tag{%o19} 1 $$
(%i20) for vari:1 thru DEGp1 do (
symvarlist:delete(p1sollist[vari],p1sollist),
res1:elem([DEGp1],tcontract(rat(product(x-p1sollist[i],i,1,DEGp1),symvarlist),symvarlist),symvarlist),
temp2:rat(res1-p1),
SymACond:solve(makelist(coeff(temp2,x,i)=0,i,1,DEGp1-1),makelist(eval_string(sconcat("e",i)),i,1,DEGp1-1)),
ratvars(V),
res2:expand(apply("*",map(lambda([perm],
V-phi(append(makelist(perm[i],i,1,vari-1),[p1sollist[vari]],makelist(perm[i],i,vari,DEGp1-1)))),
listify(permutations(symvarlist))))),
CL:makelist(coeff(res2,V,i),i,0,(DEGp1-1)!),
CLRes:map(lambda([cf],block([pp],ev(elem([DEGp1-1],tcontract(cf,symvarlist),symvarlist),SymACond,eval))),CL),
((res3:0,for i:1 thru (DEGp1-1)!+1 do res3:res3+CLRes[i]*V^(i-1)), p6:rat(expand(res3))),
gb:poly_buchberger([subst(p1sollist[vari],x,p1),minpoly,p6],[p1sollist[vari],V]),
res4:solve(last(gb),p1sollist[vari]),
define(solV[vari](V),rhs(res4[1]))
);

$$ \tag{%o20} \mathbf{done} $$
(%i21) p1SolCond:makelist(p1sollist[i]=solV[i](V),i,1,DEGp1);
$$ \tag{%o21} \left[ a=\frac{7\,V^7+880\,V^5-29536\,V^3-637632\,V}{4855296} , b=-\frac{7\,V^7+880\,V^5-29536\,V^3+576192\,V}{2427648} , c=-\frac{7\,V^7+880\,V^5-29536\,V^3-637632\,V}{4855296} , d=\frac{7\,V^7+880\,V^5-29536\,V^3+576192\,V}{2427648} \right] $$
(%i22) VNCond:VCond,p1SolCond,ratsimp$
(%i23) veclist:[];
$$ \tag{%o23} \left[ \right] $$
(%i24) for i:1 thru DEGp1! do if remainder(subst(ev(V[i],VNCond),V,minpoly),minpoly)=0 then
push(makelist('solV[j](V[i]),j,1,DEGp1),veclist)$
(%i25) apply(matrix,reverse(veclist))$
(%i26) %,nouns$
(%i27) %,VNCond$
(%i28) MM:matrixmap(lambda([f],remainder(f,minpoly)),%)$
(%i29) matrixmap(lambda([F],block([res],for i:1 thru DEGp1 do (if solV[i](V)=F then res:p1sollist[i]), return(res))),MM);
$$ \tag{%o29} \begin{pmatrix}a&b&c&d\\ b&c&d&a\\ b&a&d&c\\ c&b&a&d\\ c&d&a&b\\ d&c&b&a\\ d&a&b&c\\ a&d&c&b \end{pmatrix} $$
(%i30) %,a=1,b=2,c=3,d=4;
$$ \tag{%o30} \begin{pmatrix}1&2&3&4\\ 2&3&4&1\\ 2&1&4&3\\ 3&2&1&4\\ 3&4&1&2\\ 4&3&2&1\\ 4&1&2&3\\ 1&4&3&2 \end{pmatrix} $$