Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pari-gpで代数体の計算3

Posted at

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)$と書くことにすると,

  1. $L(k)/k$は有限次不分岐Abel拡大($k$のどの素イデアルも分岐しない有限次Galois拡大で,そのGalois群はAbel群)で,そのようなものの中で最大,
  2. $\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をご覧ください).

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?