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

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

\(\newcommand{\field}[1]{\mathbb{#1}}\)
引き続き「退職後は素人数学者」さんの「可解な代数方程式のガロア理論に基づいた解法」についての話題です。

「根 \(x_{1} ,x_{2},\dots ,x_{n}\) と係数 \(a_{n-1}, \dots, a_{1}, a_{0}\) の関係」について

この第 1 節の重要な部分について、私には理解できていない点があります。根と係数の関係を使って、\(r_1=0, r_2=0, \dotsc\) を使って順次 \(x_n, x_{n-1}, x_{n-2}, \dots\) を消去していく際に、最初に \(x_n\) が消去できるのはいいとして、その後 \(x_{n-1}\) 以降も順調に消去ができる式変形のメカニズムがうまく掴めていません。\(x_{n-1}\) の消去では \(x_{n-1}\) の \(2\) 次式で割り算しているので、余りの式は \(x_{n-1}\) の \(1\) 次の項を一般には含むはずですが、それが消えるのはどうしてなんでしょう。

その次の \(x_{n-2}\) の次数を下げるところでも同じです。なぜ \(2\) 次や \(1\) 次の項が残らずに \(x_{n-2}\) は完全に姿を消してしまうのでしょうか。

一般の \(n\) 次方程式で、一番最後に \(x_2\) を消去して、\(x_1\) のみたす \(n\) 次式を求めたときに、現れるのが元の方程式 \(f(x_1)=0\) そのもので、そこに \(x_2, x_3, \dots, x_n\) が出てこないことだけはまあわかります。解がみたす \(n\) 次式が作れるとしたら、それ以外のものは出てきようがないでしょうから。けれどそのひとつ手前までの式で、都合よく添字の大きい解が消えてくれるのが私には不思議です(もしかしたら、そこは多変数多項式論の初歩の話で、それを私が知らないだけなのかもしれません)。

以上の疑問点は「退職後は素人数学者」にメールでお伝えしたのですが、まだ返答は頂けていないので、もしどなたか手っ取り早く解説してくださる方がいらしたら、教えて頂ければ幸いです。

\(\theta(x)\) がゼロ多項式になる可能性

前回の記事で次のように書きましたが、この事情がわかりました。

「退職後は素人数学者」さんが
しかし,上記の方程式の場合,剰余を取った後も \(v\) が残ってしまいました。
と書かれているのはちょっと不思議です。ゼロ割のエラーがどこかで強制捕捉されて、見かけ上エラーが出ないまま処理が続行するようになっている…?)

まず、\(x^3-2=0\) の場合、解 \(\alpha\), \(\beta\), \(\gamma\) に対して \(V=\alpha+2\beta+3\gamma\) とすると \(g(x)=x^6+108\) となります。これを \(g_0(x)\) とすれば \(g_1(x)=x^3-6\sqrt{-3}\) となり、この段階では体は \(\field{Q}(\sqrt{-3})\) で \(\field{Q}(\omega)\) と一致します。

「退職後は素人数学者」さんや jurupapa さんのプログラムでは、\(1\) の原始 \(p\) 乗根は「\(1+Z+Z^2+ \dots +Z^{p-1}=0\) をみたす文字 \(Z\)」という扱いで、その具体的な値まで出しているわけではないので、\(1\) の原始立方根 \(\omega\) と \(\sqrt{-3}\) が \(\omega= \frac{-1 \pm \sqrt{-3}}{2}\) という関係で結ばれているという事情は考慮に入っていません。

このため、\(g_1(x)=x^3-6\sqrt{-3}\) で割った剰余に \(\omega\) と \(\sqrt{-3}\) が両方入っていて、「見かけ上 \(0\) ではないが真の値は \(0\)」という状況が発生しています。つまり \(g_1(v)=v^3-6\sqrt{-3}\) で割った余りの \(v^2\) や \(v\) の係数が \(2\omega+1-\alpha\) みたいな式になっていて(ただし、\(\alpha^2=-3\))、見かけが \(0\) ではなくなっているわけです。

というわけで、結構面倒なことになるかもしれない、と思っている所です。今の場合は「\(1\) の原始立方根 \(\omega\) と \(-3\) の平方根」という、よく事情がわかる数が対象だったので「見かけ上 \(0\) ではないが真の値は \(0\)」となっていることがわかったわけですが、もっと \(p\) の値が大きい \(\zeta_p\) が絡んでくると、他に顔を出しているべき根との関係がすぐにはわからないので、真の値が \(0\) なのかどうか、そう簡単には判断がつかない場合がしばしばあると考えられます。

「退職後は素人数学者」さんのアルゴリズムに従うにしろ、前回の記事の私の改良版にしろ、「\(\theta(x)\) が \(0\) かどうか」が判定できないと不適な \(0\) 割りが回避できません。ここを自動化するにはどうしたらいいのか、悩ましい所です。

\(g_{k-1}(v)\) による剰余をとった結果、見かけ上 \(v\) の \(0\) 次式にならなかった場合、\(1\) 次以上の係数については「実は真の値は \(0\) である」ということがわかる(よって、それを利用して式の簡約化をさらに進めるのにも利用できる)ので本質的には困りませんが、\(0\) 次の項は「真の値が \(0\)」かどうか、そう簡単にはわからなそうです。

おそらく、\(x^3-2=0\) を解く場合は、\(2\omega+1-\alpha\) と \(2\omega+1+\alpha\) (ただし、\(\alpha^2+3=0\))が両方現れて、「どっちかは \(0\) だがどちらが \(0\) なのかは与えられた条件だけでは不明」という状況になっているのだろうと思います(「\(1\) の原始立方根の \(2\) 通りのどちらを \(\omega\) に選ぶか」と「\(-3\) の平方根の \(2\) 通りのどちらを \(\alpha\) に選ぶか」を決めて初めて、\(2\omega+1-\alpha\) と \(2\omega+1+\alpha\) のどちらが \(0\) になるのかが決まる、ということ)。一般の場合もおそらく同様でしょう。ということは、各 \(\theta_i(x)\) は「\(0\) 多項式になる可能性があるが、それはそういうべき根の不定性を決めてからでないと確定しない」ということなのではないでしょうか。

私の提示したアルゴリズムだと、「各 \(\theta_i(x)\) が \(0\) 多項式かどうかは確実に判定できる」ということを前提にしているので、そこをどうすれば切り抜けられるのか、簡単には思いつきません。(jurupapa さんの計算によれば、計算過程で \(0\) 割りが発生して行き詰まってしまった、とのことでしたから、うまく行かない場合は「有理式を多項式に直す」過程で \(\text{分母}=0\) になってしまうと仮定してよい?だとすると、「\(\text{分母}=0\) になってしまう場合は \(\theta_1(x)=0\) になる場合なので別の \(\theta_i(x)\) を \(\theta_1(x)\) に取り直す」ようにすればうまく行く?)

「数式処理ソフトによるガロア群の算出と、べき根を用いた厳密解の表現 その4」への7件の返信

ゼロ割の部分についてコメントをさせてください。
私も色々と考えてみたのですが、大筋は全く同じです。Zpを付加しても実際には体が拡大しない場合に、Zpとそれ以前に添加した要素の間に代数的な関係があり、そのためにゼロ割が発生する可能性が生じます。

この代数的な関係を簡単な場合には求める方法があります。
maximaのfactor()関数は通常、整数か多項式を引数として1つとって因数分解するのですが、多項式を2つ与えることもできます。この場合、factor(p1,p2)で、p2の多項式の根を有理数体に付加した体でp1を因数分解します。もしZpを付加しても体が拡大しない場合、Zpの定義多項式はその体で因数分解するはずです。例えば
factor(Z^2+Z+1, a^2+972) => (36*z-a+18)*(36*z+a+18)/1296
となります。この因数の前者か後者を選びそれも考慮しながら次数下げやグレブナー基底の計算をすればθ_i(x)がゼロかどうか判定できそうです。(選ぶところが「そういうべき根の不定性を決め」ることになっていると思います)。

一方、ゼロ割が発生したらθ_i(x)はゼロのはず、というのは正しいのですが、θ_i(x)がゼロでもゼロ割が発生しない可能性はあります。従ってゼロ割発生の有無だけでθ_i(x)がゼロでないことを確認したことにはならないのではないか、と思います。

コメントありがとうございます。当面の間、ネット接続環境のよくない所に滞在中なので、返答はしばらく遅くなります。すみませんが気長にお待ちください。

> この代数的な関係を簡単な場合には求める方法があります。
jurupapa さんが提案してくださった方法は、「簡単な場合には」と断られている通り、一般の場合には有効ではないのではないか、と最初は思っていました。着目している \(\zeta_p\) の定義多項式が、これまでに現れているべき根・1の原始 \(p\) 乗根の定義多項式の「どれかひとつ」の根だけを使って因数分解できるならいいのですが、一般にはそれらのうちふたつ以上の根を使って初めて因数分解される、という可能性も考慮に入れなければいけないからです。
しかし、http://maxima.hatenablog.jp/entry/2018/11/04/171152 で ehito さんが与えてくださった示唆によって状況が変わりました。
> 代数体上の因数分解は多くのシステムに実装されており,例えば,Risa/Asirでは逐次拡大が使えるので
> af_noalg(x^3-3*x-1,[ [b,b^3-136*a+288],[a,a^2+a+1] ] );
> と入力すると
> [ [1,1],[676*x+(-8*b^2-26*b)*a-15*b^2+78*b,1],[676*x+(15*b^2+104*b)*a+7*b^2+26*b,1],[676*x+(-7*b^2-78*b)*a+8*b^2-104*b,1] ]
> と出力してくれます.
これはつまり、今現在手元にあるべき根・1の原始 \(p\) 乗根の定義多項式の鎖の全体で定義される代数拡大体の中での因数分解ができるということなので、これを使えば着目している \(\zeta_p\) の定義多項式の因数分解が求まるということです。これさえできれば、jurupapa さんがおっしゃる通りの手続きで、分母が 0 になる心配のない計算が遂行できるはずです。
この機能が maxima や mathematica の組み込み関数に用意されているのかどうかは私は知りませんが、もしなかったとしても、risa/asir でできる以上は、該当する処理を maxima や mathematica でプログラムするのも原理的には不可能ではないでしょう。素晴らしい。

一番最初の部分について、既に解決しているかもしれませんがコメントさせていただきます。
変に混乱を招くだけかも知れませんが、添え字が簡単になると思うのでx_nからx_1までの添え字は逆転させて記述します。
『r_1=0~r_n=0までと同値で、できるだけ次数の低い式を「互除法」を繰り返して得る』ことを考えます。
まずr_2をx_1の式としてr_1で割ったあまりに置き換えます。すると今はr_1が1次式なので新しいr_2はx_1を含まない式になります。
次にr_3をx_1の式としてr_1で割ったあまりに置き換えます。その後、r_3をx_2の式としてr_2で割ったあまりに置き換え、もし新しいr_3がx_2を含むならr_2とr_3を入れ替えて、もう一度r_3をx_2の式としてr_2で割ったあまりに置き換えます。そしてr_2やr_3がx_1からx_nまでの式として見たときに多項式でない有理式になっていれば、その分子を改めてr_2やr_3にします。
この時点でr_2はx_1を含まない多項式、r_3はx_1,x_2を含まない多項式になります。
次にr_4をx_1の式としてr_1で割ったあまりに置き換え、r_4をx_2の式としてr_2で割ったあまりに置き換えます。もしr_4がx_2を含むならr_2とr_4を入れ替えてまた割り算をして、r_4がx_2を含まなくなったら双方の分母を払います。そしてr_4とr_3についてx_3の多項式として互除法を行います。
r_5以降もr_1から順に同じように「互除法」を続けます。
そうすると「r_kはx_1,…x_{k-1}を含まない多項式」に変形することができます。

この方法でできあがったr_kのx_kに関する次数をd_kとします。
もしd_k≧d_lなるk<lがあれば、新しいr_lのx_lをx_kに置き換えた式r'_l(これも最初の出発点である解と係数の関係r_1=…=r_n=0から導出される)とr_kとでx_kの多項式として互除法をすると、x_1からx_{k-1}を含まず、x_kについてr_kより次数が低い式が得られるので、それを改めてr_kとします。(r'_lがr_kを割り切るということはあり得ません。もしそうなら解と係数の関係式がn-1本の関係式で表現できることになるので。)
この操作をできるだけくりかえせば
1=d_1<d_2<….<d_n=n
つまりd_k=kにならなければいけないことになります。この式は各「互除法」は実際には1回の割り算で終わっていることを意味します。

何か考え違いや見落としがあるかもしれません。気づいたことがあればご指摘ください。

ありがとうございます!自分で考えて多少の進展はありましたが、解決には至っていませんでした。
ゆっくり読んでみます。

なるほど。よさそうですね!(\(r_l’\) を作る所で「\(x_l\) を \(x_k\) に置き換える」と言っているのは、「\(x_l\) と \(x_k\) を入れ替える」ということですよね。「\(x_l\) に \(x_k\) を代入する(元の \(x_k\) はそのまま)」ということではなくて)
互除法を使って次数をどんどん下げていく、という発想はありませんでした。ありがとうございます。

井汲 景太 へ返信する コメントをキャンセル

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

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