トポスが面白い. 集合を使って fuzzy な logic が出来る. ところで集合よりもリッチな表現として層があり、そして圏がある. トポスは層全体からなるような圏(実際には一般の圏で何でもいいみたい)でロジックをやる.
トポスの面白さの片鱗をお手軽に味わえる何かを書きたい.
対象(「対象」という語は適宜「集合」に読み替えて良い) \(A\) について, \(c\) が \(A\) の元であるとは, \(c\) が \[c \colon 1 \to A\] なる射であること. これを \[c \in A\] と書く.
またここで \(1\) とは次のような対象(集合)のこと. 任意の対象 \(X\) について \(X \to 1\) なる射がちょうど一つだけ存在すること. その射のことを \(!\) と書く. \[! \colon X \to 1\]
今わたしは, ちょうど1つだと言った. 従って \(1 \to 1\) なる射はちょうど \(!\) しかない. \(! \in 1\) であって, 他に元はない. \(1\) は対象であるが先に述べたように「集合」と読み替えると, 唯一の元を持つ集合だから, ちょうど 単集合 と呼ばれる概念と一致する.
射 \(f\) が mono であるとは, 任意の \(g,h\) について, \[fg = fh \implies g=h\] が成立するもののことを言う. ここで \(fg, fh\) は合成.
\(A\) が \(B\) の部分対象(部分集合)であるとは, ある mono \(A \to B\) が存在することを言う. この部分対象の関係を \[A \subset B\] と書く. またこの存在する mono のことを \(i\) と書く. \[i \colon A \to B\]
というわけで, \(\in\) と \(\subset\) を定義した. 今, \(c \in A\) であって \(A \subset B\) であるならば, \(ic \in B\) である. そして \(i\) は mono なので, \(A\) の2つの元 \(c,d\) について \[c \ne d (\in A) \implies ci \ne di (\in B)\] が言える. つまり \(A\) で異なる元は \(B\) でも異なる. \(ci\) や \(di\) は \(i\) を省略してそのまま \(c,d\) と書いてしまうのが普通だろう.
\(=\) を定義するだけでもここまで書く必要がある (元はどうでもよかった).