有限次分離拡大が単拡大となることの具体例を愚直に計算してみる

体の拡大L/Kが有限次分離拡大であるとき、この拡大は単拡大になることが知られている。私が使っている教科書にもこの定理は載っており、具体例として \mathbb{Q}(\sqrt{2}, \sqrt{3}) = \mathbb{Q}(\sqrt{2} + \sqrt{3})が取り上げられていた。しかし、その説明が私にはエレンガント過ぎて、なんともピンとこなかった。私がとにかく疑問だったのは、一体 \mathbb{Q}(\sqrt{2} + \sqrt{3})の元の四則演算でどうやって \sqrt{2} \sqrt{3}を生み出せるのか、その具体的な計算手順は何かということだ。タネが分かった今となっては難しくもなんとも無いが、同じ疑問でハマる人がいないとも限らないので、本稿を書いてみることにした。

手順はとても簡単だ。まず、 \sqrt{2} + \sqrt{3} \in \mathbb{Q}(\sqrt{2} + \sqrt{3})である。これを3乗すると以下のようになる。

{ \displaystyle
\begin{eqnarray}
(\sqrt{2} + \sqrt{3})^3 &=& 2\sqrt{2} + 6\sqrt{3} + 9\sqrt{2} + 3\sqrt{3} \\
&=& 11\sqrt{2} + 9\sqrt{3}
\end{eqnarray}
}

これから 9(\sqrt{2} + \sqrt{3})を引いて2で割ると \sqrt{2}が得られる。

{ \displaystyle
(11\sqrt{2} + 9\sqrt{3} - 9(\sqrt{2} + \sqrt{3})) / 2 = \sqrt{2}
}

これで \sqrt{2} \in \mathbb{Q}(\sqrt{2} + \sqrt{3})が分かった。すると、即座に

{ \displaystyle
\begin{eqnarray}
\sqrt{3} &=& (\sqrt{2} + \sqrt{3}) - \sqrt{2} \\
&\in& \mathbb{Q}(\sqrt{2} + \sqrt{3})
\end{eqnarray}
}
が得られる。結局、 \sqrt{2}, \sqrt{3} \in \mathbb{Q}(\sqrt{2} + \sqrt{3})となることが分かった。以上で説明はおしまいである。

ポイントは (\sqrt{2} + \sqrt{3})を3乗することである。私は初め2乗を試してうまくいかず、悩みこんでしまった。分かってしまえばなんでこんなことも分からなかったのかと思うくらい簡単だが、こういうのは本当にコロンブスの卵だなぁ。

数式処理システムSageMathで遊ぶ

代数学について勉強していると、具体的な群の構造やら何やらを知りたくなる時がある。しかし、それらを理論的に求めることができたとしても、実際に計算してみるのは大変骨の折れることだ。例えば、ある群の部分群を全て知りたいとか、ある多項式ガロア群を求めたいとか思っても、実際にはなかなか計算することは難しい。

そこで調べてみたところ、世の中にはこのような代数学に関する計算を行うためのソフトウェアが存在していた。その名もSageMath(以下、sage)である。Sageは数学に関する様々な計算を行えるオープンソースソフトウェアであり、interfaceにはpythonベースの言語を使用する。以下に本家へのリンクを貼っておく。

www.sagemath.org

今回は冒頭で述べた群の部分群を全て求めるという計算と、多項式ガロア群を求める計算を実際に行ってみたので、それについて記載する。

初めに注意しておくと、実はビルドの途中でmakeコマンドがうんともすんとも言わなくなり、やむなくCtrl+Cで強制終了した。ただ、どうもコンソール出力の内容から察するに、コケていたのはドキュメントのビルドだと思われるので、sage自体は問題なく使えている。

準備:基本的な群を求める

群の例で遊んでみるにあたり、基本的な群を自分で構築するのは面倒である。素晴らしいことに、sageでは基本的な群はすぐに取得できるように関数が用意されている。例えば3次対称群が欲しければ以下のコマンドを実行すればよい。

sage: S3 = SymmetricGroup(3)

これで3次対称群が変数S3に代入された。これの中を見るには以下のようにすればよい。

sage: S3
Symmetric group of order 3! as a permutation group
sage: S3.list()
[(), (1,2), (1,2,3), (1,3,2), (2,3), (1,3)]

その他の例として、交代群、二面体群を求めるコマンドも紹介しておく。

sage: A3 = AlternatingGroup(3)  # 3次交代群
sage: A3
Alternating group of order 3!/2 as a permutation group
sage: A3.list()
[(), (1,2,3), (1,3,2)]
sage: D4 = DihedralGroup(4)  # 4次二面体群
sage: D4
Dihedral group of order 8 as a permutation group
sage: D4.list()
[(), (1,4)(2,3), (1,2,3,4), (1,3)(2,4), (1,3), (2,4), (1,4,3,2), (1,2)(3,4)]

群の部分群を全て求める

群の部分群を全て求めるには、subgroups関数を使用する。

sage: S3.subgroups()

[Subgroup of (Symmetric group of order 3! as a permutation group) generated by [()],
 Subgroup of (Symmetric group of order 3! as a permutation group) generated by [(2,3)],
 Subgroup of (Symmetric group of order 3! as a permutation group) generated by [(1,2)],
 Subgroup of (Symmetric group of order 3! as a permutation group) generated by [(1,3)],
 Subgroup of (Symmetric group of order 3! as a permutation group) generated by [(1,2,3)],
 Subgroup of (Symmetric group of order 3! as a permutation group) generated by [(2,3), (1,2,3)]]

ここに表示されていることの意味は、各行の一番右に表示されている元によって生成される部分群が存在するということである。具体的な形を知りたければ、それぞれの部分群に対してlist関数を実行すればよい。

sage: for H in S3.subgroups():  # python風のfor文
....:     H.list()
....:     
[()]
[(), (2,3)]
[(), (1,2)]
[(), (1,3)]
[(), (1,2,3), (1,3,2)]
[(), (2,3), (1,2,3), (1,2), (1,3,2), (1,3)]

これで全ての部分群の具体的な元を求めることができた。

多項式ガロア群を求める

最初の例

さて、こちらはちょっと難しい。正直まだ完全に消化できていないので、分かっているところまで書いてみる。

多項式ガロア群を求めるには、まず多項式を指定し、かつその多項式の根を添加して得られる体を取得しなければならない。これにはNumberField関数を使用する。

sage: K.<alpha> = NumberField(x^2 - 2)

上記コマンドにより、 x^2 - 2という多項式の根である \sqrt{2}を添加して得られる体を取得できた。式中のalphaはどうも根が入る変数のようで、いろいろいじってみるとどういうものか分かる。

sage: alpha
alpha
sage: alpha^2
2

ただし、このalphaの正体が実はよく分かっていない。これについては後述する。

さて、以下のコマンドにより、得られた体がガロア拡大体かどうかが分かる。

sage: K.is_galois()
True

実行結果がTrueと出たので、これはガロア拡大体のようだ。これでやっとガロア群を求めることができる。体Kのガロア群は以下のコマンドで計算できる。

sage: G = K.galois_group()
sage: G
Galois group of Number Field in alpha with defining polynomial x^2 - 2
sage: G.list()
[(), (1,2)]
sage: G.order()  # 位数も計算できる
2

以上により、 x^2 - 2の根を添加した体のガロア群が計算できた。

円分多項式ガロア

次に、 x^5 - 1という円分多項式ガロア群を計算しよう。実際にやってみると、以下のようになる。

sage: K.<alpha> = NumberField(x^5 - 1)
・・・・(大量のエラーメッセージ)・・・・
ValueError: defining polynomial (x^5 - 1) must be irreducible

というわけで、失敗してしまった。エラーメッセージを見ると、多項式はirreducibleでなければならないとある。この単語の意味を調べてみたところ、「既約」ということだった。つまり、引数に与える多項式 \mathbb{Q}上既約でなければならないようだ。

実は、sageを使うと多項式因数分解も簡単に行うことができる。以下のようにすればよい。

sage: x = QQ['x'].0  # xを有理数体上の多項式環の変数にするための記法
sage: f = x^5 - 1
sage: f.factor()
(x - 1) * (x^4 + x^3 + x^2 + x + 1)

これで \mathbb{Q}上既約な2つの多項式が得られたため、これらについて再度ガロア群を求めてみる。ただ、 x - 1の方は根が1であり、 1 \in \mathbb{Q}となるため無視してよい。よって x^4 + x^3 + x^2 + x + 1について計算してみる。

sage: K.<alpha> = NumberField(x^4 + x^3 + x^2 + x + 1)
sage: K
Number Field in alpha with defining polynomial x^4 + x^3 + x^2 + x + 1
sage: alpha
alpha
sage: alpha^2
alpha^2
sage: alpha^3
alpha^3
sage: alpha^4
-alpha^3 - alpha^2 - alpha - 1  # alphaは入力された多項式の根なのでこうなる
sage: K.is_galois()
True    # ガロア拡大体!

どうやらこれはガロア拡大体のようなので、ガロア群を求めてみる。

sage: G = K.galois_group()
sage: G
Galois group of Number Field in alpha with defining polynomial x^4 + x^3 + x^2 + x + 1
sage: G.list()
[(), (1,2,3,4), (1,3)(2,4), (1,4,3,2)]

よって位数4のガロア群が得られた。元々の多項式は円分多項式なので、これは巡回群となっている。しかし、これだとパッとみてそのことがよく分からない。そこで、galois_group関数の引数を変えて実行すると、もう少し分かりやすくなる。

sage: G = K.galois_group(type = 'pari')  # 内部的にpariというソフトウェアの計算エンジンを使用している??
sage: G
Galois group PARI group [4, -1, 1, "C(4) = 4"] of degree 4 of the Number Field in alpha with defining polynomial x^4 + x^3 + x^2 + x + 1

最後の行にC(4)と出力されているが、これはGが4次の巡回群であることを表している。念のため4次の巡回群を出力するコマンドと結果を比較すると、当然ながら一致する。

sage: CyclicPermutationGroup(4).list()
[(), (1,2,3,4), (1,3)(2,4), (1,4,3,2)]

ガロア拡大体にならない例

最後に、ガロア拡大体にならない例について取り上げてみる。入力に使う多項式はおなじみの x^3 - 2である。

sage: K.<alpha> = NumberField(x^3 - 2)
sage: alpha
alpha
sage: alpha^2
alpha^2
sage: alpha^3
2
sage: K.is_galois()
False

is_galois関数の出力がFalseになっており、これはガロア拡大体ではないことが分かる。実際に計算してみると、確かに失敗する。

sage: G = K.galois_group()
・・・・(大量のエラーメッセージ)・・・・
TypeError: You must specify the name of the generator.

最後のエラーを見ると、何やらgeneratorを指定せよとある。Generatorというのは恐らく生成元のことだと思うのだが、これを指定せよというのはどういうことだろうか?

これまでの例では、代数体Kを生成する際、変数としてはalpha1つだけを指定し、これが多項式の根になっていた。最初の例ではガロア拡大 \mathbb{Q}(\sqrt{2})を扱っていたわけだが、これは \mathbb{Q}にalpha =  \sqrt{2}だけを添加すれば得ることができた。また、次の例では \mathbb{Q} \zeta_5を添加することで \mathbb{Q}(\zeta_5)を得ていた。つまり、どちらも元を1つ添加することでガロア拡大体が得られていたので、特に問題はなかった。

しかし、 x^3 - 2の場合、ここからガロア拡大体を得ようとすると、 \mathbb{Q}(2^{\frac{1}{3}}, \zeta_3)となるため、2つの元を添加する必要がある。にも関わらず、最初に指定した変数がalphaだけなので、添加すべきものが足りないと言っているのではないかと思われる。

ここで疑問なのだが、そもそもalphaとは何者なのだろうか?多項式の根というのであれば 2^{\frac{1}{3}}, 2^{\frac{1}{3}} \zeta_3, 2^{\frac{1}{3}} \zeta_3^2の3通りが考えられるわけだが、一体どれなのだろうか?どれでもよいのだろうか?もしくは、どれでもないのだろうか?ここがよく分からない。

ここでいろいろと足掻いてみたところ、以下のようなコマンドが動作することを発見した。

sage: G.<beta> = K.galois_group()  # Generatorが欲しければくれてやる!Betaを持ってけ!
sage: G
Galois group of Galois closure in beta of Number Field in alpha with defining polynomial x^3 - 2
sage: G.list()

[(),
 (1,2,3)(4,5,6),
 (1,3,2)(4,6,5),
 (1,4)(2,6)(3,5),
 (1,5)(2,4)(3,6),
 (1,6)(2,5)(3,4)]

よくよく出力を見ると、"Galois closure"がどうとか書いてある。これはガロア閉包のことだと思われるが、これをどう解釈したらよいのか?さらに調べてみると、galois_closureなる関数があったので、これとの出力を見比べてみた。

sage: L.<beta> = K.galois_closure()
sage: L
Number Field in beta with defining polynomial x^6 + 108
sage: G = L.galois_group()
sage: G
Galois group of Number Field in beta with defining polynomial x^6 + 108
sage: G.list()

[(),
 (1,2,3)(4,5,6),
 (1,3,2)(4,6,5),
 (1,4)(2,6)(3,5),
 (1,5)(2,4)(3,6),
 (1,6)(2,5)(3,4)]

どうやら先ほどの出力と一致しているが、 x^6 + 108という怪しげな多項式が登場した。これは一体何なんだ?わけも分からずbetaをいじくってみると、以下のような結果が得られた。

sage: beta
(1,2,3)(4,5,6)
sage: beta^2
(1,3,2)(4,6,5)
sage: beta^3
()  # betaを3乗したら単位元に戻った

betaを3乗して単位元に戻るというのは、いかにも \zeta_3を彷彿とさせるわけだが、今回はこれ以上分からなかった。

ちなみに、typeをpariに指定すれば、このように苦しまずともガロア群が得られるようだ。

sage: G = K.galois_group(type = 'pari')
sage: G
Galois group PARI group [6, -1, 2, "S3"] of degree 3 of the Number Field in alpha with defining polynomial x^3 - 2

以上によりガロア群は3次対称群であることがわかった。

まとめ

今回はsageの持つ機能のうちほんの一部を触ってみたわけだが、実際には山のように機能があり、大変優れたソフトウェアのようだ。ただし、今の自分の数学力では、まだまだ使いこなすには至らず、無念であった。

教科書で理論を学ぶだけでなく、具体例を考えることの重要性は多くの人が理解しているところだと思うが、このようなツールはそれを助けてくれるという意味で、非常に重要なものだと思う。今後も機会があれば積極的に使っていきたい。

体K上の多項式環K[x]を既約でない多項式f(x)で生成されるイデアル(f(x))で割って得られる剰余環はなぜ体にならないのか

Kを体とする。K上の多項式環K[x]に対して、 f(x) \in K[x]がK上既約であれば、剰余環 K[x]/(f(x))は体となる。これは代数学における極めて有名な事実だ。このようになる教科書的な説明を述べると、K上既約な多項式から生成されるイデアルは極大イデアルであり、極大イデアルによる剰余環は体になる*1から、ということになる。

しかし、ちょっと待って欲しい。多くの人はこれだけ見て「ああなるほどね」と納得するのだろうか?例えば、 f(x) = x^2だとすると、これはK上既約ではないわけだが、このとき K[x]/(x^2)が体にならないことは当然だと、直感的に理解できるだろうか?少なくとも、私はできない。

というわけで、本稿ではなぜ K[x]/(x^2)が体にならないのかということを直感的に説明してみたいと思う。

このことを理解するために、1つ簡単だが重要な事実がある。それは「体は整域である」ということである。簡単に証明してみる。Kが体であり、かつ ab = 0 (a, b \in K \land a \ne 0 \land b \ne 0)となるa, bが存在すると仮定する。すると、Kは体なのでaの逆元 a^{-1} \in Kが存在する。このとき、 b = a^{-1}ab = a^{-1}0 = 0となり、 b \ne 0であることに矛盾する。よってKは整域である。

さて、 f(x) = x^2だとすると、 K[x]/(x^2)の元は ax + b + K[x]x^2 (a, b \in K)と書ける。すると、 x + K[x]x^2 \in K[x]/(x^2)である。この剰余環の積の演算を用いてこの元を2乗すると、 (x + K[x]x^2)^2 = x^2 + K[x]x^2 = 0 + K[x]x^2となる。よって剰余環 K[x]/(x^2)は整域ではないため、体ではない。

どうしてこんなことになってしまうのだろうか?K上の多項式 x^2で割った余りは高々1次式であるが、 x^2は既約ではないため、1次式の積として書き表すことが出来てしまう。すると、その1次式同士を掛け合わせると、 x^2の倍数に出来てしまうのである。 x^2で割り切れる多項式はこの剰余環の零元であるため、整域ではなくなってしまうのである。

逆にf(x)が既約多項式であれば、f(x)より次元の小さいどんな多項式同士を掛けあわせてもf(x)の倍数にはならず、結果として剰余環は整域となる。これが、既約多項式で生成されるイデアルによる剰余環が体になる直感的理由である。(厳密な証明ではない。)

以上、定理が満たされないケースを深く考えてみることで、逆に定理をより深く理解することを試みた。特に代数学のように抽象的な分野では、具体例をたくさん考えて、自ら手を動かすことが理解への近道である。その手間を惜しむことなく、今後も数字と戯れていきたい。

*1:この証明は難しくはないが、ちょっとだけ複雑なので調べてみて欲しい。

ネットワークトポロジーに潜む位相空間

情報を学んだ事のある人間であれば、ネットワークトポロジーという言葉を聞いた事があるだろう。これは、ネットワーク上でサーバやスイッチ等がどのように接続されているかを示す用語である。

また、トポロジーというのは数学の位相を意味するということは、数学を深く学んでいない人でも何となく聞いた事があるだろう。

そこで思ったのだが、ネットワークトポロジーと言うからには、そこに何らかの位相空間があるはずである。しかし、いろいろ調べてみても、どうにも情報界隈でキチッと決められた位相構造の定義は無いように思われる。そもそも情報、特にネットワークを専門とする人で、位相空間をしっかり学んだことがある人は少ないような気がするし、この状況はある意味当然なのかもしれない。ただ単に、ネットワーク上でのノードの繋がり方が何となく位相空間っぽいと思った人が名付けたのかもしれない。

以上を鑑みて、ここ最近ネットワークの中にはどのような位相構造があるのかを数学的視点から真面目に考えていたのだが、考えがまとまってきたので記事にしてみたいと思う。*1

まず、ここで扱うネットワークとはどのようなものか定義する。ネットワークとは、有限なn個(  1 \le n)のノードを持ち、ノードの間がエッジで接続されているものであるとする。任意の2つのノードを直接つなぐエッジはあっても良いしなくても良い。また、任意の2つのエッジは、ノード以外の点で共有点を持たないこととする。1つのエッジが大きくよじれて、自分自身とクロスすることもないとする。さらに、ここでは純粋にノード間の繋がり方のみに注目したいので、全てのエッジの長さは1とする。これにより、ネットワークは距離空間となる。これはよくある議論で、ノード間のホップ数を距離とするのである。(この距離の考え方は後で拡張する。)

次に、数学における位相空間の定義に触れたいと思う。位相空間とは、ざっくり言うと「集合に対して開集合となる部分集合を定義することで作られる空間」である。開集合を定義するというのは、慣れないとちょっと不思議に思うかもしれない。ユークリッド空間では距離の概念があったから、開集合は自然に定義された。しかし、位相空間の考え方は、距離の定義されていない一般の集合に対して、逆にどのような部分集合が開集合であるかを決めてやることで、距離空間と似たような議論ができるようにするというものである。つまり、開集合さえ決まれば位相構造が決まると言っても過言ではない。

そこで、以下の2点を解決すれば、ネットワークの位相構造を決めることができる。

  1. ネットワークはどのような集合で表現できるか?
  2. ネットワークを表す集合において、どのような部分集合が開集合になるか?


まずパッと思いつくのは、i番目のノードをaiとした時、 X=\{a_i : i = 1, 2, \dots,  n\}とするものである。このようにネットワークを離散的に捉えるのはよくある手法であるが、この場合、エッジはどのように表現されるのだろうか?

最初に考えたのは、開集合の決め方によってノード間の接続を表現する方法である。位相空間における開集合は、点の近傍を表していると捉えることができるので、ある点に接続されている全ての点とその点自体から成る集合を開集合とするのである。

一見するとこれは良さそうに見えるのだが、開集合の公理から、開集合同士の共通部分、および和集合も開集合になるため、ほとんどのケースでXは離散位相空間になってしまう。これでは全ての点がバラバラになってしまい、ネットワーク内の連結が表現できない。

調べてみると、エッジをノードと同じように集合の要素として扱うことを考えた人もいるようである。しかし、自分には長さを持つエッジをノードと同一視しているのがどうにも気持ち悪く、納得できなかった(追記2を参照)。興味のある方は以下を参照して頂きたい。

グラフ構造で位相空間のイメージをつかむ - Qiita

次に考えたのが、ネットワークをエッジも含めて3次元ユークリッド空間内に埋め込む方法である。ネットワークとは実際の空間にあるモノ同士の接続なのだから、3次元ユークリッド空間内にノードを表す点、及びエッジを表現する、点の間をつなぐ曲線を配置することができる。エッジの長さが全て1という制約はあるが、エッジは好きにたわませれば良いので、ノード数が有限であればこのような集合を構成することは可能である。

では、ここにどのような開集合系を定義することができるだろうか?ここで定義した集合はユークリッド空間の部分集合なので、私は最初次の定理を利用することができると考えた。

位相空間Aが集合Bを部分集合として含むとする。Aの任意の開集合Uに対して、 V = B \cap UはBの開集合となる。


一度はこれで決着かと思われたが、実はこの開集合系にはまだネットワークを表現するには不自然な点がある。例えば、以下のようにエッジがたわんだネットワークを考えよう。

f:id:peng225:20161027210450p:plain

ここで、点 a_1のε近傍 U(a_1, \epsilon)を考えると、これは開集合である。そのため、UかつXは開集合である。しかし、そうなると以下の図の赤色で示す部分がXのε近傍となる。

f:id:peng225:20161027211254p:plain

ノード間の距離はエッジに沿って考えるのが自然なので、上のような集合がε近傍となるのは不自然である。

次に考えたのが、ノードを表すある点からエッジを表す曲線に沿って長さε未満の部分をε近傍とする方法である。以下に例を示す。

f:id:peng225:20161027211605p:plain

ここで再び開集合の公理より、開集合同士の交わりは再び開集合になるので、ノードの真ん中にポツンと開集合ができてしまう。

f:id:peng225:20161027222104p:plain

ここではこのような開集合も受け入れることとする。

また、(あまり意味はないが)位相空間足り得るためには、エッジの途中の点の近傍というものも考える必要がある。例えば、点 a_i a_jを繋ぐエッジにおいて、 a_iから距離d(d<ε)だけ離れた点を取ると、ここでのε近傍は以下のようになる。

f:id:peng225:20161027222858p:plain

また、もともとはノード間でしか距離は考えていなかったが、近傍を考えるためにはエッジの途中の点の間にも距離が生まれるが、これも認めることにする。

ここで考えたようなε近傍が本当に開集合かどうかを調べるのは簡単である。ネットワークの集合をXとすると、ε近傍として決めた曲線Vを薄く包み込むような3次元ユークリッド空間上の開集合Uを考えれば、 V = X \cap Uは先ほど述べた定理により開集合である(追記1を参照)。

さて、先ほどからやたらとε近傍にこだわっていたわけだが、ε近傍だけが開集合ではない。しかし、距離空間において、ε近傍を全て集めたものは開基と呼ばれ、これらの和集合を全て集めたものを加えてやれば、それが開集合系を成すことが知られている。その意味で、ε近傍だけを定義すればほとんど開集合系を定めたことになる。

以上により、ひとまずネットワークを表現する集合、及びその開集合系を定めることができた。

さて、ここからは私の自己満足である。上で定義したネットワークの位相構造は、エッジがグニャグニャと(ある程度自由に)曲がることができて、どうにも汚い印象がある。例えるなら、整理されていないサーバラックの裏側を覗いたような残念な気持ちになるのである。これをもう少し"綺麗に"配線することは出来ないだろうか?

最も綺麗な配線は、全てのエッジを真っ直ぐな線分にすることである。しかし、全てのエッジの長さが1であるという制約を考えると、ノードの数が増えた場合にこれは実現不可能である。もしノード数が3つなら正三角形の、4つなら正四面体の各頂点にノードを配置することで実現できるのだが・・・

そこで考えた。次元を上げたらどうなるか?今、2次元空間では3つの点、3次元空間では4つの点を、互いに長さ1の線分で繋ぐことができるのだから、n次元空間ではn+1個の点を長さ1の線分で繋げられるのではないか?

調べてみたら、この予想はなんと正しいことがわかった。詳細な説明は以下のリンクを参照して欲しいが、ようはn次元空間での超正多面体を考えるのである。そして、その中でも全ての頂点が互いに辺で結ばれるような超正多面体はnがいくつであっても存在する。

http://eprints3.math.sci.hokudai.ac.jp/364/4/jin0804.pdf


具体的な形についても述べておく。n+1次元空間において、 a_1 = (1/\sqrt{2}, 0, \dots, 0), a_2 = (0, 1/\sqrt{2}, \dots, 0),  \dots, a_n = (0, 0, \dots, 1/\sqrt{2})というn+1個の点を互いに結ぶことで、n次元の部分集合が得られる。これこそが上で述べたn次元の超正多面体となる。

この超多面体の頂点にノードを配置することで、全てのエッジを長さ1の線分として表し、かつノードも対称な形で配置できる。

さて、これで理想的なネットワークの位相構造を手に入れたのであるが、ここでやりたいことは、3次元ユークリッド空間上の汚いネットワークを、この綺麗なネットワークに対応付けることである。そうすれば、3次元ユークリッド空間上の全てのネットワークに対して標準形のようなものを与えることができる。

この対応を探すことは、まさに両者の間の位相同型写像を探すことに他ならない。位相同型写像とは、連続な全単射であり、かつ逆写像も連続であるような写像のことである。証明は省くが、何次元の空間であろうと点は点(0次元)であり、線は線(1次元)なのだから、両者が位相同型であることはほとんど明らかであろう。

以上、ネットワークトポロジーを3次元ユークリッド空間上に埋め込む形で定義し、かつその標準形を高次元のユークリッド空間上に与えた。数学を学んだことで、情報の世界で長年謎だった問題が解決され、数学を学ぶモチベーションがさらに高まった。これからも数学に強いエンジニアを目指し、日々数学を学んでいきたい。

追記1

ネットワーク集合自体はユークリッド空間に埋め込まれているとは言え、この集合上で考える距離はもはや通常の意味での距離とは異なるため、近傍もユークリッド空間とは違うものになる。そのため、ユークリッド空間の開集合との共通部分だということを利用して開集合であることを主張するのは誤りだと気づいた。素直にノード上をたどった長さを距離として、それを用いて開集合を決めるのが自然であろう。

追記2

本稿を書いてからずっと悩んでいたが、やはり離散的な構造であるグラフを連続的な空間に埋め込むというのは、なんとも美しくないような気がしてきた。悔しいが、リンクを貼った先の記事で紹介されているような位相の入れ方がよいのかもしれない。ただし、やるならとことん抽象的にやるべきである。すなわち、ノードとエッジはどちらも本質的には区別のない点であると捉え、ノードに対応する点の近傍にはそれとつながるエッジを含め、エッジに対応する点の近傍はそのエッジのみから成る集合であるとする。そうして、ノードだのエッジだのの区別がなくなった点に対して、今度は逆に開集合として自分自身だけが含まれるようなものが存在する点はエッジであり、そうでない点はノードであると考えるのである。紹介した記事とほとんど同じことを言っているようだが、ノードとエッジを本質的に区別するのは位相構造のみであるという立場を強く強調しておきたい。

*1:本記事に記載している内容は私が自力で考えて導き出したものであり、これが必ずしも正解とは限らない。そういう考え方もあるのだと思って頂ければ幸いである。

ガロアの基本定理の定性的なイメージと具体例

少し前にやっとガロア理論を学ぶことができた。ガロア理論の核となるのはガロアの基本定理である。ざっくり説明すると、L/Kが体のガロア拡大であるとき、その中間体Mに対してガロア群Gal(L/K)の部分群の中に1対1に対応するものがあるという定理である。しかも、中間体同士の包含関係と、Gal(L/K)の部分群の包含関係は互いに逆向きに対応するのである。これがこの定理の不思議なところであり、キーポイントであると思われる。

本記事ではガロアの基本定理で述べている中間体とガロア群の部分群の間の逆向きの包含関係について述べると共に、1つ具体例を出してみたいと思う。

まず、ガロア群とは何かについて簡単に述べてみる。L/Kが体のガロア拡大であるとき、K自己同型群 {\rm Aut}_K^{al}(L)のことをガロア群と呼び、Gal(L/K)と書く。K自己同型群は、Lに含まれる元のうちKの元を不変にするような同型の集合であり、これは自己同型群の部分群になる。

今、 K \subset M \subset Lという体の包含関係があり、またこれに対応してガロア群の部分群の間に {\rm Gal}(L/K) \supset H \supset 1という包含関係が合ったとする。ここで、L, M, Kの元を変えないようなLの自己同型の集合は、それぞれどんな集合であるかを考えてみる。まずLについてであるが、Lの自己同型がLを変えないのだとすれば、それは恒等写像のみである。これはガロア群の自明な部分群である1に対応する。また、Kについて考えてみると、Kを変えないLの自己同型というのは、まさにK自己同型の定義そのものであり、それらの集合はガロア群Gal(L/K)そのものである。また、Mについては具体的にどういう体かを示していないためざっくりとしたことしか言えないが、 M \ne Lかつ M \ne Kであれば、Mを変えないという条件は、Lを変えないよりは緩く、Kを変えないよりは厳しいため、その数は1よりは大きく、|Gal(L/K)|よりは小さいと考えられる。そのような集合をHとすると、これはガロア群の部分群になる。

以上の考察のように、ガロア拡大の中間体の列に対して、その中間体を変えないようなLの自己同型を考えていくと、それが全てガロア群の部分群になっている。そして、サイズの大きい中間体ほど、それを変えないという条件が厳しいものとなるため、該当する自己同型の数は少なくなっていく。このようにして、中間体とそれを変えないガロア群の部分群の対応を考えると、逆向きの包含関係が見えてくるのである。これがガロアの基本定理に対する私の定性的な理解である。

ガロア拡大の中間体とガロア群の部分群の対応例

例として、ガロア拡大 \mathbb{Q}(\zeta_{5})/\mathbb{Q}を考える。ここで、 \zeta_{5}は1の原始5乗根である。詳細はとても書ききれないので省くが、 {\rm Gal}(\mathbb{Q}(\zeta_{5})/\mathbb{Q}) \simeq (\mathbb{Z}/5 \mathbb{Z})^{\times} = \{1, 2, 3, 4\}である。演算表を以下に示す。

× 1 2 3 4
1 1 2 3 4
2 2 4 1 3
3 3 1 4 2
4 4 3 2 1

次に、このガロア群の部分群を具体的に求めてみる。ガロア群の位数が4なので、自明でない部分群の位数としてあり得るのは2のみである。そう思って上の演算表を見てみると、 H = \{1, 4\} \simeq \mathbb{Z}/2 \mathbb{Z}が部分群になっていることが分かる。

以上により、 {\rm Gal}(\mathbb{Q}(\zeta_{5})/\mathbb{Q}) \supset \mathbb{Z}/2 \mathbb{Z} \supset 1という部分群の列が得られた。これに対する中間体の列を考えるために、自明でない部分群 \mathbb{Z}/2\mathbb{Z} \mathbb{Q}自己同型群としてどのように振る舞うかを考えてみる。 \mathbb{Q}(\zeta_{5})の元は a + b\zeta_{5}+ c\zeta_{5}^{2} + d\zeta_{5}^{3} + e\zeta_{5}^{4} (a, b, c, d, e \in \mathbb{Q})と表すことができる。 {\rm Gal}(\mathbb{Q}(\zeta_{5})/\mathbb{Q})の元は \mathbb{Q}(\zeta_{5})に作用することで \zeta_{5}, \zeta_{5}^{2}, \zeta_{5}^{3}, \zeta_{5}^{4}を置換することになる。具体的な置換の仕方をHの元である1, 4について考えてみると、1は単位元なので恒等写像となる。一方、4は \zeta_{5}, \zeta_{5}^{2}, \zeta_{5}^{3}, \zeta_{5}^{4}をそれぞれ4乗する操作を表すので、 \zeta_{5}^{4}, \zeta_{5}^{3}, \zeta_{5}^{2}, \zeta_{5}へと移される。指数部分が演算表の値と一致しているところがポイントである。

ここで、Hによって不変となる \mathbb{Q}(\zeta_{5})/\mathbb{Q}の中間体Mを具体的に求めてみる。上記の考察から、4による置換では \zeta_{5} \zeta_{5}^{4}、及び \zeta_{5}^{2} \zeta_{5}^{3}が入れ替わることが分かる。そのため、Hの元による置換では \zeta_{5} + \zeta_{5}^{4}, \zeta_{5}^{2} + \zeta_{5}^{3}, \zeta_{5}\zeta_{5}^{4}, \zeta_{5}^{2}\zeta_{5}^{3}が変化しないことになる。今、 \zeta_{5}\zeta_{5}^{4} = \zeta_{5}^{2}\zeta_{5}^{3} = 1であるため、これらについては特に考える必要がない。 \alpha = \zeta_{5} + \zeta_{5}^{4}, \beta = \zeta_{5}^{2} + \zeta_{5}^{3}と置くと、 \beta = \alpha^2 - 2と書けるため、結局 \alphaが不変になることだけを考えればよい。すなわち、 M = \mathbb{Q}(\alpha)である。

Mをもう少し詳しく調べてみる。複素平面上での対称性を考えると、 1 + \zeta_{5} + \zeta_{5}^{2} + \zeta_{5}^{3} + \zeta_{5}^{4} = 0となるので、 \zeta_{5} + \zeta_{5}^{2} + \zeta_{5}^{3} + \zeta_{5}^{4} = \alpha + \beta = -1が言える。また、 \alpha\beta = \zeta_{5} + \zeta_{5}^{2} + \zeta_{5}^{3} + \zeta_{5}^{4} = -1である。よって解と係数の関係より \alpha, \betaを根に持つ2次多項式は以下のようになる。

 {
\displaystyle
\begin{eqnarray}
x^2  - (\alpha + \beta)x + \alpha\beta &=& x^2 + x -1 \\
                                       &=& \left(x - \frac{-1+\sqrt{5}}{2}\right)\left(x - \frac{-1-\sqrt{5}}{2}\right)
\end{eqnarray}
}

 \beta < \alphaより \alpha = \frac{-1+\sqrt{5}}{2}となる。よって M = \mathbb{Q}(\alpha) = \mathbb{Q}(\sqrt{5})だということが分かる。

これにより、ガロア拡大 \mathbb{Q}(\zeta_{5})/\mathbb{Q}の中間体とガロア群の部分群の間の対応は以下のようになる。

 {
\displaystyle
\begin{eqnarray}
&\mathbb{Q}(\zeta_{5})& &\supset& &\mathbb{Q}({\sqrt{5}})& &\supset& &\mathbb{Q}& \\
&1& &\subset& &\mathbb{Z}/2\mathbb{Z}& &\subset& &{\rm Gal}(\mathbb{Q}(\zeta_{5})/\mathbb{Q})&
\end{eqnarray}
}

5次方程式の可解性との関連

上の例をもう少し推し進めて、方程式の可解性との関連について考察してみる。ガロア理論の一番有名な帰結として、一般の5次方程式の解を代数的に求めることはできないというものがあるが、これはあくまで「一般の」5次方程式の話である。つまり、一部の「特殊な」5次方程式には解の公式が存在するのである。そしてガロア理論の真髄は、ある特殊な5次方程式に解の公式があるかどうかが、その方程式の最小分解体への拡大に対するガロア群が可解群かどうかを確かめることで分かるということである。

実は上の例で取り上げた \mathbb{Q}(\zeta_5)という体は、 x^5 - a^5 (a \in \mathbb{Q})という形の5次方程式の最小分解体になっている。先ほど {\rm Gal}(\mathbb{Q}(\zeta_{5})/\mathbb{Q}) \simeq (\mathbb{Z}/5 \mathbb{Z})^{\times}だということに言及したが、実はさらに (\mathbb{Z}/5 \mathbb{Z})^{\times} \simeq \mathbb{Z}/4\mathbb{Z}であることが知られている。これはアーベル群であるため、自動的に可解群となる。そのため、 x^5 - a^5は代数的に解くことができる。

上記方程式の解は当然 x = a \zeta_5^{i} (i = 0, 1, 2, 3, 4)であるが、ポイントはこのように解を四則演算とべき根で示すことができる*1のは、最小分解体への拡大に対するガロア群が可解群になっているからだという理論的な説明ができることである。

もっとも、これは最初から解が分かりきっている簡単な例であり、一般にはある方程式が与えられたとき、その最小分解体を求めることは簡単ではないと思われる。

総括

以上、ガロア理論を学んで得た知見を消化するために、いろいろと遊んでみた結果を書き記した。ガロア理論を理解するのは高校生以来の夢だったので、完璧でないにせよある程度イメージをつかむことができたのは非常に嬉しい。

世の中にはガロア理論以外にもわくわくするような理論が山ほどあると思うので、そういったものをこれからも地道に学んでいきたい。

参考

代数学2 環と体とガロア理論

代数学2 環と体とガロア理論

biteki-math.hatenablog.com

*1: \zeta_5は四則演算とべき根で表現できるため。

代数拡大、分離拡大、正規拡大そしてガロア拡大へ

今日は久々にソフトウェアエンジニアとしてではなく、日曜数学者としての記事を書いてみる。

実はここ数カ月、ずっと代数学の勉強をしている。代数学は以前雪江先生の本にチャンレンジして、見事に撃沈したので、今は2度目の挑戦中である。(懲りずにまた雪江先生の本を読んでいる。)

最近ついにガロア拡大体のあたりまで読み進めることができたため、本格的にガロア理論の中身に入る前に、一度これまでの知識をおさらいしてみようと思う。

代数学を学ぶ上での1つのマイルストーンとして、ガロア理論があることは言うまでもない。このガロア理論の主要な定理として、ガロアの基本定理が挙げられる。これは、ガロア拡大と呼ばれる体の拡大L/K*1があったときに、その中間体とガロア群の間に一対一の対応があるというものである。(私もつまみ食いした程度なので、まだこれくらいの理解度しかないのはあしからず。)

ガロアの基本定理を1つの目標と考えた時、群に対してはその部分群を、体に対してはその拡大体を考えることが重要である。今日のテーマはこの体の拡大のうち、いくつか重要なものを取り上げ、その具体例を考えることである。体とはざっくり言うと元の間に四則演算が成り立つような集合のことである。有理数全体の集合 \mathbb{Q}有理数体)、実数全体の集合 \mathbb{R}実数体)、そして複素数全体の集合 \mathbb{C}複素数体)などが有名である。

代数拡大

LがKの拡大体であるとする。任意の \alpha \in Lについて、Kの元が係数となるような多項式f(x)*2があり、 f(\alpha) = 0となるとき、LはKの代数拡大という。例えばK= \mathbb{Q} \alpha = \sqrt{2}の場合を考えてみる。 \alpha \notin \mathbb{Q}であるが、これを根に持つような \mathbb{Q}上の多項式は存在する。例えば f(x) = x^2 - 2なんかがそうである。そのため、 \mathbb{Q} \sqrt{2}を付け加えてできる体をLとすれば、これはKの代数拡大となる。こういう体のことを記号で \mathbb{Q}(\sqrt{2})と書いたりする。

ちなみに、 \sqrt{2}を根に持つような多項式で、最高次係数が1であるもののうち、 f(x) = x^2 - 2より次数が小さいものは存在しない。そのため、f(x)のことをK上の最小多項式と呼ぶ。

もう少し具体的にLについて考えてみよう。単に集合の元として \mathbb{Q} \sqrt{2}のみを付け加えてもこれは体にならないため(例えば乗法の逆元が存在しない)、付随していろいろな元が加わる。結果として、Lは以下のように表すことができる。

{ \displaystyle
L = \{a + \sqrt{2}b | a, b \in \mathbb{Q}\}
}

代数拡大でない例も考えてみる。例えば L = \mathbb{R}とすると、これは代数拡大ではない。なぜなら、 \pi \in \mathbb{R}を根に持つ多項式は、 \mathbb{Q}上には作れないからである。このように、代数拡大ではない体の拡大を超越拡大と呼ぶ。

分離拡大

L/Kが代数拡大であるとする。任意の \alpha \in LについてK上の最小多項式がKの代数閉包*3で重根を持たないとき、L/Kを分離拡大と呼ぶ。例としては、例えば上で考えた \mathbb{Q}(\sqrt{2})/\mathbb{Q}なんかは分離拡大になっている。実際、最小多項式の根は \pm \sqrt{2}であり、重根を持たない。

この分離拡大というやつはなかなかクレイジーである。なぜなら、代数拡大のうち、分離拡大でない例を見つけることが結構難しいのだ。

体には標数という概念があり、例えば標数pの体において、任意の元をp倍すると0になる*4。それに対して、例えば \mathbb{R}のように、元を何倍しても0にはならないような体の標数は0である。そして、標数0の体の代数拡大は必ず分離拡大になる。数学にあまり馴染みのない人間にとって、標数0の体というのは難しい議論の例を考える上で重宝するのだが、これが全て分離拡大になるのだとすると、分離拡大でない体とはどういうものか想像しづらくなるのだ。

しょうがないので標数が正の体について考えてみる。標数が正の体のうち、もっともイメージしやすいのが有限体である。これはその名の通り位数が有限の体のことである。「よし、有限体の代数拡大で分離拡大でない例を探してみよう」と思ったのも束の間、実は有限体の代数拡大も必ず分離拡大となるのだ。

では一体どんな体の拡大を考えれば、分離拡大でない例を見つけることができるのか?残された道は、標数が正であり、かつ位数が無限となる体だけである。実は、このような体の拡大の中には、確かに分離拡大でないケースが存在する。一番有名な例としては、 \mathbb{F}_2*5上の有理関数体 \mathbb{F}_2(x)における拡大 \mathbb{F}_2(x)/\mathbb{F}_2(x^2)が挙げられる。ここで、 x \in \mathbb{F}_2(x) \setminus \mathbb{F}_2(x^2)であるため、 f(X) = X^2 - x^2 \mathbb{F}_2(x^2)上既約な多項式である*6。しかし、 \mathbb{F}_2(x)上では f(X) = (X+x)(X-x) = (X - x)^2*7因数分解できるため、これは分離拡大ではない。

他にも何か良い例がないかと考えたのだが、結局上記のどこの教科書にも載っていそうな例しか分からなかった。どなたか他の例をご存知であれば教えて欲しい。

正規拡大

L/Kをやはり代数拡大であるとする。正規拡大を説明するために、K上の共役について述べておく。 \alpha \in LのK上の最小多項式において、同じく \beta \in Lもこの方程式の根だったとする。このとき、αとβはK上で共役であるという。一般に、βはα同様にLに含まれるとは限らないのだが、Lの元のK上の共役が全てLに含まれるとき、L/Kを正規拡大と呼ぶ。例としては、やはり代数拡大のところで取り上げた \mathbb{Q}(\sqrt{2})が挙げられる。証明はしないが、このケースでは \mathbb{Q}に加えた \sqrt{2}についてのみ、 \mathbb{Q}上の最小多項式の共役が \mathbb{Q}(\sqrt{2})に含まれるかを考えればよい。共役は - \sqrt{2}であり、これらはともに \mathbb{Q}(\sqrt{2})に含まれるため、 \mathbb{Q}(\sqrt{2}) / \mathbb{Q}は正規拡大となる。

正規拡大でない例も、分離拡大ほどではないが私のような素人には見つけるのが難しい。教科書に載っている例としては、 \mathbb{Q}(2^{\frac{1}{3}}) / \mathbb{Q}が挙げられる。

ガロア拡大

L/Kが代数拡大であるとき、L/Kがさらに分離拡大かつ正規拡大になっているとき、これをガロア拡大と呼ぶ。例はおなじみの \mathbb{Q}(\sqrt{2}) / \mathbb{Q}などである。



以上、駆け足で体の拡大について述べてみた。抽象数学と言えど、やはり具体例を考えることは重要である。本当は有限体の例などをもっと書いてみたかったが、ここで力尽きた。ガロア理論はまだまだこれからなので、理解が固まってきたら具体的なガロア群とガロア拡大の中間体の対応などを考えてみたいと思う。

*1:これはLがKの拡大体であることを意味する記号である。

*2:これをK上の多項式とか呼んだりする。

*3:Kの代数閉包とは、Kの拡大体であって、かつ代数閉体であるような体のことである。これを記号で \overline{K}と書く。代数閉体とは、自身の元を係数とする全ての多項式の根が、その体自身に含まれるような体のことである。例えば \mathbb{C}係数の多項式の根は全て \mathbb{C}自身に含まれる。

*4:確かそうだったはずだが、あんまり自信がない。

*5:位数が2の有限体。

*6:既約というのは、つまりこれ以上因数分解できないということである。

*7: \mathbb{F}_2上の多項式であるため、加算と減算の間に区別がない。