「一般関手モデル:インスタンスの余タプリングと貼り合わせ」の続き。「一般関手モデル」というタイトルの記事は、スピヴァック理論それ自体の解説じゃなくて、スピヴァックに触発されて僕が考えたことのメモです。
関手モデルでは、スキーマが圏なので、スキーマ全体の圏は“圏の圏”です。「スキーマの圏」という言葉は曖昧で紛らわしいです。スキーマ全体の圏はなんか別な呼び名を与えておいたほうがいいでしょう。
ベック(Jon Beck)によるドクトリン(doctrine)という言葉があります。ある種の理論を展開するのに適切な“圏の圏”といった意味です。ドクトリンの定義はいくつもあるようですが、nLabの解説を見ると、 just “a 2-category” という定義もあります。スキーマからなる圏Schは、Catの部分圏とみなせるので、2-圏になってます。ドクトリンと呼んでもよさそう。
今後Schを、(スキーマの)ドクトリンと呼ぶことにします。ドクトリンSchの対象である圏が個々のスキーマです。「一般関手モデル:インスタンスの余タプリングと貼り合わせ」では、スキーマをドクトリン内で貼り合わるとき、それに伴なってインスタンスも貼り合わせる方法を紹介したのでした。
今回は、ドクトリンが直積(デカルト積)で閉じている状況を考えます。S, T∈|Sch| のとき、圏の直積 S×T がドクトリンSchに入るとします。これは、Schが普通にデカルト圏だということです。この状況で、2つのインスタンス F:S→C、G:S→C の直積 F×G:S×T→C×C を作ることができます。
上記のようにして作った F×G は、X∈|Sch| に対する X→C の形をしてないので、Instの対象だとは言えません。つまり、インスタンスではありません。アンビエント圏Cにモノイド積があれば、うまくインスタンスを構成できます。以下、Cはモノイド圏 C = (C, *, I) だとします。
まず、FとGが同じスキーマS上のインスタンスであるときを考えます。このとき、FとGのモノイド積 F*G は次のように定義できます。
- (F*G)(A) = (F(A)*G(A) in C)
- (F*G)(f:A→B) = (F(f:A→B)*G(f:A→B):F(A)*G(A)→F(B)*G(B) in C)
C = (Set, ×, 1) の場合を考えると、記号法が大変にややこしい状況になります。「×」を集合圏のモノイド積と考えれば、F×G は今定義したインスタンスのモノイド積です。一方、F×G は、S×S→C×C という意味でも使う記法です。困ったことですが、しょうがない、「注意してください」としか言いようがありません。
次に、FとGが異なる(かもしれない)スキーマS、T上のインスタンスの場合を考えます。今度は、S×T上のインスタンスを作ります。やはりCのモノイド積に基いてますが、先のインスタンスのモノイド積と区別するために、FとGのテンソル積と呼ぶことにします。テンソル積は F(*)G とします。
- (F(*)G)(A, B) = (F(A)*G(B) in C)
- (F(*)G)(f:A→A', g:B→B') = (F(f:A→A')*G(g:B→B'):F(A)*G(B)→F(A')*G(B') in C)
FとGが同じスキーマS上のインスタンスのときでも、F(*)G はもはやS上のインスタンスではありません。F(*)G は、S×S上で定義されています。Δ:S→S×S と対角関手とするとき、F*G = Δ;(F(*)G) は成立します。テンソル積の対角部分を取るとモノイド積になるわけです。
最後にもう一度注意しますが、F, G:S→C のとき、次の3つが同じ記号で表されることがあります。文脈で区別しましょう。
- S×S→C×C
- S×S→C
- S→C