このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

圏論的線形代数とフレームの話

某所で圏論線形代数の話をしたのですが、いきなり圏論バキバキでは面食らうだろうと思い、次のような方針にしました。

  1. 慣用の用語・記法は尊重する。
  2. 部分集合という概念を使う。
  3. 有限次元ベクトル空間に限定する。
  4. 忘却関手を強調しない。

これは、常識的かつ穏健な態度だと思います。

しかし、言い方を換えれば中途半端な態度です。中途半端にはやはり弊害があります。この記事では、以下の方針に基づいて圏論線形代数の一部をまとめ直して、「 丸く収まらなかった基底とフレーム 」で述べた「フレーム」の解釈を再論します。

この記事の方針:

  1. 慣用の用語・記法は尊重しない
  2. 部分集合という概念を使わない
  3. 有限次元ベクトル空間に限定しない
  4. 忘却関手を強調する

内容:

準備と注意

ベクトル空間の係数体〈スカラー体 | 基礎体〉は実数体Rに固定して、以下、係数体には言及しません。ベクトル空間と線形写像の圏をVectとします。Setは集合圏です。

集合圏とベクトル空間の圏のホムセットを、次のようにも書きます。

  • For A, B∈|Set|, Map(A, B) := Set(A, B)
  • For V, W∈|Vect|, LinMap(V, W) := Vect(V, W)

次のような記号の乱用〈abuse of notation〉は非常によく使われます。

  • ベクトル空間 V = (V, +, ・) ←これは記号の乱用

ベクトル空間Vとその台集合〈underlying set〉を同じ記号で表しています。'+'は足し算ですが、ベクトル空間ごとに足し算記号を区別すること(例えば、'+V' と書く)はほぼありません。'・'はスカラー倍のつもりですが、この演算子記号はほとんど常に省略され、併置で代用されます。

記号 '+', '・' のオーバーロード(多義的使用)と '・' の省略は、まー許すとして、ベクトル空間とその台集合の同一視はやめます。次のように書きます。

  • ベクトル空間 V = (Und(V), +, ・)

'Und'は underlying set/map の最初の3文字です。Und(V) を V と書くこともあります。これは、underlying と underline をかけた駄洒落記法です。

線形写像 f:V → W in Vect を、単なる写像とみなしたものは、Und(f):Und(V) → Und(W) in Set と書き、写像〈underlying map〉といいます([追記]写像については、「忘却関手は難しい」に書いています。[/追記])。ベクトル空間と線形写像に対して定義された Und(-) は関手になります。

  • Und:VectSet

このUndが忘却関手〈forgetful functor〉です。

集合Aから自由ベクトル空間を生成する関手を FreeVect とします。

  • FreeVect:SetVect

与えられた集合Aから自由ベクトル空間を作る方法はいくつかありますが、Aの要素の形式的線形結合〈形式的一次結合 | formal linear combination〉の全体を台集合にする方法を採用しましょう。足し算とスカラー倍の定義は自明でしょう。

足し算とスカラー倍が自明なので、ついつい、「形式的線形結合の集合」と「それに足し算とスカラー倍を一緒にしたベクトル空間」を同一視してしまいがちです。圏論的に線形代数をやろうとすると、この同一視が落とし穴になります。同一視しちゃダメです。

Aからの形式的線形結合の集合(単なる集合!)のほうを LinComb(A) と書くことにして、自由ベクトル空間は次のように書きます。

  • FreeVect(A) := (LinComb(A), +, ・)

LinComb(A)∈|Set|, FreeVect(A)∈|Vect| なので、LinComb(A) と FreeVect(A) は所属する圏(生息地=アビタ)が違います。忘却関手を使って書けば:

  • Und(FreeVect(A)) = LinComb(A) in Set

FreeVectとUndの随伴性

関手 FreeVect:SetVect, Und:VectSet は随伴関手ペアです。もっと正確な言い方をすると、FreeVectとUndを構成素とする規準的〈canonical〉な随伴系が存在します。

FreeVectとUndが随伴関手ペアであることは、次のホムセット同型により記述できます。

  • For A∈|Set|, V∈|Vect|
    Vect(FreeVect(A), V) \stackrel{\sim}{=} Set(A, Und(V))

注意すべきは、このホムセット同型の族(AとVでインデックスされた族)が自然同型〈可逆自然変換〉になっていることです。が、今ここではあまり拘らないことにします。随伴に関する詳細は次の記事で解説しています。

随伴関手ペア(正確には随伴系)のホムセット同型を与える写像に名前を付けておきます。

  • For A∈|Set|, V∈|Vect|
    • linRestrictA,V:Vect(FreeVect(A), V) → Set(A, Und(V))
    • linExtA,V:Set(A, Und(V)) → Vect(FreeVect(A), V)

linRestrict, linExt は次のように定義されます。

  • linRestrictA,V := λf∈LinMap(FreeVect(A), V).(linEmbedA;f)
    • linEmbedA := λa∈A.([a])
      [a] は、要素aに対応する形式的線形結合の“単項式”あるいは“形式的シンボル”
  • linExtA,V := λψ∈Map(A, Und(V)).(λx∈LinComb(A).(Σ xaψ(a)))

λx∈LinComb(A).(Σ xaψ(a)) の部分をもっと詳しく丁寧に書けば:


\lambda\, (x = \stackrel{\scriptsize formal}{\sum}_{a \in A}x_a\cdot [a]) \in LinComb(A).(\\
\:\:\:\:  \stackrel{\scriptsize actual}{\sum}_{a \in A} x_a \cdot \psi(a)
\\)

ここで、 \stackrel{\scriptsize formal}{\sum} は形式的和(ナカグロのスカラー倍も形式的スカラー倍)、一方の \stackrel{\scriptsize actual}{\sum} はベクトル空間内の実際の和(ナカグロのスカラー倍も実際のスカラー倍)です。Aが無限集合でも、和は有限和です。

linExtは、集合のあいだの写像 ψ:A → Und(V) を線形写像に拡張する働きを持つ関数(プログラミング的に言えば総称高階関数)です。次の略記(右肩にニョロ)を導入します。

  • ψ~ := linExtA,V(ψ)

略記だと、linExtA,V の下付き添字の情報は落ちます。「短く書ける ←→ 情報が落ちて曖昧になる」がトレードオフの関係にあります。

写像の独立性、生成性、基底性

通常の線形代数では、ベクトル空間Vの台集合の部分集合 A⊆Und(V) に対して、「Aが線形独立である/Aが生成系である/Aが基底である」という概念を定義します。台集合の部分集合という概念を圏論的に扱うときは、包含写像 inclUnd(V)A:A → Und(V) in Set に置き換えて考えるのが定石です。

今ここでは、「線形独立である/生成系である/基底である」という概念を、部分集合ではなくて写像に対して定義して、その特別な場合として包含写像が「線形独立である/生成系である/基底である」状況を考えることにします。

線形代数の話をしている文脈では、線形独立を単に独立ということにして、形容詞と名詞化された形容詞(性質の名前)を次のように決めます。

形容詞 名詞化された形容詞
独立{な}?〈independent〉 独立性〈independence | independency〉
生成{的}?〈generative | generating〉 生成性〈generativeness | generating property〉
基底{的}?〈basis〉 基底性〈basis property〉

basis は名詞ですが、無理にでも形容詞として使います -- 慣用の用語・記法は尊重しないし、なんなら、自然言語としての正書法も尊重しない方針なので。

形容詞である「独立/生成的/基底的」は、部分集合ではなくて写像にかかります。

  • ψ:A → Und(V) in Set独立 :⇔ ψ~:FreeVect(A) → V in Vect単射
  • ψ:A → Und(V) in Set生成的 :⇔ ψ~:FreeVect(A) → V in Vect全射
  • ψ:A → Und(V) in Set基底的 :⇔ ψ~:FreeVect(A) → V in Vect全単射〈双射〉

より圏論的言葉づかいをしたいなら、「単射全射全単射」は「モノ射/エピ射/同型射」といいます。

「独立/生成的/基底的」な写像からなる集合を次のように定義します。

  • IndepMap(A, V) := {ψ∈Map(A, Und(V)) | ψは独立}
  • GenMap(A, V) := {ψ∈Map(A, Und(V)) | ψは生成的}
  • BasisMap(A, V) := {ψ∈Map(A, Und(V)) | ψは基底的}

「独立/生成的/基底的」をベクトル空間の台集合の部分集合に対して使いたいときは:

  • A⊆Und(V) が独立 :⇔ inclUnd(V)A:A → Und(V) in Set が独立
  • A⊆Und(V) が生成的 :⇔ inclUnd(V)A:A → Und(V) in Set が生成的
  • A⊆Und(V) が基底的 :⇔ inclUnd(V)A:A → Und(V) in Set が基底的

多義語「フレーム」の解釈

フレーム〈frame | 標構〉に関しては、次の記事で議論しています。

  1. ベクトル空間の基底とフレームは違う
  2. 基底とフレーム、丸く収まる妥協案
  3. 丸く収まらなかった基底とフレーム

過去記事のタイトルを見てだいたい分かるように、「基底」「フレーム」という言葉の色々な解釈の妥協案を探したがうまくいかなかった、という経緯があります。

うまくいかないのも致し方ないかも知れません。現時点での僕の認識だと、「フレーム」と呼ばれる可能性がある写像が8種類、「フレーム」と呼ばれる可能性がある集合が4種類、合計で10種類あります。10種類の意味に全部別な語を割り当てるのも無理だし、文脈からどの意味かを判断するのも難しいでしょう。

有限次元ベクトル空間に関して「フレーム」と呼ばれる可能性がある8種類の写像を一覧表で列挙しましょう。表内で使われている言葉と記号は次のとおりです。

  1. V は有限次元ベクトル空間で、dim(V) = m 。
  2. I と A は有限集合で、その基数〈cardinality〉は k, m 、 k ≦ m 。
  3. InjLinMap は、ベクトル空間のあいだの単射線形写像の全体を表す。
  4. IsoLinMap は、ベクトル空間のあいだの全単射〈同型な〉線形写像の全体を表す。
  5. インデックス付けとは、任意の単射写像 I → Und(V) 。
  6. 番号付けとは、集合 I が番号の集合であるインデックス付け。
  7. 以下の表の欄には集合(写像の集合)が書き込んであり、その集合の要素(写像)が「フレーム」と呼ばれる可能性がある。

一覧表:

一般的な単射 基底的な単射
一般的インデックス付け IndepMap(I, V) BasisMap(A, V)
番号付け(特別なインデックス付け) IndepMap({1, ..., k}, V) BasisMap({1, ..., m}, V)
インデックス付けの線形拡張 InjLinMap(FreeVect(I), V) IsoLinMap(FreeVect(A), V)
番号付けの線形拡張 InjLinMap(FreeVect({1, ..., k}), V) IsoLinMap(FreeVect({1, ..., m), V)

次に「フレーム」と呼ばれる可能性がある4種類の集合の一覧表です。いずれも、上の表の写像の像〈image〉となる集合です。欄には“集合の集合”が書き込んであり、その“集合の集合”の要素(集合)が「フレーム」と呼ばれる可能性があります。Pow はベキ集合を表します。

一覧表:

一般的な単射の像 基底的な単射の像
インデックス付け {ψ(I)∈Pow(Und(V)) | ψ∈IndepMap(I, V)} {ψ(A)∈Pow(Und(V)) | ψ∈BasisMap(A, V)}
番号付け {ψ({1, ..., k})∈Pow(Und(V)) | ψ∈IndepMap({1, ..., k}, V)} {ψ({1, ..., m})∈Pow(Und(V)) | ψ∈BasisMap({1, ..., m}, V)