行列式を圏論的に定義したい、要望としては、行列式を外積代数と関連付けて扱いたい -- と、考えてみたのですが、「これがベスト」という定義には至りませんでした。いくつかの定義を提示します。それぞれに一長一短があります。
この記事で定義する行列式関手は次の4種です。
- EndDet0:EndVect→R
- EndDet1:EndVect→EndVect
- EndDetΛ:EndVect→EndVect
- SdDet:SdVect→SdVect
必要な線形代数の復習も適宜手短に入れます。肝心の外積代数の復習が入ってないのですが、Wikipediaの外積代数の項目がなかなかに力作です。
内容:
- 線形代数の基本的概念
- 実数を値とする行列式関手
- ユークリッド自己射を値とする行列式関手
- 最高次外ベキの自己射を値とする行列式関手
- 符号付き密度付きベクトル空間と符号付き体積
- 符号付き密度付きベクトル空間のあいだの射の行列式
- 符号付き密度付きベクトル空間の圏上の行列式関手
線形代数の基本的概念
圏の定義は知っているものとします。Cが圏のとき、EndC(A) := C(A, A), IsoC(A, B) := {f∈C(A, B) | fは同型射〈可逆射〉} と約束します。
ベクトル空間は、R上に有限次元なものだけを考えます。この記事の文脈内では、圏Vectを次のように定義します。
- (考えるベクトル空間の圏) = Vect := FdVectR = (R上の有限次元ベクトル空間の圏)
ベクトル空間Vの順序基底〈ordered basis〉とは、集合としての基底に全順序〈線形順序〉を入れたものです。次の3つの概念は密接に関係しています。
順序基底と写像 {1, 2, ..., n}→V は区別せずに同一視し、その全体を OrdBasis(V) とします。Rn→V の線形同型写像はフレーム〈frame〉と呼び、その全体を Frame(V) と書きます。Frame(V) := IsoVect(Rn, V) where n = dim(V) です。('where'は後からの追加説明を書くときに使うキーワード。)
全順序が付いた基底集合 A⊆V は、前段落で注意したように、{1, ..., n}→V ともみなします。これはまた、ベクトルのリスト a = (a1, ..., an) だとも言えます。このリスト({1, ..., n} からの写像)a に対して、線形写像 ↑a:Rn→V が一意に決まります。↑aを、aの引き上げ〈pull-up〉と呼ぶことにします。写像 a:{1, ...,n}→V のお尻(域側)をベクトル空間へと引っ張り上げる感じです。逆に、f:Rn→V に対する写像 ↓f:{1, ..., n}→V を、fの押し下げ〈push-down〉と呼びましょう。引き上げと押し下げは、次のような、随伴を形成する同型ペアです。
- Set({1, ...,n}, U(V)) Vect(Rn, V) where Rn = FreeVect({1, ..., n})
- → の向きが引き上げ、← の向きが押し下げ
ここで、U(V) は、ベクトル空間Vの線形構造を忘れた集合〈台集合〉で、Rn は集合 {1, ..., n} から生成された自由ベクトル空間〈free vector space〉とみなします。
この記事では、行列計算の知識を仮定しますが、「数を長方形に並べたもの」としての行列は登場させないことにします。行列に相当し、行列と同一視可能なものとして、Vect(Rn, Rm) の要素、つまり線形写像 Rn→Rm を考えます。このタイプの線形写像を「行列」と呼んでしまうのは抵抗があるので、ユークリッド線形写像〈Euclidean linear map〉、またはユークリッド射〈Euclidean morphism〉と呼ぶことにします*1。具体的な射としてユークリッド射を考えますが、その表現としての「数の長方形」には言及しません。
行列式〈determinant〉 det は、det:EndVect(Rn)→R という写像だとします。次の性質を満たします。
- α, β∈EndVect(Rn) に対して、det(α;β) = det(α)det(β)
- det(idRn) = 1
- αが可逆 ⇔ det(α) が可逆 ⇔ det(α) が0ではない実数
- α が可逆なら det(α-1) = det(α)-1
ここで、α;β は射(線形写像)の図式順結合記法で、α;β = βα です。det(α)det(β) は単なる実数の積です。EndVect(Rn) を、射の結合〈合成〉に関するモノイド、Rを掛け算に関するモノイドとみなしたとき、detはモノイドのあいだのモノイド準同型写像になります。
det:EndVect(Rn)→R は自然数 n (n = 0, 1, 2, ...)に依存するので、detn:EndVect(Rn)→R のように書くのが正確ですが、det = detn と省略します。det0 は、ゼロ空間 O = {0} の恒等射 idO に対して det(idO) = 1 だとします。
実数を値とする行列式関手
圏Cに対して、圏 EndC を次のように定義します。
- 対象: Obj(EndC) = |EndC| := |C|
- ホムセット: EndC(A, A) := EndC(A)
- ホムセット: A ≠ B のときは、EndC(A, B) := ∅
- 射の結合と恒等射は C と同じ。
EndC は C の部分圏になります。
C = Vect と置いて、EndVect を考えます。V ≠ W ならば EndVect(V, W) = ∅ なので、ホムセットは EndVect(V, V) だけを考えれば十分です。
dim(V) = n として、a:Rn→V はフレームだとします。Vのフレームは EndVect の射ではないかも知れませんが、これからの議論で必要です。f:V→V in EndVect として、フレームaによるfの行列式 deta(f) を定義しましょう。
- deta(f) := det(a;f;a-1)
右辺のdetは、ユークリッド射に対する通常の行列式です。状況は、次の可換図式のようです。
a, b:Rn→V が2つのフレームであるとき、b = ψ;a となるような ψ:Rn→Rn が存在します。もちろん、ψ = b;a-1 です。
このような ψ = b;a-1 を b/a と書くことにします。次が成立します。
- (c/b);(b/a) = (c/a)
- (a/a) = idRn
- (a/b) = (b/a)-1
- (b/a);a = b
反図式順記法を使っているときは、b/a より a\b がいいでしょう。例えば、a(a\b) = b となります。スラッシュ/バックスラッシュを使う記法は、分数計算が使えて便利ですが、記法の順序と非可換性に注意してください。
さて、deta(f) と detb(f) に差があるかどうかを見てみましょう。
deta(f) はフレーム a の選び方によらずに決まるので det(f) と書きます。det:EndVect(V, V)→R は、Vが何であっても定義できるので、次の関手を定義できます。
- EndDet0:EndVect(V, V)→R
ここで、矢印の右のRは、掛け算モノイドとしてのRを単対象の圏とみなした圏です。Rの唯一の対象を(何でもいいけど)0 とすると:
- V∈|EndVect| に対して、EndDet0(V) := 0
- f:V→V in EndVect に対して、EndDet0(f) := det(f)
このように定義した EndDet0:EndVect(V, V)→R が関手であることは容易に確認できます。これが第一の行列式関手〈determinant functor〉です。
ユークリッド自己射を値とする行列式関手
前節の EndDet0 では、関手の余域である圏は掛け算モノイドであるRを圏とみなした圏でした。EndDet1 では、EndDet0をわずかに変更して、EndDet1:EndVect→EndVect とします。次のように定義します。
- V∈|EndVect| に対して、EndDet1(V) := R
- f:V→V in EndVect に対して、EndDet1(f) := (det(f):R→R)
EndDet1(V) の定義では、Rを1次元のベクトル空間とみなすので、EndDet1(V)∈|EndVect| です。EndDet1(f) は、R→R という線形写像ですが、実数 det(f) は、掛け算することにより線形写像だとみなします。EndDet1(f) は、1次元ユークリッドベクトル空間のユークリッド自己射(自己射であるユークリッド射)です。
以上により、第二の行列式関手〈determinant functor〉が定義できました。第二の行列式関手は、EndVect上の自己関手〈endofunctor〉です*2。
最高次外ベキの自己射を値とする行列式関手
ベクトル空間 V (dim(V) = n)に対して、Λn(V) を、Vの最高次外ベキ〈the top exterior power of V〉と呼びます。これは、Vが何であっても1次元ベクトル空間になります。dim(V) = 0 のときも、Vの最高次外ベキ Λ0(V) はRになるので確かに1次元です。
関手 EndDetΛ:EndVect→EndVect を次のように定義します。
- V∈|EndVect| に対して、EndDetΛ(V) := Λn(V) where n = dim(V)
- f:V→V in EndVect に対して、EndDetΛ(f) := (det(f):Λn(V)→Λn(V))
EndDetΛ(V) の定義では、Vの最高次外ベキは1次元ベクトル空間なので、EndDetΛ(V)∈|EndVect| です。EndDetΛ(f) = det(f) は、スカラー倍する作用により線形写像 Λn(V)→Λn(V) だとみなします。
以上により、第三の行列式関手〈determinant functor〉が定義できました。第三の行列式関手も、EndVect上の自己関手〈endofunctor〉です。
[追記]
多様体の向きの定義のときに出てきた Λm(TM) (m = dim(M))というベクトルバンドルは、行列式直線バンドル〈determinant line bundle〉というそうです。
となると、ベクトル空間 V に対する Λn(V) (n = dim(V))はVの行列式直線〈determinant line〉と呼べばいいのでしょう。
[/追記]
符号付き密度付きベクトル空間と符号付き体積
Vをベクトル空間として、Λn(V) は最高次外ベキとします。最高次外ベキ Λn(V) は、Vが何であっても1次元ベクトル空間でした。ゼロではない線形写像 μ:Λn(V)→R を、V上の符号付き密度〈signed density〉と呼びます。符号付き密度μは、Λn(V) の標準双対空間〈canonical dual space〉の要素です; μ∈(Λn(V))*。ベクトル空間Vと符号付き密度μの組 (V, μ) を符号付き密度付きベクトル空間〈vector space with signed density〉と呼びます -- ぎごちない*3呼び名で恐縮ですが。
(V, μ) を、n次元の符号付き密度付きベクトル空間として、v = (v1, ..., vn)∈Vn をV内の平行体〈parallelogon〉とみなして、その符号付き体積〈signed volume〉vol(v) は次のように定義できます。
- vol(v) = vol(v1, ..., vn) := μ(v1∧...∧vn)
定義より、volはn重の交代複線形写像 V×...×V→R です。写像volの域であるn重のVである Vn = V×...×V には、モノイド Vect(Rn, Rn) が作用しています。この作用は、「数の長方形」としての行列を使うと比較的簡単に記述できますが、ユークリッド射だけを用いて定義するなら以下のようになります。
([追記]以下で、ベクトルのリストを Rn→Vn という写像とみなしていますが、Rn→V とみなしても結果は同じだし、そのほうが簡明でした。「余計なことをしてしまった」と思いますが、間違いでもないのでそのままにしておきます。[/追記])
ベクトルのリスト v = (v1, ..., vn)∈Vn を、Rn→Vn という写像とみなします。同じ記号をそのまま使って v:Rn→Vn と書けば:
- For ξ∈Rn, v(ξ) := (v1ξ1, ..., vnξn) ∈Vn
ベクトルのリスト v は、ときに応じて、R→V...V や Rn→V×...×V や Rn→V という写像とみなされます。この「みなし」が暗黙的に行われるし、記号も変えないので紛らわしいので要注意。この節の最後に補足説明を入れているので、混乱したら読んでみてください。
今は、v = (v1, ..., vn) を v:Rn→Vn とみなすと、ユークリッド射 α:Rn→Rn を前結合〈pre-composition〉できます。(α, v) α;v を、Vect(Rn, Rn)×Vect(Rn, V)→Vect(Rn, V) というモノイド左作用とみなします。反図式順記法なら、右作用 Vect(Rn, V)×Vect(Rn, Rn)→Vect(Rn, V) のほうが(記法として)自然でしょう。
Vn 上のR値交代複線形写像〈交代複線形形式〉である det は、ユークリッド自己射のモノイド Vect(Rn, Rn) = EndVect(Rn) の作用に対してどう反応するでしょうか? それは次の公式で与えられます。
- vol(α;v) = det(α)vol(v)
αによる前結合(という作用)が、det(α)による掛け算として反応します。外積代数ありき、ならば、これが行列式の定義だとも言えます(符号付き密度μの分の任意性がありますが)。これは、直感的には明らかそうですが、外積代数でマジメに計算しないと出てきません。詳細は割愛します。
ベクトル空間Vの要素からなる長さnのリスト(またはタプル)とは、直積 Vn の要素のことです。リストを写像とみなす場面と方法がたくさんあります。それらを列挙します。
- Vn Map({1, ..., n}, V)
右辺を圏論的に書けば、忘却関手をUとして、Set({1, ..., n}, U(V)) です。この同型は、同一視(イコール扱い)が多いと思います。
- Vn Vect(R, Vn)
これは、Vnの要素(集合を離散圏とみての対象)a をポインティング写像 a~ とみなす同型です。僕は格上げと呼んでいます(「圏論の計算を劇的に簡単にするための考察 (1) // 格上げ操作」参照)。このときの直積 Vn は、直和 V...V とみなすほうが適切でしょう。
- Vn Vect(Rn, V)
これは、随伴に伴う同型 Set({1, ..., n}, U(V)) Vect(FreeVect({1, ..., n}, V) です。この記事の最初の節で述べたように、a∈Set({1, ..., n}, U(V)), f∈Vect(FreeVect({1, ..., n}, V) に対して、引き上げ ↑a と押し下げ ↓f で同型を表します(この記事での記法)。
- Vn→Vect(Rn, Vn)
この節で述べた対応です。同型とは限りませんが埋め込みです。この対応を仮に (-)◇ で表すことにすると、a∈Vn に対して a◇:Rn→Vn です。↑a と a◇ の関係は次の可換図式で表されます。Σは、n個のベクトルの総和をとる写像です。
ベクトルの集合 {a1, ..., an}、リスト a = (a1, ..., an)、各種の写像 a~, ↑a, a◇、そして平行体のような幾何的イメージをいつも区別するのは煩雑過ぎますが、一度は区別して理解しておくことをおすすめします。
[/補足]
符号付き密度付きベクトル空間のあいだの射の行列式
(V, μ), (W, ν) を符号付き密度付きベクトル空間として、dim(V) = dim(W) = n だとします。f:V→W は任意の線形写像とします。リスト a = (a1, ..., an)∈Vn に対する集合 {a1, ..., an} は基底になっているとします。別な言い方をすると、a は順序基底とみなせて、引き上げ ↑a:Rn→V は同型射〈フレーム〉です。
順序基底 a に対して、deta(f) を次のように定義します。
- deta(f) := vol(f(a1), ..., f(an))/vol(a1, ..., an)
a = (a1, ..., an) は順序基底なので、分母の vol(a1, ..., an) = μ(a1∧...∧an) は0にはなりません。分子の vol(f(a1), ..., f(an)) = ν(f(a1)∧...∧f(an)) が0になることはあり得ます。deta(f) は、平行体とみなした順序基底 a の符号付き体積と、その平行体をfで移した〈写した〉平行体の符号付き体積との比です。
deta(f) は、順序基底 a に依存して定義されています。が、deta(f) は a の取り方によりません。それを確認しましょう。
f:V→W から誘導される写像 Vn→Wn を fmap(f) とします。'fmap'は一部のプログラミング言語で使われるキーワードです(もう、記号が尽きてきたので)。
- fmap(f)(v) = fmap(f)(v1, ..., vn) := (f(v1), ..., f(vn))
前節で説明したように、モノイド Vect(Rn, Rn) は、前結合により集合 Vect(Rn, Vn) に作用します。リスト v∈Vn を、Vect(Rn, Vn) の要素とみなした場合に、次の公式が成立します。
- For α∈Vect(Rn, Rn), fmap(f)(α;v) = α;(fmap(f)(v))
つまり、モノイド Vect(Rn, Rn) による左作用(書き方によっては右作用)が fmap(f) により保存されます。写像 fmap(f) が、モノイド作用に対して同変〈equivariant〉である、とも言います。
符号付き体積は、完全に同変ではありませんが、行列式 det を介しての同変と言えます。
- For α∈Vect(Rn, Rn), vol(α;v) = det(α)vol(v)
これらの、同変性を使うと、次の等式が出ます。
- vol(fmap(f)(ψ;a)) = det(ψ)vol(fmap(a))
これから、目的の等式が得られます。a, b はリストですが、順序基底/フレームともみなします。a を b に変換するユークリッド射は b/a と書きます。
- deta(f) = detb(f)
これで、f:V→W に対して、順序基底を指定せずに det(f)∈R が一意に定義できました。
符号付き密度付きベクトル空間の圏上の行列式関手
符号付き密度付きベクトル空間の圏をSdVectとします。SdVectの対象は符号付き密度付きベクトル空間ですが、射は何の制限も付けない任意の線形写像です。SdVectの対象は、平行体に対する体積測度(ただし符号付き)を備えたベクトル空間とみなせます。線形代数と測度論の中間に位置する存在物ですね。
圏SdVect上で定義された行列式関手 SdDet:SdVect→SdVect を定義しましょう。前節で定義した det(f) を使います。
- (V, μ)∈|SdVect| に対して、SdDet(V, μ) := (Λn(V), μ) where n = dim(V)
- f:V→W in SdVect, div(V) = dim(W) = n のとき、SdVect(f) = (det(f):Λn(V)→Λn(W))
- f:V→W in SdVect, div(V) ≠ dim(W) のとき、SdVect(f) = (0:Λn(V)→Λn(W))
説明を追加します:
- Vが何であれ、Λn(V) は1次元ベクトル空間です。1次元ベクトル空間の最高次外ベキは、その1次元ベクトル空間自身なので、Λ1(Λn(V)) = Λn(V) 。したがって、μ:Λn(V)→R は Λn(V) 上の符号付き密度となり、(Λn(V), μ) は符号付き密度付きベクトル空間です。
- 前節で定義した det(f) は実数ですが、スカラー倍作用により Λn(V)→Λn(W) とみなします。
- 次元が違うベクトル空間のあいだの写像 f:V→W where dim(V) = n, dim(W) = m に対しては、ゼロ写像 Λn(V)→Λm(W) を対応させます。
この定義が関手の定義になっているかは練習問題(という名の説明省略)。
関手SdDetは圏SdVect上の自己関手ですが、関手の余域圏を、1次元の符号付き密度付きベクトル空間の圏に制限することもできます -- そのほうが自然に感じる人もいるでしょう。
今定義した SdDet:SdVect→SdVect が汎用性があるとは思いますが、これが決定版だとは言いにくいですね。行列式関手は、用途に応じて選んで使うものみたいです。
*1:一般的なユークリッド対象については、「ユークリッド空間って何なんだろう?」、「奇妙なユークリッド空間とデカルト構造」参照。
*2:自己関手ですが、その像圏は非常に小さいので、余域の圏を小さく取り直すことができます。
*3:「ぎこちない」でしょ、と言われそうですが、僕の正しい日本語/正しい外来語に対する態度は「言葉は通じることが一番だいじ」「誤訳だろうが定着すれば立派な日本語」参照。