カテゴリー
ガロア理論 数学

数式処理ソフトによるガロア群の算出と、べき根を用いた厳密解の表現 その3

「退職後は素人数学者」さんの「可解な代数方程式のガロア理論に基づいた解法」について、いくつか補足を書きます。

■ \(V\) の選択と最小多項式

途中の例で、
\[ f(x)=x^{16} + x^{15} + \dots + x^{2} + x + 1 \]
に対して、最小分解体の原始元 \(V\) を \(V=x_{1}\) としています。これは
\[ V = x_{1} + 0x_{2} + 0x_{3} + \dots + 0x_{16} \]
ということですが、これを見て「これだと解 \(x_{1}, \dots, x_{16}\) の \(16!\) 通りの置換に対して、\(V_{k}\) の値がすべて互いに異なる、という条件をみたさなくなるのでは?」という疑問を持つ方のために説明します。

実は、一連の話では、その条件は「置換群としての Galois 群」と「最小分解体の原始元 \(V\) の最小多項式」と「各解 \(x_{i}\) を \(V\) のみで表す表式」を手がかりなしで得られる十分条件として使っているだけなのです。ひとたびそれらさえ求まってしまえば、(Galois 群が可解だった場合に)解をべき根で表す具体的な表式を得る上での障害はありません。そこで必要なのは、置換群としての Galois 群の構造の他には「Galois 群対称な解の多項式が与えられたときに、その具体値を求められること」だけなので。

今の場合、\(f(x)\) の特殊性によって Galois 群は \(16\) 次巡回群とわかり、\(V=x_{1}\) とおけばそれが原始元であることも、その最小多項式 \(f(x)\) も、各解を \(V\) で表す式 \(x_{i}=V^{i}\) もすべてわかるので、べき根による解の具体的な表式は問題なく求められるわけです。

■ 組成列を求めるアルゴリズム

前回の記事で「退職後は素人数学者」さん自身が解説されていますが、もうちょっと補足します。

ここで例に挙げられている方程式 \((x^{2}-2)(x^{2}-3)(x^{2}-5)=0\) の場合、\(\pm \sqrt{2}\) の互換 \(\sigma_{2}\), \(\pm \sqrt{3}\) の互換 \(\sigma_{3}\), \(\pm\sqrt{5}\) の互換 \(\sigma_{4}\) から生成される群が Galois 群 \(G\) です。
\[ G = \langle \sigma_{2}, \sigma_{3}, \sigma_{4} \rangle \]
\(G\) は可換群で、よって \(G\) の任意の部分群が正規部分群です。また、\(G\) の任意の要素は \(2\) 乗すると単位元 \(\sigma_{1}\) になります。ですから、\(\sigma \in G\) を含む最小の正規部分群は
\[ \langle \sigma \rangle =
\begin{cases}
\{ \sigma_{1} \} & (\text{\(\sigma=\sigma_{1}\) のとき}) \\
\{ \sigma_{1}, \sigma \} & (\text{\(\sigma \ne \sigma_{1}\) のとき})
\end{cases}
\]
となるわけです。

一方、\(G\) の最大の正規真部分群は、例えば \(\sigma_{2}\), \(\sigma_{3}\) から生成される群 \(\langle \sigma_{2}, \sigma_{3} \rangle\) で要素数は \(4\) です。したがって、「\(\sigma_{i}\) を含む最小の正規部分群」を \(i=1,\dots, 8\) に対して全部列挙しても、\(G\) の最大の正規真部分群は手に入らないわけです。

■ \(\theta_{i}(x)\) の求め方

私の元々の記事での解の求め方は、\(p\) 乗根の \(p\) 通りの不定性があちこちに野放しにされていて、解として不適な値が大量に候補として残ってしまう非効率なものでした。後から思いついた、それらを緩和・解消するアイディアは
https://ikumi.que.jp/blog/archives/274
https://ikumi.que.jp/blog/archives/282
https://ikumi.que.jp/blog/archives/298
に散発的に書いてきたのですが、「退職後は素人数学者」さんの記事はそれらをまとめ上げて、より洗練されたアルゴリズムとして作り上げられています。

ところが、jurupapa さんの記事では、このアルゴリズムでは \(x^3-2=0\), \(x^5-3=0\), \(x^5-4=0\) を解く際に \(0\) による割り算が発生して解けないと報告されています。そこのコメントに私も書きましたが、原因は「本アルゴリズムで、\(\theta_{1}(x), \theta_{2}(x), \dots, \theta_{p-1}(x)\) の中にゼロ多項式が交じった場合の配慮が不足しているため」でおそらく間違いないと思います(以下説明します)。これは、元を辿れば私の記事

我々の話の流れでは \(\theta(x)\) がゼロ多項式の場合は考えなくてよい

と私が不用意に書いてしまったのがそもそもの原因だろうと思います。「退職後は素人数学者」さんと jurupapa さんにはご迷惑をおかけしてしまい、どうもすみません。私がなぜこのように書いたのか、実を言うと記憶が曖昧な所があるのですが、おそらくその時は「\(\theta(x)=0\) なら \(p\) 通りの不定性はなく、\(p\) 乗根は \(0\) と一意に決まるから、\(p\) 乗根の不定性を気にかける必要があるのは \(\theta(x) \ne 0\) の場合だけ」と思っていたんじゃないかと思います。

実際、\(x^{3}-2=0\) の場合に、群を \(A_{3}\) から単位群に縮小する所の計算を手計算でやってみたところ(ズルして、解の具体値 \(\alpha = \sqrt[3]{2}\), \(\beta = \sqrt[3]{2}\omega\), \(\gamma = \sqrt[3]{2}\omega^{2}\) を使いました)、\(\theta_{1}(x)=0\) となってしまいました。他のケースで計算が失敗するのも同じ原因だと思います。

「退職後は素人数学者」さんの文書で、アルゴリズムを解説している部分の式 (12.11)
\[ b_{i} = (a_{1}^{p_{k}-1}a_{i})/A_{1} \]
を見ると、\(A_{1}=0\) の場合は破綻することがわかります。\(A_{1}\) の定義は \(A_{1}=a_{1}^{p_{k}}\) で、\(a_{1}\) は \(\theta_{1}(x)\) の最高次係数なので、\(\theta_{1}(x)=0\) だと \(A_{1}=0\) になってしまうのです。(一応、「退職後は素人数学者」さんの文書を検討したとき「\(\theta_{1}(x)=0\) だとまずいかも」ということは気づいていたのですが、「\(\zeta\) のベキ乗を掛けて足したりしてややこしい作り方をしているので、実際にはその可能性はないんだろうな」と思ってあんまりちゃんと検討していませんでした)

また、「退職後は素人数学者」さんと jurupapa さんのプログラムはどちらも \(\theta(x)\) や \((\theta(x))^{p}\) を「\(\text{最高次係数} \times \text{モニック多項式}\)」の形に分解するため、「最高次係数を取り出し、それで全体を割る」という処理をしているように見えます。このため、\(\theta(x)=0\) の場合は、ここでゼロ割が発生してしまうのでしょう。(なので「退職後は素人数学者」さんが

しかし,上記の方程式の場合,剰余を取った後も \(v\) が残ってしまいました。

と書かれているのはちょっと不思議です。ゼロ割のエラーがどこかで強制捕捉されて、見かけ上エラーが出ないまま処理が続行するようになっている…?)

さて、この問題の回避法ですが、改めて計算の流れを検討した結果、実はさらに計算を簡単にできて、「\(x\) の多項式の \(p\) 乗」「\(x\) の多項式の \(p\) 乗根をとって多項式に戻す」の計算はしなくてすむことがわかりました。以下では、まずその説明を行い、さらにそれにもとづいて「\(\theta_{1}(x)=0\) だった場合はどうするか」を説明します(以下常体)。

◇ 計算の簡素化

まず基本的な考えを復習すると、元になる \(\psi(\alpha_{1}, \dots, \alpha_{n})\) としては、\(H\) 上で \(V\) の最小多項式となるはずの
\[ h(x) = (x-V_{a}) (x-V_{b}) \dotsm (x-V_{c}) = \prod_{H} (x-V_{k}) \]
を採用する。\(\sigma \in G-H\) をひとつ固定し、\(\sigma\) を \(h(x)\) に \(i\) 回作用させたものを \(h_{i}(x)\) とする(\(i=0,1,\dots,p-1\))。このとき、\(h_{i}(x)\) は解 \(\alpha_{1}, \dots, \alpha_{n}\) を \(V_{k}\) の形を通じてのみ含んでおり、例えば
\[ h_{1}(x) = (x-V_{\bar{a}}) (x-V_{\bar{b}}) \dotsm (x-V_{\bar{c}}) =
\prod_{\sigma H} (x-V_{k}) \]
のようになっている。\(V_{k}\) はいずれも \(V\) の多項式として表せるので、\(h_{i}(x)\) の係数はすべて \(V\) の多項式として書ける。

このとき
\[ \theta_{i}(x) = h_{0}(x) + (\zeta^{i})^{1} h_{1}(x) + (\zeta^{i})^{2}
h_{2}(x) + \dots + (\zeta^{i})^{p-1} h_{p-1}(x) \]
とおく(\(i=1,2,\dots,p\))と、\(\sigma\) の作用で \(\theta_{i}(x)\) は \(\zeta^{-i} \theta_{i}(x)\) にうつる。ここまでが復習。

当面、\(\theta_{1}(x) \ne 0\) の場合を考える。上のことから、\(\theta_{1}(x)\) の最高次の係数 \(a \ne 0\) は \(\sigma\) の作用で \(\zeta^{-1}a\) にうつる。

したがってまず、\(a^{p}\) が \(G\) で不変になるので、\(a^{p}\) を \(V\) の多項式として整理し、\(g(V)=0\) を使うと \(V\) が消えて \(a^{p}\) が \(\tilde{K}\) の数 \(A\) として具体的に求まる。よって \(a=\sqrt[p]{A}\) とべき根で表せる。

さらに、(いったん \(a\) をまた \(V\) の式に戻すと)\(\frac{\theta_{i}(x)}{a^{i}}\) は \(\sigma\) の作用で不変なので \(G\) 対称な有理式(\(\alpha_{1}, \dots, \alpha_{n}\) の)であり、\(\tilde{K}\) 係数の多項式(\(x\) の)になる。つまり、\(a\), \(\theta_{i}(x)\) を \(V\) の多項式として表した形を \(\frac{\theta_{i}(x)}{a^{i}}\) に代入し、「分母の有理化」を通じて \(V\) の多項式に書き直してから \(g(V)=0\) を使えば、\(V\) が消えて
\[ \eta_{i}(x) = \frac{\theta_{i}(x)}{a^{i}} \]
が \(\tilde{K}\) 係数の多項式として具体的に求まる。

するとさらに
\[ \theta_{i}(x) = a^{i} \eta_{i}(x) = (\sqrt[p]{A})^{i} \eta_{i}(x) \]
として \(\theta_{i}(x)\)(の係数)もべき根と \(\tilde{K}\) の数を使って具体的に求められる。\(\theta_{p}(x)\) は元々 \(G\) 対称で、\(g(V)=0\) から係数を直接 \(\tilde{K}\) の数として求められたことも考えると
\begin{align*}
h_{0}(x) &= \frac{\theta_{1}(x) + \theta_{2}(x) + \dots + \theta_{p}(x)}{p} \\
\therefore h(x) &= \frac{\sqrt[p]{A} \eta_{1}(x) + \sqrt[p]{A}^{2} \eta_{2}(x) + \dots + \sqrt[p]{A}^{p-1} \eta_{p-1}(x) +\theta_{p}(x)}{p}
\end{align*}
と \(h(x)\) が求められる。

以上の計算を数式処理ソフト上で実現する場合は、次の2つの変更を加えた方がいいだろう。まず、「退職後は素人数学者」さんのように、\(\theta_{i}(x)\) の定義を \(p\) で割る形に修正しておき、\(\theta_{p}(x)\) は \(\theta_{0}(x)\) にしておく。
\[ \theta_{i}(x) = \frac{h_{0}(x) + (\zeta^{i})^{1} h_{1}(x) + (\zeta^{i})^{2} h_{2}(x) + \dots + (\zeta^{i})^{p-1} h_{p-1}(x)}{p} \quad
(i=0,\dots,p-1) \]
それから、\(\eta_{i}(x)\) の定義を \(\frac{\theta_{i}(x)}{a^{i}}\) ではなく
\[ \eta_{i}(x) = a^{p-i} \theta_{i}(x) \quad (i=1,2,\dots,p-1) \]
に変えて、割り算が発生しないようにしておく。こうすると \(A=a^{p}\) が \(\eta_{1}(x)\) の最高次係数として求まるので別個に計算する必要がなくなるし、
\begin{align*}
\theta_{i}(x) &= a^{-p+i} \eta_{i}(x) = \frac{\sqrt[p]{A}^{i}}{A} \eta_{i}(x) \quad (i=1,2,\dots,p-1) \\
h_{0}(x) &= \theta_{0}(x) + \theta_{1}(x) + \dots + \theta_{p-1}(x) \\
&= \theta_{0}(x) + \frac{1}{A}\bigl( \sqrt[p]{A} \eta_{1}(x) + \sqrt[p]{A}^{2} \eta_{2}(x) + \dots + \sqrt[p]{A}^{p-1} \eta_{p-1}(x) \bigr)
\end{align*}
となって、分母が \(V\) を含まない数 \(A\) となり割り算がやりやすくなる。

【2019, 1/21 追記】さらに、計算を軽減するという観点からは、べき根をとる前に \(B=\frac{1}{A}\) を計算しておくとよい。こうすると \(\frac{1}{a} = \sqrt[p]{B}\) となるので、
\[ \theta_{i}(x) = \Bigl( \frac{1}{a} \Bigr)^{p-i} \eta_{i}(x) = \bigl( \sqrt[p]{B} \bigr)^{p-i} \eta_{i}(x) \]
のように、「\(\text{《べき根》}^{\square} \times \text{《\(\tilde{K}\) 係数多項式》}\) 」の形で \(\theta_{i}(x)\) が表せる。

◇ 例外ケースの対応

さて、問題の \(\theta_{1}(x)=0\) だった場合だが、\(\theta_{1}(x), \theta_{2}(x), \dots, \theta_{p-1}(x)\) は本来対等(\(p-1\) 通りの \(1\) の原始 \(p\) 乗根のどれを \(\zeta\) に選ぶかの違いしかない)なので、以下のように \(0\) でないものを \(\theta_{1}(x)\) に選び直せばよい(以下では \(\theta_{i}(x)\) の定義はまた \(p\) で割らないものに戻している)。

例えば、\(\theta_{3}(x) \ne 0\) だったとしよう。
\[ \theta_{3}(x) = h_{0}(x) + \zeta^{3} h_{1}(x) + (\zeta^{3})^{2} h_{2}(x) + \dots + (\zeta^{3})^{p-1} h_{p-1}(x) \]
だから、\(\hat{\zeta} = \zeta^{3}\) を新しい \(1\) の原始 \(p\) 乗根と選び直す。新しい \(\theta_{1}(x)\) は \(\hat{\theta}_{1}(x) = \theta_{3}(x) \ne 0\) で、以下、簡単のため \(p=5\) と具体化すると、\(\hat{\zeta}^{2} = \zeta^{6} = \zeta^{1}\) より
\begin{align*}
\hat{\theta}_{2}(x) &= h_{0}(x) + \hat{\zeta}^{2} h_{1}(x) + (\hat{\zeta}^{2})^{2} h_{2}(x) + (\hat{\zeta^{2}})^{3} h_{3}(x) +(\hat{\zeta}^{2})^{4} h_{4}(x) \\
&= h_{0}(x) + \zeta h_{1}(x) + \zeta^{2} h_{2}(x) + \zeta^{3} h_{3}(x) + \zeta^{4} h_{4}(x)= \theta_{1}(x) \; (=0)
\end{align*}
\(\hat{\zeta}^{3} = \zeta^{9} = \zeta^{4}\) より
\begin{align*}
\hat{\theta}_{3}(x) &= h_{0}(x) + \hat{\zeta}^{3} h_{1}(x) + (\hat{\zeta}^{3})^{2} h_{2}(x) + (\hat{\zeta^{3}})^{3} h_{3}(x) +
(\hat{\zeta}^{3})^{4} h_{4}(x) \\
&= h_{0}(x) + \zeta^{4} h_{1}(x) + (\zeta^{4})^{2} h_{2}(x) + (\zeta^{4})^{3} h_{3}(x) + (\zeta^{4})^{4} h_{4}(x) = \theta_{4}(x)
\end{align*}
\(\hat{\zeta}^{4} = \zeta^{12} = \zeta^{2}\) より
\begin{align*}
\hat{\theta}_{4}(x) &= h_{0}(x) + \hat{\zeta}^{4} h_{1}(x) + (\hat{\zeta}^{4})^{2} h_{2}(x) + (\hat{\zeta^{4}})^{3} h_{3}(x) +
(\hat{\zeta}^{4})^{4} h_{4}(x) \\
&= h_{0}(x) + \zeta^{2} h_{1}(x) + (\zeta^{2})^{2} h_{2}(x) + (\zeta^{2})^{3} h_{3}(x) + (\zeta^{2})^{4} h_{4}(x) = \theta_{2}(x)
\end{align*}
となる。

つまり、\(3\) の倍数 \(3\cdot 1\), \(3\cdot 2\), \(3\cdot 3\), \(3\cdot 4\) が mod \(5\) で \(3,1,4,2\) になっているのに合わせて並べ替えた \(\theta_{3}(x), \theta_{1}(x), \theta_{4}(x), \theta_{2}(x)\) が新しい \(\hat{\theta}_{1}(x), \hat{\theta}_{2}(x), \hat{\theta}_{3}(x), \hat{\theta}_{4}(x)\) になる。こうやって新しい \(\theta\) を取り直せば、上の計算がそのまま使えるという寸法だ。

ここで、\(\theta_{1}(x), \dots, \theta_{4}(x)\) がすべて \(0\) 多項式になってしまう心配はない。その場合、私の記事と同様に
\[ h_{0}(x)=h_{1}(x)=h_{2}(x)=h_{3}(x)=h_{4}(x) = \frac{\theta_{0}(x)}{5} \]
となって、\(V_{k}\) の値がすべて異なっていたことと矛盾するからだ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください