■因数分解の算法
2年前にアップロードしたコラム「ドクトル・カメレオン予想」において,
a^2+b^2+2ab=(a+b)^2
a^3+b^3+c^3−3abc=(a+b+c)(a^2+b^2+c^2−ab−bc−ca)
は因数分解可能,しかるに
a^4+b^4+c^4+d^4+4abcd
は不可能と「証明なしに自明であるかのごとく」書いたことが,いまさらながら気になっている.
a^2+b^2+2ab
が因数分解可能であれば,
a^2+b^2−2ab=(a−b)^2
と因数分解できる.
a^4+b^4+c^4+d^4+4abcd
が不可能であれば,同様に
a^4+b^4+c^4+d^4−4abcd
は因数分解不可能である.後者においてa,b,c,dのどれかを負に直せば前者の帰着するから,両者は本質的に同じ式である.したがって,両者の因数分解可能性が一致するのは自明であろう.
それでは,
a^4+b^4+c^4+d^4+4abcd
は本当に因数分解できないのだろうか? 不可能であることを証明できるだろうか? ということになる.
類似の4次式:x^4+4は
x^4+4=(x^2+2x+2)(x^2−2x+2)
のように因数分解できるし,もっといかめしい4次式:
a^4+b^4+c^4+d^4−2(a^2b^2+a^2c^2+a^2d^2+b^2c^2+b^2d^2+c^2d^2)+8abcd
=(a+b+c+d)(a+b−c−d)(a−b+c−d)(a−b−c+d)
がこのように因数分解できるところをみれば,
a^4+b^4+c^4+d^4+4abcd
だって因数分解可能であるかもしれないと思えるのである.
===================================
【1】問題の発端
「ドクトル・カメレオン予想」を書いたときは,何か必然性があってこのような問題を発想したに違いない.まず,そのときの記述を抜粋してみることにしたい.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[基本対称式におけるニュートンの方法]
対称式の基本定理より,n変数のどんな対称式も基本対称式を用いて表すことができる.たとえば,2変数の場合,
α1^2+α2^2=(α1+α2)^2−2α1α2
α1^3+α2^3=(α1+α2)^3−3(α1+α2)α1α2
α1^2α2+α1α2^2=(α1+α2)α1α2
など.
次に,n変数対称式:
pj=α1^j+α2^j+・・・+αn^j
を基本対称式:
σ1=α1+・・・+αn
σ2=α1α2+・・・+αn-1αn
σ3=α1α2α3+・・・+αn-2αn-1αn
・・・・・・・・・・・・・・・・・・・
σn=α1α2α3・・・αn
を用いて表してみることにしよう.
f(t)=Π(1+tαi)=1+σ1t+σ2t^2+・・・+σnt^n
とおくと,
f'(t)/f(t)=d/dtlogf(t)=Σαi/(1+tαi)=ΣΣ(-1)^kαi^(k+1)t^k
=Σ(-1)^kp(k+1)t^k
ゆえに,
f’(t)=f(t)Σ(-1)^kp(k+1)t^k
となり,
σ1+2σ2t+・・・+nσnt^(n-1)
=(1+σ1t+σ2t^2+・・・+σnt^n)(p1−p2t+p3t^2−・・・)
両辺の係数を比較することによって,順次
p1=σ1
p2=σ1p1−2σ2
p3=σ1p2−σ2p1+3σ3
・・・・・・・・・・・・・・・・・・
p(k+1)=σ1pk−σ2p(k-1)+・・・+(-1)^(k-1)σkp1+(-1)^k(k+1)σ(k+1)
が得られる.このことから「α1,α2,・・・,αnの基本対称式は,累乗和:α1^j+α2^j+・・・+αn^jの有理数を係数とする整式で表される」という結果が導き出される(ニュートンの定理).
ここで述べた定理はニュートンに拠るとされるものであるが,このことから逆に,n次方程式:
f(x)=x^n+a1x^(n-1)+・・・+an=Π(x−αi)=0
が与えられたとき,累乗和
p1=α1+・・・+αn
p2=α1^2+α2^2+・・・+αn^2
・・・・・・・・・・・・・・・・・・
pn=α1^n+α2^n+・・・+αn^n
を根とする方程式の係数を導出することができる.したがって,もし係数a1,・・・,anがすべて有理数(整数)なら,求める方程式の係数もまたみな有理数(整数)となる.
アーベルは「ニュートンの定理」を援用して方程式論を形成したことになるといえるだろう.アーベルは5次以上の一般代数方程式がベキ根によっては解けない(5次以上の方程式には,係数の間の四則と累乗根を使って表す根の公式はない)ことを初めて証明したノルウェーの数学者である.
突飛な連想かもしれないが,ニュートンの結果を使って,受験参考書に必ず書いてある
a^2+b^2+2ab=(a+b)^2
a^3+b^3+c^3−3abc=(a+b+c)(a^2+b^2+c^2−ab−bc−ca)
という公式の高次元化を考えてみたい.その際,基本対称式と累乗和を使った
a^3+b^3+c^3−3abc
=(a+b+c)(a^2+b^2+c^2−ab−bc−ca)
のような因数分解を考えることにし,
a^3+b^3+c^3−3abc
=(a+b+c){(a−b)^2+(b−c)^2+(c−a)^2}/2
あるいは
a^3+b^3+c^3−3abc
=(a+b+c)(a+bω+cω^2)(a+bω^2+cω)
などは除外することにする.
2次式,3次式はうまく因数分解できたが,ところが,左辺=p(k+1)−(-1)^k(k+1)σ(k+1)が基本対称式と累乗和だけを使って因数分解できるのもここまでで,4次式:
a^4+b^4+c^4+d^4+4abcd
は同様の因数分解ができない.そのため,受験参考書には決して登場しないのである.
なお,対称式の計算は,ヤング図形を用いて見通しよく行うことができる.ヤング図形は対称式の計算に役立つだけでなく,「群の表現論」と呼ばれる分野でも用いられ,テンソル積の計算など非常に便利なものになっている.群の表現論は現在も活発に研究され進歩している分野である.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
どうしてこのような問題を発想したのか,いま思うと不思議な気もするが,これを読むと,そのときは
p(k+1)−(-1)^k(k+1)σ(k+1)=σ1pk−σ2p(k-1)+・・・+(-1)^(k-1)σkp1
より,
a^2+b^2+2ab=σ1p1=(a+b)^2
a^3+b^3+c^3−3abc=σ1p2−σ2p1
=(a+b+c)(a^2+b^2+c^2)−(ab+bc+ca)(a+b+c)
=(a+b+c)(a^2+b^2+c^2−ab−bc−ca)
のように,右辺が基本対象式を使って因数分解できる形を考えていたようである.
それをさらに拡大すると,次に来るものは
a^4+b^4+c^4+d^4−4abcd
ではなくて,
a^4+b^4+c^4+d^4+4abcd=σ1p3−σ2p2+σ3p1
=(a+b+c+d)(a^3+b^3+c^3+d^3)−(ab+ac+ad+bc+bd+cd)(a^2+b^2+c^2+d^2)+(abc+bcd+cda+dab)(a+b+c+d)
になるが,共通因子がないので因数分解できないと考えたらしい.
a^2+b^2+2ab=σ1p1
a^3+b^3+c^3−3abc=σ1p2−σ2p1
が因数分解可能なのは,σ1=p1であることに負っているというわけである.
また,コラム「代数学小史」には,以下のような記述もみられる.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[4次方程式の解法]
因数分解の公式
a^3+b^3+c^3−3abc
=(a+b+c)(a^2+b^2+c^2−ab−bc−ca)
=(a+b+c)(a+bω+cω^2)(a+bω^2+cω)
は,巡回行列式
|a b c|
Δ=|c a b|=a^3+b^3+c^3−3abc
|b c a|
より得られる.これは2次の項を欠いた3次方程式の形になっている.
それと同様に,4次方程式では
|a b c d|
Δ=|d a b c|
|c d a b|
|b c d a|
=a^4+b^4+c^4+d^4−2(a^2b^2+a^2c^2+a^2d^2+b^2c^2+b^2d^2+c^2d^2)+8abcd
が3次の項を欠いていて,
Δ=(a+b+c+d)(a+b−c−d)(a−b+c−d)(a−b−c+d)
と因数分解できることを利用するのである.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
これをみると,
a^3+b^3+c^3−3abc
は,巡回行列式
Δ=|a b|=a^2−b^2=(a+b)(a−b)
|b a|
の仲間であって,見かけ上似ている多項式
a^2+b^2+2ab
a^4+b^4+c^4+d^4+4abcd
とは無関係であり,やはり発想自体が突飛だったものと思われる.
===================================
【2】答を先にいうと・・・
a^4+b^4+c^4+d^4+4abcd
をMathematicaで因数分解してみたが,因数分解不可能であった.このことは「Mathematicaによれば不可能」であって,「他の数式処理システムでは可能となる場合がある」ことを意味しているのではない.
因数分解のアルゴリズムは,数式処理プログラムの出現以前に確立しているので,因数分解不可能なことは確実だ.長い間,気になっていたことなので,これで小生も一安心できた.
因数分解のアルゴリズムがわかればよいのだが,この式に関しては背理法で因数分解で証明できそうな気もする.すなわち,
(1) a^4+b^4+c^4+d^4-4abcdが因数分解できるなら,
(a) (a,b,c,dの一次式)*(a,b,c,dの三次式)
または
(b) (a,b,c,dの二次式)*(a,b,c,dの二次式)
に変形できる.
(2) いずれにせよ,分解された因子のa,b,c,dの最高次の係数は±1
(ちょっと自信がない)
(3) a,b,c,dはこれらを互いに置き換えても式は不変なので,各因子の各項の係数には制限がある.
云々
「a,b,c,dの互換」がでてくるので,群論が使えそうな気もするが,これ以上は知恵が出てこない.この問題は本来は方程式論の問題なのだろうが,読者諸兄は不可能であることを証明できるだろうか?
===================================
【3】因数分解の算法
因数分解可能性について何か資料はないかと自宅にある数式処理の本を探してみたのだが,見つかったのは微分方程式の数式処理に関するものだけで,因数分解の話は載っていなかった.
どこかで読んだ気もするのだが,どうも思い当たらない.数学辞典にも該当項目はないようだ.そこで,以下にはMathematicaのFactor(因数分解)の説明をコピーしたものを掲げておく.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
単変数多項式ではFactorは変形カントール・ザッセンハウス(Cantor-Zassenhaus)法を使用して素数を法として分解し,ヘンゼル(Hensel)構成と試し割りにより整数上の因子を決定する.
代数的数体上の因数分解は有理数上の原始関数を見つけ,トレーガー(Trager)法を使用することにより実現される.
多変数多項式ではFactorは適度に選択された整数を1変数を除いて代入し,結果の1変数多項式を分解し,ワン(Wang)法の使用で多変数因子を構成することにより実行される.
一般多項式処理だけを扱うFactorの内部コードは約250ページにわたる.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
小生にとって,ここに書かれた代数学の方法とか用語はまったく耳新しく,馴染みがないものばかりである.しかし,コラム化するからには「無知でお役に立てず申し訳ない」で済ますわけにはいかない.話をふくらませてそれなりの内容にまでもっていかなければならないのである.
そこで,
一松信「数学とコンピュータ」共立出版
の力を借りて,上記の話を意訳してみることにした.それによると,数式処理システムによる因数分解というと,当初はコンピュータに公式を憶えさせていて,それをあてはめるような方式であり,1960年代でも以下のような素朴な算法であったらしい.
整数係数の多項式
f(x)=anx^n+an-1x^(n-1)+・・・+a1x+a0
が整数係数の範囲で 0
(bmx^m+bm-1x^(m-1)+・・・+b1x+b0)(cn-mx^(n-m)+cn-m-1x^(n-m-1)+・・・+c1x+c0)
に因数分解できるとすると,
an=bmcn-m,a0=b0c0
であるから,1次因子:b1x+b0を求めるには
an=b1cn-1,a0=b0c0
したがって,b1とb0の可能性は有限個しかなく,そのすべての組合せのb1x+b0でf(x)を割ってみればよいことになる.
2次因子:b2x^2+b1x+b0を求めたい場合は,
an=b2cn-1,a0=b0c0
の有限個の組合せに対して,対応するb1も有限個である.そこでx=k(整数)を代入して,b2k^2+b1k+b0でf(x)を割ってみる.3次因子を求めるにはxに代入する整数を2つとればよいことになる.
1960年代には,このような古典的な方法しか知られておらず,あとは可能性を探していくという素朴な因数分解方式であった.この方式でも1の6乗根
x^6−1=(x+1)(x−1)(x^2+x+1)(x^2−x+1)
あるいは,
x^16−1=(x−1)(x+1)(x^2+1)(x^4+1)(x^8+1)
x^18−1=(x−1)(x+1)(x^2+x+1)(x^2−x+1)(x^6+x^3+1)(x^6−x^3+1)
といった因数分解はすぐにできると思われるが,このような有限個の可能性の中から所望の解を探すような算法は非効率的である.
今日では,1変数多項式の因数分解についてはほぼ完全な算法が知られていて,
(1)無平方因数分解を行う.
(2)整数係数を適当な素数pを法とした有限体上の多項式として因数分解を行う
(3)p^2,p^3,・・・と法を大きくする
という手順に従っている.これを詳細にしたものが前述の方法ということなのであろう.
無平方分解はf(x)とf’(x)の最大公因子をユークリッドの互除法で機械的に計算できるから,コンピュータ向きの方法であり,実用上は無平方分解だけで完全な因数分解に達することも多いという→[補].このように,因数分解に関しては,コンピュータのパワー(記憶容量の拡大と高速化)よりも,因数分解のための算法の開発面に負うところが大きいのである.
[補]シルベスターの終結式
f(x)=a0x^n+a1x^(n-1)+・・・+an-1x+an
g(x)=b0x^m+b1x^(m-1)+・・・+bm-1x+bm
が共通因子をもつための必要十分条件は,n+m次の行列式:Res(f,g)
|a0 a1・・・an・・・・・・0|
|0 a0 a1・・・an・・・0 |
|・・・・・・・・・・・・・・・ |
|0・・・・・・a0 a1・・・an|=0
|b0 b1・・・bm・・・・・・0|
|0 b0 b1・・・bm・・・0 |
|・・・・・・・・・・・・・・・ |
|0・・・・・・b0 b1・・・bm|
よく知られているようにf(x)=0が重根をもつためにはf(x)=0,f’(x)=0が共通根をもつことである.したがって,
Res(f,f’)=0
は,f(x)=0が重根をもつための必要十分条件条件である.
(例)f(x)=ax^2+bx+c,f’(x)=2ax+bのとき,
Res(f,f’)=−a(b^2−4ac)
このように,Res(f,f’)に方程式の判別式が出現するのは当然のことである.
===================================
ところで,次に述べることも
一松信「数学とコンピュータ」共立出版
を読んで知ったことであるが,是非ここで紹介(受け売り)しておきたい.
中学校の課題研究の際,Mathematicaに「x^4+1を因数分解せよ」と入力しても「因数分解できません」と返ってきた.x^4+2,x^4+3も同様である.
ところが,x^4+4に対しては
x^4+4=(x^2+2x+2)(x^2−2x+2)
という結果が返ってきて驚かされた.さらに,x^4+5,x^4+9,x^4+16,x^4+25,・・・と試みても「因数分解できません」という結果であったが,根気強く続けて,x^4+64では
x^4+64=(x^2+4x+8)(x^2−4x+8)
とうまくいった.
よくよく理由を考えてみると,一般式
(x^2+c)^2−(bx)^2=x^4+(2c−b^2)x^2+c^2
=(x^2+bx+c)(x^2−bx+c)
において,2c=b^2の特別な場合になっていること.また,この変形はあまりに技巧的で高校数学のカリキュラムからも消えているのだが,それを数式処理システムを使って発見的に得ることができたことなど,数式処理システムの効用についてのエピソードであるが,数式処理システムが数学研究のみならず,数学教育にも有効と考えられる所以である.
===================================
【4】数式処理システムMathematicaの歴史
数式処理ソフトというと,MathematicaやらMAPLEやら,いまでは多くの種類があるが,パソコンで手が届くようになったのはユタ大学のハーンによってReduceが開発されて以来のことである.なかでもMathematicaは代表的な数式処理ソフトであり,数式処理ソフトの中でも別格といってよいものであろう.
その開発者ウルフラム(イギリスの理論物理学者:1959-)は,1975年,16歳でオックスフォード大学に入学後1年でそこを去り,カリフォルニア工科大学の研究員の地位を得る.20歳で博士号を取得し最年少でマッカーサー特別研究員の第1期生となった.
しかし,後のMathematicaの原型となるSMPの著作権をめぐって大学と抗争となりそこを去る.そして,多数の論文,著作を残した量子色力学の研究を放棄して,セルオートマトン理論の研究に参入する.70年代のライフゲーム(コンウェイ)のブームが下火となった80年代前半に,ウルフラムは2次元モデルが中心であったセルオートマトンに1次元モデルを導入し,物理現象を表す偏微分方程式をコンピュータで近似するかわりに,セルオートマトンを用いるスキームを開発した.
1次元セルオートマトン法では,セルの並びを横一列だけとして初期配置と状態変化の規則を設定し,その時間ステップごとの変化を縦に並べる.すると,2次元にある模様が現れる.ウルフラムはこうして得られた1次元セルオートマトンモデルが作り出すパターンを系統的に研究することによって,クラス1(均一),クラス2(周期的),クラス3(カオス的),クラス4(複雑)の4つのクラスに分類し,さらにセルオートマトンと微分方程式系との対応を初めて明らかにした.セルオートマトンによって偏微分方程式の近似解が与えられ,自然界の様々なモデル化が可能であることを指摘した.
これが1984年に発表された有名な論文の要旨である.コンピュータを使う限りはすべて離散量で扱っていることになるので,ウルフラムは微分方程式よりも彼のスキームのほうがデジタル・コンピュータに適していると主張する.このことによってセルオートマトン法は再び注目を浴び,様々な分野に適用されている.
当時,ウルフラムはプリンストン研究所と同時にロスアラモス研究所に所属していたのであるが,ウルフラムによるMathematicaの開発は,彼のセルオートマトンに対する理解と重なっているように見える.また,実際そうであったに違いない.ウルフラムについては「おそろしく頭のいい奴」とその天才ぶりを評する以外にないだろう.
===================================
[補]平行体の体積とグラミアン
2つのベクトルa↑,b↑を基底とする平行体(平行四辺形)の面積は,外積は
a↑×b↑
3つのベクトルa↑,b↑,c↑を基底とする平行体(平行六面体)の体積は,スカラー三重積
(a↑×b↑)・c↑
すなわち,外積a↑×b↑とベクトルc↑の内積で与えられます.
|a↑|=a,|b↑|=bとすれば,平行四辺形の面積は,
S=absinθ
ですから,
S^2=a^2b^2(1−cos^2θ)
=|a↑|^2|b↑|^2−(a↑・b↑)^2
=|a↑・a↑ a↑・b↑|
|b↑・a↑ b↑・b↑|
同様に,平行六面体の体積は
V^2=|a↑・a↑ a↑・b↑ a↑・c↑|
|b↑・a↑ b↑・b↑ b↑・c↑|
|c↑・a↑ c↑・b↑ c↑・c↑|
で与えられます.
これらのように,内積の行列式で定義される行列式をグラムの行列式(グラミアン)といいます.平行体の面積・体積はグラミアンの平方根に等しくなるというわけです.
また,座標を使って表せば,n+1個の点の座標に(1,1,1,・・・,1)を加えて作られる(n+1)次の行列式の絶対値になります.
|S|=|1 x1 y1| |V|=|1 x1 y1 z1|
|1 x2 y2| |1 x2 y2 z2|
|1 x3 y3| |1 x3 y3 z3|
|1 x4 y4 z4|
原点が含まれるときは,
|S|=|x1 y1| |V|=|x1 y1 z1|
|x2 y2| |x2 y2 z2|
|x3 y3 z3|
のように展開されます.
なお,これらはそれぞれn次元単体の体積のn!倍になりますから,三角形面積,四面体の体積は,
S’=S/2
V’=V/6
また,4辺の長さがa,b,cで与えられた三角形,6辺の長さがa,b,c,d,e,fで与えられた四面体の場合は,
2^2(2!)^2S’^2=|0 a^2 b^2 1|
|a^2 0 c^2 1|
|b^2 c^2 0 1|
|1 1 1 0|
2^3(3!)^2V’^2=|0 a^2 b^2 c^2 1|
|a^2 0 d^2 e^2 1|
|b^2 d^2 0 f^2 1|
|c^2 e^2 f^2 0 1|
|1 1 1 1 0|
となります.
前者はヘロンの公式にほかなりませんが,ヘロンの公式とは,任意の三角形の三辺の長さをa,b,c,面積をΔとして,
Δ^2=(2a^2b^2+2b^2c^2+2c^2a^2−a^4−b^4−c^4)/16
=(a+b+c)(−a+b+c)(a−b+c)(a+b−c)/16
ここで,2s=a+b+cとおくと
Δ^2=s(s−a)(s−b)(s−c)
となり,おなじみの平面三角形のヘロンの公式が得られます.
===================================
[補]正5胞体と五角形
4次元空間の単体(5胞体)の体積は係数1/24を除いて行列式
24|V|=|1 1 1 1 1 |
|x11 x21 x31 x41 x51|
|x12 x22 x32 x42 x52|
|x13 x23 x33 x43 x53|
|x14 x24 x34 x44 x54|
で表されます.
ここで,右辺の第i列から第i+1列を引く操作をxi=1,2,3,4の順に繰り返すと
24|V|=|x11−x21 x21−x31 x31−x41 x41−x51|
|x12−x22 x22−x32 x32−x42 x42−x52|
|x13−x23 x23−x33 x33−x43 x43−x53|
|x14−x24 x24−x34 x34−x44 x44−x54|
この転置行列を右からかけると
24^2V^2=|Σ(xik−xi+1k)(xjk−xj+1k)|
=|ai↑・aj↑|
すなわち,グラミアンで与えられます.
さらにここで正5胞体(各辺の長さを1,各内角をθ)とすると,
ai↑・ai↑=1,ai↑・ai+1↑=cos(π−θ)=−cosθ
後者をxとおくと,x+y=−1/2なるx,yについて
24^2V^2=|1 x y y|
|x 1 x y|
|y x 1 x|
|y y x 1|
となります.
この行列式はx,yについて対称式であり,
x^4−2x^3y−x^2y^2+y^4+4x^2y+4xy^2−3x^2−3y^2+1
と展開されます.これが
(x^2−3xy+y^2+x+y−1)(x^2+xy+y^2−x−y−1)
さらに,黄金比:τ=(√5+1)/2,τ^(-1)=(√5−1)/2を用いると
(τx−τ^(-1)y−1)(τ^(-1)x−τ^(-1)y+1)(x^2+xy+y^2−x−y−1)
と因数分解できます.これは計算機による数式処理の初歩の演習問題といえるでしょう.
この正5胞体が3次元に退化する条件は
V=0,x+y=−1/2
を解くことにより,
x=(√5−1)/4,−(√5+1)/4
すなわち,
θ=108°(正五角形)または36°(星形五角形)
となり,3次元を通り越して一挙に2次元まで退化してしまいます.
すなわち,正5胞体は平面の正五角形と星形五角形の中間の4次元図形と解釈できるというわけです.
===================================
[補]x^6−1=(x+1)(x−1)(x^2+x+1)(x^2−x+1)
x^16−1=(x−1)(x+1)(x^2+1)(x^4+1)(x^8+1)
x^18−1=(x−1)(x+1)(x^2+x+1)(x^2−x+1)(x^6+x^3+1)(x^6−x^3+1)
次の式は,理論的には因数分解できるが,Mathematicaではエラー(処理規模を超える指数)となることがわかった.
Factor[x^10000000 - 1]
以下の式はMathematicaで因数分解可能.
Factor[x^1000000 - 1]
要はMathematicaで因数分解できないが,実際は因数分解ができるような多項式は存在する.このような場合,エラーメッセージがでるケースとそうでない場合があるということだ.
===================================