数学大好き宣言!

勉強メモ。おもしろいことを探していきたい。

素イデアル分解の計算機

タイトルの通り、素イデアル分解(代数体の整数環での)を計算機に解いてもらう方法を見つけた。

筆者は計算機やパソコンのことはド素人なのでいろいろ注意。

Magmaというソフトウェアを用いる。これは本来は有料なのだが、以下のリンクの「calculator」をクリックした先で簡単にお試し利用できる↓↓

http://magma.maths.usyd.edu.au/calc/

1度の計算時間120秒、入力5000バイトまでの制限があるが、基本的な計算は余裕でできるので問題ない。

f:id:mochi-mochi61:20200807233115p:plain

f:id:mochi-mochi61:20200807233912p:plain

肝心のコードに入る。

PQ<x>:=PolynomialAlgebra(Rationals());
f:=添加する代数的数の最小多項式;
k<a>:=NumberField(f);
Ok:=RingOfIntegers(k);
Decomposition(Ok,素数);

これを入力してsubmitを押すとℤの素数(有理素数)が素イデアル分解される。例を見よう。以下を入力してsubmitを押すと、

PQ<x>:=PolynomialAlgebra(Rationals());
f:=x^2 + 5;
k<a>:=NumberField(f);
Ok:=RingOfIntegers(k);
Decomposition(Ok,3);

以下のようになる。

f:id:mochi-mochi61:20200807235450p:plain

[
<Prime Ideal of Ok
Two element generators:
[3, 0]
[1, 1], 1>,
<Prime Ideal of Ok
Two element generators:
[3, 0]
[5, 1], 1>
]

と出てきた。見ずらいが、これは

 (3) = {(3+0・√-5) と (1+1・√-5) を生成元とするイデアルの1乗}・{(3+0・√-5) と (5+1・√-5) を生成元とするイデアルの1乗}

と分解したことを表している。

もう一つ見ておこう。

PQ<x>:=PolynomialAlgebra(Rationals());
f:=x^2 + 2*x + 2;
k<a>:=NumberField(f);
Ok:=RingOfIntegers(k);
Decomposition(Ok,2);

と入力すると

[
<Prime Ideal of Ok
Two element generators:
[2, 0]
[-1, 1], 2>
]

とかえってくる。 x^2+2x+2=0の解をaとして (2)=(2,-1+a)^2と素イデアル分解された。ちなみに、生成元二つで書かれているが過剰で、右辺の素イデアルは単項イデアルだ。その証拠に

IsPrincipal(ideal<Ok|2,1+a>)

と書き足してsubmitを押すと「true」と出る。

単拡大でない場合にどうするかはまだわからない・・・

magma,超多機能超高性能みたいなのでいろいろ他にもあそびたい。