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

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

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

参照用 記事

ベクトルと行列の圏論的な解釈

ベクトルと行列を素朴に定義すると、次のようなものです。

スカラーを順番に並べる*1ことを「ベクトル構成」、スカラーを縦横(2次元的)に並べることを「行列構成」と呼ぶと、ベクトル構成はモナドになり、そのクライスリ圏は行列構成により作られた圏に一致します。このことは、「ベクトルを並べたら行列になる」という事実に対応します。

ベクトル構成と行列構成の関係を調べてみます。後にいくに従って話が雑になってます、あしからず。

内容:

事前に決めること

スカラーを1次元的、または2次元的に並べたもの」という素朴な意味でのベクトル・行列を考える際に、次のことを決める必要があります。

  • スカラースカラーとして何を採用するか。
  • 添字集合類: 添字の集合はどうするか。

スカラー

スカラーを並べる構成」で圏を作りたいという目的なら、スカラー系は体である必要はありません。環でさえなくてもよくて、半環で十分です。非可換半環も使えますが、話が若干面倒になるのでスカラー系は零因子を持たない可換半環にしておきます。

具体的には、次の例を考えましょう。

  1. 二値ブルー代数の半環 B
  2. 自然数の半環 N
  3. 自然数に無限大を付け足した半環 N+{∞}
  4. 実数の半環 R
  5. 非負実数のmax-plus代数 Pmax-plus

非負実数のmax-plus代数は、エキゾチック代数の一例で、「零の概念とmax-plus半環の紹介」で扱っています。定義だけ書くと:

  1. 台集合は P = {x∈R | x ≧ 0}
  2. 足し算は max(x, y)、加法中立元は0。(ゼロは0)
  3. 掛け算は x + y、乗法中立元は0。(イチは0)

今出したPmax-plusには∞を入れてないので、加法吸収元、乗法吸収元はありません。+ が掛け算で x + y = 0 ⇒ x = 0 and y = 0 なので、零因子を持たない半環です。

添字集合類

ベクトルや行列の成分を添字(インデックス)で表示するとき、添字の集合が必要です。添字集合の集まり(それは集合とは限らない)の取り方は色々ありますが、次の4種に限ることにします。

  1. NatN = {0, 1, 2, ...} と同型となる、|Set|の部分類(すぐ下に説明)
  2. Fin : すべての有限集合の集まり。
  3. Omega : すべての有限集合とすべての可算無限集合の集まり。
  4. Any : すべての集合の集まり。Any = |Set|

NatNの関係は次のとおりです。

自然数 集合
0 {}
1 {1}
2 {1, 2}
3 {1, 2, 3}
n {1, 2, 3, ..., n}

記号と用語の使い方

次の記号を使います。

  • K : 零因子を持たない可換半環、ここでは、BNN+{∞}、RPmax-plusのどれか。
  • U : 添字集合類、ここでは、NatFinOmegaAnyのどれか。

この記事内では、半環とは零因子を持たない可換半環のことです。半環上の加群(半加群)をベクトル空間と呼びますが、通常の意味のベクトル空間(体上の加群ではありません。注意してください!

添字(インデックス)の集合をA, B、ベクトルをu, v、行列はs, tなどの文字を使って表すことにします。

何をするのか

冒頭でも言ったように、行列は「ベクトルのベクトル」と見なせること、行列も一種のベクトルであることなど、よく知られた事実を圏論的に説明してみます。この定式化の効能は、次の節に挙げるような事例達を統一的に理解できることです。同じ枠組みでさらなる一般化も出来るでしょう。

半環Kと添字集合の集まりUが決まれば、行列の圏MatK(U)は簡単に定義できます。特に、MatK(Nat)は、通常の行列圏MatKと圏同型(圏同値より強い)です。MatK(Nat) ⊆ MatK(Fin) ですが、MatK(Nat)はMatK(Fin)の骨格であり、MatK(Nat)とMatK(Fin)は圏同値です。同様に、MatK(Nat∪{N})はMatK(Omega)の骨格です。

ベクトル構成はちょっと面倒で、自由ベクトル空間を作る関手VKを集合圏Set上で構成します。集合圏を使うのは、関手VKを自己関手にしたいからです; VK:VK→VK。自己関手でないとモナドの定義がうまくいきません。

関手VK上にモナドを構成して、そのクライスリ圏Kl(Set, VK) を作ります。その後で、クライスリ圏の対象類をUに制限した充満部分圏を作ると、U上の「ベクトルのベクトル」の圏が出来ます。

こうしてみると、モナドを使った構成は、柔軟性と簡易性に欠けますね。アルテンキルヒ等の相対モナド(relative monad)を使うといいかも知れないですが、相対モナド、理解してないし。

余談ですが、ベクトルの有限和を無限和に拡張したいときも、モナド構成は色々と痒いところがあって、“パラメータ付きのモナドもどき”が欲しくなったりします。モナド概念は用途により不十分なところがあるようです。

行列構成もベクトル構成も、集合圏ベースで具体的に定義されるので、「ベクトルのベクトル」が行列になることは具体的に示せます。必要なことはカリー化/反カリー化による関数空間の同型で Fun(A, Fun(B, K)) \stackrel{\sim}{=} Fun(A×B, K) が基本です。これに、関数の台(サポート)の大きさ(基数)の評価が伴います。

ベクトルと行列の圏の事例

半環Kと添字集合類Uの選び方で色々な具体例が得られます。

半環K 添字集合類U 得られる圏
B Fin 有限集合上の関係圏
B Any 有限分岐非決定性写像の圏
N Any 有限バッグ(マルチセット)と線形写像の圏
N+{∞} Omega 台有限で高々可算なバッグと線形写像の圏
R Nat 通常の実数係数の行列の圏
Pmax-plus Fin エキゾチックな行列の圏、最大値問題の状況設定

今回は足し算に有限和しか考えてないので、一般的な関係圏Relなどを定義できませんが、適当な条件を満たす無限和を考えればRelも同じ枠組みで記述できます。

ベクトル構成

導入として、あるいは参考のために、「随伴の枠組み」を紹介します。しかし、後述のもっとインフォーマルで具体的な方法でもベクトル構成はできます。

半環Kに対して、K係数のベクトル空間(半加群)の圏をVectKとします。VectK線形代数(半線形代数)の世界で、K-ベクトル空間と足し算・零を保存する写像からなります。VectKには、自由ではないベクトル空間がたくさん含まれているかも知れません。例えば{0, 1, 2, ∞}は、1つの生成元を持つN上のベクトル空間の構造が入ります。

我々の目的では、VectKの全体が必要なわけではなくて、欲しいのは、具体的な基底を持つ自由ベクトル空間だけです。FK : SetVectK を、自由ベクトル空間を作る関手、U:VectKSet を台集合を対応させる忘却関手だとします。

「自由と忘却」のペアなので、VK(A) := U(FK(A)) として、モナドの台関手VKが作れます。VKSet上の自己関手ですね;VK:SetSetモナドの乗法と単位も、随伴の構造から作れます。

以上が、「自由と忘却」の関手ペアからモナドを作る方法ですが、随伴の枠組みを使わなくても、Set上で直接VKを具体的に定義できます。


Fun(A, K)を、AからKへの関数(写像)f:A→ K の集合とします。Fun(A, K)の部分集合Funfin(A, K)を次のように定義します。

  • Funfin(A, K) = {f:A→K | {x∈A | {f(x) ≠ 0}が有限集合}

集合{x∈A | f(x) ≠ 0}を、関数(写像)fのサポート(台)と呼び、Supp(f)と書きます。Supp(f) が有限という条件を、fの有限性条件と呼ぶことにします。有限性条件は、「サポートの基数」に関する条件ですが、一般にサポートのサイズをちゃんと考えることは重要です。

さて、VK(A) := Funfin(A, K) と定義します。これだけだと、VK はまだ関手ではないので、f:A→B に対する VK(f):VK(A)→VK(B) を定義します。

与えられた v:A→K (v∈VK(A))に対して、w:B→K (w∈VK(B))を次のように定義します。

  • w(b) := Σ(a∈A, f(a) = b | v(a))

これは、点bに対するfの逆像集合 f-1(b) ⊆ A の上でfを総和した値なので、次のようにも書けます。

  • w(b) := Σ(a∈f-1(b) | v(a))

vのサポートは有限なので、uはAの任意の部分集合に対しても総和可能です。したがって、総和 Σ(a∈f-1(b) | v(a)) は確定した値を持ち、w(b) がwell-definedになります。bは任意のBの要素なので、B上でwが定義されました。

このようにして定義したwを、VK(f)(v) とします。つまり、

  • VK(f)(v) := λb∈B.Σ(a∈f-1(b) | v(a))

あるいは、

  • VK(f) := λv∈VK(A).λb∈B.Σ(a∈f-1(b) | v(a))
  • VK := λf:A→B.λv∈VK(A).(λb∈B.Σ(a∈f-1(b) | v(a)))

任意の集合 A, B と f:A→B に対して、VK(f:A→B) : VK(A)→VK(B) が定義できました。次が成立ます。

  • VK(f;g : A→C) = VK(f:A→B) ; VK(g:B→C)
  • VK(idA:A→A) = idX where X = VK(A)

つまり、 VKは圏Set上の自己関手となります。このVKを、スカラー半環K上のベクトル構成関手と呼ぶことにします。VKで作られるベクトル空間は自由ベクトル空間に限りますが、「スカラーを並べたもの(の全体)」だけを考えるなら、VK(A) の形のベクトル空間だけで十分です。集合Aは、ベクトル空間VK(A)の標準基底になります。


[追記]

自由ベクトル空間VK(A)の要素であるベクトルvの表記って、けっこう悩みます。特にAが無限のとき。以下にひとつの案。

a∈A に対して“ケットベクトル”|a>を次のように定義します。

  • |a>(x) := (if x = a then 1 else 0)
a>は、点aだけが台(サポート)となるディラック関数です。すると、v∈VK(A) を v = Σa(v(a) a>) と書けます。v(a)のaを上付きにして v = Σa(va a>)、上付きと下付き(じゃなくて真ん中だけど)の添字があるのでΣを省略すると(アインシュタイン・ルール)、v = va a>。

f:VK(A)→VK(B) が線形なら、f(v) = f(va|a>) = vaf(|a>) = Σa(vaf(|a>)) と書けます。fの記述にはf(|a>)が分かればいいので、f(|a>) = Σb(r(a, b)|b>) (b∈B)と成分表示。添字のアインシュタイン・ルールを適用したいので r(a, b) = rba と書いて、f(|a>) = rba|b>。これを使って、

  • f(v) = f(va|a>) = vaf(|a>) = varba|b>

[/追記]

クライスリ射とクライスリ結合

関手VKのクライスリ射を定義します。A, Bを集合として、A→VK(B) の形の写像VKのクライスリ射と呼びます。クライスリ射は、ベクトル空間に値を取ると考えます。つまり、VK(B)にベクトル空間の構造を考えています。

クライスリ射 f:A→VK(B) に対して、f^:VK(A)→VK(B) を定義しましょう。

  • (f^(v))(b) := Σ(a∈A | v(a)f(a))

ここで、v(a)f(a) はスカラー v(a)∈K とベクトル f(a)∈VK(B) の積(スカラー乗法)です。v(a)のサポートが有限なので、v(a)f(a) のサポートも有限で総和が定義可能です。f^の定義の仕方から、f^が線形であることが分かり、f^はVectKの射と解釈できることが分かります。

2つのクライスリ射 f:A→VK(B), g:B→VK(C) があるとき、f#g := f;g^ として定義される射に対する演算 # をクライスリ結合と呼びます。クライスリ恒等 kidA:A→VK を、自由ベクトル空間の基底としての埋め込みで定義すると、クライスリ射、クライスリ結合、クライスリ恒等が圏を形成することが分かります。こうして作った圏をVKK(Vectorial Kleisli)と書くことにします。

以上の定義は、モナドのクライスリ圏を、モナドの形式的な定義をすっ飛ばして具体的に与えたことになります。モナドの定義については、「モナドの定義とか」あたりに書いてあります。

ベクトルの計算をするだけなら、モナドの定義を知らなくても大丈夫です。ここで重要なのは、AからBへのクライスリ射が、「B添字台有限ベクトルのA添字(無限台も許容な)ベクトル」になっていることです。B添字に関しては有限性条件が付くことに注意してください。

行列構成

次に、添字集合の集まりU上のK係数行列圏を定義しましょう。U上のK係数行列圏をMatK(U)と書くことにします。これは長ったらしいので、以下、U, Kは固定したとして、M := MatK(U) と略記もします。

Mの対象類は、Uと同じです。

  • |M| = U

Mの射は、ホムセットごとに定義します。A, B∈M に対して、M(A, B) = MatK(C)(A, B) は次にように定義します。

  • M(A, B) := {r∈Fun(A×B, K) | 各aを固定して λb∈B.r(a, b) は有限性条件を満たす}

以上で、Mの対象類とホムセットが定義できました。ホムセットの要素が射ですが、射の結合は次のように定義します。

  • r∈M(A, B), s∈M(B, C) に対して、r;s = t、t∈M(A, C) は: t(a, c) := Σ(b∈B | r(a, b)s(b, c)) 。

この定義がwell-definedであることは次のようにして分かります。

  1. aを固定したときの“列ベクトル” r(a, b) はbに関する有限性条件を満たす。
  2. 従って、任意の c∈C に対して、r(a, b)s(b, c) も有限性条件を満たす。
  3. (b∈B | r(a, b)s(b, c)) が有限性条件を満たすので、その総和は確定する。
  4. すべての a∈A、c∈C に対して、t(a, c) が定義される。

r;sは、演算の順序が逆(; は図式順結合)なだけで通常の行列の積の性質を満たします。

A∈|M| に対する恒等射は、次の単位行列とします。

  • idA(a, a') = if a = a' then 1 else 0

射の結合に関する結合律と単位律は、行列の積の性質から出ます。

ベクトル構成と行列構成の関係

行列の圏MatK(U)とベクトル構成から作ったクライスリ圏VKKを比較しましょう。まず、VKKの対象類はAny = |Set| なので、Uに制限して、その結果をVKK(U) とします。|VKK(U)| = U である以外は元の圏VKK(U)と何も変わりません。

MatK(U)とVKK(U)が同型な圏なのは、個々の具体例ではほぼ直感的に把握していると思います。実際に、MatK(U)→VKK(U) という同型関手は以下のように与えられます。

まず、|MatK(U)| = |VKK(U)| = |U| なので、Uの恒等写像を、関手の対象部分として採用します。

A, B∈|U| に対して、MatK(U)(A, B) \stackrel{\sim}{=} VKK(U)(A, B) が示せて、この同型が圏の構造を保つことを示せばいいわけです。次の同型はカリー化/反カリー化から出ます。

  • Fun(A×B, K) \stackrel{\sim}{=} Fun(A, Fun(B, K))

M(A, B) ⊆ Fun(A×B, K) と Fun(A, Funfin(B, K)) ⊆ Fun(A, Fun(B, K)) は定義より明らかです。行列に関する有限性条件を考慮すれば、カリー化/反カリー化は次の同型を与えます。

  • M(A, B) \stackrel{\sim}{=} Fun(A, Funfin(B, K))

この同型が圏の構造を保つことは、面倒ですが難しくはないでしょう。

幾つかの一般化

自由ベクトル空間の構成は有限和を使っているので、有限性条件は付きまといます。Kが無限和を持つなら有限性条件を気にする必要がなくなります。Kが完備(任意の基数に対して総和可能)なとき、有限性条件を外して、VK(A) := Fun(A, K) と定義できます。こうすると、より簡単にMatK(U)とVKK(U)の同型が示せます。

添字集合は単なる集合として議論しましたが、何らかの意味の積分概念が持ち込めるならば、総和を積分に変えてほぼ同じ構成が可能です。とは言っても、当然に話は難しくなります。クライスリ圏の構成もそのままでは通用しないでしょう。ジリィ・モナドと対応する確率関係の圏(クライスリ圏に相当)がヒントになるのかも知れません。

有限和ベースで考えるときは、ベクトル・行列の定義に有限性条件が付きました。有限性条件を外すのではなくてよりきつくしたら何が起きるでしょう。実は、有限性条件をそれ以上厳しくすることは不可能です。足し算が出来るためのギリギリの条件なので、それ以上厳しくしたら足し算が出来なくなります。じゃ、足し算なしのベクトル・行列ならどうか? そもそも「足し算なしのベクトル・行列」は語義矛盾なのですが、モノは考えようで、足し算のない線形代数は可能っちゃ可能なのです。そのときのベクトル・行列は「サポートの基数が1以下」という“超有限性条件”を満たします。

具体的な添字や成分を使う方法のいい点は、お馴染みの計算法が使えることです。色々な圏へと一般化しても、足し算と掛け算だけで議論が進みます。計算や描画をコンピュータにやらせることも出来ます。

*1:「並べる」とは言っても、実は順序は関係しません。添字集合に値を割り当てることを比喩的に「並べる」と表現しています。