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

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

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

参照用 記事

集合係数のスカラー・ベクトル・行列・テンソル

スパンとファイバー積と行列計算」で、スパンは集合係数の行列であり、スパンの結合〈composition〉が行列の掛け算として計算できることを紹介しました。線形代数でよく知られた計算は、集合係数でもだいたい実行できます。$`\newcommand{\mrm}[1]{ \mathrm{#1} }
\newcommand{\In}{\text{ in }}
\newcommand{\o}[1]{\overline{#1}}
\newcommand{\hyp}{\text{-} }
`$

内容:

関連する記事:

  1. スパンとファイバー積と行列計算
  2. 集合係数のスカラー・ベクトル・行列・テンソル この記事
  3. 集合・関数係数行列の2-圏、モナドも添えて 続く記事

マルチスパン

線形代数に登場する具体的な計算は、スカラーとインデックスの概念から組み立てることができます。スカラーには足し算と掛け算が必要ですが、集合には直和と直積があるので、集合をスカラーとみなした線形計算が可能です。この事実に着目したキャッチフレーズは:

  • 集合はスカラーだ。
  • 写像はベクトルだ。
  • スパンは行列だ。

ベクトルは、1次元のインデックスに沿って配置されたスカラー(つまり集合)達の族です。行列は、2次元のインデックスに沿って配置されたスカラー達の族です。2次元を超えるインデックス空間を考えることもできます。たくさんのインデックスを持った量といえば、そうテンソルですね。

多次元の集合係数テンソル計算を支える集合論的(あるいは集合圏における)対応物がマルチスパン〈multispan〉です。

スパンとファイバー積と行列計算」で登場したスパンは、左脚と右脚の2本の脚を持ちましたが、マルチスパンは任意の本数の脚を持ちます。

$`n\in {\bf N}`$ に対して、$`n`$ 本の脚を持つマルチスパンは次の形をしています。

$`\quad (f_i : X \to A_i)_{i = 1, \cdots, n}\\
\text{where } \\
\quad X \in |{\bf Set}|\\
\quad A_i \in |{\bf Set}| \:\: (i = 1, \cdots, n)\\
\quad f_i : X \to A_i \In {\bf Set} \:\: (i = 1, \cdots, n)
`$

$`n = 0, 1, 2, 3`$ の場合を個別に見ていきましょう。

$`n = 0`$ のときは脚(写像)と足(写像の余域)はありません。しかし、ボディ〈ヘッド〉の集合を持ちます。つまり、0脚のマルチスパンとは単なる集合です。

$`\quad X\\
\text{where } \\
\quad X \in |{\bf Set}|
`$

$`n = 1`$ のときは1本の脚(ボディから出る写像)を持ちます。1脚のマルチスパンは単なる写像です。

$`\quad f: X \to A\\
\text{where } \\
\quad X \in |{\bf Set}|\\
\quad A \in |{\bf Set}| \\
\quad f : X \to A \In {\bf Set}
`$

$`\quad \xymatrix{
X \ar[d]_{f}
\\
A
}
`$

$`n = 2`$ のときは2本の脚を持ちます。2脚のマルチスパンは左右の脚を持つ通常のスパンです。

$`\quad (f_i : X \to A_i)_{i = 1, 2}\\
\text{where } \\
\quad X \in |{\bf Set}|\\
\quad A_i \in |{\bf Set}| \:\: (i = 1, 2)\\
\quad f_i : X \to A_i \In {\bf Set} \:\: (i = 1, 2)
`$

$`\quad \xymatrix{
{}
& X \ar[dl]_{f_1} \ar[dr]^{f_2}
& {}
\\
A_1
&{}
& A_2
}
`$

$`n = 3`$ のときは3本の脚を持ちます。

$`\quad (f_i : X \to A_i)_{i = 1, 2, 3}\\
\text{where } \\
\quad X \in |{\bf Set}|\\
\quad A_i \in |{\bf Set}| \:\: (i = 1, 2, 3)\\
\quad f_i : X \to A_i \In {\bf Set} \:\: (i = 1, 2, 3)
`$

$`\quad \xymatrix{
{}
& X \ar[dl]_{f_1} \ar[d]_{f_2} \ar[dr]^{f_3}
& {}
\\
A_1
& A_2
& A_3
}
`$

プロファイルとホムセット

スパンとファイバー積と行列計算」で言及したように、スパン達の全体は、ほとんど圏になりますが、次の点でホントの圏にはなりません。

  1. $`A`$ から $`B`$ へのスパンの全体は小さな集合〈small set〉にならない。
  2. スパンの結合〈composition〉が一意的には決まらない。
  3. 特定の結合を選んで一意的演算にしてみても、圏の等式的法則が(等式としては)成立しない。

この辺のことが気になるなら、以下の過去記事を参照してください。

ここでは、細かいことは気にしないという態度をとります。スパン達の圏に少々難があっても、集合係数の線形計算に深刻な影響はないですからね。

集合圏のスパンの圏(ホントの圏ではないけど)を $`{\bf SPAN}`$ と書くことにすると、そのホムセットは $`{\bf SPAN}(A, B)`$ と書けます。集合圏のマルチスパンの場合も同様な記法を使います。

  • $`{\bf MSPAN}()`$ : すべての0脚のマルチスパンの集まり。$`{\bf MSPAN}() = |{\bf Set}|`$ 。
  • $`{\bf MSPAN}(A)`$ : $`A`$ を足とする脚を持つ、すべての1脚のマルチスパンの集まり。$`{\bf MSPAN}(A) = |{\bf Set}_{/A}|`$ 、$`{\bf Set}_{/A}`$ は $`A`$ 上のオーバー圏〈スライス圏〉。
  • $`{\bf MSPAN}(A_1, A_2)`$ : $`A_1, A_2`$ を足達とする2脚を持つ、すべての2脚のマルチスパンの集まり。$`{\bf MSPAN}(A_1, A_2) = {\bf SPAN}(A_1, A_2)`$ 。
  • $`{\bf MSPAN}(A_1, A_2, A_3)`$ : $`A_1, A_2, A_3`$ を足達とする3脚を持つ、すべての3脚のマルチスパンの集まり。
  • もっと脚・足が増えても同様。

マルチスパンの足(集合)達を並べてリストにした $`(A_1, \cdots, A_n)`$ をプロファイル〈profile〉と呼びます。プロファイル(足の仕様)が $`(A_1, \cdots, A_n)`$ であるマルチスパン達の集合(大きい集合)を、

$`\quad {\bf MSPAN}(A_1, \cdots, A_n) = {\bf MSPAN}( (A_1, \cdots, A_n) )`$

と書くわけです。

集合(大きい集合) $`{\bf MSPAN}(A_1, \cdots, A_n)`$ を、圏の場合の用語をそのまま流用して、プロファイル $`(A_1, \cdots, A_n)`$ に対するホムセット〈homset〉と呼びます。すべてのマルチスパン達は、プロファイルごとのホムセットに細かく区分けされることになります。

ホムセットを単なる(大きい)集合以上のなにか、例えば圏にすることもあります。豊穣化〈enrichment〉と呼ばれる手法です。今ここでは、豊穣化はしないで、ホムセットは単なる(大きい)集合としておきます。

マルチスパンのバンドル

マルチスパンを一文字で表すときは $`f, g`$ などを使います。

$`\quad f \in {\bf MSPAN}(A_1, \cdots, A_n)`$

次の記法の約束を導入します。

  • $`\bar{n} = \{1, \cdots, n\}`$
  • マルチスパン $`f`$ のボディ〈ヘッド〉を $`\o{f}`$ と書く。

どちらも上線を使ってますが、文脈で区別できるでしょう。$`\o{f}`$ は、「$`f`$ の頭〈ヘッド〉だから上に目印が付いている」と憶えてください。この記法を使うと、マルチスパン $`f`$ は次のように書けます。

$`\quad f = (f_i : \o{f} \to A_i)_{i\in \bar{n}} \in {\bf MSPAN}(A_1, \cdots, A_n)`$

マルチスパン $`f`$ の足〈集合〉達をすべて直積した集合を次のように書きます。

$`\quad \prod_{i\in \bar{n}} A_i = A_1 \times \cdots \times A_n`$

集合圏では、脚の写像達のデカルトタプルを作れるので、それを次のように書きます。

$`\quad \langle f_i \rangle_{i\in \bar{n}} = \langle f_1 , \cdots, f_n\rangle : \o{f} \to \prod_{i\in \bar{n}} A_i`$

写像達のデカルトタプルの具体的な定義は:

$`\text{For } x \in \o{f}\\
\quad \langle f_1 , \cdots, f_n\rangle(x) :=
( f_1(x) , \cdots, f_n(x)) \; \in A_1 \times \cdots \times A_n
`$

マルチスパン $`f`$ から作った写像 $`\langle f_i \rangle_{i\in \bar{n}}`$ を、$`f`$ のバンドル〈bundle〉と呼びます。$`f`$ の脚達をまとめ上げたからバンドルというわけではなくて、マルチスパンとは無関係にバンドル(幾何的バンドルではなくて集合論的バンドル)という概念があります(以下に説明)。

集合 $`A`$ をベース集合〈base set〉とするバンドル達の圏 $`{\bf Bun}[A]`$ は、オーバー圏〈スライス圏〉 $`{\bf Set}_{/A}`$ と同じです。具体的に言えば:

  • 圏の対象は、 $`f: X \to A`$ という写像である。射ではなくて対象なので、“バンドル”と呼ぶ。
  • $`f: X \to A`$ から $`g: Y \to A`$ への射は、写像 $`u:X \to Y`$ で $`u;g = f`$ を満たすものである。
  • 射の結合は、写像の結合で定義する。
  • バンドル $`f: X \to A`$ の恒等射は、$`\mrm{id}_X : X \to X`$ とする。

マルチスパンの脚達のデカルトタプルを作ることは、次のような写像を定義します。

$`\quad \langle \hyp \rangle : {\bf MSPAN}(A_1, \cdots, A_n) \to |{\bf Bun}[\prod_{i\in \bar{n}} A_i]|`$

$`{\bf MSPAN}(A_1, \cdots, A_n)`$ の側にも圏の構造を入れれば(それは出来ます)、単なる写像ではなくて関手になりますが、今は写像でいいとします。

マルチスパンから作ったバンドル(脚達のデカルトタプル)がどんな写像になるか? が“興味ある課題/必要な情報”になることがあります。例えば、脚達のデカルトタプルが単射になるとき、マルチスパンは総合的単射〈jointly injective〉だといいます。総合的単射マルチスパンはデータベース理論では極めて重要です。

マルチスパンのファミリー

インデキシング集合 $`I`$ でインデックス付けられた集合の族 $`I\ni i\mapsto F_i`$ を、単にファミリー〈family〉と略称します。集合係数のベクトル・行列・テンソルは、この意味でのファミリーになります。

前節で、マルチスパンからバンドルが作れることを見ました。バンドルがあると、ファミリーは自動的に〈規準的に〉構成できます。脚の数が $`0, 1, 2, 3`$ のマルチスパンについて、「マルチスパン → バンドル → ファミリー」と構成する手順を具体的に見ていきます。

0脚のマルチスパン

0脚のマルチスパンとは、単にひとつの集合 $`X`$ でした。0脚マルチスパン $`X`$ に対応するバンドルは、便宜上次のように定義します。

$`\quad !_X : X \to {\bf 1}`$

ここで、$`{\bf 1}`$ は特定された単元集合(集合圏の終対象)で、$`!_X`$ は単元集合への唯一の写像です。名目上、ベース集合が $`{\bf 1}`$ であるバンドルが作れました。

バンドルに対応するファミリーでは、ベース集合がインデキシング集合になります。単元集合 $`{\bf 1}`$ にはひとつの要素しかないので、その要素に集合 $`X`$ を対応させるファミリーが一意的に作れます。

$`\quad X^\sim : {\bf 1} \to |{\bf Set}|`$

ここで、$`X^\sim`$ は、“すべての集合達の集合” $`|{\bf Set}|`$ のなかから $`X`$ をピックアップするポインティング写像です。

0脚マルチスパンの場合の手順は、一般的n-脚マルチスパンと形を揃えるための便宜的・名目上の儀式みたいなものですから、あまり気にしなくていいです。

1脚のマルチスパン

1脚のマルチスパンとは、単にひとつの写像 $`f:X\to A`$ でした。1脚マルチスパン $`f`$ に対応するバンドルは、次のようになります。

$`\quad \langle f \rangle = f : X \to A`$

モノとしては $`f`$ と同じです。バンドルとして解釈し直しています。次のように書くと事情が分かるかも。

$`\text{For } (f:X \to A) \in {\bf MSPAN}(A)\\
\quad (\langle f \rangle : X \to A) \in |{\bf Bun}[A] |
`$

ベース集合が $`A`$ であるバンドルが作れました。ベース集合である $`A`$ がファミリーのインデキシング集合になります。次が対応するファミリーです。

$`\quad \o{f} : A \to |{\bf Set}|`$

記号 $`\o{f}`$ は、マルチスパン $`f`$ のボディ〈ヘッド〉である集合 $`X`$ のことでした($`\o{f} = X`$)。「集合がファミリーになるのはおかしいだろ?!」 -- ごもっともです。記号の乱用をしています。

スパンとファイバー積と行列計算」でそうしたように、次の約束をします。

$`\text{For }a \in A\\
\quad \o{f}_a := \{x \in \o{f} \mid f(x) = a\} = f^{-1}(a)`$

写像 $`f`$ が了解されている前提で、$`f`$ の逆像集合を $`\o{f}_a`$ と書くわけです。そうすると、次の写像が定義できます。

$`\quad A \ni a \mapsto \o{f}_a \in |{\bf Set}|`$

(集合ではなく)ファミリーとしての $`\o{f}`$ は、この意味です。つまり:

  • 記号 $`\o{f}`$ は、マルチスパン $`f`$ のボディの意味と、$`f`$ から定義されるファミリーの意味がある。
  • $`\o{f}_a`$ と書いたときは、ファミリーとしての $`\o{f}`$ の、$`a\in A`$ での値(値が集合)である。

1脚マルチスパンの場合は、足=ベース集合=インデキシング集合が $`A`$ だけなので、単一のインデックスでインデックス付けられたファミリー〈集合族〉になります。

2脚のマルチスパン

2脚のマルチスパンとは、通常のスパン $`A_1 \overset{f_1}{\leftarrow} \o{f} \overset{f_2}{\to} A_2`$ です。今ここでの $`\o{f}`$ は $`f`$ のボディです。2脚マルチスパン $`f`$ に対応するバンドルは、次のようになります。

$`\quad \langle f_1, f_2 \rangle : \o{f} \to A_1 \times A_2`$

念のため、より詳しく書けば:

$`\text{For } (f_i: \o{f} \to A_i)_{i\in \bar{2}} \in {\bf MSPAN}(A_1, A_2)\\
\quad (\langle f_1, f_2 \rangle : \o{f} \to A_1 \times A_2) \in |{\bf Bun}[A_1\times A_2] |
`$

ベース集合が $`A_1\times A_2`$ であるバンドルが作れました。ベース集合である $`A_1\times A_2`$ がファミリーのインデキシング集合になります。次が対応するファミリーです($`\o{f}`$ の意味が変わります)。

$`\quad \o{f} : A_1\times A_2 \to |{\bf Set}|`$

ファミリーとしての $`\o{f}`$ の定義は次のようです。

$`\text{For }(a_1, a_2) \in A_1\times A_2\\
\quad \o{f}_{a1, a2} := \{x \in \o{f} \mid f_1(x) = a_1 \;\land\; f_2(x) = a_2\} = {f_1}^{-1}(a_1) \cap {f_2}^{-1}(a_2)`$

2脚マルチスパンの場合は、足=ベース集合=インデキシング集合が $`A_1`$ と $`A_2`$ (あるいはその直積)なので、2つのインデックスでインデックス付けられたファミリー〈集合族〉になります。

スパンとファイバー積と行列計算」の話はすべて、2脚マルチスパンに関することです。2脚に特化していたので、次のような記法を使っていました。

$`\quad X := \o{f}\\
\quad f := f_1\\
\quad g := f_2\\
\quad A := A_1\\
\quad B := A_2
`$

3脚のマルチスパン

3脚のマルチスパンは、$`(f_i : \o{f} \to A_i)_{i\in \bar{3}}`$ と書けます。3脚マルチスパン $`f`$ に対応するバンドルは、次のようになります。

$`\quad \langle f_1, f_2, f_3 \rangle : \o{f} \to A_1 \times A_2 \times A_3`$

念のため、より詳しく書けば:

$`\text{For } (f_i:X \to A_i)_{i\in \bar{3}} \in {\bf MSPAN}(A_1, A_2, A_3)\\
\quad (\langle f_1, f_2, f_3 \rangle : \o{f} \to A_1 \times A_2\times A_3) \in |{\bf Bun}[A_1\times A_2\times A_3] |
`$

ベース集合が $`A_1\times A_2\times A_3`$ であるバンドルが作れました。次が対応するファミリーです。

$`\quad \o{f} : A_1\times A_2\times A_3 \to |{\bf Set}|`$

ファミリーとしての $`\o{f}`$ の定義は次のようです。

$`\text{For }(a_1, a_2, a_3) \in A_1\times A_2\times A_3\\
\quad \o{f}_{a1, a2, a_3} := \\
\qquad \{x \in \o{f} \mid f_1(x) = a_1 \;\land\; f_2(x) = a_2 \;\land\; f_3(x) = a_3 \}\\
\qquad = {f_1}^{-1}(a_1) \cap {f_2}^{-1}(a_2) \cap {f_3}^{-1}(a_3)`$

3脚マルチスパンの場合は、足=ベース集合=インデキシング集合が $`A_1, A_2, A_3`$ (あるいはそれらの直積)なので、3つのインデックスでインデックス付けられたファミリー〈集合族〉になります。

まとめ

ここまで、マルチスパン、バンドル、ファミリーの関係を見てきました。

  1. マルチスパン $`f = (f_i : \o{f} \to A_i)_{i\in \bar{n}}`$ があると、バンドル $`\langle f_i\rangle_{i\in \bar{n}} : \o{f} \to \prod_{i\in \bar{n}} A_i`$ が構成できる。
  2. バンドル $`\langle f_i\rangle_{i\in \bar{n}} : \o{f} \to \prod_{i\in \bar{n}} A_i`$ があると、ファミリー $`\o{f} : \prod_{i\in \bar{n}} A_i \to |{\bf Set}|`$ が構成できる。ただし、$`\o{f}`$ は記号の乱用をしている。
  3. ファミリー $`\o{f}`$ は、インデックス $`(a_1, \cdots, a_n) \in \prod_{i\in \bar{n}} A_i`$ に対して、集合 $`\o{f}_{a_1, \cdots, a_n}`$ を対応付ける。

次のように言えます。

  1. 0脚マルチスパンから定義されるファミリーは、集合係数のスカラーである。インデックスは(事実上)持たない。
  2. 1脚マルチスパンから定義されるファミリーは、集合係数のベクトルである。ひとつのインデックスに沿った集合の族。
  3. 2脚マルチスパンから定義されるファミリーは、集合係数の行列である。ふたつのインデックスに沿った集合の族。
  4. 3脚マルチスパンから定義されるファミリーは、集合係数の(3階の/3次元の)テンソルである。みっつのインデックスに沿った集合の族。

具体的に調べたのは、0脚/1脚/2脚/3脚でしたが、脚の数(=インデックスの数)が4以上の場合も同様です。これで、集合係数のスカラー/ベクトル/行列/テンソル相当物が定義できました。集合係数の線形計算も、通常の線形計算のアナロジーをたどって定義できます。

係数が集合でも、形式的には、係数が実数や整数のときと大差ありません。しかし、「スパンとファイバー積と行列計算」で述べたように、集合係数の行列掛け算は、“スパン/コスパンとファイバー積”としてのセマンティクスを持っていました。集合係数の線形計算の意味が、実数や整数の線形計算の意味と“大差ない”わけではありません