レンズと単項式関手


\newcommand{\vpair}[2]{\begin{pmatrix}#1 \\ #2\end{pmatrix} }
\newcommand{\mrm}[1]{\mathrm{#1} }
\newcommand{\In}{\text{ in } }
\require{color} % 緑色
\newcommand{\Keyword}[1]{ \textcolor{green}{\text{#1}} }%
\newcommand{\Where}{\Keyword{Where }  }%
\newcommand{\For}{\Keyword{For }  }%
単項式関手のあいだのホムセット」より:

\quad {\bf Poly}(By^A, Dy^C) \cong \mrm{Map}(B, D)\times \mrm{Map}(B\times C, A)

これは、ある種のレンズ(レンズの変種は山ほどある)の圏と単項式の圏のあいだの関係を示している。単項式の圏とは、対象を単項式だけに絞った多項式の圏の部分圏。

アルファベット順がおかしくなるが、行きがかり上、上の同型の文字 A, B, C, D をそのまま使い続ける。集合のペアを視認性の観点から縦ベクトル形式 \vpair{B}{A} で書く。

集合のペアのあいだのレンズ


\quad l:\vpair{B}{A} \to \vpair{D}{C}

を、get/put と呼ぶ2つの写像のペアとして定義する。


\quad l = (\mrm{get}_l, \mrm{put}_l)\\
\Where\\
\quad \mrm{get}_l : B \to D \In {\bf Set}\\
\quad \mrm{put}_l : B\times C \to A \In {\bf Set}

特に、A  = B, C = D のときは、


\quad l = (\mrm{get}_l, \mrm{put}_l) : \vpair{B}{B} \to \vpair{D}{D}\\
\Where\\
\quad \mrm{get}_l : B \to D \In {\bf Set}\\
\quad \mrm{put}_l : B\times D \to B \In {\bf Set}

となり、元祖レンズになる。

今定義した(いや、ちゃんとは定義してないが「すぐ定義できるであろう」)レンズの圏を {\bf Lens} とすると、対象類は:


\quad |{\bf Lens}| = |{\bf Set}| \times |{\bf Set}|

ホムセットは:


\For \vpair{B}{A}, \vpair{D}{C} \in |{\bf Lens}|\\
\quad {\bf Lens}(\vpair{B}{A}, \vpair{D}{C}) = \mrm{Map}(B, D)\times \mrm{Map}(B\times C, A)

冒頭に挙げたホムセットごとの同型から少しゴニョゴニョすれば、単項式の圏とレンズの圏の(圏としての)同型が得られる。