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

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

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

参照用 記事

ファミリーの圏とシグマ関手・パイ関手

この記事内では、「型」と「集合」は同義語です。つまり、sets-as-types の立場をとります*1

集合〈型〉のファミリー〈族〉があったとき、それからシグマ型とパイ型を構成できます。この構成は、次のような写像を与えます。

$`\quad \sum, \prod: |{\bf Fam}| \to |{\bf Set}|`$

これは、ファミリーの圏の対象に集合圏の対象を対応させます。$`\sum, \prod`$ は、対象類(「類」は小さくないかも知れない集合)のあいだの写像ですが、関手にはなってません。関手に仕立てることはできるでしょうか? -- この問〈とい〉について考えてみます。

この記事では、定義や説明に出てくる言葉や記号について、注意や補足をできるだけ付けるようにします。冒頭の文「『型』と『集合』は同義語です」はそのような注意の例です。いわずもながでしょうが、「写像」と「関数」も同義語です。同義語なので使い分けの基準はなく、どちらを使うかは気分だけの問題です。$`\newcommand{\mrm}[1]{\mathrm{#1}}
\newcommand{\cat}[1]{\mathcal{#1}}
\newcommand{\msf}[1]{\mathsf{#1}}
%\newcommand{\twoto}{\Rightarrow }
\newcommand{\In}{\text{ in } }
\newcommand{\Imp}{ \Rightarrow }
\newcommand{\Iff}{\Leftrightarrow }
\newcommand{\hyp}{\text{-} }
\newcommand{\op}{\mathrm{op} }
\newcommand{\id}{\mathrm{id} }
\newcommand{\inv}{\leftarrow }
%\newcommand{\pto}{ \supseteq\!\to }
%\newcommand{\u}[1]{\underline{#1}}
\require{color} % 緑色
\newcommand{\Keyword}[1]{ \textcolor{green}{\text{#1}} }%
\newcommand{\For}{\Keyword{For } }%
\newcommand{\Define}{\Keyword{Define } }%
%\newcommand{\Subject}{\Keyword{Subject } }%
\newcommand{\Where}{\Keyword{Where } }
\newcommand{\And}{\Keyword{And } }
\newcommand{\Let}{\Keyword{Let } }
`$

内容:

ファミリーの圏

ここでのファミリー〈family〉は、集合のインデックス付きファミリー〈indexed family of sets〉です。ファミリー $`F`$ は次のような写像です。

$`\quad F: I \to |{\bf Set}| \In {\bf SET}\\
\Where I \in |{\bf Set}|
`$

$`{\bf SET}`$ (すべて大文字)は、$`|{\bf Set}| \in |{\bf SET}|`$ が成立するような、“より大きな集合圏”です。

ファミリー $`F`$ を次のようにも書きます。

$`\quad F = (I, F)`$

これは、よくある記号の乱用〈abuse of notation〉(例えば、「モノイド $`M = (M, *, e)`$」)ではありません。右辺が冗長な書き方になっているだけです。冗長に書いたほうが便利なことがあるからです。

圏に仕立てることを想定して、すべてのファミリーの集合(小さくない集合)を $`|{\bf Fam}|`$ と書きます。$`|{\bf Fam}|`$ は、今までの定義・記述によりハッキリと定まった固有特定の集合(小さくないけど)です。

$`F = (I, F)`$ と $`G = (J, G)`$ が2つの(異なる2つではなくて同一かも知れない)ファミリーだとして、そのあいだの準同型射〈homomorphism〉(あるいは単に〈morphism〉)は、次のように定義・記述します。

$`\For (I, F), (J, G) \in |{\bf Fam}|\\
\Define (f, \varphi) : (I, F) \to (J, G) :\Iff\\
\quad f: I \to J \In {\bf Set}\\
\quad \And\\
\quad \varphi = (\varphi_i)_{i\in I} \:\Where \varphi_i : F(i) \to G(f(i)) \In {\bf Set}
`$

またまた、圏を作る下心まるだしで、上記の最初の2行と同じことを次のように書きます。

$`\For (I, F), (J, G) \in |{\bf Fam}|\\
\Define (f, \varphi) \in {\bf Fam}( (I, F), (J, G) ) :\Iff
`$

3行目以降が、ホムセットにどんな要素が所属するかの具体的な条件の記述です。

この時点で、対象類 $`|{\bf Fam}|`$ と、対象のペアごとのホムセット $`{\bf Fam}(\hyp, \hyp)`$ の定義が終えたことになります。2つの射(ホムセットの要素)の結合〈composition〉は次のように定義します。

$`\For (I, F), (J, G), (K, H) \in |{\bf Fam}|\\
\For (f, \varphi) \in {\bf Fam}( (I, F) , (J, G) )\\
\For (g, \psi) \in {\bf Fam}( (J, G), (K, H) )\\
\Define (f, \varphi) ; (g, \psi) := (f; g, \xi)\\
\Where\\
\quad \For i \in I\\
\quad \Define \xi_i := \lambda\,x \in F(i).(\, \psi_{f(i)}( \varphi_i(x) ) \;\in H(g(f(i))) \,)
`$

恒等射〈identity morphism〉 $`\id_F = \id_{(I, F)}`$ の定義は自明でしょう。

今まで提示した素材たちは:

  1. 対象の類 $`|{\bf Fam}|`$
  2. 対象のペアごとのホムセット $`{\bf Fam}(F, G)`$
  3. 射〈ホムセットの要素〉の結合演算 $`;`$〈セミコロン〉
  4. 対象ごとの恒等射 $`\id_F`$

これらが全体として圏になるために満たすべき法則は:

  1. 結合法則〈associative law〉
  2. 左右の単位法則〈unit law〉

法則を確認すれば(今は確認を省略しますが)、$`{\bf Fam}`$ が圏であることが分かります。これがファミリーの圏〈the category of families〉です。

$`{\bf Fam}`$ (というボールド体の名前で指されるモノ)は、固有特定の圏です。そして:

  • 圏 $`{\bf Fam}`$ の対象の類は、$`|{\bf Fam}|`$ と書く。
  • 圏 $`{\bf Fam}`$ のホムセットは、$`\mrm{Hom}_{\bf Fam}(\hyp, \hyp) = {\bf Fam}(\hyp, \hyp)`$ と書く。
  • 圏 $`{\bf Fam}`$ の結合〈composition〉は、図式順演算子記号 $`;`$ で書く。が、固有特定の圏 $`{\bf Fam}`$ に備わった固有特定の演算であることを明示したいなら $`;^{\bf Fam}`$ とでも書くべき。ほとんどの場合、右上付き $`{\bf Fam}`$ は省略されるが。
  • 圏 $`{\bf Fam}`$ の恒等射は、$`\id`$ で書く。が、固有特定の圏 $`{\bf Fam}`$ に備わった固有特定の射(の族)であることを明示したいなら $`\id^{\bf Fam}`$ とでも書くべき。ほとんどの場合、右上付き $`{\bf Fam}`$ は省略されるが。

述語

この節の内容は、次々節のための準備です。

述語〈predicate〉とは、ブール値〈真偽値〉を値とする関数です。述語 $`p`$ は次のように書けます。

$`\quad p : X \to {\bf B} \In {\bf Set}`$

ファミリーの場合と同じく、$`p = (X, p)`$ と冗長な表現を許します。

述語の域〈domain〉が小さくなくてもよい場合は:

$`\quad p : X \to {\bf B} \In {\bf SET}`$

小さくない域を持つ述語として、次の形の述語を考えましょう。

$`\quad p : \mrm{Mor}({\bf Set}) \to {\bf B} \In {\bf SET}`$

この形の述語の域は、集合圏の射の集合(小さくない集合)です。つまり、この形の述語は、関数〈写像〉を引数に受け取って真偽値を返します。

幾つかの固有特定の述語を考えます。

述語の名前 意味
$`\msf{inj}`$ 関数は単射〈injection〉である
$`\msf{surj}`$ 関数は全射〈surjection〉である
$`\msf{bij}`$ 関数は双射〈bijection | 全単射〉である
$`\msf{id}`$ 関数は恒等写像〈identity map〉である
$`\msf{incl}`$ 関数は包含写像〈inclusion map〉である
$`\msf{any}`$ なんでもよい

ローカルなネーミングコンベンションとして、述語の固有名(固有特定の述語を指す名前)にはサンセリフ体(ヒゲなしの文字フォント)を使うことにします。これらの名前は固有名ですが、僕が勝手にネーミングしたものですから、気に入らなかったら別な名前を付けるのは自由です。

紛らわしいですが、ローマン体の $`\id`$ は圏の恒等射のことで、サンセリフ体の $`\msf{id}`$ は関数が恒等であるかどうかを判定する述語です。$`f\in \mrm{Mor}({\bf Set})`$ に対して $`\msf{inj}(f)`$ という表現は真偽が決まるという意味で命題〈proposition〉です。もっと言えば、固有特定な具体的な関数を $`\msf{inj}`$ に渡したときに、真か偽のどちらかになる、ということです。$`\msf{inj}(f)`$ を論理式で書き下すなら次です。

$`\quad \msf{inj}(f) :\Iff \forall x, y\in \mrm{dom}(f).\,
x \ne y \Imp f(x) \ne f(y)`$

ファミリーの圏の変種: 逆向き

ファミリーの圏 $`{\bf Fam}`$ を少し変形した圏として $`{\bf Fam}_\inv`$ を定義します。対象類は $`{\bf Fam}`$ と同じです。

$`\quad |{\bf Fam}_\inv| := |{\bf Fam}|`$

射 $`(f, \psi)`$ の定義が違います。

$`\For (I, F), (J, G) \in |{\bf Fam}_\inv|\\
\Define (f, \psi) : (I, F) \to (J, G) :\Iff\\
\quad f: I \to J \In {\bf Set}\\
\quad \And\\
\quad \psi = (\psi_i)_{i\in I} \:\Where \psi_i : G(f(i)) \to F(i) \In {\bf Set}
`$

違っている部分は、$`G(f(i)) \to F(i)`$ です。 $`F`$ から $`G`$ への射といいながら、各 $`i\in I`$ ごとの写像が逆向きになっています。この定義に基づいても圏は作れるので、そうしてできた圏が $`{\bf Fam}_\inv`$ です。

$`{\bf Fam}_\inv`$ との対比を強調したい場合は、$`{\bf Fam}`$ に右向きの矢印を付けます。

$`\quad {\bf Fam}_\to := {\bf Fam}`$

「$`{\bf Fam}_\to`$ または $`{\bf Fam}_\inv`$」の意味で $`{\bf Fam}_\alpha`$ という書き方も使います。ここで、ギリシャ文字 $`\alpha`$ は集合 $`\{\to, \inv\}`$ (2つの矢印記号からなる集合)を変域とする変数です。変数 $`\alpha`$ が取り得る値は二値です。$`\alpha = \,\to`$ のとき $`{\bf Fam}_\alpha`$ は$`{\bf Fam}_\to`$ を意味し、$`\alpha = \,\inv`$ のとき $`{\bf Fam}_\alpha`$ は$`{\bf Fam}_\inv`$ を意味します。

ファミリーの圏の変種: 写像に条件を付ける

この節の内容はこの記事内では利用しません。飛ばしてもかまいません。いずれ他の記事で利用することがあると思います。

$`p, q`$ は、(小さくない)集合 $`\mrm{Mor}({\bf Set})`$ を域とする述語とします。述語 $`p, q`$ に対して、圏 $`{\bf Fam}^{p,q}`$ を次のように定義します。対象類は $`{\bf Fam}`$ と同じです。

$`\quad |{\bf Fam}^{p, q}| := |{\bf Fam}|`$

射 $`(f, \varphi)`$ の定義が違います。

$`\For (I, F), (J, G) \in |{\bf Fam}^{p, q}|\\
\Define (f, \varphi) : (I, F) \to (J, G) :\Iff\\
\quad f: I \to J \In {\bf Set} \:\And p(f)\\
\quad \And\\
\quad \varphi = (\varphi_i)_{i\in I} \\
\quad \Where \varphi_i : F(i) \to G(f(i)) \In {\bf Set} \:\And q(\varphi_i)
`$

つまり、射 $`(f, \varphi)`$ に条件が付きます。$`f`$ は述語 $`p`$ を満たす必要があり、$`\varphi_i`$ は述語 $`q`$ を満たす必要があります。この定義に基づいても圏は作れるので、そうしてできた圏が $`{\bf Fam}^{p,q}`$ です。

上記の定義の一部を $`G(f(i)) \to F(i)`$ に書き換えると $`{\bf Fam}_\inv^{p, q}`$ が定義できます。矢印の向き(二値)と2つの述語でインデックス〈パラメトライズ〉された圏の族〈{indexed | parameterized} family of categories〉は次のように書けます。

$`\quad {\bf Fam}^{p,q}_\alpha\\
\Where \\
\quad \alpha \in \{\to, \inv\}\\
\quad p, q \in {\bf SET}( \mrm{Mor}({\bf Set}) , {\bf B})
`$

パラメータ $`\alpha`$ のデフォルト値は '$`\to`$' です。勝手な $`p, q`$ に対して圏を定義できるわけではありません。述語の外延が、集合圏 $`{\bf Set}`$ の部分圏を形成するような $`p, q`$ に限ります*2

例えば、被覆族の細分〈refinement of covering families〉を考えるときは $`{\bf Fam}^{\msf{any},\msf{incl}}`$ 内で考えると便利です。最近僕は、$`{\bf Fam}^{\msf{bij},\msf{bij}}`$ や $`{\bf Fam}^{\msf{bij},\msf{id}}`$ に興味を持っています。

シグマ共変関手

シグマ型構成 $`\sum`$ を関手に仕立てましょう。関手となったシグマを $`\sum_*`$ という名前で呼びます。この時点ではまだ定義してませんが、ここの文脈における「$`\sum_*`$」は、(下付きアスタリスクも含めて)固有特定の関手を指す個有名です。下付きアスタリスクは、名前の一部で、共変関手であることを強調する目印です。

$`\quad \sum : |{\bf Fam}|\to |{\bf Set}| \In {\bf SET}\\
\quad \sum_* : {\bf Fam}\to {\bf Set} \In {\bf CAT}
`$

$`\sum_*`$ は関手なので、次のようなパートを持ちます。

  • 対象パート: $`(\sum_*)_\mrm{obj} : |{\bf Fam}| \to |{\bf Set}| \In {\bf SET}`$
  • 射パート: $`(\sum_*)_\mrm{mor} : \mrm{Mor}({\bf Fam}) \to \mrm{Mor}({\bf Set}) \In {\bf SET}`$
  • ホムパート: $`F, G \in |{\bf Fam}|`$ ごとに
    $`(\sum_*)_{ \mrm{hom}(F, G) } :{\bf Fam}(F, G) \to {\bf Set}( (\sum_*)_\mrm{obj}(F), (\sum_*)_\mrm{obj}(G)) \In {\bf Set}`$

射パートとホムパートは、どちらか一方を定義すれば、残りは自動的に出てきます。ここでは、ホムパートのほうを定義することにします。

シグマ共変関手 $`\sum_*`$ の対象パートは、もちろんシグマ型を構成する写像です。

$`\quad (\sum_*)_\mrm{obj} := \sum \;: |{\bf Fam}| \to |{\bf Set}| \In {\bf SET}`$

煩雑さを避けるために、$`(\sum_*)_\mrm{obj}`$ は単に $`\sum`$ と書き、射パートとホムパートは $`\sum_*`$ と書くことにします。

以下の「$`\cdots`$」部分が明確になれば、シグマ関手を定義したことになります。

$`\For (f, \varphi) : (I, F) \to (j, G) \In {\bf Fam}\\
\quad\sum_* ( f, \varphi ) =\sum_* ( (f, \varphi) ) := \cdots
`$

定義すべき目的の関数を $`\Phi`$ と置いて、書き下すこととにしましょう。

$`\Let \Phi :=\sum_* ( f, \varphi ) \;: \sum(I, F) \to \sum(J, G) \In {\bf Set}`$

集合 $`\sum(I, F)`$ の要素は、次の依存ペアの形に書けます。

$`\quad (i, x)\\
\Where i \in I, x\in F(i)
`$

したがって、依存ペアに対する値を書き下せばいいわけです。

$`\For (i, x) \in \sum(I, F)\\
\Define \Phi (i, x) = \Phi ( (i, x)) := \\
\quad (f(i), \varphi_i (x)) \; \in \left(\{f(i)\} \times G(f(i))\right) \subseteq \sum(J, G)
`$

これは素直で直感的な定義で、ファミリーを集合論的バンドルとみなせば、ファイバーからファイバーへの写像を束ねた写像になります。また、次の図式は可換図式になります。

$`\require{AMScd}
\quad \begin{CD}
\sum(I, F) @>{\Phi = \sum_* (f, \varphi)}>> \sum(J, G)\\
@V{\pi^F}VV @VV{\pi^G}V\\
I @>{f}>> J
\end{CD}\\
\quad \text{commutative in }{\bf Set}
`$

$`\pi^F, \pi^G`$ は、ファミリー $`F, G`$ に付随するシグマ型の標準射影です。

$`\sum_*`$ が関手であるためには、関手性、すなわち結合と恒等を保存することが必要となりますが、律儀に定義を追いかければ出ます。

シグマ関手 $`\sum_*`$ は、「ファミリーを集合論的バンドルとみなす」という行為(の全空間を作るところ)を、関手として明示的に表現したものです。シグマ関手により、ファミリー〈集合族〉の圏と集合論的バンドルの圏は圏同値(ほとんど区別する必要がない2つの圏)になります。

パイ反変関手

シグマ型構成を関手にすることは、特に問題もなく想定内の結果になりました。が、パイ型構成を関手にするのは、なんだかうまくいきません。共変関手を作るのは無理そうなので諦めます。反変関手にします。反変関手の場合でも、$`{\bf Fam}`$ ではうまくいきません。次の形の関手にします。

$`\quad \prod^* : ({\bf Fam}_\inv)^\op \to {\bf Set} \In {\bf CAT}`$

$`{^\op}`$ を付けているのは、$`\prod^*`$ が反変関手であることを示します。しかし、$`{^\op}`$ を付けた反対圏〈opposite category〉を使うのは分かりにくい点があるので、次の書き方も使います。

$`\quad \prod^* : {\bf Fam}_\inv \overset{\mrm{contra}}{\longrightarrow} {\bf Set} \In {\bf CAT}`$

$`\mrm{contra}`$ が、関手が反変〈contravariant〉であることを示しています。反変関手については、(詳しく知りたいなら)次の過去記事を参照してください。

$`\prod^*`$ の対象パートはパイ型構成 $`\prod`$ なので、対象 $`F, G`$ に対するホムセット $`{\bf Fam}_\inv(F, G)`$ 上での $`\prod^*`$ のホムパートを定義しましょう。

以下の「$`\cdots`$」部分が明確になれば、パイ関手を定義したことになります。

$`\For (f, \psi) : (I, F) \to (J, G) \In {\bf Fam}_\inv\\
\quad\prod^* ( f, \psi ) =\prod^* ( (f, \psi) ) := \cdots
`$

定義すべき目的の関数を $`\Psi`$ と置いて、書き下すことにしましょう。

$`\Let \Psi :=\prod^* ( f, \psi ) \;: \prod(J, G) \to \prod(I, F) \In {\bf Set}`$

写像 $`\Psi`$ の向きはこれであってます。なぜなら、$`\prod^*`$ は反変関手だからです。

集合 $`\prod(J, G)`$ の要素は、次のタプル〈セクション〉です。

$`\quad y : J \to \sum(J, G) = \sum_{j\in J} G(j)\\
\Where \forall j\in J.\, \pi^G(y(j)) = j`$

定義によれば、$`y(j) \in (\{j\}\times G(j))`$ ですが、暗黙の同一視 $`(\{j\}\times G(j)) \cong G(j)`$ により $`y(j) \in G(j)`$ であるかのようにも扱います。要するに、$`(\{j\}\times G(j)) \leftrightarrow G(j)`$ という切り替えを断りなしにちょくちょく行います。

タプル〈セクション〉 $`y`$ に対する値 $`\Psi(y)`$ を書き下します。

$`\For y \in \prod(J, G)\\
\Define \Psi ( y ) := \\
\quad \lambda\, i\in I.(\, \psi_i ( y(f(i)) ) \;\in F(i)\,)`$

得られた $`\Psi ( y )`$ が $`\pi^F:\sum(I, F) \to I`$ のセクションになっていることはすぐ分かるので、$`\Psi = \prod^* ( f, \psi )`$ が次のプロファイル(域と余域)の関数なのは大丈夫です。

$`\quad \Psi :=\prod^* ( f, \psi ) \;: \prod(J, G) \to \prod(I, F) \In {\bf Set}`$

$`\prod^*`$ が反変関手であるためには、反変の関手性、結合を逆向きに保存すること/恒等を保存することが必要です。これも、律儀に定義を追いかければ出ます。

これで、パイ型構成を関手に拡張できましたが、次の点には注意が必要です。

  1. $`\prod^*`$ は、$`{\bf Fam}`$ からの関手ではなくて、$`{\bf Fam}_\inv`$ からの関手である。
  2. $`\prod^*`$ は、共変関手ではなくて反変関手である。

まとめ

シグマ関手の様子を、ひとつの図にまとめてみれば次のようです。

$`\begin{matrix}
\xymatrix{
(I, F) \ar[d]_{(f, \varphi)}^{\text{ in }{\bf Fam}}
\\
(J, G)
}
&
\xymatrix{
{} \ar@{}[d]^{\overset{\sum_*}{ |\!\longrightarrow}}
\\
{}
}
&
\xymatrix{
\sum(I, F) \ar[d]_{\sum_* (f, \varphi) }^{\text{ in }{\bf Set}}
\\
\sum(J, G)
}
\end{matrix}
`$

パイ関手なら次のようです。パイ関手は反変関手なので、射の矢印は逆転します。

$`\begin{matrix}
\xymatrix{
(I, F) \ar[d]_{(f, \psi)}^{\text{ in }{\bf Fam}_\leftarrow}
\\
(J, G)
}
&
\xymatrix{
{} \ar@{}[d]^{\overset{\prod^*}{ |\!\longrightarrow}}
\\
{}
}
&
\xymatrix{
\prod(I, F)
\\
\prod(J, G) \ar[u]^{\prod^* (f, \psi) }_{\text{ in }{\bf Set}}
}
\end{matrix}
`$

関手 $`\prod^*`$ は、ある意味で“逆向き”に作った圏 $`{\bf Fam}_\inv`$ 上で定義され、射の向きが“逆転する”という性質を持つ反変関手です。ニ種類の“逆”が含まれるのでややこしいです。ご注意ください。

*1:いつでも「型 = 集合」というわけではありません。

*2:集合圏の部分圏をパラメータに選んでも同じことです。