2008-08-18 [長年日記]
λ. 自然変換の垂直合成と水平合成
こないだまで圏論勉強会で読んでいた「The Haskell Programmer's Guide to the IO Monad — Don't Panic」を ocaml-nagoya でも読んでいたようだ。 それで、活動記録/20080501 - ocaml-nagoya に自然変換の合成に関して「どこがverticalなのかよくわかりませんでした」と書いてあるのを見かけたので、ちょっと補足。
どこがverticalかというと、このテキストには出てこないけど、自然変換にはもう一つ「水平」合成があるからで、図式の描き方の慣例から「垂直合成(vertical composition)」「水平合成(horizontal composition)」と呼ばれている。
まず、以下の図のように縦に積まれた自然変換 τ と σ を合成するのが垂直合成 τ・σ : F → H で、(τ・σ)X := τX ∘ σX で定義される。
次に、以下の図のように横に並べられた自然変換 τ と σ を合成するのが水平合成 τ ∘ σ : F'F → G'G で、τG・F'σ = G'σ・τF で定義される。
定義の図:
ここまで書いてから気づいたけど、圏論勉強会のときも同じような図を描いてた。このときの図では、水平合成の方に黒丸「・」を使ってしまっているので、その部分はちょっと違うけど。
何故違ってしまっているかというと、合成が二つもあると射の合成と同じ記法(「τ∘σ」や「τσ」)をどちらに使うかはちょっと悩ましいんだよね。 通常は水平合成に射の合成と同じ記号を使っていて、これは2-圏とか色々な観点からは都合が良いのだけど、一方でHaskellから自然変換≒多相関数という対応で理解する場合には、垂直合成に対して関数合成の記号を使いたくもあって、このときは後者の考えで図を描いたんだろう(多分)。
ありがとうございます!<br>水平合成の概念があったんですね。
そうなんですよー。<br>ちなみに、私も最初のころは水平合成は苦手で、ずいぶん混乱しました。