maximaを起動したらまず以下のコマンドでGF.macを読み込みます。
load(GF);
まず$F_5$には$\sqrt{2}$は存在しないことを確認しておきます。
jacobi(2,5);
$F_5(\sqrt{2})$を構成します。gf_xxxコマンドはこの体の上で動作します。
gf_set_data(5,x^2-2);
これで$F_5(\sqrt{2})$が構成できました。以下で登場する$x$は$\sqrt{2}$を指すと考えてください。例えば$x$に$x$をかけると$2$になるはずです。乗算にはgf_multを使います。
gf_mult(x,x);
$F_5(\sqrt{2})^{\times}$は巡回群になるのですが、gf_primitiveを使ってその生成元を求めることもできます。
a:gf_primitive();
これは$\sqrt{2}+2$が生成元だということです。実際に$x+2$の冪乗をいくつか求めてみます。
map(lambda([i],gf_exp(x+2,i)),[0,1,2,3,4,5,19,20,21,22,23,24]);
命題3.34の公式 $(a+b)^p=a^p+b^p$を実際の値を入れて試してみます。$F_5(\sqrt{2})$で$(a+b)^5=a^5+b^5$を試してみましょう。適当に$a=\sqrt{2}+3,\, b=3\sqrt{2}+1$とおいてみます。
a:x+3;b:3*x+1;
まず$(a+b)^5$を計算します。gf_addで加算、gf_expで冪乗を計算します。
gf_exp(gf_add(a,b),5);
結果は$\sqrt{2}+4$です。 今度は$a^5+b^5$を計算してみます。先にgf_expで冪乗を求めてからgf_addで加算します。
gf_add(gf_exp(a,5),gf_exp(b,5));
結果は$\sqrt{2}+4$で同じ値になりました。
次は命題3.48が$F_p$で成り立つこと、つまり$a\in F_p \iff a^p=a$を値を入れて試してみます。まず任意の$F_5$の元$c$について$c^5=c$が成り立つことを確認します。
map(lambda([c],[c,gf_exp(c,5)]),[1,2,3,4]);
$F_5$の元ではない場合についても確認します。先ほど定義した$a,b$はいずれも$F_5$の元ではありませんから、$a^5\neq a,\, b^5\neq b$のはずです。やってみましょう。
[a,gf_exp(a,5)];
[b,gf_exp(b,5)];
命題3.48が$F_{p^f}$で成り立つこと、つまり$a\in F_{p^f} \iff a^{p^f}=a$を値を入れて試してみます。$F_{5^2}=F_{25}$なので$F_5(\sqrt{2})$の任意の要素$x$で$x^{25}=x$が成り立ちます。先ほど定義した$a,b$でも成り立つことを見ましょう。
[a,gf_exp(a,25)];
[b,gf_exp(b,25)];