オプティック〈optic | optics〉というプログラミングのデザインパターン(広義)があるらしい。僕は知らなかったのですが、「オプティックを勉強したい」という人達がいたので、ちょっとお付き合いしてみました。
オプティックで使う(かも知れない)絵図〈diagram | picture〉が出てきたのですが、初見ではなんだかワカラナイ。しばらく考えて、だいたいは分かったので、それをメモしておきます。他の記事への参照は脚注にあります。
絵図が出ていた論文は次です。これはドラフトらしく、ミスが散見します。しかし、おおよその考え方を知るためなら、些細な間違いは問題にはならないでしょう。
- Title: Composing optics
- Author: Mario Roman
- Date: February 6, 2020
- Pages: 21p
- URL: https://www.ioc.ee/~mroman/data/notes/composingoptics.pdf
この論文に次のような絵が出てきます*1。
ℓ = left、r = right の2つの部分があるのは、左パートと右パートがペアになっていることを示すだけなので、どちらか一方だけ考えれば十分です。左パートだけ取り出して時計回りに90度回転します(右パートでも同様に時計回り90度回転します)。
この形を解釈すればいいわけです。
まずは一般論から*2。圏Cのなかに 射 f:A → B in C があれば、それは次のように図示されます。
描画法はいつも僕が使っている方式で、射の方向は上から下、ノード形状はオダンゴです*3。
この射 f in C を、圏の圏(2-圏)Cat または CAT *4へと格上げ〈promote | bump up〉*5します。
2-圏 CAT における描画法は、関手の方向は左から右、自然変換の縦結合方向が上から下です*6。上の絵のなかで:
- ☆ : 唯一つの対象と恒等射だけからなる自明圏
- A~:☆ → C : 対象Aをポインティングするポインター関手
- B~:☆ → C : 対象Bをポインティングするポインター関手
- f~::A~ ⇒ B~:☆ → C : ポインター関手のあいだの自然変換。唯一つの成分は f:A → B in C
次に、F:C → C in CAT が自己関手〈endofunctor〉だとして、C 内で次のような射を考えます。
- g:A → F(B) in C
それを格上げすると次のように描けます*7。
絵では、関手は左から右に走り、結合〈合成〉や適用も左から右です。関手の図式順結合記号をスター '*'、対象・射を関手に渡す図式順適用記号をドット '.' とすると、次が成立します。
- B~*F = (B.F)~ = F(B)~
この理由から、F(B) の格上げの図が B~ F の順序で描かれているのです。
さて、G:M → [C, C] in CAT という関手を考えましょう*8。ここで、[C, C] は圏の圏 CAT の内部ホム対象〈指数対象 | ベキ対象〉、つまり関手圏です。対象 X∈|M| に対して、G(M) はCの自己関手です。F := G(X) :C → C in CAT として、先程の F を G(X) で置き換えると次の図になります。
G(X) を、青い関手シース〈functor sheath〉で心線〈芯線 | cable core〉X をくるんだ形で描いています。この描画法はストライプ図*9です。
最初に挙げたロマン〈Mario Roman〉の図(下に再掲)は、すぐ上の図と同じです。ワイヤーやエリア(平面内の領域)のラベルは省略されています。圏 C 内で描画しているわけではなくて、圏の圏 CAT 内で描画しています。絵図を見るときは、「どこで、何を、どのように描いているのか?」を最初に確認しないとワケワカランことになります。注意しましょう。
*1:実は絵しか見てません。
*2:絵の読み書きに関する一般的注意は「絵算をはじめた人への注意」参照。
*3:ノードは幾何的には点〈point〉です。広がりを持たせるのは、ラベルを記入したり形状で種別を表すためです。
*4:サイズ問題が気になるなら、小さい圏の圏 Cat を使ったほうがよいでしょう。
*5:「圏論の随伴をちゃんと抑えよう: お絵描き完全解説 // 対象と射の格上げ」参照。
*6:描画法のバラエティは「絵算(ストリング図)における池袋駅問題の真相」参照。
*7:同様な描画法はクライスリ射の描画にも使います。
*8:オプティックの状況では、Gは圏論的作用(双関手)をカリー化した関手です。
*9:「モノイド関手/ラックス・モノイド関手とその実例 // マッカーディのストライプ図」参照。ストライプ図を使った実例は「モノイド圏と加群圏に関するフォークロアとマックレーン五角形・三角形」。