プログラミング/圏論入門 の履歴(No.9)
更新概要†
圏論はプログラミングにおける様々な概念の数学的なバックグラウンドを与えるということで、 前から気にはなっていたのだけれど、こちらにフリーの日本語テキストがあると聞いて読み始めました。
https://ktgw0316.github.io/milewski-ctfp-markdown/
で、全然理解できなかったので、いろいろと調べながら分かった範囲をまとめようとしています
(上のリンク先、それだけで独学するにはあまり向いていないかも???)
目次†
準備: 「クラス」 について†
圏論では『「要素の集まり」ではあるけれど「集合」とは呼べないもの』を扱うことがある。これは、ラッセルの逆説として有名な話で「自分自身を含まない集合をすべて集めたもの $R$」を集合であるとすると矛盾が生じる、というようなのが関係している。
- $R$ が自分自身を含まないなら、$R$ は $R$ に含まれるはず???
- $R$ が自分自身を含むなら $R$ は $R$ に含まれないはず???
どちらも矛盾する。
これは何でもかんでも「要素の集まり」を「集合」と言ってしまうとまずいことが起きうる、ということを示している。
そこで「集合」よりも広い意味で「要素の集まり」と言いたいときの用語として、数学的な専門用語である「クラス(class)」が使われる。これ、数学的に定義をしっかりしようとすると結構ややこしいのだが、基本事項として「クラス」は「集合」と「要素の集まりだが集合とはみなせないもの(真のクラス)」の両方を含む概念。集合はクラスである一方、クラスではあるが集合ではないもの(真のクラスと呼ばれる)が存在する。
以下に出てくる「クラス」という用語は多くの場合「集合のようなもの」という程度の理解でしばらくは読み進められるはず。
圏とは:合成演算を備えた射のクラス(あつまり)†
圏は「射」とその「合成」演算が生み出す構造を扱う代数である。
- 「射」同士に同値関係が定義されていること
- 2つの「射」を自由に「合成」可能なこと
- 「合成」が結合法則を満たすこと
- 「合成」の「単位元」が存在すること
が保証された「射」のクラス(あつまり)のことを圏とよぶ。
ここに出てきた「射」は「対象」と呼ばれるものをつなぐ形で定義される。
圏(category)の定義†
圏 $\mathcal C(O, \mathrm{hom}(\cdot,\cdot))$ と書くとそれは以下を意味する。
- $O$ は対象(object)と呼ばれるものを集めたクラス(集まり)
- 任意の2つの対象 $A, B\in O$ を順序付きで取り出すと、そこに「射(morphism)」のクラス(集まり) $\mathrm{hom}(A,B)$ が付随する
- さらに2つの「射」の間の「合成」という演算に対して以下の公理が満たされる
- 「射」同士に同値関係が定義されていること
- 2つの「射」を自由に「合成」可能なこと
- 「合成」が結合法則を満たすこと
- 「合成」の「単位元」が存在すること
と言ってもなんだかわからないのだが、、、
有向グラフ†
圏をイメージするには「対象」同士を結ぶ「矢印」を描くと分かりやすい。
この図では黒丸が「対象」、矢印が「射」を表す。
いわゆる「有向グラフ」になっている。
ここには $O=\set{A,B,C}$ で3つの「対象」が存在する。
また、例えば $\mathrm{hom}(A,B)=\set{d, e}$ が $A$ から $B$ へ向かう矢印の集合であるとする。
- $\mathrm{hom}(A,A)=\set{a}$
- $\mathrm{hom}(B,B)=\set{b}$
- $\mathrm{hom}(C,C)=\set{c}$
- $\mathrm{hom}(A,B)=\set{d, e}$
- $\mathrm{hom}(B,A)=\set{}$
- $\mathrm{hom}(B,C)=\set{f}$
- $\mathrm{hom}(C,B)=\set{}$
- $\mathrm{hom}(A,C)=\set{g,h}$
- $\mathrm{hom}(C,A)=\set{}$
である。
射が向きを持つこと、ある対象から同じ対象へ戻る射 (例:$a,b,c$) が許されること、に注意せよ。
ただし、任意の有効グラフが圏を構成するかというとそうではなく、
射(矢印)が下で述べる公理を満たすときはじめて圏になる。
Set 圏 = すべての集合とすべての写像が作る圏†
で、始めて圏論を学ぶ際には、「射」の実態として「写像」を思い浮かべると理解しやすい。
写像 $f:A\to B$ は任意の $x\in A$ に対して $f(x)\in B$ となる値を計算する規則(関数)であった。
$A$は始域、$B$は終域と呼ばれる。
上で射とされた $a,b,c,\dots,h$ がそれぞれ個別の写像であり、
$A,B,C$ はそれらの始域や終域となるクラス(集合)であると考える。
これは実際、かなりメジャーな圏の構成である。
特に、$O$ を「すべての集合を集めたクラス」とし(これは真のクラスになる)、
$\mathrm{hom}$ を2つの集合の間に考え得る「すべての可能な写像の集合」(こちらは集合になる)
とする圏には Set 圏という名前がついていて、圏の代表例として良く参照される。
ただし、「全ての集合を含んでいること」「すべての可能な写像を含んでいること」は非常に強い主張なので、これらを緩めて作った集合+写像の圏では Set で成り立つ定理がなりたたない場合も多いので注意が必要である。
(テキストが暗黙に Set を仮定していることがしばしばあったりするので)
Set では「射の合成」は「写像の合成」のことである。
圏論は、個々の写像が始域の個々の要素を終域のどの要素へ移すか、
という「対象の具体的な内部構造」に立ち入らないまま、
「射の合成演算」と「射の同値関係」のみから圏の構造を議論する。
射と合成の公理†
射の合成の公理を式で表しておく:
- 射(写像)は常に合成可能である(圏は射の合成に対して閉じている)
→ $f:A\to B,\ g:B\to C$ があるならそれを合成した $g\circ f: A\to C$ も必ず圏に含まれる
- 射の合成に結合則が成り立つ
→ 任意の $f:A\to B,\ g:B\to C,\ h:C\to D$ に対して
$(h\circ g)\circ f=h\circ (g\circ f)$ が常に成り立つ
- 任意の対象が恒等射(射の単位元)$1$ を持つ
→ 各対象ごとに、任意の $f:A\to B$ に対して、$f=f\circ 1_A=1_B\circ f$
を満たす写像 $1_A:A\to A,\ 1_B:B\to B$ が必ず存在する(恒等射の定義も兼ねている)
- 射の同値関係
→ すぐ上で射の比較が出てきたように、射に同値関係が定義されていることも暗に要求される
したがって、上の図の系が圏であるためには、
- $a=1_A$
- $b=1_B$
- $c=1_C$
- $g=f\circ d$
- $h=f\circ e$
であることが要求される($g,h$ は逆でもいい)。
一般の有向グラフは「合成に対して閉じていること」や「恒等写像が存在すること」を満たさないため、
そのままでは圏にはならない。この2つの要請は圏の性質を強く縛るものになっている。
対象の内部構造に踏み込まず、射の性質のみで公理化する†
恒等射が「要素を変更しない」のような要素レベルの言葉ではなく、
「別の射と合成したときに変化させない」のように射レベルの言葉で定義されていることに注意せよ。
このように圏論では対象の内部構造に踏み込まず、あくまで射と合成の関係のみを議論する。
圏論における「恒等射」は要素を変え得る†
そして、要素レベルの定義と、射レベルの定義とが
決定的に異なる結果を生む場合があることにも注意が必要だ。
最も顕著な例として、ある対象 $A$ へ出入りする射が恒等射 $e$ しかない場合を考える。
このとき上の3つの公理は実質的に「恒等射が冪等であること $e\circ e=e$」しか求めない。
- $e\circ e=e$ であれば閉じている
- $(e\circ e)\circ e=e\circ (e\circ e)=e$ は結合則を満たす
- 任意の $f:A\to B$ や $g:B\to A$ というのが $e$ しかないので恒等性も $e\circ e=e$ しか要求しない
恒等射に「要素を変えない」という要請が与えられないのだ。
例えば 「ゼロを掛ける」 や 「何らかの射影」 のような写像は冪等だ。
つまり実際にはそのような「要素を変化させる射」が「恒等射」とみなされうるのである。
他の射との合成で「本当は恒等でない」という事実が「ばれない」限り、それは恒等と見なされる。
射の合成のみで議論を進める圏論ではこう言うケースがそこここに出てくることに注意せよ。
繰り返しになるが、圏論は対象の中身が何であるか、射の実体は何であるか、 とは切り離して、あくまで射の合成のみを扱う代数なのである。
「恒等射」はその名前に反して、あくまで「合成の単位元」なのだ。
恒等写像は対象あたり高々1つしか存在しない†
射の合成の話をする、の例として、
上記の射の合成の公理から、 ある対象 $A$ の上の恒等写像は高々1つだけであることを導こう。
$1_A:A\to A,1'_A:A\to A$ がどちらも $A$ の恒等写像であるとする。
このとき $1_A=1_A\circ 1'_A=1'_A$ であるから両者は等しい。
一般化された元†
大事なことなので繰り返すが、
圏論では対象の内部構造に踏み込まず、対象同士をつなぐ射の合成だけを扱う。
その文脈において
$Z\to A$ の射自体を
「$Z$ をプローブとして観察した $A$ の一般化された元」と呼ぶことがある。
なぜ「$A$ へ入る射」を「$A$ の元」であるかのように呼ぶのか?
対象 $Z,A$ が離散集合であり、それらを結ぶ射が集合間の写像であるとすると、その気持ちを理解しやすい。
$f:Z\to A$ という写像は任意の $z\in Z$ をどの $a\in A$ に対応させるかを定めたテーブルと同一視できる。
実現可能な独立な写像の数は $\#A^{\#Z}$ 個であり、そのうち実在するものだけを集めたのが $\mathrm{hom}(Z,A)$ だ。
$f$ を 「$f$ による $Z$ の像 $f(Z)\in A$ から要素を $\#Z$ 個取り出して並べたリスト」 と同一視すると、
$\#Z=1$ であれば、その唯一の $z\in Z$ が移された先の1個の要素 $a=f(z)$ からなるリスト $[a]$ になるから、$f$ を $A$ の元 $a=f(z)$ とそのまま同一視できる。
$\#Z>1$ では $A$ の元そのものではなくリストになるので、これを「一般化された元」と呼ぶ。
これが「一般化された元」というときの気持ちだ。
特殊な対象、空写像†
Set圏において空集合 $\set{}$ や、1つの要素だけ(その要素を $()$ と書く) を含む集合 $\set{()}$ は圏論の「対象」として顕著な性質を持つ。
$A$ を任意の対象(Set圏なので集合)とすると、
$f:\set{}\to A$ は写像に与えるべき値が存在しないため「呼び出し不可能な写像」となる
圏論ではこれを「空写像」と呼び、そのような写像がただ1つだけ存在する、とする。
(そんな写像は存在しない、とするのではなく、存在するが呼び出せない、つまり像が空集合である、
と考えるのだそうだ)
$f:A\to\set{}$ は $A=\set{}$ であれば空写像であるが、$A\ne\set{}$ では呼び出せるのに返せる値が存在しない、となってしまうため、そのような写像は存在しない。つまり $\mathrm{hom}(A,\set{})$ は必ず空集合になる。
$f:A\to\set{()}$ は返せる値が1つしかないので、「任意の $a\in A$ に対して $()$ を返す」 という1つの写像だけが存在する。
$f:\set{()}\to A$ は与えられる要素が $()$ に固定されているので、$A$ のどの要素を返すか、だけで写像が定義されるから、$\#A$ 個の独立な写像が存在する。
圏論ではこういった特殊な対象を普遍的に扱うために、**始対象**、**終対象**という言葉を使う。
始対象、終対象、零対象†
始対象$I$とは、任意の対象 $A$ に対して、$f:I\to A$ となる射がただ1つだけ存在する対象のこと。
Set圏では $\set{}$ が始対象になる。
終対象$T$とは、任意の対象 $A$ に対して、$f:A\to T$ となる射がただ1つだけ存在する対象のこと。
Set圏では $\set{()}$ は終対象になる。
零対象$0$とは、始対象かつ終対象であるような対象のこと。
Set圏には零対象は存在しない。
上の図の例では始対象も終対象も存在しない。
上の図から $e,h$ を取り除くと、$A$が始対象、$C$ が終対象となる。
この時、$A$ や $C$ は必ずしも空集合や1要素集合でなくともよく、それぞれのペアに定義される一意な射も空写像や定数写像である必要もない。
始対象†
Q: ある圏に始対象$I$があったとして、そこからある対象 $A$ に対する一意な射 $f:I\to A$ を取り除いてしまったら $I$ は始対象ではなくなるのか?
A: 定義上はそのとおりだが、取り除けない場合があるのでそこには注意が必要。
$g: B\to A$ のような射が存在する場合には、$I\to B\to A$ の合成経路が存在するため、$f$ のみを取り除くことができない。$I$ 以外の対象から$A$への射が一切存在しないときに限って$f$を取り除くことができる。始対象の定義は任意の対象に対して一意な射を持つことなので、そのような射が欠落してしまえば始対象の資格を失う。
終対象は情報を媒介しない†
終対象の一般化された元、つまり、終対象へ入る射は、任意の射のと合成結果が定数になるという著しい性質を持つ。
終対象を 1 と書いて、これを見てみよう。
任意の対象 $A,B$ および $f,g: A\to B$ そして終対象への一意な射 $!_A: A\to 1,!_B: B\to 1$ を考える。
$f,g$ と $!_B$ とを合成した $!_B\circ f$ と $!_B\circ g$ はどちらも $A\to 1$ の射であるが、
$1$ が終状態であるなら $\mathrm{hom}(A,1)$ は一意な射 $!_A$ しか含まないから、
$$!_B\circ f=\,!_B\circ g=\,!_A$$
でなければならない。
もとがどんな $f,g$ であったとしても、そこに $!_B$ を継ぎ足すと区別がつかなくなってしまうのだ。
Set の $1=\set{()}$ では、$f:A\to 1$ は任意の $a\in A$ を唯一の値 $()$ に映すしかなく、もと値 $a$ がどんな値であったかという情報が失われる、という構造だった。
話を一般の圏に戻せば、射や対象の「中」で何が起きているかを見ずとも、
終状態という構造だけから、$1$ を経由する射の合成結果が
($1$ に入るまでの部分を $!$ に書き換えることができるため)
$1$ 以前の合成の情報を失うことを結論できるのである。
$$ \begin{aligned} &A\underbrace{ \xrightarrow{f_1} B\xrightarrow{f_2} C\xrightarrow{!_C}}_{!_A} 1\xrightarrow{f_3} D\xrightarrow{f_4} E\\[5mm] =\,&A \hspace{11mm} \xrightarrow{!_A} \hspace{11mm} 1\xrightarrow{f_3} D\xrightarrow{f_4} E\\ \end{aligned} $$
零対象†
零対象を持つ圏では、ゼロ元あるいは単位元のみからなる集合が零対象になることが多い。
例えばベクトル空間を対象として線形変換を射とする圏において、
- ゼロ次元空間 $\set{0}$ から任意の線形空間への線形変換は $0\mapsto 0$ の1種類しかない
- 任意の線形空間からゼロ次元空間 $\set{0}$ への線形変換は $v\mapsto 0$ (すべてを $0$ に移す) の1種類しかない
任意の $A\to 0\to B$ のような写像は元の $A$ にあった情報を捨てて $B$ のゼロ元に移るという顕著な性質を持つ。
始対象・終対象は存在するなら同型を除いて一意である。
なぜなら、例えば $I,I'$がどちらも始対象であれば$a:I\to I'$、$b:I'\to I$、$c:I\to I$、$d:I'\to I'$ にはそれぞれに一意な射であるから $b\circ a:I\to I, a\circ b:I'\to I'$ はそれぞれ $c,d$ に等しく、さらに恒等射に等しい。すなわち $a,b$ は互いに逆射である。
逆射と同型の関係を次に述べる。
「集合の元」に一対一対応する「射」†
一般化された元のところで、集合と写像の圏においては
$\#Z=1$ となる集合 $Z=\set{z}$ に対して、
任意の $f:Z->A$ は $a=f(z)\in A$ という定数写像であるから、
その定数である特定の $A$ の要素 $a$ と同一視できる、と述べた。
Set 圏は対象間に「考え得るあらゆる写像」を射として含むため、
- $\#Z=1$ となる集合はすべて終対象になる
- $\#Z=1$ のとき $\mathrm{hom}(Z,A)$ は $A$ の全ての元に一対一に対応する射を含む
通常、圏論では「対象の中身に踏み込まず射の合成のみに注目する」のであるが、
Set 圏では「対象の要素」に一対一対応する射 $\mathrm{hom}(1,A)$ があるので、
集合の要素の演算を間接的に圏論に取り込める。
例えば、$a\in \mathrm{hom}(1,A)$ とすれば、これはあくまで「$a$ を返す定数写像」であるが
任意の $f:A\to B$ に対して $f\circ a\in \mathrm{hom}(1,B)$ は $f(a)\in B$ に対応する定数写像になるから、$f(a)$ の計算を射の合成 $f\circ a$ で再現していることになる。
集合の元から元への計算をすべてそのまま、射の合成として表せるのだ。
これは非常に便利な性質であるため、Set でない一般の集合+写像の圏でも、
終状態 $1$ の存在と、任意の $A$ の要素を生成する定数写像が $\mathrm{hom}(1,A)$
に含まれることを仮定する場合が多い。
そこで仮定される
- すべての集合から唯一の射が伸びる終状態 $1$
- そこから任意の元を生成する定数写像
これらの「実体」は何なのか?
そんなものを仮定していいのか?
と考え始めると悩むことになるのだが、
- $1$ の唯一の元は null あるいは概念的な「無」を表す
- $1\to A$ は無から任意の要素を作るコンストラクタ
- $A\to 1$ は任意の要素を無に帰すデストラクタ
と思えば、現実世界の集合&写像を圏の世界に写し取る際に、
「個々の要素を手に取る」「それを捨てる」という「概念」あるいは「操作」自体を
圏に持ち込んだのが $1$ である、と理解できるはずだ。
集合では「個々の要素について議論可能」という概念そのもの、ということ。
そしてそれを持ち込む理由は、通常なら対象の中身に踏み込めない圏論に 「個々の要素について議論可能」という能力を付加するためだ。
圏論はあくまで射のみを議論し、対象の内部構造には踏み込まない、という建前を崩さないまま、 集合の元をこっそり射に写し取っておくことで、実は集合の元を直接あつかう、 という圏論の本性がここに出る。
well-pointed や separator の概念との違い†
圏論には well-pointed や separator という概念があって、
これは $\mathrm{hom}(1,A)$ が「異なる射を区別するのに十分なだけの生成射」を含む
という意味である。
これと上の、「$A$の要素をすべて生成可能」とは異なる概念なので注意しよう。
現実世界に存在する「具体圏」に、任意の集合からデストラクタが向かう先である「終対象 $\set{\text{無}}$と、コンストラクタ $\mathrm{hom}(\set{\text{無}},A)$ を加えて、 要素そのものをいじれる圏を構成する手法については、 入門的な文章においてあまりしっかり説明されているケースがないみたい?
圏論を実世界と対応させるときには非常に大事な部分なはずなので見落とさないようにしたい。
逆射の存在と対象の同型性†
2つの射 $a:A\to B,b: B\to A$ が $a\circ b=1_B$ かつ $b\circ a=1_A$ を満たすとき
$a,b$ は互いに逆射であると言う ($a^{-1}=b, b^{-1}=a$)
逆射を持つ射を同型射と言い、同型射で結ばれる $A,B$ は同型であると言う。
逆射を持つ同型射は一対一写像(全単射)のようなものと思えばいいが、
一般の圏では対象は必ずしも集合ではなく射は必ずしも写像ではないし、
対象が集合であり、$a$ が一対一写像であったとしても、
その逆写像 $a^{-1}$ が必ずしも圏に含まれないため 素朴には同一視はできないことに注意が必要である。
定理:同型な対象は、周囲の対象と必ず同じ本数の射で結ばれている†
$A,B$ が同型であるとすると、$f:A\to B$ と $f^{-1}:B\to A$ が存在する。
ある $C$ に対して、
- $g:C\to A$ が存在するなら、それに対応して $f\circ g:C\to B$ が必ず存在する
- $h:A\to C$ が存在するなら、それに対応して $h\circ f^{-1}:B\to C$ が必ず存在する
このように、「同型であること」と「射の合成が常に可能であること」との組み合わせにより、
同型な対象は圏の中に「とてもよく似た構造」を持つことになる。
単射、全射、全単射†
圏論ではこれらの概念も、「個別要素がどこに写像されるか」に踏み込まずに定義される。
$f:A\to B$ として、
$f$ が単射とは: 任意の対象 $C$ と $g, h: C\to A$ に対して、$g\ne h⇒f\circ g\ne f\circ h$
- 通常、写像の用語で単射とは、「入力が異なれば出力が異なる」という性質のことである
- 圏論ではそれを、前置する写像が異なれば、合成写像が異なる、と言い換えている
- 両者は一見すると似ているものの、実はこの違いは大きくい
- 写像として単射ではなく、複数の要素が同じ出力を生じる場合であっても、ちょうどそこを踏み分けるような $g\ne h$ が圏内に存在しなければ、圏論的には単射と呼ばれることになるのである。
$f$ が全射とは: 任意の対象 $C$ と $g, h: B\to C$ に対して、$g\ne h⇒g\circ f\ne h\circ f$
- 写像用語で全射とは、出力が終域すべてをカバーする、というようなことである
- それを、後置する写像が異なれば、合成写像が異なる、と言い換えている
- 終域の中で出力がカバーしない範囲があれば、そこでだけ異なる値を取るような異なる $g,h$ に対して、合成射が等しくなってしまうことを思い浮かべれば意味を理解しやすい
- とはいえこちらも、もし終域にカバーしない範囲があったとしても、それを見分けられる射 $g,h$ が存在しなければ全射と見なされるため、写像としての全射とは同一視できない
$f$ が全単射とは: 全射かつ単射であること。
写像としての全射・単射と、圏論における全射・単射が大きく異なることを示す極端な例として、任意の対象間に高々1つしか射が定義されていない「細い圏(thin category)」では、すべての射がその内容に寄らず自動的に全単射となることを確認せよ。$g\ne h$ となる射が存在せず、公理が実質何のチェックも行わないためだ。
当然、こういう「実際には何のチェックもされていない全単射」は「逆射の存在」を保証しない。
圏論では「全単射」と「逆射の存在」とがまったく別の概念となることに注意を払おう。
双対性†
| 用語 | 定義 |
| 始対象$I$ | 任意の対象 $A$ に対して、$f:I\to A$ となる射がただ1つ |
| 終対象$T$ | 任意の対象 $A$ に対して、$f:A\to T$ となる射がただ1つ |
のように並べてみると、これらの定義は矢印の方向が逆なだけでそっくりな形をしている。
この類似性は双対性(duality)と言い表される。
圏 $\mathcal C(O,\mathrm{hom})$ の射の向きだけをすべてひっくり返した反対圏 (opposite category) $\mathcal C^{\mathrm{op}}(O,\mathrm{hom}')$ を作ることを考える(双対圏 dual category とも呼ばれる)。これは例えば$A\to B$ の写像の向きを反転させて$B\to A$ の写像を考えよう、というようなことを言っているのではなく、$\mathrm{hom}(A,B)$ が $A\to B$ の写像の集合だったのに対して、$\mathcal C^{\mathrm{op}}$ では $\mathrm{hom}'(B,A)$ が $A\to B$ の写像の集合であるとしよう、と言っている。対象であったり、写像であったりといった実体は同じまま、射の向きを写像の向きと反対方向に取ると定義するだけ。
すると、元の圏における始対象・終対象は反対圏では逆に終対象と始対象になる。このように矢印の向きだけを入れ替えたときに対応するペアを一般に双対(dual)と呼ぶ。$\mathcal C$ と $\mathcal C^{\mathrm{op}}$ は双対(双対圏)であり、始対象の定義と終対象の定義も双対の関係にある。
圏論で1つ定理を証明すると、その双対も自動的に証明されるのは便利な性質である。
積 (product)†
対象$A,B$の**積**とは、下記の公理を満たす3点セット $(A\times B,p,q)$ のこと。
- 対象 $A\times B$ = $A,B$ の直積$(A,B)$の集合をイメージ
- 射 $p:A\times B \to A$ (第1射影) = $(A,B)$ から $A$ を取り出す射影をイメージ
- 射 $q: A\times B \to B$ (第2射影) = $(A,B)$ から $B$ を取り出す射影をイメージ
公理:
任意の対象$C$と、任意の射の組 $f: C\to A$、$g: C\to B$ に対して、
ただ1本の射 $h: C \to A\times B$ が存在して、
$p\circ h = f$ かつ $q\circ h = g$ を満たす。
考えているストーリーは以下のようなもの:
- 要素 $\gamma\in C$ を入力として $f,g$ により $\alpha=f(\gamma)\in A,g(\gamma)\in B$ を得る
- それらをまとめて一旦 $\big(f(\gamma),g(\gamma)\big)\in A\times B$ に入れておく
- $f,g$ した後まとめる演算が $h:\gamma\mapsto\big(f(\gamma),g(\gamma)\big)$
- $\big(f(\gamma),g(\gamma)\big)\in A\times B$ から $p:(\alpha,\beta)\mapsto\alpha,$ $q:(\alpha,\beta)\mapsto\beta$ により $A,B$ の元を取り出すと $f,g$ を再現できる
そこからどうして上の公理が出てくるのか?
$C,f,g$ を仮定すると唯一の$h$が決まる、というのはどういうことか?
公理が言っているのは $A\times B$ からの取り出し方法 $p,q$ が与えられているとき、
正しく取り出せるような入れ方 $h$ が1つだけ存在する、ということ
これにより「取り出したもの $p(\cdot),q(\cdot)$」から
「入れたもの $\big(f(\gamma),g(\gamma)\big)$」を再現できる ことを保証するのである。
そして、それだけ見ている見落としそうなもう1つの強い制約として、
任意の $(C,f,g)$ に対して $h$ が必ず1つ存在しなければならないということがある。
これは $(A\times B,p,q)$ だけでなく圏自体に対する強い制約になっている。
$h$ が欠損するような$(C,f,g)$があってはならない。
ここまでの議論は $A,B,A\times B$ の元について直接考える代わりに、
$C$ からそれぞれの対象に元を生成する射$f,g,h$に基づいたものになっていた。
一般化された元、プローブ対象、錐†
一般化された元、という語は上で紹介した。
$\mathrm{hom}(C,A)$ は $C$ をプローブとした $A$ の一般化された元。
今はプローブ対象 $C$ を変えながら、複数の対象の一般化された元、 $\mathrm{hom}(C,A), \mathrm{hom}(C,B)$ を同時に考えている。
このようにプローブ対象から各対象へ一般化された元が伸びる構造は「錐(cone)」と呼ばれる。
要素の言葉で考えれば、$c\in C$ が写像により $A,B$ に移された先の値同士の関係を考えていることになる。
異なる $C$ を頂点とする錐の間の関係を考える手法は今後も良く出てくることになる。
余積 (coproduct)†
余積は積と双対関係にある構造である。互いに双対関係にあるペア、と言う意味で co- の接頭辞がつく。この定義は積の定義の矢印方向および合成順序をひっくり返して得られる。
対象$A,B$の**余積**とは、下記の公理を満たす3点セット $(D,p,q)$ のこと。
- 対象 $D$
- 射 $p:A\to D$ (第1射影)
- 射 $q: B\to D$ (第2射影)
公理:
任意の対象$C$と、任意の射の組 $f: A\to C$、$g: B\to C$ に対して、
ただ1本の射 $h: D\to C$ が存在して、~
$h\circ p = f$ かつ $h\circ q = g$ を満たす。
| 積 $D$ | 余積 $D$ |
| $p:D\to A$ $q:D\to B$ $f:C\to A$ $g:C\to B$ $h:C\to D$ $p\circ h=f$ $q\circ h=g$ | $p:A\to D$ $q:B\to D$ $f: A\to C$ $g: B\to C$ $h:D\to C$ $h\circ p=f$ $h\circ q=g$ |
余積構造を持つ写像 = 直和†
$\mathcal C$ での積が $\mathcal C^{\mathrm{op}}$ で余積に見える、というのはその通りであるが、それとは別に
$\mathcal C$ 内に余積構造を持つ写像を構成することも可能である。
$\alpha\in A,\beta\in B$ のとき、特殊な元 $\mathrm{null}$ を使って、
$D=A+B$ を $\set{(\alpha,\mathrm{null})}\cup\set{(\mathrm{null},\beta)}$ と定義し、
$p:\alpha\mapsto (\alpha,\mathrm{null})$
$q:\beta\mapsto (\mathrm{null},\beta)$
とする。
$h$ を、
- $A+B$ の元が $\alpha$ のみ含んでいるか、$\beta$ のみ含んでいるかを判別
- その結果をもとに適切に $f$ または $g$ を適用
- $f(\alpha)$ または $g(\beta)$ を返す
とすれば、$h\circ p=f,\ h\circ q=g$ が成り立つ。
$A,B$ の元をごちゃまぜに $A+B$ に突っ込んだところから、
それらを適切に分離して $A$ または $B$ の元を取り出す方法が一意に定まる、
というのが余積の構造であると読み取ることができる。
圏における積が対象の直積に相当するのに対して、
圏における余積は対象の直和に相当する。
積と余積とデータ構造†
- タプルやレコードは複数のデータ型の直積であり、圏論の積の構造を持つ
- タグ付きユニオン型(discriminated union、例えば`{tag:"A",value:A}|{tag:"B",value:B}`)は複数のデータ型の直和であり、圏論の余積の構造を持つ
- TypeScriptの素朴なユニオン型`A|B`は、AとBの構造が重なっていると由来の判別ができなくなる場合があり、その場合は余積にならない点に注意が必要
- python なら値自体が型情報を持っているからそれ単体で直和が表現される
このあたりまでは比較的単純だが、リストやツリーでは再帰的に型が定義され、単純な積や余積には見られない構造を持つ。これらを議論する準備として、以下では関手や不動点について学ぶ。
関手 (functor)†
関手はある圏 $\mathcal C(O, \mathrm{hom})$ から別の圏 $\mathcal C'(O', \mathrm{hom}')$ への間の写像 $\mathcal F=(\mathcal F_o,\mathcal F_m)$ で、
$\mathcal F_o:O\to O'$ → 対象を対象に移す
$\mathcal F_m:\mathrm{hom}(A,B)\to \mathrm{hom}'(\mathcal F_m(A),\mathcal F_m(B))$ ただし $A,B\in O$ → 射を射に移す
次の性質を持つもののことである。
$\mathcal C$ 全体を $\mathcal F$ で変換した構造がそのまま $\mathcal C'$ 上で部分圏 $\mathcal F(\mathcal C)$ を作り、さらに合成と恒等射を保つ。
$$ \mathcal F_m(g\circ f)=\mathcal F_m(g)\circ \mathcal F_m(f),\ \mathcal F_m(1_A)=\mathcal 1_{F_m(A)} $$
関手は $\mathcal C$ と $\mathcal C'$ とをつなぐ写像になるが、これは必ずしも $\mathcal C$ と $\mathcal C'$ とが、あるいは $\mathcal C$ と $\mathcal F(\mathcal C)$ とが同型 (後で定義する) であることを意味しない。
$\mathcal F$ が全射でなければ $\mathcal F(\mathcal C) \subsetneqq \mathcal C'$ であるし、
$\mathcal F$ が単射でなければ $\mathcal C$ の構造の一部は $\mathcal F(\mathcal C)$ の中で「つぶれて」しまう。
例えば $\mathcal F_o$ がすべての $A_i\in O$ を特定の $X\in O'$ に移す定数写像であり、
$\mathcal F_m$ がすべての $f\in\mathcal C$ を $X$ 上の恒等射 $1_X$ に移す定数写像であったとすれば、
$\mathcal C$ の対象と射の関係は(大幅につぶれてしまうものの)部分圏 $\mathcal F(\mathcal C)$ の中に対応関係を保ったまま埋め込まれる。
この例は「定数関手」と呼ばれる最も小さな部分圏を生む関手であり、 $\mathcal F(\mathcal C)$ には $\mathcal C$ の情報は何も残らないが、このようなものも関手の一つであるとされる。
特に射に関手を適用して、新しい件の上での射を得ることをしばしば「持ち上げる(lift)」と表現するようだ。
同型関手†
関手 $\mathcal F:\mathcal C\to \mathcal C'$ が逆関手 $\mathcal F^{-1}:\mathcal C'\to \mathcal C$ を持つ、
すなわち $\mathcal F\circ \mathcal F^{-1}$ や $\mathcal F^{-1}\circ \mathcal F$ が恒等写像になるように $\mathcal F^{-1}$ を構成できるとき、
関手 $\mathcal F$ は同型関手であり、$\mathcal C$ と $\mathcal C'$ は同型である、と言う。
逆関手が存在する条件は、通常の写像と同様に関手$\mathcal F$が全単射であることと同値である。
関手$\mathcal F$の性質は対象の写像$\mathcal F_o$と射の写像$\mathcal F_m$とに分けて考えられるが、
このうち射の写像$\mathcal F_m$については特別に、
写像 $\mathcal F_m$ が $\mathrm{hom}(A,B)\to \mathrm{hom}'(\mathcal F_o(A),\mathcal F_o (B))$ の写像として
- 単射であることを 忠実
- 全射であることを 充満
というように 忠実 および 充満 の語が定義されている。
「充満忠実な関手」と言うのは $\mathcal F_m$ が全単射であることと同値である。
関手$\mathcal F$が全体として全単射であるためには充満忠実に加えて対象の写像 $\mathcal F_o$ が全単射である必要がある。
(関手$\mathcal F$が同型関手) = (関手$\mathcal F$が逆写像を持つ) =
(関手$\mathcal F$が全単射) = (充満忠実 = $\mathcal F_m$ が全単射) + ($\mathcal F_o$ が全単射)
同値関手†
注目する部分圏に同型な対象が複数存在するとき、圏の「同型」を少し緩めた「同値」という概念が役に立つことがある。
「同型な対象」とは両者の間に射と逆射のペアが定義された2つの対象のことであった。対象が集合であるなら、両者の要素の間に全単射による一対一対応がある状況を思い浮かべると良い。
部分圏が同型な対象を複数含むとき、関手がそのどれを、相手のどれに対応付けるか、には任意性がある。
例題として、$\mathcal C$ が含む $A,B,C$ が互いに同型な対象であるとしよう。
これらをそれぞれ $\mathcal C'$ が含む $A',B',C'$ に対応させて同型関手になるならそれらも同型であるから、
$A\mapsto A', B\mapsto B', C\mapsto C'$ と対応付ける代わりに、
$A\mapsto B', B\mapsto C', C\mapsto A'$ と対応付けても同型な関手を作ることが可能ということ。
それをさらに進めて、
$A\mapsto A', B\mapsto A', C\mapsto A'$ のようにつぶしてしまっても本質的な構造は保たれるから、
こういう「同型よりも少し緩い対応付けの取れる圏同士」を「同値」と呼ぼう、という話。
逆に、
$\mathcal C$ には $A$ しかないが、
$\mathcal C'$ は $A$ に対応する $A'$ と同型な $B',C'$ も含むとする。
このとき、
$\mathcal C$ から $\mathcal C'$ へ延びる関手は $A\mapsto A'$ だけで、$B',C'$ に対応付けるための対象が不足するが、このときも同型を代表して $A'$ に対応付けられていれば $\mathcal C$ と $\mathcal C'$ 全体 ($B',C'$ を含む) とが同値である、と呼ぶ。
(こう定義することで「同値」が対称律を持つようになる)
自己関手†
圏を自分自身の上へ移す関手のこと。
具体例:リスト関手†
例えば、プログラム上の型を対象として、関数を射とする圏において、型 $A,B$ と射 $f:A\to B$ があるとしよう。
リスト関手$\mathcal F$ は任意の型をその型を要素とするリストに変換し、任意の射をリストを受け取り、個々の要素に射を適用して結果のリストを返す射に変換する。
- $\mathcal F_o(A)=\mathrm{List}\langle A\rangle$
- $\mathcal F_o(B)=\mathrm{List}\langle B\rangle$
- $\mathcal F_m(f)=(\mathrm{list}: \mathrm{List}\langle A\rangle)=>\mathrm{list.map}(f)$
- $\mathcal F_m(1_A)=1_{\mathrm{List}\langle A\rangle}$
- $\mathcal F_m(1_B)=1_{\mathrm{List}\langle B\rangle}$
みたいな。
このリスト関手 $\mathcal F$ は確かに任意の $A,B,f$ からなる小さな部分圏を $\mathrm{List}\langle A\rangle, \mathrm{List}\langle B\rangle, \mathcal F_m(f)$ からなる別の圏構造へその構造を保ったまま移す写像になっている。
圏が十分に広い範囲の射を含むケースにおいて、
この関手は忠実である: $f\ne g$ に対して $\mathcal F_m(f)\ne \mathcal F_m(g)$ が成り立つ
この関手は充満ではない: 各要素に同一の関数を当てはめる以外のずっと多くの射、例えば要素の入れ替えなどが考えられ、$\mathcal F_m(f)$ はそれらを覆いつくさない。
忠実性や充満性は圏がどういう射を含んでいるか次第であることには注意が必要だ。そもそも $f\ne g$ となるような射が存在しないなら $\mathcal F_m$ をどう定義したところで忠実。リスト間に適用可能な関数が map しか与えられていないなら充満になりうる。
双関手†
上で見た関手は $\mathcal C$ から $\mathcal C'$ への写像、つまり1つの圏から1つの圏への写像。
双関手は2つの圏から1つの圏への関手であるのだが、説明のまえに準備をしよう。
準備:積圏†
2つの圏$\mathcal{C}$と$\mathcal{D}$から、新しい圏$\mathcal{C}\times\mathcal{D}$(積圏)を以下のように作る。
- 対象:$\mathcal{C}$の対象$c$と$\mathcal{D}$の対象$d$のペア $(c,d)$
- 射:$(c,d)\to(c',d')$は、$\mathcal{C}$の射$f\colon c\to c'$と$\mathcal{D}$の射$g\colon d\to d'$のペア$(f,g)$
- 合成:成分ごとに合成する。$(f',g')\circ(f,g)=(f'\circ f,\ g'\circ g)$
- 恒等射:$(c,d)$の恒等射は$(1_{\mathcal C},1_{\mathcal D})$
2つの圏を「横に並べて、対象も射もペアにしただけ」のもの。
双関手†
双関手は2つの圏から1つの圏への写像であるが、
つまり積圏を始域とする通常の関手とみなすこともできる。
$\mathcal C\times \mathcal D\to \mathcal E$
積の双関手†
分かりやすい例は積の双関手。
この場合には $\mathcal C=\mathcal D=\mathcal E$ として、
任意の対象 $A,C$ とその間の射 $f:A\to C$
任意の対象 $B,D$ とその間の射 $g:B\to D$^
を考える。
さらにこの圏が $A\times B$ および $C\times D$ の積構造を含んでいるとして次のような絵を描くと、ここから下記の形の「積の双関手」を抽出できる。
$\mathcal F_o(A,B)=A\times B$
$\mathcal F_o(C,D)=C\times D$
$\mathcal F_m(f,g)=(a, b)\mapsto(f(a), g(b))$ これは $(A\times B)\to(C\times D)$ の写像
積構造 $A\times B$ および $C\times D$ には $A,B,C,D$ との間の射の存在が含まれているため、始めに $\mathcal C=\mathcal D=\mathcal E$ を仮定したのであった。このように、積の双関手は圏が積構造を含む際に初めから存在した構造を浮き彫りにしたものとみなせる。
余積の双関手†
同様に余積の双関手も作れる。
$\mathcal F_o(A,B)=A+B$
$\mathcal F_o(C,D)=C+D$
$\mathcal F_m(f,g)=A\text{の元なら} f \text{を、} B\text{の元なら} g \text{を適用}$ これは $(A+B)\to(C+D)$
これも余積の構造に付随して初めから存在する構造に名前を付けたものとみなせる。
これら積の双関手や余積の双関手の後ろに通常の(単項の)関手をつなぐことで、バラエティ豊かな一般の双関手を構成可能である。
反変関手・共変関手†
関手の $\mathcal F_m$ が射の向きをすべて逆転させるとき、反変関手という
今まで考えていた射の向きを保つ普通の関手は 共変関手という
$\mathcal C$ の反変関手による変換は $\mathcal C^{\mathrm{op}}$ の共変関手による変換と見做せる
プロ関手†
第1引数 $\mathcal C$ に反変、第2引数 $\mathcal D$ に共変な、Set圏を終域とする双関手をプロ関手という $$\mathcal C^{\mathrm{op}}\times\mathcal D\to\mathrm{Set}$$ なぜこんなものを考えるのか?
元々やりたいのは、
- $\mathcal C$ の射 $f_{ab}:A\to B$
- $\mathcal D$ の射 $f_{cd}:C\to D$
を元にして、
$f_{bc}:B\to C$ の前後に $f_{ab},f_{cd}$ を継ぎ足して $f_{ad}:A\to D$ に変換する射を生成するようなこと $$f_{bc}\mapsto f_{cd}\circ f_{bc}\circ f_{ab}=f_{ad}$$ $f_{cd}\circ f_{bc}\circ f_{ab}$ の接続により $A\to B\to C\to D$ として正しく計算可能になる。
この接続の演算は対象「$B\to C$ の任意の関数」から「対象 $A\to D$ の任意の関数」への射である。
これを 対象のペア $(B,C)$ から対象のペア $(A,D)$ への射 $(f_{ab}^{\mathrm{op}}, f_{cd})$ から生成する関手を考えているのだ。
| 関手の変換元 | 関手の変換先 | |
| 対象「ペア $(B,C)$」 | → | 対象「$B\to C$ の任意の関数」 |
| 対象「ペア $(A,D)$」 | → | 対象「$A\to D$ の任意の関数」 |
| 射 $(f_{ab}^{\mathrm{op}}, f_{cd})$ | → | 「$B\to C$ の任意の関数」から「$A\to D$ の任意の関数」への射 $g\mapsto f_{cd}\circ g\circ f_{ab}$ (関数の変換) |
変換先で必要となる情報が、正しく変換元から与えられていることを確認できる。
プロ関手で片側のみ双対をとる必要が生まれたのは、$(B,C),(A,D)$ のペアを作るためであったことが分かるはずだ。
プロ関手はこれを一般化した、
$\mathcal C^{\mathrm{op}}\times\mathcal D\to\mathrm{Set}$ の形を満たす変換のことなので、
以下の形をテンプレートとすると理解しやすい。
| 関手の変換元 | 関手の変換先 | |
| 対象「ペア $(B,C)$」 | → | 目的に応じて変換したもの |
| 対象「ペア $(A,D)$」 | → | 目的に応じて変換したもの |
| 射 $(f_{ab}^{\mathrm{op}}, f_{cd})$ | → | 目的に応じて変換したもの |
Hom関手†
圏 $\mathcal C(O, \mathrm{hom})$ から射の集合 hom を取り出す関手で、これは $\mathcal C$ 同士の間のプロ関手になる。 $$\mathcal C^{\mathrm{op}}\times\mathcal C\to \mathrm{Set}$$ 上の表を使うと関手の変換は以下のように理解できる。
| 関手の変換元 | 関手の変換先 | |
| 対象「ペア $(B,C)$」 | → | $B\to C$ の射の集合 $\mathrm{hom}(B,C)$ |
| 対象「ペア $(A,D)$」 | → | $A\to D$ の射の集合 $\mathrm{hom}(A,D)$ |
| 射 $(f_{ab}^{\mathrm{op}}, f_{cd})$ | → | 射 $g\mapsto f_{cd}\circ g\circ f_{ab}$ $B\to C$ から $A\to D$ への射の変換 |
プロ関手の説明で「こういうことがしたい」とかいていたものそのままが Hom 関手と思ってOK。
関数対象†
その意味するところ†
関数対象$A\Rightarrow B$とは、対象 $A,B$ を含む圏に存在する1つの対象であって、対象$A$から$B$への射の集合そのものであるか、あるいは対象$A$から$B$への射と一対一に対応する要素(個々の射に付けたラベルのようなもの)を集めた集合、であることを想定して作られた存在だ。 特定の圏が実際にそういうものを含むかどうか、あるいはそれがどのように射と対応するか、あたりも含めて以下で説明する。
まず、Set圏はすべての集合を対象として含む圏だった。
任意の集合間の写像を集めた hom は集合になるから、
Set圏の任意の hom はそれ自身Set圏に対象として存在する。
だからこれをそのまま関数対象見做せる。
一方、その他の圏では hom 集合自体が対象として存在する保証がないため、関数対象は射自身を集めたものではなく、射と一対一に対応するラベルを集めた集合であっても構わない。
公理化の方針†
以下ではこの「関数対象」に普遍的な公理(要素に言及せず射の性質のみで記述された公理)を与える。実のところ、そのような圏論的な定義は関数対象$A\Rightarrow B$ の内部構造に踏み込まないので、その要素が何であるかという上記のような話は本質的ではなくなる。
またこの公理は「圏の中に関数対象を作り出そう」とするものではない。すでに圏の全体像は決まっているものとして、その圏の個々の対象に対して、その対象が「関数対象$A\Rightarrow B$ と見做せるものであるかどうか」を判別する手段を与えるものである。
この公理、かなり複雑なので順を追って説明する。
公理の実体†
考える関数(射)の始域を $A$、終域を $B$ として、これらは圏に含まれるとする。
関数対象の候補を $Z$ とすると、関数に始域$A$の値を与えて評価し、終域$B$の値を得る手順は、具体的な関数(のラベル) $z\in Z$ と、そこに与える引数 $a\in A$ を受け取って、そこから返り値 $b\in B$ を計算して返すことに相当する。
関数対象の公理ではこの手順を $Z\times A$ から $B$ への射(評価射と呼ばれる) $g:Z\times A\to B$ と同一視するため、そもそも圏に積 $Z\times A$ が含まれないような $Z$ は始めから関数対象の候補から外してしまう。
一般には関数対象は単なるラベルなので、その評価射 $g$ とセットで初めて演算の内容が定義される。そこで以下では候補探しは $Z,g$ をセットで考える。
$Z\times A$ が存在し、評価射の候補 $g:Z\times A\to B$ が存在すれば、$Z,g$ は関数対象とその評価射の候補になる。そして、ある特定の候補が圏に含まれる任意の候補を下記の意味で「過不足なく生成可能」であるとき、それこそが関数対象$A\Rightarrow B$ および評価射 $\mathrm{eval}$ であるとするのがこの公理である。そのような候補は複数あっても構わないが、それらはすべて同型となるため、関数対象$A\Rightarrow B$は同型を除いて一意に決定される。逆にそのような候補がないとき、その圏には関数対象$A\Rightarrow B$は存在しない。
関数対象とその評価射の候補 $Z',g'$ が別の候補 $Z,g$ から「過不足なく生成可能」とは、
$$g'=g\circ(h\times 1_A)$$
を成り立たせる
$$h:Z'\to Z$$
が 「ただ一つだけ」 存在すること、として定義される。
これだけだと難しいので、以下では集合の言葉を使って解釈しよう。
$g'=g\circ(h\times 1_A)$ の意味†
等号で結ばれた2つの射に $(z',a)\in Z'\times A$ を与えると、$$g'(z',a)=g\circ(h\times 1_A)\,(z',a)$$ となる。
- 左辺は $g'$ がそのまま $z'\in Z'$ を使って $a\in A$ を評価する射
- 右辺は $(h(z'),a)$ に変換してから $g$ に渡すという合成射
つまり $g$ が $z=h(z')$ で $a$ を評価する射
これら2つが等しいという主張。
言い換えれば、$z$ と $h(z')$ が同じ関数を表すということ。
なぜこの条件を $Z,g$ が $Z',g'$ を過不足なく生成可能と言うのか?
過不足なく生成可能†
上の条件を成り立たせる $h$ の存在は、
任意の $z'\in Z'$ に対してそれと一致する関数 $h(z')$ が $Z$ に含まれていることを意味する
そして、そのような $h$ が複数存在するとしたら、
ある $z'\in Z'$ に一致する関数 $h_1(z'), h_2(z'), \dots$ が2つ以上 $Z$ に含まれており、そのうちどれ対応させてもよい、ということになる。すなわち $Z$ 内に同じ関数が複数含まれていることに対応する。
だから、そのような $h$ が「ただ1つ存在する」という主張は任意の $z'\in Z'$ に対して、それと一致する関数が $Z$ にただ一つ含まれている、と読み替えられて、これが候補 $Z',g'$ が別の候補 $Z,g$ から「過不足なく生成可能」の意味である。
すべての候補を過不足なく生成可能†
すべての候補を「過不足なく生成可能」な $Z,g$ が見つかったならそれらを $A\Rightarrow B,\mathrm{eval}$ と書き、関数対象とその評価射と呼ぶ。
上記の公理により、$A\Rightarrow B$ には圏が持つ任意の $Z\times A$ と、$\mathrm{hom}(Z\times A,B)$ に含まれる任意の評価射の組み合わせで表現しうるすべての$A\to B$関数から、重複を取り除いたうえですべて1つずつ含まれていることが保証される。
追加で必要な条件†
ここまで来て何なのだが、実はここまでの議論には致命的な欠陥がある。
すぐ上で次のように書いた。
上記の公理により、$A\Rightarrow B$ には圏が持つ任意の $Z\times A$ と、$\mathrm{hom}(Z\times A,B)$ に含まれる任意の評価射の組み合わせで表現しうるすべての$A\to B$関数から、重複を取り除いたうえですべて1つずつ含まれていることが保証される。
上記公理が $A\Rightarrow B,\mathrm{eval}$ に保証するのは本当にこれだけなのだ。
何が欠けているかと言うと、「候補たちが表現していた関数」 が 「実際の$\mathrm{hom}(A,B)$と対応しているかどうか」 について一切言及されていないということ。
これは本当に致命的で、一生懸命 $A\Rightarrow B$ に集めて回った射は実際の$\mathrm{hom}(A,B)$とは関係なく、たまたま候補たちが表現していた関数だった!
この致命的問題を回避するには、上記の公理に
「圏が終対象 $1$ およびその積 $1\times A$ を含むこと」という新たな仮定を加えればいい。
そうすることで関数対象 $A\Rightarrow B$ が(集合論を扱う圏論の言葉の上で)正しく $\mathrm{hom}(A,B)$ と一対一に対応し、その射を評価射 $\mathrm{eval}$ により再現できるようになる。
(集合論を扱う圏論の言葉の上で)という注釈については下記証明を参照。
終対象 $1$ およびその積 $1\times A$ の存在を追加†
圏が終対象 $1$ とその積 $1\times A$ を含んでいる、という追加の仮定を入れることで、 関数対象 $A\Rightarrow B$ が(集合論を扱う圏論の言葉の上で)正しく $\mathrm{hom}(A,B)$ と一対一対応することを示そう。
補題: $1\times A$ は $A$ と同型である†
$1 \times A$ は積なので、積の公理のプローブ対象として $A$ を取ると、
$f:A\to A$ を恒等射, $g:A\to 1$ を終対象への一意な射として、
$p:1\times A\to 1, q:1\times A\to A$ に対して $f=p\circ c,g=q\circ c$ を満たす
唯一の $c:A\to 1\times A$ が存在することが出てくる。
このうち $f=p\circ c$ は $f$ が恒等射であるから、$p$ と $c$ が互いに逆射であること示す。
$p:1\times A\to A$ が逆射を持つから $1\times A$ は $A$ と同型である。




