pari-gpで代数体の計算3
今回は,2次体に限らない,一般の代数体の計算や相対代数体の計算例を紹介します.
bnf一族
初回にも登場したbnfinit()
をはじめとするbnf一族を使ってみます.まず,$p(x)=x^3-x+1$という多項式を考え(pari-gpでは慣習としてpol
を用います),その1つの根$\alpha$を有理数体$\mathbb{Q}$に添加して得られる代数体を$k$と(pari-gpではbnfk
と)しましょう.
gp> > pol
%27 = x^3 - x + 1
gp > bnfk=bnfinit(pol);
gp > nfgaloisconj(bnfk)
%29 = [x]~
nfgaloisconj()
は初登場です.nfinit()
もしくはbnfinit()
の出力を取り,その代数体$k$の定義多項式(今の場合,上述の$p(x)$)の根で$k$内にあるものを出力します.上の例だと,3次多項式$p(x)$の根1つだけが出力されています.よって,$k=\mathbb{Q}(\alpha)$は$\mathbb{Q}$上Galois拡大ではないことが分かります.
$p(x)$を$k$上で因子分解してみましょう.代数体$k$係数の多項式を因子分解するnffactor()
という関数を使います.この関数を使うために確認すべき事項があるので,先にそちらを解説します.
pari-gpにおける変数の順序
pari-gpでは,代数体$K$は$K=\mathbb{Q}$上の多項式環の剰余環$\mathbb{Q}[y]/(f(y))$として実現されているのでした($y$は変数).相対代数体,すなわち代数体$K$上の代数拡大$L/K$も同様です,つまり$L=\mathbb{Q}[y]/(f(y))[x]/(g(x))$, $g(x)\in \mathbb{Q}[y]/(f(y))[x]$. pari-gpでは,変数に順序(priority)がつけられており,デフォルトではx
が最上位,あとはアルファベット順です.
相対拡大を扱うrnf一族では,基礎体の変数のpriorityが低く,拡大体の変数のpriorityが高くなることを要請します.上の例では,priorityが最上位のx
を変数として代数体$k$(pari-gpの計算例ではbnfk
)を用意してしまいました.こんなときは,subst()
という関数を使って,含んでいる変数を一斉に置換することができます.
gp> bnfky=subst(bnfk, x, y);
gp> nfgaloisconj(bnfky)
%56 = [y]~
考えている3次体で定義多項式を因数分解してみましょう:
gp> nffactor(bnfky, bnfk.pol)
time = 1 ms.
%57 =
[ x + Mod(-y, y^3 - y + 1) 1]
[x^2 + Mod(y, y^3 - y + 1)*x + Mod(y^2 - 1, y^3 - y + 1) 1]
$k$には pol
の根が1つ含まれていたので,2次の因子が出てきます.出力は2行2列の行列で,各行が既約因子とその次数です.上の場合,1次の因子が1乗で,2次の因子も1乗であることがわかります.
相対代数体の定義:rnf一族
この2次の因子で定義される相対代数体を定義しましょう.rnfinit()
の第一引数が基礎体となる代数体$K$,第二引数が,拡大体$L$を定義する$K$係数の多項式です:
gp> rnf=rnfinit(bnfky, nffactor(bnfky,bnfk.pol)[2,1]);
time = 3 ms.
gp> polq = rnfequation(bnfky, rnf.pol)
%84 = x^6 - 6*x^4 + 9*x^2 + 23
gp> nfgaloisconj(polq)
time = 3 ms.
%124 = [-x, x, -1/6*x^4 + 5/6*x^2 - 1/2*x - 2/3, -1/6*x^4 + 5/6*x^2 + 1/2*x - 2/3, 1/6*x^4 - 5/6*x^2 - 1/2*x + 2/3, 1/6*x^4 - 5/6*x^2 + 1/2*x + 2/3]~
rnfequation()
によって,$L$の$\mathbb{Q}$上の定義多項式が得られます.第一引数が基礎体(変数のpriorityに関する注意が上述の通りに必要です),第二引数が相対代数体の定義多項式.この例では,$x^3-x+1$が定義する体$K$上の2次式で定義される体が$L$で(pari-gpではrnf
という変数に格納されている),2次拡大なので$K$上Galois拡大です.$\mathbb{Q}$上で$L$がGalois拡大かをみるために,nfgaloisconj()
を使います.$L$の$\mathbb{Q}$上の定義多項式polq
を与えると,6つの根が与えられていることから,$L$は$K$の$\mathbb{Q}$上のGalois閉包だと言うことが分かりました.
Galois群の計算
$L/\mathbb{Q}$がGalois拡大だということで,そのGalois群が気になるところです.pari-gpには,7次以下の有理数係数の1変数多項式のGalois群を計算するpolgalois()
と言う関数があります.引数として有理数係数多項式をとり,Galois群を返します.群の記法はマニュアル(polgalois()
)を見て下さい.今の場合は次のようになり,対称群$S_3$(正三角形の2面体群)と言うことが分かります:
gp> polgalois(polq)
time = 5 ms.
%188 = [6, -1, 2, "D_6(6) = [3]2"]
optionのデータベースの利用
オプションとして配布されているデータベースを導入すると,さらに8〜11次の多項式についても計算できます.ここで配布されているgaldata.tgzを適切な場所に展開するだけです.Macで標準的にインストールしたpari-gpだと,次のようになります:
gp> default(datadir)
%186 = "/usr/local/share/pari"
pari-gpのいくつかの関数は,オプションとして配布されているデータベースを利用します.楕円曲線の$a_p$(いわゆるトレース)を計算するellap()
や,条件を満たす楕円曲線を探索するellsearch()
など.これらについては別項で触れる予定です.
相対代数体での計算例
いま得られた6次式を,$\mathbb{Q}(\sqrt{-207})$で因子分解してみましょう($207=3^2\cdot 23$).
gp> nffactor(y^2+207, polq)
time = 2 ms.
%119 =
[x^3 - 3*x + Mod(-1/3*y, y^2 + 207) 1]
[ x^3 - 3*x + Mod(1/3*y, y^2 + 207) 1]
3次の因子が$\mathbb{Q}(\sqrt{-207})$上定義する3次拡大を,再びrnfinit()
で計算させます.得られた相対3次拡大の$\mathbb{Q}$上の定義多項式を,再びrnfequation()
で計算します:
gp> rcyc3=rnfinit(bnfinit(y^2+207), x^3 - 3*x + Mod(-1/3*y, y^2 + 207));
gp> rnfequation(bnfinit(y^2+207),rcyc3.pol)
time = 2 ms.
%121 = x^6 - 6*x^4 + 9*x^2 + 23
これは,$L$の定義多項式と同じです.つまり,$p(x)=x^3-x+1$が定義する3次体$K$の$\mathbb{Q}$上のGalois閉包$L$に,部分体として,$\mathbb{Q}(\sqrt{-207}) = \mathbb{Q}(\sqrt{-23})$が含まれているということが分かりました.このことは,より直接,nfsubfields()
という関数でも確かめられます.$\mathbb{Q}$上の既約多項式$p(x)$を与えると,$p(x)$の根を一付け加えた体$K=\mathbb{Q}[x]/(p(x))$の部分体$k$の定義多項式$q(x)$と,$K$の生成元$\alpha = x + (p(x))$で表示した$k$の生成元$x+(q(x))$の組のベクトルが返ります:
gp> nfsubfields(polq)
time = 3 ms.
%130 = [[x, 0], [x^2 + 207, 3*x^3 - 9*x], [x^3 - 9*x - 27, -1/6*x^4 + 5/6*x^2 + 3/2*x - 2/3], [x^3 - 12*x^2 + 36*x + 184, 2*x^2], [x^3 - 9*x + 27, 1/6*x^4 - 5/6*x^2 + 3/2*x + 2/3], [x^6 - 6*x^4 + 9*x^2 + 23, x]]
2番目の要素の[x^2 + 207, 3*x^3 - 9*x]
に,$M=\mathbb{Q}(\sqrt{-207})$があります.
代数体での素イデアル分解
$f(x)=x^6 - 6x^4 + 9x^2 + 23$が定義する6次の体$L$の判別式を見ておきましょう.factor()
により整数の素因数分解が可能です:
gp> bnfq=bnfinit(polq);
time = 10 ms.
gp> factor(bnfq.disc)
%141 =
[-1 1]
[23 3]
$M=\mathbb{Q}(\sqrt{-207})= \mathbb{Q}(\sqrt{-23})$の判別式が$-23$で,$L$の判別式が$-23^3$ということです.$L/\mathbb{Q}$は$23$でのみ分岐することが分かりました(判別式を割る素数のみが分岐する).$23$を$L$で素イデアル分解すると次のように3つの素イデアルの積になり,分岐指数が2, 相対次数が1. つまり,$23$は$M/\mathbb{Q}$で分岐し(分岐指数は2),$L/M$では分岐しないと言うことです.
gp> idealprimedec(bnfq, 23)
%138 = [[23, [-7, 0, 0, 1, 2, 0]~, 2, 1, [6, 27, -19, -32, 37, -26; 5, 11, 11, 27, -19, 32; -5, -11, 12, 19, -27, 37; -8, 10, -13, 12, -11, 27; 8, 13, -10, 11, 11, 19; -11, 8, 8, 5, 5, 17]], [23, [0, 0, 0, 1, 2, 0]~, 2, 1, [11, 4, -8, -13, 18, -12; 9, 20, 6, 4, -2, 9; -5, -6, 12, 8, -4, 18; 4, 14, -5, 12, -6, 4; 2, 7, -14, 6, 20, 2; -6, 2, -4, 5, 9, 17]], [23, [7, 0, 0, 1, 2, 0]~, 2, 1, [11, 15, -19, -5, 10, 1; -10, 1, 11, 15, -7, 20; -5, -11, 17, 19, -15, 10; 4, -5, 14, 17, -11, 15; 8, 13, 5, 11, 1, 7; -11, 8, -4, 5, -10, 22]]]
まとめると,$L/\mathbb{Q}$のGalois群は$S_3$で,$M/\mathbb{Q}$は2次拡大(とくに$M/\mathbb{Q}$はGalois拡大.よって$\mathrm{Gal}(L/M)$は$S_3$の位数3の正規部分群,つまり交代群$A_3$, よって$L/M$は3次巡回拡大です.また,$L/\mathbb{Q}$は$23$以外では不分岐で,23は$M/\mathbb{Q}$で分岐し,23の上にある$M$の素イデアルは$L/M$で不分岐.ということは$L/M$は不分岐3次巡回拡大である,ところまで分かりました.
虚2次体のHilbert類体
類体論の一つの結果として,勝手な代数体$k$に対して,$k$のHilbert類体と呼ばれるものが存在します.それを$L(k)$と書くことにすると,
- $L(k)/k$は有限次不分岐Abel拡大($k$のどの素イデアルも分岐しない有限次Galois拡大で,そのGalois群はAbel群)で,そのようなものの中で最大,
- $\mathrm{Gal}(L(k)/k)$と,$k$のイデアル類群$C_k$はAbel群として同型で(とくに拡大次数$[L(k):k] = h_k$, $h_k$は$k$の類数),さらに同型写像が具体的に記述できる
といった条件を満たします(実素点も分岐しないことを要請しますが,いまは虚な体を考えているので言及しませんでした).
最初の投稿 で見たように,虚2次体$M=\mathbb{Q}(\sqrt{-23})$のイデアル類群は位数3の巡回群でした(つまり,$M$の類数$h_M=3$).前節末尾で見たように,$x^6 - 6x^4 + 9x^2 + 23$が定義する代数体$L$は$M$上不分岐3次巡回拡大,この$3$が$h_M=3$と等しいです.つまり,$L$が$M$のHilbert類体$L(M)$と一致することが分かります.
pari-gpには,2次体のHilbert類体の定義多項式を計算するquadhilbert()
という関数が用意されているので,それで答合わせをしてみましょう.基本判別式を与えると,その判別式の平方根を添加した2次体の類体を与える(考えている2次体上の)相対的な多項式を返します.
gp> quadhilbert(-23)
%191 = x^3 - x^2 + 1
gp> polredbest(%191)
time = 2 ms.
%192 = x^3 - x - 1
quadhilbert()
の結果から,相対代数体を定義して,その$\mathbb{Q}$上の定義多項式を得ることは,本稿で説明した手続きを繰り返すことでできます.ここでは,polredbest()
を適用することで,冒頭の多項式$p(x)$と同じものを得ました.
polredbest()
は,与えられた$\mathbb{Q}$上の多項式から,「いい感じに」係数の小さい,同じ体を定義する多項式を求める関数です.
(ついでに,pari-gpでは,対話的に得られた計算結果を%191
のように取得することができます).
quadhilbert()
がどのように2次体のHilbert類体を計算しているのかは面白い話題です.与えられた基本判別式が負なら(つまり,虚2次体のHilbert類体の計算は),虚数乗法論を使います.あるモジュラー形式の特殊値を数値計算し,それが満たす多項式を計算します.一方,与えられた基本判別式が正なら(つまり,実2次体のHilbert類体の計算は),Stark予想を使います.これは,考えている実2次体のDedekindゼータ関数の微分の特殊値がHilbert類体を生成する,という予想です.Stark予想は未解決ですが,特殊値を数値計算すること,それが満たす多項式を計算することは可能です.そして,その多項式の根が生成する体のGalois群が,考えている実2次体のイデアル類群と同型であれば,Hilbert類体の一意性から,得られた多項式が正解である事は確認できます.
こういった話題については,拙稿も参照して頂けると幸いです.
まとめ
本稿では,2次とは限らない代数体での計算例,ならびに,相対代数体での計算や,類体の計算(これは虚2次体の場合のみ)を見ました.
pari-gpの代数的整数論に関する機能の目玉としては,より本格的な類体論の計算が挙げられます.いずれ,稿をあらためて解説したいと考えています.(あるいは,レファレンスマニュアルのClass Field Theoryをご覧ください).