有限体のことを分かったつもりでいました
有限体には位数が素数のものとそうでないもの、つまり位数が素数冪となるものがある。前者は素数を用いて
を考えればよいので簡単だが、後者はちょっとだけややこしい。とは言っても、位数が
なら適当に
上の
次既約多項式
を持ってきて
とすればいいんでしょ?と、その程度の認識だった。それで、
となるような
によって具体的な元が
みたいに書けるんでしょ?と、それで分かったつもりになっていた。
ところが、最近になっていろいろと分かっていないことがあることに気づいた。それは具体的には以下の3点である。
- 既約多項式の選択の仕方によらず
は
の生成元になると思っていたが、その理解は正しいのか?
- 既約多項式の根として適当に
を選んでいるが、既約多項式の根は一つとは限らない。これまで根の選択方法について考えたことがなかったが、適当に選んでしまって大丈夫なのか?
の元の
上の最小多項式の次数はどうなるのか?特に、次数が
より大きくなることはあり得るのか?
本稿ではこれらの疑問の答えを順に解き明かしていく。以下ではであるとする。
疑問1:既約多項式の根は常に
の生成元になるのか?
必ずしもそうなるとは限らない。そのような性質を満たす多項式を原始多項式と呼ぶ。逆に言えば、が原始多項式なら
の根
が
の生成元になる。これは実際に例を見れば一目瞭然なので、以下で見てみよう。なお、例に使った多項式は[1]を参考にした。
原始多項式の例
Sageでを特別な引数なしで生成すると、既約多項式として
が選ばれる。これは原始多項式である。実際、多項式の根aの冪を順番に計算すると15乗して初めて1になることが分かる。
sage: F.<a> = GF(16) sage: F.modulus() x^4 + x + 1 sage: F.modulus().is_primitive() True sage: for i in range(1, len(F)): ....: print(f"{i:<2}: {a**i}") ....: 1 : a 2 : a^2 3 : a^3 4 : a + 1 5 : a^2 + a 6 : a^3 + a^2 7 : a^3 + a + 1 8 : a^2 + 1 9 : a^3 + a 10: a^2 + a + 1 11: a^3 + a^2 + a 12: a^3 + a^2 + a + 1 13: a^3 + a^2 + 1 14: a^3 + 1 15: 1 sage:
原始多項式ではない既約多項式の例
今度はを
を指定して生成してみる。これは原始多項式ではない。実際、多項式の根aの冪を順番に計算すると5乗した時点で1になることが分かる。
sage: P.<x> = GF(2)[] sage: F.<a> = GF(16, modulus=x^4 + x^3 + x^2 + x + 1) sage: F.modulus() x^4 + x^3 + x^2 + x + 1 sage: F.modulus().is_primitive() False sage: for i in range(1, len(F)): ....: print(f"{i:<2}: {a**i}") ....: 1 : a 2 : a^2 3 : a^3 4 : a^3 + a^2 + a + 1 5 : 1 6 : a 7 : a^2 8 : a^3 9 : a^3 + a^2 + a + 1 10: 1 11: a 12: a^2 13: a^3 14: a^3 + a^2 + a + 1 15: 1 sage:
疑問2:既約多項式の根の選び方はどうすればよいのか?
これは適当でよい。次既約多項式
の根は全て
に含まれており、かつどれを選んでも本質的には同じ有限体が得られる。
なぜそうなるのかをもう少し説明してみる。簡単に言えば以下の定理が成り立つからということになる[2]。
これより、拡大は正規拡大だと言える。今はあまり関係ないが、有限体の拡大は必ず分離拡大になるので、結局ガロア拡大になる。
例
理論的には分かった気持ちになったが、例も見ておこう。以下ではによって生成される有限体
を考える。
が
上既約であることは0, 1, 2を代入して0にならないことから分かる。
根の一つをと名付けると、この多項式は
と因数分解できる。と、いきなり言われてもホンマかいなという気持ちになるかもしれないので、以下で確かめておく。
このようにして構成したの元を具体的に書き出してみると以下のようになる。
ここでと置く。すると、
の元は以下のように書ける(分かりやすさのために並びは上述のものと対応するようにした)。
このようにを使った表現は単に
を使った表現の記号を
に置き換えただけという形になっており、明らかに体として同じ構造を持っていることが分かる。
また、実はであるため、
と書いても同じである。これも形式的には記号を置き換えただけになっていて、
と
の綺麗な対称性が見て取れる。
疑問3:有限体の元の最小多項式の次数はどうなるのか?
これは次以下になる。もっと言うと、任意の
について
上の最小多項式の次数は
を割り切るような整数となる。
この事実に関してはスパッと証明を書いてくれている文献を見つけられなかったので、AIの助けを借りつつ自分で考えてみた。
まず、を
に添加した体
を考える。このとき、体の拡大
および
の拡大次数の間には以下のような関係がある。
ここで、なのは良いだろう。問題は
の方だが、これは
の
上の最小多項式
の次数に等しくなる。この点さえ納得できれば冒頭で述べた結果を得られるので、この点について詳しく見ていく。
という準同型を考える。
となるので、準同型定理より以下が成り立つ。
体の有限次拡大は代数拡大になるので、拡大は代数拡大である(この事実の証明は本[2]などを参照)。これより
は
上代数的なので
となる(この事実の証明も本[2]などを参照)。よって以下の式が成り立つ。
の次数を
とすると、
は
を基底とする
上の
次ベクトル空間になるので、結局
となる。よって
となる。証明終わり。
例
例としての各元の最小多項式を以下に示す。次数が1, 2, 4のいずれかになっており、ここまで説明してきた内容と合致することが分かる。
sage: F.<a>=GF(16) sage: for i in range(1, len(F)): ....: print(f"{str(a**i):<20}: {(a**i).minpoly()}") ....: a : x^4 + x + 1 a^2 : x^4 + x + 1 a^3 : x^4 + x^3 + x^2 + x + 1 a + 1 : x^4 + x + 1 a^2 + a : x^2 + x + 1 a^3 + a^2 : x^4 + x^3 + x^2 + x + 1 a^3 + a + 1 : x^4 + x^3 + 1 a^2 + 1 : x^4 + x + 1 a^3 + a : x^4 + x^3 + x^2 + x + 1 a^2 + a + 1 : x^2 + x + 1 a^3 + a^2 + a : x^4 + x^3 + 1 a^3 + a^2 + a + 1 : x^4 + x^3 + x^2 + x + 1 a^3 + a^2 + 1 : x^4 + x^3 + 1 a^3 + 1 : x^4 + x^3 + 1 1 : x + 1 sage:
まとめ
本稿では私が有限体について理解が甘かった部分について調べ直した結果を紹介した。基本的なことほど分かったつもりになっていると怖いということを久々に思い出した。
参考
[1] qiita.com
[2] www.nippyo.co.jp ※今から購入される場合は第2版を買われるのが良いだろう。