巡回多項式とは簡単に言えば一つの根をもって他の根をその多項式で表せるような特別な多項式のことである。これについては
period-mathematics.hatenablog.com
で詳しく取り上げているが、そこの主定理によると既約多項式に対して、それが巡回多項式であることとその*1ガロア群が巡回群であることが同値なのであった。本稿はこの記事の証明パートを除いた部分は既知とした上で書いている。そしてここでも断りなくページ数などを書いたら石井俊明『ガロア理論の頂を踏む』からの引用を表していることにする。
さて、ここ取り上げるのは
period-mathematics.hatenablog.com
で取り上げたPDFのもう一つの主題、巡回多項式の代数的解法である。本稿をもってそこのPDFの内容は全て解説できたことになる。本稿ではそこの記事の内容も既知として書いていることをあらかじめ注意しておく。またPDFと記号を変えたりしているのでそこもあらかじめご了承いただきたい。
以下で1の原始乗根を表すものとし、係数体は既にこれを加えたで考えるものとする(解の巡回の記事のを全てで置き換えても全く同じ議論が成立することに注意されたい*2。しかしそうした場合例えば、本稿の例は該当しないが、巡回関数の係数にが出てくる可能性もある)。
解法の解説
PDFで取り上げられている巡回多項式の例*3、 を考えていこう。これを代数的に解きたいとする。以下、根を一つ固定する。まずこれは巡回関数として4つ候補があり、どれを選んでもよいのであった。よってここではPDFでもそうしているように、比較的単純なを選ぶことにしよう。またガロア群は巡回群でと書くことにする(ここでである)。ただし、ここではを満たすように取るものとする(これはのちの計算パートのところで、を(計算可能な対象)として扱うためである。以下のこの節の議論ではこの関係式は使わない)。
さて、方程式論において解を代数的に求める際にとても重要な役割を果たすのが以下に示す(ラグランジュの)リゾルベント(分解式)である。以下とする。
これは解と1の原始累乗根のべきの線型結合で表される式で、非常に巧くできている。それはガロア群の元を作用させてみればわかる。
(ここでガロア群の元は準同型であること(p.280 定義5.2)とガロア群の元は基礎体(ここでは)の元を「すり抜ける」ことを使っている*4)
なんとたかが定数倍の変化に収まるようにできているのである。そうすると何が言えるか?、という疑問は以下の議論を見れば氷解するであろう。
今度は(唐突な式ではあるが)にガロア群の元を作用させてみるとどうなるか見てみよう。
(ここでまたガロア群の元は準同型であることを使っているp.280 定義5.2)
なんと不変なのである。
今ガロア群はという形であったから結局どのガロア群の元を作用させてもは不変だということがわかる。これははガロア群の不変体に属するということを意味し、ガロアの基本定理より*5ガロア群の不変体はその基礎体(ここでは)に等しかったのであるから(p.395 定理5.33最後の式)、これはの元であるとわかる。つまりはの有理数係数の有理式(それは多項式に出来る)で表せることを意味しているのである!
こうなるともうなどという正体不明なものは消えているので完全にこれの値が求められることがわかるのである!
記号で表しておくと、あるが存在して、ということである。
さて我々の目標は5つのリゾルベントの値を求めることである。それは以下の式を見れば納得されるだろう。
つまりリゾルベントの値がわかれば求めたい根もわかるということである(他の根は巡回関数を使えば出せる*6)。いやはやとにかく巧くできている式である。
さて後はリゾルベントの値を求めることに専念すればいいわけであるが、しかしもう我々はゴールにたどり着いている。
(すべての根の和) (解と係数の関係より求まる)
右辺は全て既に分かっている値だからである。こうして無事代数的に解く道筋がわかった
具体的に計算
さて、前節でくどくど説明してきたのでここでは簡潔に行こう。計算にはPARI/GPを用いる。まずはコマンドを示そう。はを満たすように取っていたことに注意されたい。
1.解きたい既約巡回多項式を定義する
gp > f(x)=x^5+x^4-4*x^3-3*x^2+3*x+1
2.を最小分解体上で因数分解する(巡回多項式を得るための手順なので必要なければやらなくてもよい。下の画像ではやっていない*7)
lift(factornf(f(x),f(a)))
3.巡回関数を定義する
gp > p(x)=x^2-2
4.1の原始乗根zを定義する
gp > z=Mod(z,subst(polcyclo(5),x,z)) *8
5.多項式の根aを定義する
gp > a=Mod(a,f(a))
gp > r(a,k)=a+z^k*p(a)+z^(2*k)*p(p(a))+z^(3*k)*p(p(p(a)))+z^(4*k)*p(p(p(p(a))))
7.基礎体の元である(従って求値可能な)多項式を定義する
gp > s_(k)=r(a,k)*r(a,1)^(5-k)
8.の値を計算する
gp > lift(lift(s_(1)))
gp > lift(lift(s_(2)))
gp > lift(lift(s_(3)))
gp > lift(lift(s_(4)))
実際に計算してみた画面は以下のようになる(s_(k)に書き変えた画像に変更)
PDFの結果とまさに同じことがわかるだろう。さて、後はこれらを使ってを求めよう。一応公式化しておいたので共有しておく
)
これに最後に出した4つの値などを代入すればよい。*10
別の例
別の例を扱ってみよう。例えばを扱うことにする。まず
gp > f(x) = -1024*x^5 + 2816*x^4 - 2816*x^3 + 1232*x^2 - 220*x + 11
gp > polgalois(f(x))
と打ってみると
%12 = [5, 1, 1, "C(5) = 5"]
と出力される。これはガロア群が5次の巡回群であることを示しているので、主定理よりこれは巡回多項式であるとわかる。出力結果の読み方については
period-mathematics.hatenablog.comを参照されたい。
巡回関数も計算するとであることがわかる。計算画面とその結果だけ置いておこう
計算画面
結果のコピペ
gp > lift(lift(s(1)))
%8 = 55/512*z^3 - 165/1024*z^2 + 55/256*z + 143/512
gp > lift(lift(s(2)))
%9 = 99/256*z^3 + 33/256*z^2 + 77/256*z - 33/256
(gp > lift(lift(s(3)))
%10 = 11/64*z^3 + 11/32*z^2 - 11/32*z
gp > lift(lift(s(4)))
%11 = 11/16
他にも例えば
超難問、自作問題です。 - 5次方程式32x^5+16x^4-32x... - Yahoo!知恵袋にはという例がある。これを計算してみると以下のような出力が出る。
gp > lift(lift(s(1)))
%10 = -55/16*z^3 + 165/32*z^2 - 55/8*z - 143/16
gp > lift(lift(s(2)))
%11 = 99/16*z^3 + 33/16*z^2 + 77/16*z - 33/16
gp > lift(lift(s(3)))
%12 = -11/8*z^3 - 11/4*z^2 + 11/4*z
gp > lift(lift(s(4)))
%13 = 11/4
しかしそこには綺麗なコサインの値になると書いてある。見た目は全然違うが実は等しいのである。これは上で扱った例も実は同じなのである。これについては「まとめ」で少し触れよう。
まとめ
ここでは5次の場合のアルゴリズムを明示したが、適切に修正することで他の次数でも通用するようなものになるだろう。しかしあまりに高次なものだとPCが悲鳴を上げるかもしれない。
理論面ではリゾルベントの凄さが際立った。リゾルベントは古典方程式論における過去の遺物として見られてしまうような説明に終始している啓蒙書が多いが、これはを含む基礎体の巡回拡大が冪根拡大であるという驚くべき、そして方程式論において決定的な要となる定理の証明の中心となる概念で、ラグランジュの精神はしっかり引き継がれていることがわかるのである。
後半は例を計算してみたが、実際に求めてみようとするとずいぶんと複雑な形に見える。しかしこれらは実は三角関数で表すことが出来る。それはこの例においては実根なら明らかな話なのであるが一般に既約巡回多項式の実根は三角関数で表すことが出来る。これはクロネッカー・ウェーバーの定理と呼ばれる深淵な定理に繋がる現象である*11。事実、クロネッカー・ウェーバーの定理やそれに続くクロネッカーの青春の夢は、アーベル方程式というガロア群がアーベル群となるような方程式の根が1の累乗根で書けるという現象からクロネッカーが見出したものである。
*1:正確には係数体からその最小分解体への体の拡大の
*2:つまりその記事の注釈1においてとする、ということである
*3:abstract algebra - How to solve a cyclic quintic in radicals? - Mathematics Stack Exchange でも扱われていた
*4:要は-準同型、ということである
*5:自明なことではない、という強調である
*6:リゾルベントだけでも表現できるので必ずしも巡回関数に頼らなくてはならないわけではない
*7:個人的にはこれを踏んでおくと次の手順のコマンドの前に「gp > -subst((a^2-2),a,x)」を入れられて楽になると思う(subst(f(x),x,y)はf(y)を出力する変数変換のコマンド)(ただしここで「 gp > p(x)= -subst((a^2-2),a,x)とやってしまうと後でエラーが出るので注意(aをmodで還元する影響)」)。画像では因数分解すると見切れそうだったのでやらなかった。
*8:ここでは合わせ技が決まっている。polcyclo(5)は変数xの5次の円分多項式を表す。
*9:ここでリゾルベントがaとzという2つのmodで還元されている文字を含んでいることに注意する。従って手順8においてliftも2回行わないといけないのである。liftを使わない素の状態だと、最初にzで次数下げをしてからaで次数下げ、という順番で還元されているようである
*10:この後に続いてをPARI/GPに計算させることはお勧めしない。累乗根を取る時点で小数がべらぼうに出てきてしまうからである。しかも結果は複素数なので値の大きさから検算するということも出来るとは限らない。