このブログでは、通常の論理プログラミングでは無限に動くプログラムを書くことができないので「極限」の考え方でなんとかできないか、ということでやっています。ある種の射影的極限、帰納的極限は外積の定義を書いたところで書いたように、構成的に定義することができるようなので、このやり方で書いてみるとプログラミング言語で書くことができるのではないかと考えています。
この本では、極限の説明の前に「コンマ圏」があるので、「コンマ圏」についても「構成的な書き方」ができるか考えてみたいと思います。この本では、さらにその前に自然変換の説明があり、自然変換をメインに説明されているようです。自然変換については、そのように書き方を変えることができるかどうかわかりませんが、できるならやってみます。その前に、自然変換の定義が間違っていたようなので、圏の定義から書き直しておきます。
圏の定義
圏 というものは、以下の(集合とは限らない)類
- 対象の類
- 対象の間の射の類
で構成されて以下の条件が成り立つとき、 を圏と呼びます。
- 射 には域と呼ばれる対象 および余域と呼ばれる対象 がただ一つ存在します。このとき「 は から への射である」と言い、 (または )と書き、 を 、 を と書きます。
- 、 であるとき、射の合成と呼ばれる が一意的に存在し、以下の結合律、単位律が成り立ちます。
- 結合律: 、、 ならば が成り立ちます。
- 単位律: 任意の に対して の恒等射と呼ばれる射 が存在して、任意の射 および に対して 、 が成り立ちます。
関手の定義
圏 から圏 への対応 が、以下の条件を満たすとき から への関手と呼びます( と書きます)。
- の各対象 を の各対象 に対応させる。
- の射 を の射 に対応させる。
- ならば 。
- 、 ならば 。
- の各対象 に対して が成り立つ。
自然変換の定義
、 を圏 から への関手とします。以下の条件が成り立つものを から への 自然変換 と呼び、 (または )と書きます。
- の各対象 に の射 を対応させる。 を の 成分と呼ぶ。
- に対して が成り立つ。(以下の図式は可換)
\begin{CD}
F(X) @> t_{X} >> G(X) \\
@V F(f) VV @VV G(f) V \\
F(Y) @>> t_{Y} > G(Y)
\end{CD}
関手圏
、、 を圏 から圏 への関手、、 を自然変換とするとき、これらの合成(垂直合成)を ( は の対象)と定義すると、自然変換 となります。すなわち
- は の対象 に を対応させ
- ならば
が成り立ちます。(以下の図式は可換)
\begin{CD}
F(X) @> t_{X} >> G(X) @> u_{X} >> H(X) \\
@V F(f) VV @VV G(f) V @VV H(f) V \\
F(Y) @>> t_{Y} > G(Y) @>> u_{Y} > H(Y)
\end{CD}
この合成(垂直合成)は結合律、単位律を満たします。
- (結合律) 、、、 を圏 から圏 への関手、、、 を自然変換とすると、 の射の結合律より が の対象のとき
- (単位律) 、、 を圏 から圏 への関手、、 を自然変換とします。 の対象 に対して とすると以下の(1)より は自然変換 となり、(2-1)、(2-2)より はこの合成(垂直合成)の単位元となります。
- (1) ならば
- (2-1) 任意の の対象 に対して となることから (任意の成分が一致)
- (2-2) 任意の の対象 に対して となることから (任意の成分が一致)
圏 から圏 への関手を対象とし、それらの間の自然変換を射とする圏を、圏 から圏 への関手圏と呼び、 と書きます。