ここまで長らく有限体上の線形空間について考えてきた。本稿ではそのフィナーレとして、有限体上の線形空間の双対空間について考えてみる。
線形空間の双対空間
双対空間の定義をWikipedia[1]より引用する。
双対空間
この定義では体としか言っていないので、有限体でも問題なく意味を持つ。
双対基底
次に、双対基底の定義を同じくWikipedia[1]より引用する。
双対基底
が有限次元ならば、はと同じ次元を持つ。の基底 から双対基底と呼ばれる特別なの基底を定義することができる。それは上の線型汎函数の集合で、係数の選び方に依らず
を満たすものとして定義される(上付きの添字が冪を意味するものではないことに注意せよ)。
を満たすものとして定義される(上付きの添字が冪を意味するものではないことに注意せよ)。
これも特別な体に限定した定義にはなっておらず、有限体でも妥当な定義である。
線形空間と双対空間の間の同型
実数体や複素数体上の線形空間の場合、有限次元であればとは同型になる。これは有限次元の場合はとの次元が等しいことから明らかであり、有限体上の線形空間でも同様のことが言える。
具体例
ここまで確認したことを実際に計算してみよう。以下に上の3次元線形空間の双対空間や双対基底をsageを使って計算した例を示す。なお、プログラムの作成に当たってsageのドキュメント[2]のEXAMPLESを参考にした。
・計算プログラム
#!/usr/bin/env sage from sage.all import * def main(): V = FiniteRankFreeModule(GF(4), 3, name='M', start_index=1) print(f"V: {V}") basis = V.basis('e') print(f"basis: {basis}") print(f"V^*: {V.dual()}") dual_basis = basis.dual_basis() print(f"dual_basis: {dual_basis}") for i, e in enumerate(basis): for j, f in enumerate(dual_basis): print(f"f_{j+1}(e_{i+1}) = {f(e)}") if __name__ == "__main__": main()
・実行結果
% ./dual.py V: 3-dimensional vector space M over the Finite Field in z2 of size 2^2 basis: Basis (e_1,e_2,e_3) on the 3-dimensional vector space M over the Finite Field in z2 of size 2^2 V^*: Dual of the 3-dimensional vector space M over the Finite Field in z2 of size 2^2 dual_basis: Dual basis (e^1,e^2,e^3) on the 3-dimensional vector space M over the Finite Field in z2 of size 2^2 f_1(e_1) = 1 f_2(e_1) = 0 f_3(e_1) = 0 f_1(e_2) = 0 f_2(e_2) = 1 f_3(e_2) = 0 f_1(e_3) = 0 f_2(e_3) = 0 f_3(e_3) = 1
Sageでは線形空間ではなく自由加群に対して双対空間や双対基底を計算できるようだったので、そちらを使用した。実際、線形空間は(加群が久々すぎて言い切る自信がないが)自由加群の特殊なケースのはずなので、特に問題はない。
また、最後にいわゆる二重直交性を確かめてみたが、問題なく成立していることが見て取れる。