Galois 理論の数値実験

● 始めに

「sf による置換群の数値実験」で作った S3,S4,S5,D4 すなわち P3{..}, P4{..}, P5{..} D4{..} の sf インデックス付きファイル変数の行列を使って、sf で実際に計算可能な、ガロア理論での部分群と部分体を作っていきます。一部 Maxima も使います。抽象的なガロア理論の具体例を作り、コンピュータ上で数値実験を行います。

Galois 理論の教科書では理由が分からないままに、抽象的に正規部分群や自己同型群などが定義され定理が積み重ねられていきます。それらの意味が分かるのは、最後の段階で Lagrange Resolvent を適用してからです。多くの挑戦者は、そこに到達する以前に、意味の分からない抽象的な定理の羅列に付いていけなくなます。ここでは逆を行います。具体例の Lagrange Resolvent を解く部分体と自己同型群を作っていきます。自己同型群の巡回性と可解性が同値であることを例示します。Glois も同じような計算をやったはずだと考えます。

ここで示した sf 変数によるガロア理論の数値例は、とかく抽象的になりすぎて分り難くなってしまいやすいガロア理論の理解を助けるものだと思います。ガロア理論に挫折した経験のあるかたは是非読んでみてやってください。ガロア理論にまだ調整していない方には難しいとも思います。でも読んでみてください。ガロア理論の教科書を読むための全体の鳥瞰図が得られます。ガロア理論における膨大な定理の意味が分かりやすくなります。

△ エラー訂正符号の実装を考えている回路屋さんへ

Reed Solomon Code に代表されるエラー訂正符号でガロア理論が使われるようになりました。CD や DVD などの LSI 回路のなかで働いているエラー訂正回路でガロア有限体を利用しています。

でも、そのような回路で使われているのは、ガロア理論の一部分だけです。以下で説明するようことの大部分は回路の設計とは直接には関係しません。

エラー訂正回路を設計したいが、その理論がわからないとの理由でガロア理論を勉強しようとしている方は、以下を読む事を止めになるよう、老婆心ながら忠告します。Reed Solomon コードを設計するために必要な知識はずっと少なくて済みます。Reed Solomon コードのためのガロア有限体に特化した説明法があるからです。

逆にエラー訂正の理論を新しく構築するような方ならば、以下で述べるようなガロア理論は常識として知っていないと勤まりません。



●1 Galois までに分っていたこと

△ Gauss による代数学の基本定理

既に Gauss によって代数学の基本定理が解っていました。
   n 次方程式には n 個の根が存在し、n 個に分解できる
      p(x) == x^n + s0 x^(n-1) + s1 x^(n-2) + ... + s_n-1 x + sn
           == (x - x0)(x - x1 ) ....... (x - x n_1)
      --------------------------------------------------------(1,1)式
でも、その根を具体的に求める公式は 4 次までしか分っていませんでした。

△ Cardano の公式

三次方程式の根を求める公式として下のような Cardano の公式が知られていました。
    x^3 + A2 x^2 + A1 x + A0 = 0 
が与えられたものとします。x = t - A2 / 3 を代入して x^2 項の係数を 0 にしたものに変形します。
    t^3 + p t + q == 0
    ただし p == -A2^2/3 + A1
           q == 2 A2^3/27 - A1 A2/3 + A0

    すると根は下の公式で求められる
    根 t =     ω^m( q/2+√(q^2/4 + p^3)/27)^(1/3) 
         + ω^(3-m)(-q/2+√(q^2/4 + p^3)/27)^(1/3)
         ただし m == 0,1,2 のいずれか

    根 x は t - A2/3 で求める
x = t - A2 / 3 と一段階クッションを置く必要がありますが、代数的に解く公式が分っていました。( Cardano の公式の詳細について知りたい方はWikipedia 三次方程式を参照ください)

また三次方程式の解法を利用したWikipedia 四次方程式のフェラリの解法 も知られていました。

● Lagrange Resolvent

一方で、根と exp(2 π j/n) のべき乗の積を順番に並べた Lagrange Resolvent が根を求めるときに利用できることも、Gauss, Lagrange によって既に論じられていました。任意の対称式は基本対称式の加減上除算の組み合わせによって表されることを使って、Lagrange Resolvant を

x^n + s0 x^(n-1) + s1 x^(n-1) + ... + sn
方程式の係数 s0, s1, ... sn による式で表してやることで、根 xn, ... , x1, x0 を求める方法が論じられていました。

ここで Lagrange Resolvent とは、根 x0,x1, ... x_n と exp(2 π i j/n) のべき乗の積を順番に下の様に並べたものです。

    L(j) ≡   x0  +  ζj x1+  ζj^2 x2+.....+  ζj^(n-1)x_n-1  )
        ただし ζj=exp(2 π i j/n), j=0,1 ,..., n-1
以下 Lagrange Resolvent による方程式の解法を見ていきます。

△ Lagrange Resolvent による三次方程式の解法

Maxima を活用して、Lagrange Resolvent を利用した三次方程式の根を求める方法を追ってみましょう。Cardano の公式とは異なり、複雑にも見えますが、根を求める公式の存在を連立一次方程式の関係式として見通しよく示せます。それは 4 次/5 次の解公式にも通ずるところがある根の求め方です。

============================ Maxima による計算 =============================
# Maxima を使った計算では、 L(1),L(2) を  L1, L2 で表します
(C1) L1(w, x0,x1,x2):= x0 + w*x1 + w^2*x2;
(C2) L2(w, x0,x1,x2):= x0 + w^2*x1 + w^2^2*x2;
(C3) expand(ratsubst(0,1+w+w^2,  L1(w, x0,x1,x2)^3 + L2(w, x0,x1,x2)^3));
         3          2          2       2                        2          3
(D3) 2 x2  - 3 x1 x2  - 3 x0 x2  - 3 x1  x2 + 12 x0 x1 x2 - 3 x0  x2 + 2 x1
    
                                                           2       2          3
                                                  - 3 x0 x1  - 3 x0  x1 + 2 x0
     -------------------------------------------------------------(1,2)式
    
(C5) expand(ratsubst(0,1+w+w^2,  L1(w, x0,x1,x2)^3 * L2(w, x0,x1,x2)^3));
       6          5          5       2   4             4       2   4
(D4) x2  - 3 x1 x2  - 3 x0 x2  + 6 x1  x2  + 3 x0 x1 x2  + 6 x0  x2
    
           3   3          2   3       2      3       3   3       4   2
     - 7 x1  x2  - 3 x0 x1  x2  - 3 x0  x1 x2  - 7 x0  x2  + 6 x1  x2
    
              3   2       2   2   2       3      2       4   2       5
     - 3 x0 x1  x2  + 9 x0  x1  x2  - 3 x0  x1 x2  + 6 x0  x2  - 3 x1  x2
    
              4          2   3          3   2          4             5        6
     + 3 x0 x1  x2 - 3 x0  x1  x2 - 3 x0  x1  x2 + 3 x0  x1 x2 - 3 x0  x2 + x1
    
              5       2   4       3   3       4   2       5        6
     - 3 x0 x1  + 6 x0  x1  - 7 x0  x1  + 6 x0  x1  - 3 x0  x1 + x0
     -------------------------------------------------------------(1,3)式

L(1)^3+L(2)^3 と L(1)^3*L(2^3) を計算してやると ζj=exp(2 π j/n) が消えてしまい、x0,x1,x2 のみの代数式として表されます。(1,2)式、(1,3)式が対称式であること、すなわち x0,x1,x2 の任意の入れ換えによって変わらないことは、式を展開する過程での x0,x1,x2 の順序に意味がないことから分ります。


△ 基本対称式

一方で、任意の対称式は基本対称式の加減上除算による組み合わせで表されることも既に分っていました。その証明は少しく複雑になります。(よしいず氏が Web 上で公開している数学ノート にこの証明が書かれています)

ここで基本対称式とは、下のように根による因数分解を展開したとき、係数に出てくる (x2 + x1 + x0) や (x1 x2 + x0 x2 + x0 x1) などの式です。任意の根の組による入れ替えによって不変な式です。その値は与えられた代数方程式の係数値 s0,s1 ... ,sn になります。

    ============================ Maxima による計算 =============================
    (C2) expand( (x+x0)*(x+x1)*(x+x2) );
                                          2                 2       2       3
    (D3)  x0 x1 x2 + x x1 x2 + x x0 x2 + x  x2 + x x0 x1 + x  x1 + x  x0 + x
           3    2                                                   
      ==  x +  x (x2 + x1 + x0) + x (x1 x2 + x0 x2 + x0 x1) + x0 x1 x2
                                                  2                  3
      ==  x0 x1 x2 + x (x1 x2 + x0 x2 + x0 x1) + x (x2 + x1 + x0) + x
        ------------------------------------------------------- ( 1.4)式

Lagrange Resolvent の3乗和/積 L(1)^3+L(2)^3, L(1)^3*L(2)^3 は対称式でしたから、基本対称式の加減上除算による組み合わせで表されます。すなわち (1,1)式の係数 s0,s1,s2 の加減上除算の組み合わせによって表されることが保証されます。

ここで下の二次方程式を考えたとき、c0, c1 は s0, s1, s2 の加減上除算の組み合わせで表されます。

    (X-L(1)^3)(X-L(2)^3) 
        == X^2 - (L(1)^3+L(2)^3)x+L(1)^3*L(2)^3 
        == X^2-c0*X + c1  ------------------------------------- ( 1.5)式

(1.5)式に二次方程式の根を求める公式を使ってやれば L(1)^3,L(2)^3 は、s0, s1, s2 の加減上除算の組み合わせと√(1/2 乗演算)で表せます。ゆえに L(1),L(2) は、s0, s1, s2 の加減上除算 1/2 乗演算に、さらに 1/3 乗演算を追加した組み合わせで表されることになります。 一方で L(0) == x0+x1+x2 == s0 です。これらを纏めると、下の連立一次方程式が成り立ちます。

    L(0) == x0 +     x1 +       x2 == s0
    L(1) == x0 + w*  x1 + w^2  *x2 == s0, s1, s2 の加減上除算 1/2 乗演算  1/3 乗演算で表された式
    L(2) == x0 + w^2*x1 + w^2^2*x2 == s0, s1, s2 の加減上除算 1/2 乗演算  1/3 乗演算で表された式
    ただし w = exp(2 π i /3)
この連立一次方程式を解くことで根 x0, x1, x2 が w, s0, s1, s2 の加減上除算 1/2 乗演算 1/3 乗演算の有限解の組み合わせで表されることになります。

(なお、Galois 理論では Lagrange Resolvent を利用するのですが、 L(0)^3, L(1)^3, L(2)^3 側だけを利用します。L(1)^3+L(2)^3や L(1)^3*L(2)^3 の和や積は使いません。群と体の関係から L(0),L(1),L(2) が「s0,s1,s2 の有限解の加減乗除算で作られる有限体」と「根号操作の組み合わせ」で表されることを導きます。)


△ Lagrange Resolvent と巡回操作

5 次方程式の根を表す公式を求めるために Galois は Lagrange Resolvent 式を様々に変形してみたはずです。下のような式に何度も出くわしたはずです。

===================== Maxima による L(1)^2 の計算 ==========================
expand(ratsubst(0,1+w+w^2,  L1(w, x0,x1,x2)^3) );
        3            2          2            2         2
(D11) x2  - 3 w x1 x2  - 3 x1 x2  + 3 w x0 x2  + 3 w x1  x2 + 6 x0 x1 x2
    
               2          2        3            2          2         2        3
       - 3 w x0  x2 - 3 x0  x2 + x1  - 3 w x0 x1  - 3 x0 x1  + 3 w x0  x1 + x0
          
         3    3    3   
   ==  x0 + x1 + x2  + 6 x0 x1 x2
    
              2         2          2          
     - 3 x0 x1 - 3 x1 x2  - 3 x2 x0           
    
                2            2         2    
     + 3 w x0 x2  + 3 w x1 x0  + 3 w x1  x2 

             2            2           2    
     - 3 w x0  x2 - 3 w x1 x0 - 3 w x2  x1 
                          ------------------------------------- ( 1.6)式

(1.6)式は対称式ではありません。基本対称式では表せません。方程式の係数による式にとして表せません。でも (1.6) 式は根のサイクリックな入れ替えに対しては不変な式です。巡回置換に対しては不変です。1+w+w^2+...+x^n == 0 の性質より、Lagrange Resolvent を方程式の次数分だけべき乗した値は巡回置換に対して不変です。たぶん Galois は Lagrange Resolvent 式を様々に変形している最中に、巡回置換により不変であることと可解であることの同値性を掴んだのでしょう。基本対称式による表現ではなく、巡回群によって表される体での表現に気づいたのでしょう。

ただし、現実の方程式は巡回置換に対して不変ではありません。そのために、体を部分的に拡大することを何段階か経由することで、巡回置換に対して不変であることを保つようにしてやります。この体の部分拡大のために正規部分群の概念をひねり出します。「よーやるわ」と思います。

Galois が頭が良いのは認めますが、彼のような天才でも最初から現在の Galois 群の教科書に書いてあるような綺麗だが抽象的な体系として Galois 理論を構築したわけではないはずです。ここで述べるような数式の変形や数値実験を山と行った結果として Galois 理論を掴んだはずだと推測します。Galois が行ったと思われる数値実験を  現在のコンピュータ パワーを利用して、以下再現していきます。皆様も御自分で計算しながら読み進んで行かれる事を希望します。


●2 Galois が考えたこと

たぶん、Galois は 5 次方程式の根を表す公式を求めようとして、それに行き詰まったとき、反対の側から検討してみようと思い立ったのだと思います。求解公式を闇雲に探すのではなく、いったん、根 x0, x1, x2, x3, x4 が求まったことと仮定し、有理体 Q を x0, x1, x2, x3, x4 を含む Q(x0,x1,x2,x3,x4) に拡大してやり、その世界で Lagrange Resolvent を適用してやれば、何か見えてくるだろうと考えたのだと思います。一気に 5 次方程式まで進むのでは複雑すぎるので、2 次, 3 次、4 次方程式について、具体例を作り Q(x0,x1,x2) Q(x0,x1,x2,x3) について Lagrange Resolvent を適用してみたのだと思います。

以下、単純な x^2 - 2 の多項式について、この作業を行ってみます。

△ x^2-2

x^2 + s0 x + s1 ≡ x^2-2==0 の根 b0, b1 を考え Q(b0,b1) と ζ == -1 ==exp(2π i/2) について Lagrange Resolvent を適用します
    b0=√2, b1 = -√2
    L(0) ==       b0 +         b1 == s0 == 0
    L(1) == (-1)* b0 + (-1)^2* b1 == √((-4)*(-2) ) == √8
    
    L(1)^2 == b0^2 + b1^2 - 2b0 b1 == (b0+b1)^2 - 4 b0 b1 == s0^2 -4 s1
           == (-4)*(-2) == 8 ∈ Q
    
    ====================== sf による L(1)^2 の計算 ======================
>sf "b0@=!sqrt(2), b1@=-!sqrt(2), ((-1)* b0 + (-1)^2* b1)^2"
    < 8 >

すなわち L(0)∈Q(s0)==Q, L(1)∈Q(√s1) == Q(√2) です。x^2-2 の根 x0,x1 は、有限回の -1 と√2(==√s1) の加減乗除算の組み合わせで表されることが判ります。Lagrange Resolvant の右辺値がが (0,√s1) のベクトルですから、あとは連立方程式を解くだけです。

こんどは三次の多項式 x^3-2 について同様なことを行ってみましょう。今度は二次の時のような単純さでは済みません。

●2−1 x^3-2

三次方程式となると、Cardano の公式でも経験したように、一段階のクッションを置く必要があります。中間体を設けて、そこで Lagrange Resolvent を適用します。このとき Lagrange Resolvent を L(0)^3, L(1)^3, L(2)^3 のように適用します。(1.5)式の三次方程式で行ったような L(1)^3*L(2)^3 を考えることはしません。4 次、5 次 などの次数の大きな方程式にも Lagrange Resolvent を適用するためです。また、Lagrange Resolvent の適用の仕方を一般化するために、部分体と自己同型群を導入します。


△ 部分体と自己同型群

Galois 理論では Q(x0,x1,x2) で Lagrange Resolvent を直接に適用しません。一段階のクッション:中間体を間にいれます。これにより可解性を意味する巡回操作を適用できるようにします。この中間体や巡回群を導入するために、自己同型写像、自己同型群が必要になります。そして自己同型群を巡回群に分解します。この巡回群に対して Lagrange Resolvent のべき乗が不変であることにより、四則演算とべき根を求める操作によって方程式が解けたことになります。巡回群の性質が可解であることと同値であることが使われます。


△ 自己同権関数と自己同型群

先の (1.5)式における Lagrange Relosvant による三次多項式の根の解法では、基本対称式(多項式係数)による根の表現を考えました。すなわち、根の入れ替操作によって不変な式を考えました。でも、ここでは基本対称式を直接適用することを諦めます。L(0)^*L(1)^*L(2)^3 の考え方を 4 次、5 次にまで角著して適用するのは複雑になりすぎるからです。

変わりに、有理数を拡大した Q(x0,x1,x2) のような広がりを持った体についての根の入れ替えも含んだ操作として自己同型群を考ます。まず下のように定義される自己同型写像を考えます。

    σ:Q(x0,x1,x2) --> Q(x0,x1,x2) 全単射
    σ(ax+by)=σ(a)σ(x)+σ(b)σ(y) for ∀a,∀b,∀x,∀y ∈ Q(x0,x1,x2) 
                      ------------------------------------- (2.1.1)式

自己同型写像全部の集合は、全単射の条件より群を構成します。一方で、上の (2,1,1) 式は線形性をも包含する、線形性よりも強い同型性の要求です。この性質は σ(q)==q (ただし q ∈ Q) も保証してくれます。また後の具体例で見るように同型性を要求することで、Lagrange Resolvent のべき乗が不変であることを導けます。

このような自己同型群全体の集合は、任意の二つの根の入れ替え操作を全て含むことまでは保証できなくなりますが、方程式の可解性を表現するのに必要十分な条件であることがガロア理論によって証明できます。


△ 有理数体 Q は自己同型写像に対して不変

(2,1,1) 式の自己同型写像は、有理数 Q に対して働かせても変化がないことを下の様に証明できます。
       σ(q) == q for ∀q ∈ Q
    proof:
    
    σ(1)==σ(1*1)==σ(1)*σ(1) == 両辺を σ(1) で割る ==> σ(1)==1
    ∴ for ∀N ∈ integer σ(N)==σ(1+...+1) = σ(1)+...+σ(1) == N
    ∴ for ∀N ∈ integer-{0}, 1==σ(N/N)==σ(N)σ(1/N) == N σ(1/N) ∴ σ(1/N)==1/N
    ∴ for ∀N∈ integer,∀M ∈ integer-{0}, σ(N/M)==σ(N)/σ(M) == N/M

自己同型写像 σ が有理数体に対して不変ならば、代数方程式の根に対しては、σは多項式の一つの根を別の根へ移動させる写像であることも下の様に証明できます。

    a が多項式 x^n + q0 x^(n-1) + .... + qn (ただし q0, .. qn∈Q)の根とする。
ならば
    a^n + q0 a^(n-1) + .... + n ==0
∴
    0 == σ(a^n  + q0 a^(n-1)    + .... + qn)
      == σ(a^n) + q0σ(a^(n-1)) + .... + qn
∴ σ(a^n) も x^n + q0 x^(n-1) + .... + qn の根である

ガロア理論では、任意の二つの根を入れ替える対称操作を諦めて、巡回操作に限定して Lagrange Resolvent を適用します。対称操作を、巡回操作に限定限定するために、自己同型群を巡回群の積に分解します。すなわち巡回操作に限定するために、自己同型群が便利な道具になるわけです。


△ x^3-2 自己同型群、部分体の構成

以下、x^3-2 について、自己同型写像、自己同型群を具体的に行列の形で構成し、可解性(巡回性)のある部分体を具体的に構成します。そして自己同型群の部分群と部分体が一対一に対応していることを見ます。

    c = 2^(1/3)
    ω = !exp( 2 π i /3)
のようにおくと Q(x0,x1,x2) == Q(c,ω) です。Q(c,ω) は Q 係数のベクトル空間とも見なせます。一次独立ベクタとして(1, c, c^2, ω, cω, c^2ω) をとれば、
    L(1, c, c^2, ω, cω, c^2ω)==Q(c,ω)
のようにベクトル空間を考え、自己同型写像を行列として表現できます。

まず、下のような性質を持つ自己同型写像 ρ を考えます。

    ρ(c) == c        ------------------------------------- (2.1.2)
    ρ(ω) == ω^2
この ρ は実数軸に対してして反転させること、複素共役をとることを意味します。

自己同型:(2.1.1)式の性質より ρについて下のことが成り立ちます。

for ∀x∈L(1, c, c^2, ω, c ω, c^2ω) for ∃x0,x1,x2,x3,x4,x5 ∈Q
    x == x0 + x1 c+x2 c^2+ x3 ω + x4 c ω + x5 c^2ω

ρ(x) == x0 + x1 c+x2 c^2+ x3 ω^2 + x4 c ω^2 + x5 c^2ω^2
      == x0 + x1 c+x2 c^2+ x3(-ω-1) + x4 c(-ω-1) + x5 c^2(-ω - 1)
      == (x0-x3) + (x1-x4) c+(x2-x5)c^2 - x3 ω - x4 c ω - x5 c^2ω
      ( ω^2 + ω + 1 == 0 を使っています)

すなわち、ρを 一次独立ベクタ (1, c, c^2, ω, cω, c^2ω) 上の Q 係数行列として表現できることを意味します。この性質を反映させた sf の ρ 行列ファイル変数を下のように作ります。

//@@
ρ=[[6]]
ρ[<0,6*6,1>]=<1, 0, 0,-1, 0, 0,
               0, 1, 0, 0,-1, 0,
               0, 0, 1, 0, 0,-1,
               0, 0, 0,-1, 0, 0,
               0, 0, 0, 0,-1, 0,
               0, 0, 0, 0, 0,-1>
//@@@

同様に、下のような性質を持つ自己同型写像 σ を考え、その sf 行列
ファイル変数を作ります。

    σ(c) == c ω
    σ(ω) == ω      ------------------------------------- (2.1.3)

    σ(x) == x0 + x1 cω+x2 c^2 ω^2+ x3 ω + x4 cω^2 + x5 c^2 ω^3
      == x0 + x1 cω+x2 c^2(-ω-1)+ x3ω + x4 c(-ω-1) + x5 c^2
      == x0 -x4 c + (-x2+x5)c^2 + x3 ω  + (x1-x4) cω -x2 c^2ω

//@@
σ=[[6]]
σ[<0,6*6,1>]=<1, 0, 0, 0, 0, 0,
               0, 0, 0, 0,-1, 0,
               0, 0,-1, 0, 0, 1,
               0, 0, 0, 1, 0, 0,
               0, 1, 0, 0,-1, 0,
               0, 0,-1, 0, 0, 0>
//@@@

ρ, σ 行列は、自己同型写像であり、それらの行列の積 {e, σ, σ^2, ρ, ρσ, ρσ^2} も自己同型写像になります。ρ,σ は sf のファイルであり、これらの行列の積の自己同型写像は sf の行列の積として直接に計算させられます。行列計算の結果を比較しやすくするために、行列に <0,1,2,3,4,5> を掛けてやることで、下の様に自己同型写像行列群のベクタ対応を作ります。

    e=σ σ^-1
    e<0,1,2,3,4,5>
    <0,1,2,3,4,5>
    σ<0,1,2,3,4,5>
    <  0, -4,  3,  3, -3, -2 >
    σ^2<0,1,2,3,4,5>
    <  0,  3, -5,  3, -1, -3 >
    ρ<0,1,2,3,4,5>
    < -3, -3, -3, -3, -4, -5 >
    ρσ<0,1,2,3,4,5>
    < -3, -1,  5, -3,  3,  2 >
    ρσ^2<0,1,2,3,4,5>
    < -3,  4, -2, -3,  1,  3 >

△ {e, σ, σ^2, ρ, ρσ, ρσ^2} の演算表

{e, σ, σ^2, ρ, ρσ, ρσ^2} 自己同型写像群が、互いに組み合わせたとき閉じていることは、sf 下のような sf の計算を繰り返すことで確認できます。

    ρσ^2 ρσ - σ^2
    < 0, 0, 0, 0, 0, 0 >
    < 0, 0, 0, 0, 0, 0 >
    < 0, 0, 0, 0, 0, 0 >
    < 0, 0, 0, 0, 0, 0 >
    < 0, 0, 0, 0, 0, 0 >
    < 0, 0, 0, 0, 0, 0 >

先の行列のベクタ対応を使えば

    ρσ^2 ρσ<0,1,2,3,4,5>
    <  0,  3, -5,  3, -1, -3 >
であり、エディタの文字列サーチ機能で < 0, 3, -5, 3, -1, -3 > ベクタ表現がが σ^2 行列にに対応することは容易に確認できます。この作業を繰り返せば下の演算表を容易に作れます。
e σ σ^2 ρσ^2 ρσ ρ
e e σ σ^2 ρσ^2 ρσ ρ
σ σ σ^2 e ρσ ρ ρσ^2
σ^2 σ^2 e σ ρ ρσ^2 ρσ
ρσ^2 ρσ^2 ρ ρσ e σ^2 σ
ρσ ρσ ρσ^2 ρ σ e σ^2
ρ ρ ρσ ρσ^2 σ^2 σ e
----------------------------------------------------------- ( 2.1.4)

この演算表が置換群 S3 (「sf による置換群の数値実験」のところでのべた P3{0}...P3{6} の演算表を下に再掲します) と一対一に対応することが解かります。

           |P3{0}:e P3{1},  P3{2},  P3{3}   P3{4},  P3{5}   
    -------+-----------------------------------------------
    P3{0}:e|e       P3{1},  P3{2},  P3{3}   P3{4},  P3{5}   
    P3{1}  |P3{1},  P3{2},  e       P3{4}   P3{5},  P3{3}   
    P3{2}  |P3{2},  e       P3{1},  P3{5}   P3{3}   P3{4},  
    P3{3}  |P3{3}   P3{5}   P3{4},  e       P3{2},  P3{1},  
    P3{4}  |P3{4},  P3{3},  P3{5}   P3{1},  e       P3{2},  
    P3{5}  |P3{5}   P3{4},  P3{3}   P3{2},  P3{1},  e       

( 2.1.4) のような演算表は、作れば良いと分っていても手計算では時間がかかりすぎて作れません。途中で計算ミスが入り込んでしまい、計算が収束しない可能性も高いでしょう。C でプログラムを作れば実現できますが、そのデバッグ作業が大変です。sf を使えば、この作業が整数同士の演算の気軽さで行えます。この演算表を眺めているだけではなく、是非とも御自分でも sf を使って計算してみてください。sf の威力を体感できるはずです。

△ x^3-2 の部分群と部分体

( 2.1.4) の演算表をを眺めていると {e,σ,σ^2} が巡回群であることに気づきます。{e,ρ} も群を構成します。,{e,ρ} は位数 2 であり巡回群ですが、S3/A3 の剰余群であることも、( 2.1.4) の演算表から分ります。

{e,σ,σ^2} 部分群の自己同型関数に対して L(1,ω) が不変な部分体であることが分ります。( 2.1.3) 式で示したように σ(ω)==ωだからです。同様に {e,ρ} に対して L(1,c, c^2) が不変体であることが( 2.1.2) 式から分ります。

自己同型群の部分群と部分体との間に次のようなガロア理論の基本定理が成り立ちます。

ガロア理論の基本定理
L を有理数体 Q のガロア拡大とします。
(ガロア拡大とは、与えられた多項式の根全部を含むように Q を拡大した最小の体です)
L の 自己同型群を G(L/Q) と書きます。部分体 K を不変にする自己同型群を G(L/K) と書きます
逆に自己同型群の部分群 g による L の不変体を G^g と書きます。

すると部分体と K 部分群 g の間に下の関係が成り立ちます。

    K == L^g      ------------------------------------- ( 2.1.5)

    [L:K] == #g
ただし [L:K] は L を K 上のベクトル空間としたときの次元であり #g は部分群 g の位数です。

Q に対しては L の自己同型群 G が対応し、L に対しては単位群 {e} が対応し、L と Q の間の任意の中間体に対して上の式が成り立ちます。図示すると下のようになります

        L -----{e}
        |       |
        K ----- g     ------------------------------------- ( 2.1.6)
        |       |
        Q -----{G}

{e,ρσ},{e,ρσ^2} も部分群を構成することより、x^3-2 のガロア拡大 Q(c,ω) の部分群と部分体のには、下のような関係があります。

    Q(c,ω)  ==L(1, c, c^2, ω, c ω, c^2ω)     {e}


    Q(c)      == L(1, c, c^2)                     {e,ρ}
    Q(c ω)   == L(1, c^2+c^2ω, c ω)            {e,ρ σ}
    Q(c ω^2) == L(1, c+cω, c^2ω)               {e,ρ σ^2}


    Q(ω)     == L(1, ω)                         {e,σ,σ^2}


    Q         == L(1)                             {e,  σ,σ^2,ρ σ^2,ρ σ,  ρ}

部分群 {e,ρσ} が 部分体 Q(c ω) == L(1, c^2+c^2ω, c ω, ) を不変にする自己同型群であることは下の sf を使った計算によって確認できます

>sf "ρ σ<1,0,0, 0,0,0>  # L(1)"
    < 1, 0, 0, 0, 0, 0 >

>sf "ρ σ<0,0,1, 0,0,1>  # L(c^2+c^2ω)"
    < 0, 0, 1, 0, 0, 1 >

>sf "ρ σ<0,0,0, 0,1,0>  # L(cω)"
    < 0, 0, 0, 0, 1, 0 >

△ x^3-2 へのLagrange Resolvent の適用

Q(c,ω):L(1, c, c^2, ω, c ω, c^2ω):Q 上 6 次元ベクタ空間は L(1,c, c^2) 上の (1,ω) を一次独立ベクタ集合にとった二次元ベクタ空間とも見なせます。L(1,c, c^2) 不変な自己同型群は巡回群 {1,ρ} です。、また巡回群{1,ρ}のみ L(1,c, c^2) を不変にする自己同型群です。このとき、下のことが言えます。

for ∀x ∈Q(c,ω),  x== (Y0^(1/2)+Y1^(1/2))/2 for ∃Y0,Y1 ∈ L(1,c,c^2) -------------(2.1.7)
その理由は {1,ρ} が巡回群であることす。下の証明を見てください
証明
   x に対して x,ρ(x) と ρ^2(x)==x となって一周する直前までの数列を考え
    y0 == ζ0^0 x + ζ0^1ρ(x) == x +        ρ(x)
    y1 == ζ1^0 x + ζ1^1ρ(x) == x + (-1)^1 ρ(x)
    ( ただし ζj≡exp(2π i j/m)  j=0,1, .. , m-1 であり、この場合は m==2 です。)
  を考えます。ρ が位数 2 の巡回群であり、ρ(±1)==±1 のため下の関係式が成り立ちます。
    ρ(y0) == ρ(x) +  ρ^2(x) == ρ(x) +    x = ( 1)(x +       ρ(x)) == ( 1) y0
    ρ(y1) == ρ(x) +  (-1)^1 ρ^2(x)          ==(-1)(x + (-1)^1ρ(x)) == (-1) y1
  ∴
    ρ(y0^2) ==  ( 1)^2   y0^2 == y0^2
    ρ(y1^2) ==  (-1)^2   y1^2 == y1^2
   y0^2, y1^2 は ρ に対して不変であり ρ の不変体 L(1,c, c^2) に属します。即ち 
    for ∃Y0, Y1 ∈ L(1,c, c^2)   Y0^(1/2) == x +        ρ(x)
                                  Y1^(1/2) == x + (-1)^1 ρ(x)
   この二つの式を足すと Y0^(1/2)+Y1^(1/2) == 2 x
   ゆえに x == (Y0^(1/2)+Y1^(1/2))/2

即ち x^3 - 2 の根も含め、∀x ∈Q(c,ω) は L(1,c,c^2) の要素の 1/2 √根号操作と、足し算と割り算の操作で表現できることが証明できました。x^3 - 2 の根が L(1,c,c^2) 要素の二乗根と加減乗除算によって表現できることが証明できました。

同様なことを、もう一度巡回群 {e, σ, σ^2} と Q と L(1,c,c^2) について行います。すなわち下がなりたつことを証明します。言い換えると L(1,c,c^2) の任意の要素が有理数 Q の根号を求める操作で得られます。

∀x ∈ L(1,c,c^2) x== (Z0^(1/3)+Z1^(1/3)+Z2^(1/3))/3 ------------------------------- (2.1.8)
     for ∃Z0,Z1,Z2 ∈ Q
証明
   x に対して x,σ(x) σ^2(x) と σ^3(x)==x となって一周する直前までの数列を考え
    ζj≡exp(2π i j/m)  j=0,1, .. , m-1, m==3 すなわち j=0,1,2
    z0 == ζ0^0 x +ζ0^1σ(x) +ζ0^2σ^2(x) == x +     σ(x) +     σ^2(x)
    z1 == ζ1^0 x +ζ1^1σ(x) +ζ1^2σ^2(x) == x + ω  σ(x) + ω^2σ^2(x)
    z3 == ζ2^0 x +ζ2^1σ(x) +ζ2^2σ^2(x) == x + ω^2σ(x) + ω^4σ^2(x)
  を考えます。σ が位数 3 の巡回群であり、σ(ω)==ω のため下の関係式が成り立ちます。
    σ(z0) == σ(x) +      σ^2(x) +     σ^3(x) ==  ω^0 z0
    σ(z1) == σ(x) +   ω σ^2(x) + ω^2σ^3(x) == ω^-1 z1
    σ(z2) == σ(x) + ω^2 σ^2(x) + ω^4σ^3(x) == ω^-2 z2
  ∴
    σ(z0^3) ==       ( 1)^3   z0^3 == z0^3
    σ(z1^3) ==  ((ω)^-1)^3   z2^3 == z1^3
    σ(z2^3) ==  ((ω)^-1)^3   z2^3 == z2^3
   z0^3, z1^3,z2^3 は σ に対して不変であり ρ の不変体 L(1,ω) に属します。即ち 
    for ∃Z0, Z1,Z2 ∈ L(1,ω)    Z0^(1/3) == x +          σ(x) +          σ^2(x)
                                  Z1^(1/3) == x +   (ω)^1 σ(x) +   (ω)^2 σ^2(x)
                                  Z1^(1/3) == x + (ω^2)^1 σ(x) + (ω^2)^2 σ^2(x)
   この三つの式を足すと Z0^(1/3)+Z1^(1/3)+Z2^(1/3) == 3 x
   ゆえに x == (Z0^(1/3)+Z1^(1/3)+Z2^(1/3))/3

即ち、先に扱った Y0、Y1 も含め、∀x ∈L(1,c,c^2) は L(1,ω) の要素の 1/3 根号操作と、足し算と 1/3 割り算の操作で表現できることが証明できました。

上の σ と ρ での二段階の操作を行うことは x^3 - 2 の根を Q 要素の加減乗除算操作と二乗根を求める操作と、三乗根を求める有限回の操作によって表現することです。すなわち x^3 - 2 の根を代数的操作によって根を求めることができることを証明できました。

以上に示した、

ことを二段階繰り返す操作は、解公式を直接に示すものではありません。でも加減乗除算と根号を求める操作で根を表現できる必要十分条件を示しています。x^3-2 の根を求める操作では一段階のクッションが必要なことは、Cardano の公式で一段階のクッションが必要な理由を示してくれています。同様なことを四次の多項式についても行えます。また一般の多項式について行おうとすると、5 次以上の多項式では、根を有理数の加減乗除算と根号を求める操作の組み合わせでは表現できないことを、ガロア理論の証明で行っています。

S3 が最初から巡回群であるよう自然が作られていれば、Lagrange Relosvant だけで済みました。そうではないため、上のように二段階に分けて巡回群を Lagrange Resolvent に適用してやることが必要になりました。この分解して Lagrange Relosvant を適用する作業を一般の n 次多項式の場合にも適用できるように厳密に証明しているのが、ガロア理論の証明です。Sn の正規部分群を使って巡回群に分解してやるのが、その骨子です。

この複数段階に分ける必要があることが、ガロア理論の証明を分り難くしてくれています。証明が分り難いときには、その具体例を作ってやることが証明を理解するよい手段なのですが、ガロア理論の場合には具体例を作る手間が大変であることも、ガロア理論の理解を難しくしてくれます。

sf を使えば、行列やベクタ演算を電卓での実数計算と同様なレベルまで単純化してくれます。上で見たようにガロア理論での具体例を作ることを簡単にしてくれます。もう一度、こんどは x^4-2 について部分群と部分体を作りあげます。、そこでの sf の威力を見てください。



●2−2 x^4-2

Q を x^4-2 の根によって拡大した体を作ります。その体をベクトル表現してやり、自己同型群を行列として表現します。自己同型群を巡回群に分割してやり、Lagrange Resolvent を働かせる部分体を作ります。そのような巡回群と部分体の列ができあがれば、有理数の加減乗除算と根号を求める操作の組み合わせで、x^4-2 の根を表現できることの証明ができたことになります。


△ x^4-2 でのガロア拡大体

下のように q と i を定めます。
>sf "q = 2^(1/4)"
    < 1.18921 >
    
# 虚数 i 自体は sf に組み込まれているので i=!exp(2`π i/4) と i 変数を作らない
>sf "!exp(2π i/4)   # i"
    < i >
すると x^4 - 2 の根は下のようになります。
x0 = q
x1 = q ω
x2 = q ω^2
x3 = q ω^3
根が実数軸と虚数軸上に菱形正方形の形で配置されています。ちなみに自己同型群は、この四角形の対称変換操作にもなります。
          │
          x1: q i:1
          │
          │
  ─x2──┼──x0───
    -q:2  │    q:0
          │
          x3:-q i:3
          │

ガロア拡大体 Q(q,i) は下の様になります

    Q(q,i) == Q(q,ω) == L{1,q, q^2,q^3, i, qi, q^2i, q^3i}

△ x^4-2 での自己同型群

Q(q,i) の自己同型群は下のような D4 として知られる対称操作とも見なせます。

    A q → q    i → i      : なにもしない 
    B q → iq   i → i      : 原点を中心に90度回転 
    C q → -q   i → i      : 原点を中心に180度回転 
    D q → -iq  i → i      : 原点を中心に270度回転 

    E q → q    i → -i     : x軸に関して折り返す 
    F q  → -q  i → -i     : y軸に関して折り返す 
    G q → -iq  i → -i     : 直線y=xに関して折り返す 
    H q → iq   i → -i     : 直線y=-xに関して折り返す 

A,B, .... H は {1,q, q^2,q^3, i, qi, q^2i, q^3i} を下の様に変換します。

A q → q    i → i  q^2-> q^2,  q^3->  q^3 qi-> qi q^2i-> q^2i q^3i-> q^3i
B q → iq   i → i  q^2->-q^2,  q^3->-iq^3 qi->-q  q^2i->-q^2i q^3i-> q^3
C q → -q   i → i  q^2-> q^2,  q^3-> -q^3 qi->-qi q^2i-> q^2i q^3i->-q^3i
D q → -iq  i → i  q^2->-q^2,  q^3-> iq^3 qi-> q  q^2i->-q^2i q^3i->-q^3
(-i 2)^2    # -4
(-i 2)^3    # 8i
E q → q    i → -i q^2-> q^2,  q^3->  q^3 qi->-qi q^2i->-q^2i q^3i->-q^3i
F q  → -q  i → -i q^2-> q^2,  q^3-> -q^3 qi-> qi q^2i->-q^2i q^3i-> q^3i
G q → iq   i → -i q^2->-q^2,  q^3->-iq^3 qi-> q  q^2i-> q^2i q^3i->-q^3
H q → -iq  i → -i q^2->-q^2,  q^3-> iq^3 qi->-q  q^2i-> q^2i q^3i-> q^3

このことから A,B, .... H を sf のファイル変数 Am, Bm, ... として下のように作ることができます。

>sf "Am =[[8]],Am[*,*] = < 1, 1, 1, 1,  1, 1, 1, 1>"

B q → iq   i → i  q^2->-q^2,  q^3->-iq^3   qi->-q  q^2i->-q^2i q^3i-> q^3
//@@
Bm=[[8]], Bm[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0,-1, 0, 0
                            0, 0,-1, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0, 0, 1

                            0, 0, 0, 0,  1, 0, 0, 0
                            0, 1, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0,-1, 0
                            0, 0, 0,-1,  0, 0, 0, 0>
//@@@

C q → -q   i → i  q^2-> q^2,  q^3-> -q^3 qi->-qi q^2i-> q^2i q^3i->-q^3i
//@@
Cm=[[8]], Cm[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0,-1, 0, 0,  0, 0, 0, 0
                            0, 0, 1, 0,  0, 0, 0, 0
                            0, 0, 0,-1,  0, 0, 0, 0

                            0, 0, 0, 0,  1, 0, 0, 0
                            0, 0, 0, 0,  0,-1, 0, 0
                            0, 0, 0, 0,  0, 0, 1, 0
                            0, 0, 0, 0,  0, 0, 0,-1>
//@@@

D q → -iq  i → i  q^2->-q^2,  q^3-> iq^3 qi-> q  q^2i->-q^2i q^3i->-q^3
//@@
Dm=[[8]], Dm[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 1, 0, 0
                            0, 0,-1, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0, 0,-1

                            0, 0, 0, 0,  1, 0, 0, 0
                            0,-1, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0,-1, 0
                            0, 0, 0, 1,  0, 0, 0, 0>
//@@@

E q → q    i → -i q^2-> q^2,  q^3->  q^3 qi->-qi q^2i->-q^2i q^3i->-q^3i
//@@
Em=[[8]], Em[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0, 1, 0, 0,  0, 0, 0, 0
                            0, 0, 1, 0,  0, 0, 0, 0
                            0, 0, 0, 1,  0, 0, 0, 0

                            0, 0, 0, 0, -1, 0, 0, 0
                            0, 0, 0, 0,  0,-1, 0, 0
                            0, 0, 0, 0,  0, 0,-1, 0
                            0, 0, 0, 0,  0, 0, 0,-1>
//@@@

F q  → -q  i → -i q^2-> q^2,  q^3-> -q^3 qi-> qi q^2i->-q^2i q^3i-> q^3i
//@@
Fm=[[8]], Fm[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0,-1, 0, 0,  0, 0, 0, 0
                            0, 0, 1, 0,  0, 0, 0, 0
                            0, 0, 0,-1,  0, 0, 0, 0

                            0, 0, 0, 0, -1, 0, 0, 0
                            0, 0, 0, 0,  0, 1, 0, 0
                            0, 0, 0, 0,  0, 0,-1, 0
                            0, 0, 0, 0,  0, 0, 0, 1>
//@@@

G q → iq   i → -i q^2->-q^2,  q^3->-iq^3 qi-> q  q^2i-> q^2i q^3i->-q^3
//@@
Gm=[[8]], Gm[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 1, 0, 0
                            0, 0,-1, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0, 0,-1

                            0, 0, 0, 0, -1, 0, 0, 0
                            0, 1, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0, 1, 0
                            0, 0, 0,-1,  0, 0, 0, 0>
//@@@

H q → -iq  i → -i q^2->-q^2,  q^3-> iq^3 qi->-q  q^2i-> q^2i q^3i-> q^3
//@@
Hm=[[8]], Hm[<0,8*8,1>] = < 1, 0, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0,-1, 0, 0
                            0, 0,-1, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0, 0, 1

                            0, 0, 0, 0, -1, 0, 0, 0
                            0,-1, 0, 0,  0, 0, 0, 0
                            0, 0, 0, 0,  0, 0, 1, 0
                            0, 0, 0, 1,  0, 0, 0, 0>
//@@@

△ Am,Bm,Cm,Dm,Em,Fm,Gm,Hm,の演算表

Am,Bm,Cm,Dm,Em,Fm,Gm,Hm 行列はは、「sf による置換群の数値実験」の "二面体群" で計算したときと同様な下のような演算表を満たします

    # Am,Bm,Cm,Dm,Em,Fm,Gm,Hm 演算表
          |A:Am:e B:Bm C:Cm D:Dm       E:Em F:Fm G:Gm H:Hm
    ------+--------------------------------------------------
    A:Am:e|  e    Bm   Cm   Dm           Em   Fm   Gm   Hm
    B:Bm  |  Bm   Cm   Dm   e            Gm   Hm   Fm   Em
    C:Cm  |  Cm   Dm   e    Bm           Fm   Em   Hm   Gm
    D:Dm  |  Dm   e    Bm   Cm           Hm   Gm   Em   Fm
          |
    E:Em  |  Em   Hm   Fm   Gm           e    Cm   Dm   Bm
    F:Fm  |  Fm   Gm   Em   Hm           Cm   e    Bm   Dm
    G:Gm  |  Gm   Em   Hm   Fm           Bm   Dm   e    Cm
    H:Hm  |  Hm   Fm   Gm   Em           Dm   Bm   Cm   e    

上の演算が正しいことは、下の行列演算が全て 0 行列になることで確認できます。これは sf を使えば容易に確認できます。

>sf "Bm Bm - Cm"
>sf "Bm Cm - Dm"
>sf "Bm Dm - Am"
>sf "Bm Em - Gm"
>sf "Bm Fm - Hm"
>sf "Bm Gm - Fm"
>sf "Bm Hm - Em"

>sf "Cm Bm - Dm"
>sf "Cm Cm - Am"
>sf "Cm Dm - Bm"
>sf "Cm Em - Fm"
>sf "Cm Fm - Em"
>sf "Cm Gm - Hm"
>sf "Cm Hm - Gm"

>sf "Dm Bm - Am"
>sf "Dm Cm - Bm"
>sf "Dm Dm - Cm"
>sf "Dm Em - Hm"
>sf "Dm Fm - Gm"
>sf "Dm Gm - Em"
>sf "Dm Hm - Fm"

>sf "Em Bm - Hm"
>sf "Em Cm - Fm"
>sf "Em Dm - Gm"
>sf "Em Em - Am"
>sf "Em Fm - Cm"
>sf "Em Gm - Dm"
>sf "Em Hm - Bm"

>sf "Fm Bm - Gm"
>sf "Fm Cm - Em"
>sf "Fm Dm - Hm"
>sf "Fm Em - Cm"
>sf "Fm Fm - Am"
>sf "Fm Gm - Bm"
>sf "Fm Hm - Dm"

>sf "Gm Bm - Em"
>sf "Gm Cm - Hm"
>sf "Gm Dm - Fm"
>sf "Gm Em - Bm"
>sf "Gm Fm - Dm"
>sf "Gm Gm - Am"
>sf "Gm Hm - Cm"

>sf "Hm Bm - Fm"
>sf "Hm Cm - Gm"
>sf "Hm Dm - Em"
>sf "Hm Em - Dm"
>sf "Hm Fm - Bm"
>sf "Hm Gm - Cm"
>sf "Hm Hm - Am"

Am ... Hm を一つの sf ループ・コマンドで扱うために sf インデックス ファイル変数 Dm4{j} j=0...7 を導入します

//@@
    Dm4{0} = Am
    Dm4{1} = Bm
    Dm4{2} = Cm
    Dm4{3} = Dm

    Dm4{4} = Em
    Dm4{5} = Fm
    Dm4{6} = Gm
    Dm4{7} = Hm
//@@@



△ x^4-2 での部分群と部分体

{Am,Bm,Cm,Dm} が部分群であることは演算表から分かります。二面体群 D4 の演算表から、エディタの矩形ブロック消去機能を使って {Am,Bm,Cm,Dm} だけの部分を残してやれば、演算が閉じていることを確認できます。{Am,Bm,Cm,Dm} に対しての不変体が Q(i) = L(1,i) であることは下の sf による計算で確認できます。

>sf "id@=<0,1,2,3>, <<0,4,1@t|Dm4{id[t]}<0,0,0,0, 1,0,0,0> >>   # qi"
     sf command argment: <<0,4,1@t|Dm4{id[t]}<0,0,0,0, 1,0,0,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<0,0,0,0, 1,0,0,0>
    < 0, 0, 0, 0, 1, 0, 0, 0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<0,0,0,0, 1,0,0,0>
    < 0, 0, 0, 0, 1, 0, 0, 0 >
        loop count:_n  2 sf command argment: Dm4{id[t]}<0,0,0,0, 1,0,0,0>
    < 0, 0, 0, 0, 1, 0, 0, 0 >
        loop count:_n  3 sf command argment: Dm4{id[t]}<0,0,0,0, 1,0,0,0>
    < 0, 0, 0, 0, 1, 0, 0, 0 >

{Am,Cm,Em,Fm} に対しての不変体が Q(q^2) == L{1,q^2}, {Am,Cm,Gm,Hm} に対する不変体が Q(q^2i)==L{1,q^2i} であることは下の sf による計算で確認できます。

>sf "id@=<0,2,4,5>, <<0,4,1@t|Dm4{id[t]}<1,0,1,0, 0,0,0,0> >>   # L{1,q^2}"
     sf command argment: <<0,4,1@t|Dm4{id[t]}<1,0,1,0, 0,0,0,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,0,1,0, 0,0,0,0>
    < 1, 0, 1, 0, 0, 0, 0, 0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,0,1,0, 0,0,0,0>
    < 1, 0, 1, 0, 0, 0, 0, 0 >
        loop count:_n  2 sf command argment: Dm4{id[t]}<1,0,1,0, 0,0,0,0>
    < 1, 0, 1, 0, 0, 0, 0, 0 >
        loop count:_n  3 sf command argment: Dm4{id[t]}<1,0,1,0, 0,0,0,0>
    < 1, 0, 1, 0, 0, 0, 0, 0 >


>sf "id@=<0,2,6,7>, <<0,4,1@t|Dm4{id[t]}<1,0,0,0, 0,0,1,0> >>   # L{1,q^2i}"
     sf command argment: <<0,4,1@t|Dm4{id[t]}<1,0,0,0, 0,0,1,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,0,0,0, 0,0,1,0>
    < 1, 0, 0, 0, 0, 0, 1, 0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,0,0,0, 0,0,1,0>
    < 1, 0, 0, 0, 0, 0, 1, 0 >
        loop count:_n  2 sf command argment: Dm4{id[t]}<1,0,0,0, 0,0,1,0>
    < 1, 0, 0, 0, 0, 0, 1, 0 >
        loop count:_n  3 sf command argment: Dm4{id[t]}<1,0,0,0, 0,0,1,0>
    < 1, 0, 0, 0, 0, 0, 1, 0 >

{Am,Cm} Q( q^2 + q^2i)=L{1,q^2,i,q^2i}, {Am,Em} Q(q)==L{1,q,q^2,q^3}, {Am,Fm} Q(qi)==L{1,q^2,qi,q^3i}, {Am,Gm} Q(q+qi)==L{1, q+qi, q^2i, q^3-q^3i}, {Am,Hm} Q(q-qi)==L{1, q-qi, q^2i, q^3+q^3i}と不変体と部分群が対応することも下の sf による計算で確認できます。

>sf "id@=<0,2>, <<0,2,1@t|Dm4{id[t]}<1,0,1,0, 1,0,1,0> >>   # L{1,q^2,i,q^2i}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,0,1,0, 1,0,1,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,0,1,0, 1,0,1,0>
    < 1, 0, 1, 0, 1, 0, 1, 0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,0,1,0, 1,0,1,0>
    < 1, 0, 1, 0, 1, 0, 1, 0 >


>sf "id@=<0,4>, <<0,2,1@t|Dm4{id[t]}<1,1,1,1, 0,0,0,0> >>   # L{1,q,q^2,q^3}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,1,1,1, 0,0,0,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,1,1,1, 0,0,0,0>
    < 1, 1, 1, 1, 0, 0, 0, 0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,1,1,1, 0,0,0,0>
    < 1, 1, 1, 1, 0, 0, 0, 0 >


>sf "id@=<0,5>, <<0,2,1@t|Dm4{id[t]}<1,0,1,0, 0,1,0,1> >>   # L{1,q^2,qi,q^3i}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,0,1,0, 0,1,0,1> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,0,1,0, 0,1,0,1>
    < 1, 0, 1, 0, 0, 1, 0, 1 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,0,1,0, 0,1,0,1>
    < 1, 0, 1, 0, 0, 1, 0, 1 >


>sf "id@=<0,6>, <<0,2,1@t|Dm4{id[t]}<1,1,0,0, 0,1,1,0> >>   # L{1, q+qi, q^2i}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,1,0,0, 0,1,1,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,1,0,0, 0,1,1,0>
    < 1, 1, 0, 0, 0, 1, 1, 0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,1,0,0, 0,1,1,0>
    < 1, 1, 0, 0, 0, 1, 1, 0 >
>sf "id@=<0,6>, <<0,2,1@t|Dm4{id[t]}<1,0,0,1, 0,0,1,-1> >>   # L{1, q^2i, q^3-q^3i}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,0,0,1, 0,0,1,-1> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,0,0,1, 0,0,1,-1>
    <  1,  0,  0,  1,  0,  0,  1, -1 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,0,0,1, 0,0,1,-1>
    <  1,  0,  0, -1,  0,  0, -1, -1 >


>sf "id@=<0,7>, <<0,2,1@t|Dm4{id[t]}<1,1,0,0, 0,-1,1,0> >>   # L{1, q-qi, q^2i}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,1,0,0, 0,-1,1,0> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,1,0,0, 0,-1,1,0>
    <  1,  1,  0,  0,  0, -1,  1,  0 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,1,0,0, 0,-1,1,0>
    <  1,  1,  0,  0,  0, -1,  1,  0 >
>sf "id@=<0,7>, <<0,2,1@t|Dm4{id[t]}<1,0,0,1, 0,0,1,1> >>    # L{1, q^2i, q^3+q^3i}"
     sf command argment: <<0,2,1@t|Dm4{id[t]}<1,0,0,1, 0,0,1,1> >>
        loop count:_n  0 sf command argment: Dm4{id[t]}<1,0,0,1, 0,0,1,1>
    < 1, 0, 0, 1, 0, 0, 1, 1 >
        loop count:_n  1 sf command argment: Dm4{id[t]}<1,0,0,1, 0,0,1,1>
    < 1, 0, 0, 1, 0, 0, 1, 1 >

すなわち x^4-2 のガロア拡大と自己同型部分群の間には下のような関係があります。

    Q(q,i )     ==L{1,q, q^2,q^3,               {Am}
                    ,i, qi, q^2i, q^3i}

    Q(q^2+q^2i) == L{1,q^2,i,q^2i}              {Am,Cm}
    Q(q)        == L{1,q,q^2,q^3}               {Am,Em}
    Q(qi)       == L{1,q^2,qi,q^3i}}            {Am,Fm}
    Q(q+qi)     == L{1, q+qi, q^2i, q^3-q^3i}   {Am,Gm
    Q(q-qi)     == L{1, q-qi, q^2i, q^3+q^3i}   {Am,Hm}
    

    Q(i)        == L{1,i}                       {Am,Cm,Cm,Dm}
    Q(q^2)      == L{1,q^2}                     {Am,Cm,Em,Fm}
    Q(q^2i)     == L{1,q^2i}                    {Am,Cm,Gm,Hm}


    Q           == L(1)                         {Am,Bm,Cm,Dm,Em,Fm,Gm,Hm}
        ----------------------------------------------------------------- (2.2.1)
    

「sf による置換群の数値実験」の"二面体群 D4" で述べたように、これらの部分群の商群が巡回群になります。これにより上の部分体に対して x^3-2 のときと同様に Lagrange Resolvent を適用できます。x^4-2 が代数的に解けることを証明できます。

● もう一段階の抽象化

実は Galois 理論の教科書では、もう一段の抽象化を行います。有理数 Q に全ての根を追加したガロア拡大を考えるのではなく、複素数体 C 上の n 変数有理関数体 C(X1,X2,...Xn) を想定して、その上での多項式

    Y^n + X1 Y^(n-1 + X2 Y^(n-2) + .... + Xn
を解くように考え直します。有理係数の多項式ではなく、より広い C(X1,X2,...Xn) に話を広げて、置換群 Sn の可解群に結び付けます。

でも、Galois 自身は、そこまでの抽象化した考え方はしていなかったはずだと、私は思っています。アルティンなどの後の数学者がより洗練された抽象的な形式にしたのでしょう。でも抽象的に洗練されることは分かりやすくすることではありません。普通の人間がガロア理論を理解するためには、ここで行ったような泥臭い数値実験を行わざるをえないと考えます。Galois 理論を理解するためには Galois の行っただろうことと同様なことを読者も再度行う必要があると思います。私自身は、ここまで行ったような計算をすることで、やっと Galois 理論が理解できたと感じました。Galois 理論の定理の意味がやっと数学法則として理解できた気になれました。

● 最後に

多くのGalois 理論の教科書は抽象的過ぎると考えます。人間の抽象化能力は具体的事実とのペアで働きます。具体例を伴わない抽象化は無意味です。論理だけでは抜けが入り込むからです。書ききれないからです。

ここでは代数方程式の解法の存在を Lagrange Resolvent と拡大体と自己同型群の具体例を使って例示しました。私自身、このような具体例を作る事でやっと Galois 理論を理解できた気がします。綺麗に抽象的にまとめられた Galois 理論の教科書を読み薦めていくとき、ここで書いたような背景知識を持っていることで理解が容易になるはずです。

具体例を使って理解するには自分の手で計算する必要があります。他人の例を読み流しているだけでは、その理解の程度は限られます。でも普通の手計算で Galois 理論の具体例を計算することは手間がかかりすぎます。でも sf を使えば、その手間を劇的に単純化できます。sf は行列の加減乗除算を代数式のままに行わせられるからです。 sf での行列計算はプログラム計算と言うより電卓計算に近いものです。自分の手で計算して結果を判断しながら次の計算を行う、試行錯誤しながら計算をしていく使い方ができます。ぜひ皆様御自身の手で Galois 理論での具体例を計算してみてください。


ホーム ページに戻る