スミス標準形の存在証明
📂位相データ分析スミス標準形の存在証明
アルゴリズム
Rが主イデアル領域の時、全ての行列 A∈Rm×nについてスミス標準形が一意に存在する。つまり、行列 A∈Rm×nに対して、次を満たすd1,⋯,dr∈Rと可逆行列 P∈Rm×m、Q∈Rn×nが存在する。
PAQ=d1000⋮00⋱00⋮000dr0⋮00000⋮0⋯⋯⋯⋯⋱⋯0000⋮0∈Rm×n
ここでd1,⋯,drはRで0であってはならず、d1∣⋯∣drでなければならない。言い換えると、dk=0はdk+1の因数divisorでなければならない。この時の一意性はdkの単元倍を無視する。
証明
戦略:行、列の交換とガウス消去法を使用するアルゴリズムで、具体的なスミス標準形を直接見つけてその存在を示す。
全ての主イデアル領域は一意因数分解領域である。
行列 Aは、PID上の行列なので、UFD上の行列でもある。従って、単元や0でない全ての要素Aijは、ユニークな因数分解を持ち、その中で最も少ない因数の数を持つ要素の絶対値をα>0と表示し、ミニマルエントリーminimal Entryと呼ぶ。
ちなみにMunkeresの教科書ではZm×nで、単に最も小さい要素を選ぶのだが、整数環Zではなく、一般的な主イデアル領域はユークリッド領域である保証すらないため、要素だけ見て「最小」と判断するのは難しい。一般的なPIDできれいにミニマルエントリーを定める場合、因数分解を考えるのが妥当だ。ただし、このポストでは便宜上、「小さい」やa<bのような表現が出てくるが、これは要素の大きさではなく、因数の数を比較していると理解すればいい。
与えられた行列はガウス消去法により続けて変化するため、αも文脈によって続けて変化することに注意せよ。
ちなみに、このアルゴリズムは与えられたAに対して必ずスミス標準形を導けることを数学的に見せるためのアルゴリズムであり、特に効率的というわけではなくP,Qも分からない。
ステップ1.
Aがゼロ行列なら、そのままでスミス標準形なのでステップ4に進む。Aがゼロ行列でないなら、以下を実行する。
理解しやすくするために、まず行と列を交換して、αを左上の(1,1)に引き上げよう。これから与えられた行列のほとんどを気にせずに、最初の行、最初の列だけを見ることになる。
A∼αA21⋮A12A22⋮⋯⋯⋱
ステップ2. k=1,⋯,r
(当然ながら、計算中にはrが分からない。プログラムが終わると自然とrが決まる。)
- 全てのi,jに対してα∣Aijならば、dk←αを用いる。α∣Aijなので、αを除くAの最初の行と列の全ての要素が0になるまでガウス消去法を繰り返すことができる。繰り返しが終わったら、1行と1列を削除してステップ1に戻る。この時、行列Aのサイズは(m−k)×(n−k)になる。
- 何らかのi,jに対してα∤Aijならば、ステップ3に進む。
ステップ3.
ここからの議論は、行でも列でも、一方が成り立てば他方にも適用できるので、一般性を失わずにα=0とA12だけを扱おう。基本的にはステップ2で少なくとも一つのi,jに対してα∤Aijが保証され、(1,2)の下にそのAijが来るように以下のCase1を実施することを目指す。
主イデアル領域はベズー領域である: PIDはベズー領域なので、拡張ユークリッドの定理が成立する。つまり、全てのa,b∈Dに対して、次を満たすm,n∈Dが存在する。
ma+nb=gcd(a,b)
- ケース1. α∤A12の場合
αはミニマルエントリーで、α∤A12なので、gcd(α,A12)<αである。拡張ユークリッドの定理によって、
mα+nA12
αより小さくするm,n∈Dが存在する。ガウス消去法によって、1列にmを掛けた列と2列にnを掛けた列を加えて、2列に代入する。この新しい列の最初の要素であるA12′=gcd(α,A12)は、元のαより小さく、計算自体からαの約数であるため、以前よりも小さく、新しいミニマルエントリーの候補だ。1列と2列を交換して、ステップ1に戻る(計算中に偶然、より小さいミニマルエントリーが存在する可能性もある)。 - ケース2. α∣A12の場合
kα+A12=0を満たす何らかのk∈Zが存在するので、1列にkを掛けて、2列から引く。すると、この新しい列の最初の要素であるA12′は0となる。ステップ3を繰り返す。 - ケース3. A12=0の場合
A12=0になるまで列交換を繰り返す。全てのj=1に対して、全て