bitterharvest’s diary

A Bitter Harvestは小説の題名。作者は豪州のPeter Yeldham。苦闘の末に勝ちえた偏見からの解放は命との引換になったという悲しい物語

随伴関手の応用 - Haskellでの実現例

8.8 Haskellでの実現例

HaskellはHaskと呼ばれる一つの圏で構成されるため、二つの圏を必要とする随伴の例を見ることは少ない(往々にして、関手でHask圏の外に出てしまう)。しかし、積と関数はともに相手方への関手であるため、例外的にHaskellでの随伴の例となる。

二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が次の条件を満たす時、随伴である。

\begin{eqnarray}
\mu & :& I_\mathcal{D} \rightarrow R \circ L \\
\xi &:& L \circ R \rightarrow I_\mathcal{C}
\end{eqnarray}

それでは、下図を参考にして、積を左随伴関手、関数を右随伴関手とする随伴をHaskellで実現することを考えよう。
f:id:bitterharvest:20180810085242p:plain

まず積の関手を用意しよう。Haskellでは関手は新しいデータ型として定義される。ここでは、\(new type\)を用いて、積の関手\(Prod\)を定義しよう。また、積は固定値\(s\)に変数\(a\)をかけたものとし、これを対で表すことにしよう。

Newtype Prod s a = Prod (a, s)

次に関数の関手\(Reader\)を用意しよう。これは\(s\)を入力とし、\(a\)を出力とする関数としよう。

Newtype Reader s a = Reader (s -> a)

ここで、\(s\)は環境(environment)と見なすことができる。

それでは随伴を用意しよう。\(\mu\)という関数は、Haskellでは \(unit\)という関数名である。そこで、これを使うと次のようになる。

unit :: a -> Reader s (Prod s a)
unit a = Reader (\s -> Prod (a,s))

\(unit\)が状態を表すモナドとなっていることに注意しよう。

また、\(\xi\)という関数は、Haskellでは \(counit\)という関数名である。そこで、これを使うと次のようになる。

counit :: Prod s (Reader s a) -> a
counit (Prod (Reader f, s)) = f s

但し、\(f : s \rightarrow a\)である。

それではプログラムをまとめよう。\(Prod \ s\)を左随伴関手として定義するためには、これを関手として定義する必要がある。同じように、\(Reader \ s\)を右随伴関手として定義するためには、これを関手、および、表現可能関手として定義する必要がある。表現可能関手として定義するときは、\(Reader\)のソース側のデータ型を定める必要があるが、これは、\(Reader \ s\)のデータ型が\(s\)のデータ型と同じであることに注意して定義すると以下のようになる(しばらくこれに気がつかず、\(Rep (Reader \ s)\)を\(Double\)と定義したりなどしてしまった)。

プログラムには実行例も示してあるので、利用して欲しい。

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}

class (Functor f, Representable u) => Adjunction f u where
  unit :: a -> u (f a)
  counit :: f (u a) -> a

class Representable f where
  type Rep f :: *
  tabulate :: (Rep f -> x) -> f x
  index :: f x -> Rep f -> x

newtype Prod s a = Prod (a , s)

newtype Reader s a = Reader (s -> a)

instance Functor (Prod s) where
  fmap f (Prod (a , s)) = Prod (f a , s)

instance Functor (Reader s) where
  fmap f (Reader h) = Reader (f . h)

instance Representable (Reader s) where
  type Rep (Reader s) = s 
  tabulate f = Reader (\x -> f x)
  index (Reader f) x = f x

a = tabulate sin :: Reader Double Double
--index a 1.5

instance Adjunction (Prod s) (Reader s) where
--  unit :: a -> Reader s (Prod s a)
  unit a = Reader (\s -> Prod (a , s))
--  counit :: Prod s (Reader s a) -> a
  counit (Prod (Reader f , s)) = f s

b = unit 2.3 :: Reader Double (Prod Double Double)
c = counit (Prod (Reader sin, 2.3 :: Double)) :: Double

随伴関手の応用 - モナドとしての随伴関手

8.7 モナドとしての随伴関手

今回は、随伴がモナドであることを示そう。

二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が次の条件を満たす時、随伴であった。

\begin{eqnarray}
\mu & :& I_\mathcal{D} \rightarrow R \circ L \\
\xi &:& L \circ R \rightarrow I_\mathcal{C}
\end{eqnarray}

モナドであるための条件は、\(return\)と\(join\)という関数を有することである。すなわち、
\begin{eqnarray}
return & :& A \rightarrow M (A) \\
join & :& M (M (A)) \rightarrow M(A)
\end{eqnarray}
を満たすことである。

それでは、\(\mu\)から\(return\)が得られることを示そう。

\( M=R \circ L \)とすると、
\begin{eqnarray}
A = I_\mathcal{D} (A)
\end{eqnarray}
\(\mu : I_\mathcal{D} \rightarrow R \circ L\)を用いると
\begin{eqnarray}
&\rightarrow& R \circ L (A) \\
&=& M (A) \\
\end{eqnarray}
より
\begin{eqnarray}
return : A \rightarrow M (A)
\end{eqnarray}
が得られる(下図参照)。
f:id:bitterharvest:20180806082346p:plain

次に、\(\xi\)から\(join\)が得られることを示そう。
\begin{eqnarray}
M (M (A)) = R \circ L \circ R \circ L (A)
\end{eqnarray}
\(\xi : L \circ R \rightarrow I_\mathcal{C}\)を用いると
\begin{eqnarray}
&\rightarrow& R \circ I_\mathcal{C} \circ L (A) \\
&=& R \circ L (A) \\
&=& M (A)
\end{eqnarray}
より
\begin{eqnarray}
join : M (M (A)) \rightarrow M(A)
\end{eqnarray}
が得られる(下図参照)。
f:id:bitterharvest:20180806082448p:plain

これより、全ての随伴はモナドであることが分かる。これはコモナドについても言える。

また、逆に全てのモナド(コモナド)は随伴であると言える。

随伴関手の応用 - モノイドとしての随伴関手

8.6 モノイドとしての随伴関手

随伴関手の応用についていくつか説明してきたが、アダルトとベビーの例を始めとしてこれまでの例ではすべて、左側の圏の方が厳密であることに気がついただろう。今回の例も同じである。左側がモノイドを対象にした圏、右側が集合を対象にした圏である。

1)モノイド圏と忘却関数

モノイドは加算や乗算などの二項演算を表すのに都合のよい圏である。モノイドであることの条件は、
1) 対象は一つしかない(通常、これは星印で表す)、
2) 射は、通常の写像を連想すると納得するのが難しいが、集合上の要素である、
3) どの射のソースもターゲットも全て同じで、星印である、
4) 射と射の結合は用意されていて、二項演算子が用いられる、
5) 恒等射が用意されている、
もちろん単位律と結合律が成り立っている、というである。

今、モノイドを対象とした圏\(\mathcal{Mon}\)を考えることにしよう。この圏はモノイド\(M,M’\)を対象にしていたとしよう。このとき、\(M\)から\(M’\)への\({\rm Hom}\)集合を\(\mathcal{Mon}(M,M’)\)としよう。

モノイド圏とは別に集合の圏\(\mathcal{Set}\)を用意しよう。また、\(M,M’\)の射は集合の要素であるので、この集合だけを取り出して\(\mathcal{Set}\)に写像する関手\(U\)を考えよう。この関手はモノイドとしての構造を忘れ、射の構成要素だけを取り出すので、忘却関数と呼ばれる。図で示すと次のようになる。
f:id:bitterharvest:20180720145544p:plain

\(U(M)\)と\(U(M’)\)の間にも\({\rm Hom}\)集合\(\mathcal{Set}(U(M),U(M’))\)を考えることができる。

ところで、\(\mathcal{Mon}(M,M’)\)を構成する射のそれぞれは、\(M,M’\)の射を\(U(M),U(M’)\)の集合の要素が同じものを表していると考えるとすると、\(\mathcal{Set}(U(M),U(M’))\)に対応づけることができる。これが、図で実戦で示したものである。その他にも、\(\mathcal{Set}(U(M),U(M’))\)には、\(\mathcal{Mon}(M,M’)\)に対応付けることができない多くのものを含んでいる。これは、\(\mathcal{Mon}\)での\({\rm Hom}\)集合が、\(M\)の構造を維持しなければならないことによる。それに対して、\(\mathcal{Set}\)での\({\rm Hom}\)集合は構造を持たないので、よりたくさんのもので構成されることとなる。即ち、\(U(M)\)の要素数を\(m\)、\(U(M’)\)の要素数を\(n\)とすれば、\({\rm Hom}\)集合の要素数は\(n^m\)となる。

具体的な例を用いて理解を深めることとしよう。下図において、\(M\)は乗算のモノイド、\(M\)はモジュロ3での乗算のモノイドである。
f:id:bitterharvest:20180720145614p:plain

この図で、乗算モノイドの射は、\(M=\{1,2,3,4,5,6,7,…\}\)である。また、モジュロ3での乗算モノイドの射は、\(M’=\{1,2,3\}\)である。この間の射は一つだけで、\(Mod3\)である。\(3\)で割った時の余りを求める関数である。但し、割り切れたときは\(0\)ではなく\(3\)とする。

それぞれのモノイドの射は忘却関数\(U\)によって、\(U(M)=\{1,2,3,4,5,6,7,…\}\)と\(U(M’)=\{1,2,3\}\)に写す。\(U(M)\)から\(U(M’)\)への\({\rm Hom}\)集合には、\(Mod3\)に対応するものが一つ存在することは自明である。そして、\({\rm Hom}\)集合にはこれ以外にもたくさんあることも自明である。

2)自由モノイド

さてモノイドの性質が分かってきたところで、随伴関手との関係を調べることにしよう。右側の関手として忘却関手を用いることにしよう。また、左側の関手として自由関手を用いてみよう。生成された集合の要素の全てにたして、異なる射を与えられるというのが自由関手だ。

加算の場合

まず、例から見ていこう。生成元が\(1\)だけである集合を考えよう。これは、任意の数だけ\(1\)を並べたものが集合の要素となるので、これから作られる集合は\(X=\{\phi,1,(1,1),(1,1,1),…\}\)となる。これを射の集合としたものが自由モノイドである。結合を加算としよう。これで、加算モノイドが得られた。これから、モジュロ3の加算モノイドを作ることを考えよう。さらに、これを忘却関数で\(\mathcal{Set}\)に写すと下図が得られる。
f:id:bitterharvest:20180720145649p:plain

この図で、二つの圏が自然同型であるとしよう。今、\(\mathcal{Mon}(F(X).M)\)にはただ一つの関数\(h=Mod3\)が存在するので、\(\mathcal{Set}(X,U(X))\)でも一つの関数が存在することとなる。これを\(f\)としよう。

これを縦と横をひっくり返すと下図のようになる。
f:id:bitterharvest:20180721085508p:plain

自由モノイドの定義

自由モノイドは次のように定義される。生成元\(G\)から関数\(p\)によって生成された集合\(X\)に対して、その要素を射とするモノイド\(F(X)\)を生成する。これとは別に任意のモノイドを選んできたとする。これを\(M\)としよう。\(F(X)\)から\(M\)への関数\(h\)が一意的に与えられ、\(M\)から忘却関手\(U\)によって得られた\(U(M)\)に対して\(X\)からの関数\(f: X \rightarrow U(M)\)が存在するとき\(F(X)\)は自由モナイドと呼ばれる。なお、\(U(M)\)は生成元\(G\)より関数\(q\)によって生成されたものとする。

今回の例では、\(M\)としてモジュロ3の加算モノイドを用いたが、これが任意のモノイドについていえれば、加算モノイドは自由モノイドとなる。実は、この証明はそれほど難しくはないので、試みて欲しい。

乗算の場合

乗算での生成元は何を考えたらよいのだろうか。中学の頃、素因数分解というのを習った。数を素数の積で表すものだ。全ての数は素数の積で表すことができるので、乗算での自由モノイドを求めるためには、素因数を用いるとよい。そこで下図のようにした。
f:id:bitterharvest:20180720145754p:plain

\(X\)は重複を許して素数を任意に並べたものの集まりである。即ち、
\begin{eqnarray}
X &=& \{\phi,2,3,(2,2),5,(2,3),(3,2), \\
&& 7,(2,2,2),(3,3),(2,5),(5,2),11,\\
&& (2,2,3),(2,3,2),(3,2,2),13, \\
&& (2,7),(7,2),(3,5),(5,3),(2,2,2,2),…\}
\end{eqnarray}
である。

自由モノイドは、\(\phi\)を恒等射とし、他を射とし、結合を\(\circ\)としたものである。即ち、
\begin{eqnarray}
F(X) &=& \{1,2,3,2 \circ 2,5,2 \circ 3,3\circ 2, \\
&& 7,(2 \circ 2 \circ 2),3 \circ 3,2 \circ 5,5 \circ 2,11,\\
&& 2 \circ 2 \circ 3,2 \circ 3 \circ 2,3 \circ 2 \circ 2,13, \\
&& 2 \circ 7,7 \circ 2,3 \circ 5,5 \circ 3,2 \circ 2 \circ 2 \circ 2,…\}
\end{eqnarray}

また、乗算モノイド\(M\)も用意した。自由モノイドから乗算モノイドへは一意的な関数\(h\)が存在し、単射ではないことに注意しよう。即ち、自由モノイドでは異なる射と思われていたものが自由モノイドでは同じ射へと移されている。例えば、自由モノイドでは\(2 \circ 3\)と\(3 \circ 2\)は異なるものとして扱われているが、乗算もなどでは、\(2 \times 3\)と\(3 \times 2\)は同じものである。

もし、二つの圏が自然同型であれば、\(X\)から\(U(M)\)への関数が一つ存在することとなる。最初から、自由モノイドという言葉を用いていたが、乗算モノイド以外の他のモノイドについても同じことがいえるので、これは文字通り自由モノイドであることが分かる。その証明は以下の図を参考に試みて欲しい。
f:id:bitterharvest:20180721085554p:plain

まとめ

今回は、加算と乗算を取って、自由モノイドの説明をしたが、この議論は一般的に行うことが可能である。手順は次の通りである。
1) 生成元\(G\)を用意する。
2) \(G\)の要素を任意個並べたものを漏れなく用意する。これを\(X\)(圏\(\mathcal{Set}\)の対象)とする。このときの関数は\(p: G \rightarrow X\)である。
3) 自由関手\(F\)を用いて、\(X\)を射の集まりとしたモノイド\(F(X)\)(圏\(\mathcal{Mon}\)の対象)を作成する。
4)任意のモノイド\(M\)(圏\(\mathcal{Set}\)の対象)を選ぶ。そして、\(X\)から\(M\)には一意的な関数\(h\)があることを確認する。
5) 忘却関手\(U\)を用いて、集合\(U(M)\)(圏\(\mathcal{Set}\)の対象)\)を作成する。生成元\(G\)から\(U(M)\)への関数\(q\)が存在することを確認する。
6) 関数\(f : X \rightarrow U(M)\)が存在することを確認する。
これで自然同型となり、\(F(X)\)は自由モノイドであることが保証される。

最後にまとめることとしよう。

\(\fbox{随伴関手と自由モノイド}\)
集合の圏\(\mathcal{Set}\)とモノイドの圏\(\mathcal{Mon}\)において、自由関手\(F :\mathcal{Set} \rightarrow \mathcal{Mon}\)が左随伴関手であり、忘却関手\(U :\mathcal{Mon} \rightarrow \mathcal{Set}\)が右随伴関手であるとき、下図で、\(F(X)\)は自由モノイドとなる。なお、\(X\)は\(\mathcal{Set}\)全体となる。これは証明して欲しい。
f:id:bitterharvest:20180720145920p:plain

逆に、\(F(X)\)が自由モノイドの時、下図で、上の部分をモノイドの圏\(\mathcal{Mon}\)とし、下の部分を集合の圏\(\mathcal{Set}\)としたとき、自由関手\(F\)は左随伴関手となり、忘却関数\(U\)は右随伴関手となる。
f:id:bitterharvest:20180721085614p:plain

シェフから教わった「鶏の煮込み、猟師風」を作る

よく利用している飯田橋の隠れ家風のイタリアン・レストランから宿題として新しいレシピを頂いた。タイトルは、「鶏の煮込み、猟師風」となっている。A4一枚に、上の方に出来上がった時の写真がのっていて、それに続いて2人前の材料が、そして下の方に作り方が書いてある。

猟師風となっているので、男らしく大胆に作ればよいのだろう。主要な材料は骨付き鶏モモ肉だ。チキンのレッグを仕入れてくればよいと簡単に考え、お店に出かけた。ところが、骨を取り除いたモモ肉は沢山並べられているのだが、骨がついているモモ肉はない。妻もクリスマスの頃は見かけるが、それ以外の時はあまり見かけないという。どうしたらよいものかと思案に暮れながら鶏肉の売り場を行ったり来たりしているときに、丸ごとの鶏を見つけた。値段も手ごろ、以前から丸ごと一匹の鶏に挑戦してみたいと考えていたので、今回、買うことにした。

今回使う材料は以下の通りだ。
f:id:bitterharvest:20180714093817j:plain

主役はもちろん鶏のモモ肉だ。トマトをベースにしてキノコをたくさん使った煮込みだ。最初に鶏をさばいて、モモ肉を確保しなければならない。モモの付け根に包丁を入れて皮を切る。
f:id:bitterharvest:20180714094630j:plain

背中の方に足を折り曲げると関節のところで骨が外れる。外れた関節に直角方向に包丁を入れれば、もも肉を確保できる。
f:id:bitterharvest:20180714094849j:plain

後日使えるようにするため、胸肉と手羽もさばく。
f:id:bitterharvest:20180714095425j:plain

モモ肉は、さらに、上の関節の部分で二つに切断する。足を曲げたり伸ばしたりすると関節の位置が分かるので、自分の指を切らないように注意しながら、切断する。
f:id:bitterharvest:20180714095336j:plain

そして、塩、胡椒をして、薄力粉をまぶす。
f:id:bitterharvest:20180714095044j:plain

他の材料も用意しておこう。肉の臭みを消すために、ニンニク一片、ローズマリー一本、鷹の爪一本を用意する。ニンニクは薄く切って軽めに潰した。
f:id:bitterharvest:20180714100309j:plain

さらに、玉ねぎ半分をスライスし、一個のエリンギを縦方向に割き、4,5個のマッシュルームをそれぞれ半分に切り、半パック程度のしめじの下部を落とす。
f:id:bitterharvest:20180714100021j:plain

下ごしらえができたので、調理に取り掛かる。
中火にして、フライパンに大さじ一杯程度のオリーブ油を入れ、熱した状態になった時に、鶏肉を加え、両面に焦げ目をつける。
f:id:bitterharvest:20180714101042j:plain

残っているオリーブ油をキッチンペーパーでふき取り、新しく、オリーブ油一杯を加える。
f:id:bitterharvest:20180714101157j:plain

熱くなったところで、用意しておいたニンニク、ローズマリー、鷹の爪を加える。
f:id:bitterharvest:20180714101318j:plain

香りが出てきたら、強火にして、玉ねぎ、きのこを加える。
f:id:bitterharvest:20180714101457j:plain

玉ねぎがしんなりとし、きのこの水分が軽く煮詰まったところで、中火に戻して、白ワインビネガーを大さじ2杯加え、フライパンにこびりついているうまみ成分をこそぎ取る。
f:id:bitterharvest:20180714101720j:plain

白ワインをカップ一杯入れて煮詰める(写真撮り忘れました)。

トマトホール一缶と、水カップ一杯、マギーブイヨンのキューブ一個を入れて、弱火でコトコト30分程度煮込む。
f:id:bitterharvest:20180714102730j:plain

そして、トマトの色が赤からオレンジ色に変化したときに煮込むのを止め、ハーブ、塩、胡椒で味を調整する。
f:id:bitterharvest:20180714102904j:plain
今回は、庭からオレガノ、セージを採ってきて利用した。さらに、乾燥したイタリアンパセリも利用した。
出来上がりはこのような感じであった。
f:id:bitterharvest:20180714103257j:plain

食卓には、サラダとスパークリングワインを添えた。
f:id:bitterharvest:20180714103411j:plain

レシピがよいのだろう、とてもおいしい料理を頂くことができた。また、鶏をさばくという作業も初めて体験でき、楽しい料理作りであった。

随伴関手の応用 - 写像対象としての随伴関手

8.4 写像対象としての随伴関手

写像対象は次のように定義される。

対象射
\begin{eqnarray}
eval : B^A \times A \rightarrow B
\end{eqnarray}
を有する対象\(B^A\)が写像対象であるとは、任意の対象\(X\)と射\(g: X \times Y \rightarrow B\)に対し、射
\begin{eqnarray}
h : X \rightarrow B^A
\end{eqnarray}
で次の図式
f:id:bitterharvest:20180711091253p:plain
を可換にするものが一意的に存在するときを言う。

それでは、これを随伴関手として表したのが下図である。
f:id:bitterharvest:20180711091303p:plain

これは証明を必要とする。一つは、写像対象である時、上記の随伴関手による可換図が得られることを、もう一つは、上記の随伴関手による可換図が得られた時、写像対象になっていることを示さなければいけない。これらの証明は、積の時に用いた証明を用いれば容易に行うことができるので、ここでは、省略する。

8.5 余積としての随伴関手

余積は積とは双対関係をなすので、下図に示すように、随伴関手を用いて表すことができる。
f:id:bitterharvest:20180711091329p:plain

証明は読者が行ってください。

随伴関手の応用 - 積としての随伴関手

8.3 積としての随伴関手

\(\mathcal{C}\)は対象\(A,B\)を有する圏とする。\(A\)と\(B\)の積は、\(A \times B\)と書かれる\(\mathcal{C}\)の対象と二つの射\(fst : A \times B \rightarrow A \)および\(snd : A \times B \rightarrow B \)との組で、以下の普遍性を満たすものをいう。
積の普遍性:任意の対象\(X\)および射の対\(p:X \rightarrow A\)および\(q:X \rightarrow B\)が与えられた時、一意的な射\(h : X \rightarrow A \times B\)が存在する。

それでは、積を随伴関手で表すことを考えよう。
f:id:bitterharvest:20180710180931p:plain

上図において、積を可換図で表したのが左側で、積を随伴関手として表したのが右側である。左側と右側の対応関係を最初に示そう。

それでは、右側が随伴関手となっていることを見ていこう。右図で、元々あった圏\(\mathcal{C}\)を右側に書き、そこには、任意の射\(X\)と、\(A\)と\(B\)の積\(A \times B\)を書き、二つの対象に対する射を\(h:X \rightarrow A \times B\)とした。また、対の圏\(\mathcal{C} \times \mathcal{C} \)を左側に書き。そこには、対象\( < X,X > \)と対象\( < A,B > \)とを書き、これに対する射を\( < p,q > : < X,X > \rightarrow < A, B > \)とした。そして、\(\mathcal{C}\)から\(\mathcal{C} \times \mathcal{C} \)への関手を\(\Delta: Y \rightarrow < Y,Y > \)とした(\(\Delta\)は対角関手(diagonal functor)と呼ばれる)。また、\(\mathcal{C} \times \mathcal{C} \)から\(\mathcal{C}\)への関手を\(Product: < Y,Z > \rightarrow Y \times Z\)とした。

さて、右図が圏論での積となっているとき、即ち、\(h\)が一意的に定まっているとき、\(\Delta\)は左随伴関手であることを、\(Product\)は右随伴関手であることを示そう。

まず、\(h\)がどのような関数であるかを見ておこう。この関数は\(p,q\)が与えられると一意に決まる関数である。そこで、Haskellで次のような関数を定義してみよう。

factorizer :: (c -> a) -> (c -> b) -> (c -> (a,b))
factorizer p q = \x -> (p x, q x)

これより、

fst . factorizer p q = p
snd factorizer p q = q

は明らかである。これより、

h = factorizer p q

を得る。さて、\(h\)が分かったところで、右図が随伴になるためには、
\begin{eqnarray}
\xi &:& \Delta \circ Product \rightarrow I_{\mathcal{C} \times \mathcal{C} } \\
\mu &:& I_\mathcal{C} \rightarrow R \circ \Delta
\end{eqnarray}
となることと示せばよい。

1)自然変換\(\xi\)が成り立つことの証明

最初に
\begin{eqnarray}
\xi &:& \Delta \circ Product \rightarrow I_{\mathcal{C} \times \mathcal{C} }
\end{eqnarray}
を示そう。

右図を90度時計回りに回転すると次の図を得る。
f:id:bitterharvest:20180710181007p:plain

\(\xi\)は自然変換であるので、成分ごとに考えればよい。このため、\(A \times B\)と\(X\)について考えればよい。

最初に、\(A \times B\)について考えてみることとしよう。\(X\)を\(A \times B\)で置き換えると下図を得る。
f:id:bitterharvest:20180710181044p:plain

このとき、\(h = id_{A \times B}\)である。これより、\( < p,q > = < fst,snd > \) で、
\begin{eqnarray}
fst (A \times B) &=& A \\
snd (A \times B) &=& B
\end{eqnarray}
である。これより、
\begin{eqnarray}
p (A \times B) &=& fst (A \times B) = A \\
q (A \times B) &=& snd (A \times B) = B
\end{eqnarray}

今得た関係を可換図で示すと下図のようになる。
f:id:bitterharvest:20180710181927p:plain
従って、
\begin{eqnarray}
\mu : I_\mathcal{C} \rightarrow R \circ \Delta
\end{eqnarray}
が成分\( < A \times B > \)については示すことができた。

次に成分\(X\)について考えてみよう。証明に用いる図は下図のようになる。
f:id:bitterharvest:20180710181109p:plain

これも、\( A \times B \)の場合と同様に証明することができる。

2)自然変換\(\mu\)が成り立つことの証明

次に
\begin{eqnarray}
\mu &:& I_\mathcal{C} \rightarrow R \circ \Delta
\end{eqnarray}
を示そう。

\(\mu\)も自然変換であるので、成分ごとに考えればよい。このため、\(A \times B\)と\(X\)について考えればよい。

最初に、\(A \times B\)について考えてみることとしよう。\(X\)を\(A \times B\)で置き換えると下図を得る。
f:id:bitterharvest:20180710191328p:plain

これは、先と同じように証明できる。

また、成分\(X\)についても同様に証明できる。

1)と2)の証明より、\(h\)が一意的に決まるとき、積を関手\(\Delta\)と関手\(Product\)を用いて下図のように表すことができ、
f:id:bitterharvest:20180710180931p:plain

そして、
\begin{eqnarray}
\mathcal{C} \times \mathcal{C}( \Delta X , < A,B > ) \simeq \mathcal{C}( X , A \times B )
\end{eqnarray}
となる。なお、\(\Delta X =< X,X > \)であり、\(Product < A,B > = A \times B\)である。これより、\(\Delta\)は左随伴関手で、\(Product\)は右随伴関手であるといえる。

逆に、\(\Delta\)は左随伴関手で、\(Product\)は右随伴関手である時、これは積を表しているということを証明しなければならないが、これについては\(h\)が一意に定まるため、自明である。

なお、圏\(\mathcal{C} \times \mathcal{C} \)は双関手\((,) \ A \ B\)により作られた圏である。

随伴関手の応用 - 随伴関手を理解するための比喩

8.2 随伴関手を理解するための比喩

比喩(Metaphor)は難しい概念を理解する助けをしてくれる。随伴関手は高度に抽象的な概念なので、理解しやすくするためには、やはり優れた比喩を必要とするだろう。David Spivakがその著書『Category Theory for the Sciences』の中で、随伴関手を次のように説明している。
f:id:bitterharvest:20180709091652j:plain

それでは、下図を用いて説明しよう。
f:id:bitterharvest:20180709091229p:plain

左側の圏はアダルトの語彙の世界で、圏\(\mathcal{A}\)とする。右側はベビーの語彙の世界で、圏\(\mathcal{B}\)とする。また、\(X,Y\)をそれぞれアダルトとベビーの口から出る語彙とする(圏を\(\mathcal{A,B}\)と名付けたのがミソで、左側がアダルトの\(\mathcal{A}\)、右側がベビーの\(\mathcal{B}\)と覚えやすい。ここでは少し気持ちが悪いがそのままアダルトとベビーを使うことにする。アダルトの時は左側の圏を、ベビーの時は右側の圏を意識して欲しい)。ベビーの口から出る語彙\(Y\)は、アダルトが聞いたとき、アダルトの耳に入る語彙\(L(Y)\)になり、アダルトの口から出る語彙\(X\)は、ベビーが聞いたとき、ベビーの耳から入る語彙\(R(X)\)になる。

アダルトの口から出る語彙\(X\)は意味のある言葉だが、ベビーの口から出る語彙\(Y\)は繰り返されるノイズだ。また、アダルトの耳に入る語彙\(L(Y)\)はアダルトの世界なので意味を有しているが、しかし、ベビーの耳に入る語彙\(R(X)\)はベビーの世界なのでただの繰り返されるノイズだ。

\(L(Y)\)から\(X\)への自然変換(これは\({\rm Hom}\)集合となる)が存在することは明らかだろう。即ち、アダルトの耳に入る語彙\(L(Y)\)は、何らかの意味を持つものと解釈され、アダルトの口から出る語彙\(X\)に対応させられる。

\(Y\)から\(R(X)\)への自然変換(これも\({\rm Hom}\)集合となる)が存在することも明らかだろう。即ち、ベビーの口から出る語彙\(Y\)は、ベビーの耳に入る語彙\(R(X)\)に対応付けられる。それは、アダルトがベビーの語彙を容易に真似られることによる。

さて、圏論の世界では、次の二つの条件が満たされるとき、二つの圏\(\mathcal{A,B}\)は同じである、即ち、圏論の言葉を用いれば随伴であるという。
\begin{eqnarray}
\xi : L \circ R \rightarrow I_\mathcal{A} \\
\mu : I_\mathcal{B} \rightarrow R \circ L
\end{eqnarray}

上の二つはどのようなことを言っているのであろうか。

\(\xi : L \circ R \rightarrow I_\mathcal{A} \)は次のことを表している。アダルトの口から出る語彙\(X\)をうけ、ベビーは耳に入る語彙\(R(X)\)を得る。そして、ベビーは口から出る語彙\(R(X)\)に変える。これをアダルトが聞き、耳に入る語彙\(L \circ R(X)\)を得る。そして、アダルトの口から出る語彙\(X\)と耳に入る語彙\(L \circ R(X)\)とが一致するというのが最初の条件である。

\(\mu : I_\mathcal{B} \rightarrow R \circ L \)は次のことを表している。ベビーの口から出る語彙\(Y\)と耳に入る語彙\(R(X)\)との間に齟齬がないとするならば、ベビーの口から出る語彙\(Y\)に対して、アダルトはこれに反応して口から出る語彙\(L(X)\)をベビーに伝え、そして、ベビーは耳に入る語彙\(R \circ L(Y)\)を受け取ることができるというのが二番目の条件である。

まとめると、最初の条件はアダルトからベビーへのコミュニケーションで、ベビーが正しく反応していればアダルトは大丈夫だと言っている。二番目の条件はベビーからアダルトへのコミュニケーションで、ベビーが大丈夫なときは、アダルトは正しく反応のできると言っている。これが、Spivakの比喩だが納得できただろうか。

なお、アダルトとベビーの世界を入れ替えると、成り立たないことは確認して欲しい。

随伴関手の応用 - 自然変換の合成

8 随伴関手の応用

圏論創始者はソーンダース・マックレーン(Saunders Mac Lane)とサミュエル・アイレンベルグ(Samuel Eilenberg)だ。1942年から45年にかけて、代数的位相幾何学(Algebraic Topology)を研究する中で、関手や自然変換などの圏論の概念を生み出した。マックレーンの著書“Categories for Working Mathematician”の冒頭で、彼は、”Adjoint functors arise everywhere.”と言っている。意訳すると、どこもかしこも随伴関手だらけということだろう。彼の考え方に従えば、殆どのことは随伴関手を用いて記述できるということだ。そこで、今回の記事では、これまでに学んできた普遍性の中からいくつか取り上げて、随伴関手を用いて表すこととしよう。

なお、マクレーンは、修士課程までをアメリカで学び、物足りなかったのだろう、当時、世界の最高峰の大学と目されていたドイツのゲッティンゲン大学で博士課程を過ごす。その後、米国に戻り、シカゴ大学教授となる。とても長生きをし、2005年に95歳で亡くなった。アイレンベルグポーランド出身、ワルシャワ大学で博士号を修得した後、コロンビア大学の教授となった。彼も長生きしたほうだろう、1998年に84歳で亡くなっている。

8.1 自然変換の合成

随伴関手の中で、自然変換が重要な役割をなすので、自然変換の構成について簡単に説明しておこう。

自然変換は、関手から関手への射である。自然変化の合成は、関手を介在させた縦方向の合成と
f:id:bitterharvest:20180706133546p:plain

圏を介在させた横方向の合成がある。
f:id:bitterharvest:20180706133559p:plain

ここでは横方向の結合について考えよう。縦方向については読者の方で考えて欲しい。
それでは、上の図での自然変換の合成
\begin{eqnarray}
\beta \circ \alpha : G \circ F \rightarrow G’ \circ F’
\end{eqnarray}
を考えることとしよう。

自然変換は、成分ごとに考えればよい。そこで、圏\(\mathcal{A}\)と圏\(\mathcal{B}\)の対象を\(X\)と\(Y\)としよう。
f:id:bitterharvest:20180706133646p:plain
これより
\begin{eqnarray}
\alpha (X) : F(X) \rightarrow F’ (X) \\
\beta (X) : G(X) \rightarrow G’ (X)
\end{eqnarray}
となる。従って、
\begin{eqnarray}
(\beta \circ \alpha) (X) : G \circ F (X) \rightarrow G’ \circ F’ (X)
\end{eqnarray}
となり、さらに
\begin{eqnarray}
G \circ \alpha (X) : G \circ F (X) \rightarrow G \circ F’ (X)
\end{eqnarray}
である。

これより、
\begin{eqnarray}
(\beta \circ \alpha) (X) : G \circ F (X) \rightarrow G \circ F’ (X) \rightarrow G’ \circ F’ (X)
\end{eqnarray}
となり、

\begin{eqnarray}
(\beta \circ \alpha) (X) = \beta (F’ (X)) \circ (G \circ \alpha (X))
\end{eqnarray}
を得る。

これで、自然変換の合成を得ることができたが、それでは、その性質をいくつか調べてみよう。まず、\(\alpha=Id\)の場合を考えてみよう。即ち、\(Id : F \rightarrow F\)の場合である。
f:id:bitterharvest:20180706133700p:plain
\begin{eqnarray}
(\beta \circ F) (X) & = &\beta (F’ (X)) \circ (G \circ \alpha (X)) \\
& = & \beta (F’ (X)) \circ (G \circ Id (X)) \\
& = & \beta (F’ (X))
\end{eqnarray}
上記で、\(G \circ Id (X)\)は恒等射\( Id (X)\)に関手\(G\)を適応させたものであるので、恒等射となる。

次に、\(\beta=Id\)の場合を考えてみよう。即ち、\(Id : G \rightarrow G\)の場合である。
f:id:bitterharvest:20180706133722p:plain
\begin{eqnarray}
(G \circ \alpha) (X) &=& Id (F’ (X)) \circ (G \circ \alpha (X)) \\
&=& G \circ \alpha (X)
\end{eqnarray}
となる。

次回は、随伴関手についての比喩を説明しよう。

重要文化財クラスの中空土偶を横浜市歴史博物館で展示

毎日新聞の記事によれば、秦野市の菩提横手遺跡で貴重な中空土偶が発掘されたということで、横浜市歴史博物館に見学に行った。入口からり、受付の横の階段をのぼると常設館への通路がある。その壁面に沿って、2018年度のかながわ考古学財団の調査で発見された遺物が所狭しと展示されている。その中で一つだけガラスケースに納められているのが、今回発見された中空土偶だ。高さが25cm、幅が12cmと大型だ。毎日新聞の記事の中で、日本大学大学院の鈴木保彦講師が「新型式と認定できるユニークなもので、重要文化財クラスの優品と評価できる」とコメントしている。

同様な土偶は、神奈川県では綾瀬市上土棚南遺跡、平塚市王子ノ台遺跡 で発掘されているが、顔や腰から下の部分がないなどで全体像が不明であった。今回発掘された土偶は、左足の一部と左腕を欠いただけのほぼ完全な姿で発見され、貴重な文化財だ。この土偶は、縄文時代後期前葉から中葉(約3500年前)のものだ。

写真は横浜市歴史博物館ツイッターに、左側が今回発見された中空土偶だ。

正面から見ると、
顔は天井を見つめていて、大きく口を開けている。胴は筒型、足は銅より太い。

右側面から見ると、
足が大きく自立できることが分かる。後頭部が随分と後ろに豊かについているのも特徴だろうか。また、のどの下あたりの随分高い位置についているが、胸が突起のように出ていることに気がつく。この土偶もまた、他のこれまでに発見されている土偶と同じように、女性を表していることが分かる。

たまたま時を同じくしてトーハク(東京国立博物館)で、『縄文―1万年の美の鼓動』が開催されており、8月からは、「縄文のビーナス」をはじめとして、国宝に指定されている全ての土偶が、一堂に会するそうだ。近い将来、この土偶も仲間入りできれば、この製作者も発掘者も報われることだろう。

さっぱり味の竹の子メバルのアクアパッツァ

今年は例年になく梅雨の開けるのが早く、毎日猛暑が続いている。このような時こそ、天城高原に行って涼を取るのがよいのだが、東京に大事な用事があるために、残念ながら最善な策をとることができない。仕方がないので、夕飯を楽しむことにした。

いつも行く大型スーパーで竹の子メバルを見つけたので、それを料理することとした。入手したときは、煮つけにしようと思っていたのだが、暑い中を散歩してきた後だったので、さっぱり味で調理することとした。野菜とワインで魚の臭みを消して、スープも楽しめるようにした。

ブログで竹の子メバルを調べると、竹の子が出てくる時期が旬で、メバルと名がついているがソイの仲間だそうだ。和風だと、みそ汁の中に入れたり、煮つけにしたり、あるいは、鮮度がよければ刺身にするのがよいそうだ。今回はアクアパッツァにした。なんていうことはない、洋風煮つけだが、今回はさっぱり味になるように心がけた。

例によって食材たちに登場してもらおう。用いたのは竹の子メバル2匹、トマト小2個、ミョウガ2個、ねぎ30g、生姜15g、ワイン300cc、水300cc、塩少々だ。
f:id:bitterharvest:20180703092309j:plain

竹の子メバルは内臓と鱗を取り去った。
f:id:bitterharvest:20180703092909j:plain

トマトはさいの目切り、ミョウガ、ねぎ、しょうがは小口切りにした。大きめのフライパンに、魚と野菜を全て入れ、さらに、ワイン、水、塩を加えた。
f:id:bitterharvest:20180703093440j:plain

蓋をしないままで、強めの中火にして煮え立たせた。あくが出たので取り除き、蓋をして、弱めの中火にして8分間煮た。
f:id:bitterharvest:20180703093802j:plain

サラダやトウモロコシなどと一緒に並べて、テーブルに置いた。
f:id:bitterharvest:20180703094027j:plain
f:id:bitterharvest:20180703094046j:plain

料理に使ったワインの残りを飲みながら食事をした。あまりにも味がさっぱりしていたようで、妻は塩を足して自分の味にして食べていた。
野菜の味がもう少し汁の中に浸み込んでいた方が良かったように思うので、次の機会には、少し時間を置いてから食してみようと思っている。
また、竹の子メバルの骨は固いので、えらのところにある固い骨は調理の時にとっておいた方が良い。妻は運悪く口の中と指に刺してしまった。

アデライン、100年目の恋

今回、日常的な言い回しが分かる例として利用する映画は『アデライン、100年目の恋』だ。英語のタイトルは”The age of Adaline”だ。主役はブレイク・ライブリー。2007年放送開始のテレビシリーズ『ゴシップガール』でブレイクした女優だ。恋人をマイケル・ユイスマンが務めるが、彼の父親を1942年生まれの名優のハリソン・フォードが演じる。この映画は2015年の製作なので当時73歳だ。その妻を演じるのはキャシー・ベイカー。そして、舞台は大好きなサンフランシスコだ。この街は私にとっては特別な場所だ。大学院時代を過ごしたバークレーからは湾越しにこの街を見ることができた。また、休日にはしばしば訪れたので、サンフランシスコの通りの名前が出てくるととても懐かしく感じられる。感傷に浸るのはこのくらいにして、元に戻ろう。
f:id:bitterharvest:20180701192437p:plain

年を取らずにずっと若いままでいられるというのは、人間の究極の望みだろう。しかし、もし、実際にそうなったらどうなのだろうか。自分だけは若いままで、周りの友達はどんどん年を取っていく。友達という関係を維持できるだろうか。もし、子供がいたとして、その子が成長し、やがて自分の年を追い越し、老人ホームで過ごしている子供を見舞うときどのような気分になるだろうか。年老いてしまった恋人と再会したとしたらどのように対応すればよいのだろうか。このようなことを考えさせてくれる映画だ。

女性主人公アデラインは1908年の生まれ。ゴールデンゲートブリッジの工事に携わった技術者と結婚し、女の子を得る。29歳の時、夫は工事中の事故で無くなり、アデラインも交通事故を起こす。この交通事故によって、アデラインは「DNAの電子圧縮」によって年を取らなくなる。
f:id:bitterharvest:20180701192456p:plain

誕生から数えた年齢と29歳のままの姿とに差がありすぎてトラブルが起き始める。それを避けるために10年ごとに場所と名前を変えて世間から隠れて生活するアデラインは、2015年にエリスと出会い、彼に惹かれていく。そして、アデラインは彼の実家を訪ねる。そこで彼の父親のウィリアムを紹介されるが、ウィリアムはかつて彼女の恋人であった。ウィリアムも昔の恋人そっくりの女性が目の前に表われびっくりする。アデラインは、その人はお母さんだと言い逃れをする。

その晩はウィリアムもアデラインも眠れぬ夜を過ごした。翌朝、家族全員が食卓に着いた時、ウィリアムはかつての恋人との思い出を懐かしく語り始める。しかも、どんなに魅力的で優れた女性であったかを繰り返し述べる。妻のキャシーも横で聞いている。複雑な気持ちだろうなと感じたとき、案の定、席をプイとたつ。妻の異様な行動に気がついたウィリアムは妻を追いかけて、話をする。そこでのやり取りを見てみよう。
f:id:bitterharvest:20180701192514p:plain

妻をいたわるようにウィリアムが、
W: What? Honey?
「どうしたの?」と聞く。

妻は、
K: That's enough, William.
「もう十分だわ。」という。これ以上は思い出話を聞いていられないということだろう。

妻の微妙な感情のいら立ちに出会ったウィリアムは動揺して、
W: What? What's... what's cooking?
「え、どうしちゃったの?」と聞く。思いがけず妻をいら立たせてしまったウィリアムが対応に困っている。こういう時、女性の心理が読み切れず、男性は困惑するが、そのような様子をとてもうまく演じている。

妻は、
K: What, you think this is funny?
「おかしなことだと考えているの?」と言い返す。妻の感情を読み取ってくれない夫にいら立ち、簡単な問題ではなく、深刻な問題であることを告げようとする。結婚する前とは言え、そんなにも素晴らしい女性と付き合っていたことが許せないと妻は感じている。

妻のいら立ちの原因を知ろうとしてウィリアムは尋ねる。
W: What do you mean? I'm do... What did I do?
「どういうこと?」「私が何をしたという?」

それに答えて妻は、
K: You were very close, you were very close, you said that to me twice now. And you should see your face when you talk about her. Are you going to wax nostalgic this whole god damn weekend?
「あなた方はとても仲が良かったと、とてもとても仲が、私に2回も言ったわ。彼女について語るときのあなたの顔を見るべきだわ。この週末ずっと思い出に浸ろうとでも思っているの?」と言う。ウィリアムにとっては、思いもかけない妻からの反撃だろう。

ウィリアムは自身の感じ方を伝えて分かってもらおうと努める。
W: Look, it's just that... she looks so much like her mother that... that I'm remembering things that I didn't even know I remembered.
「いいかい。彼女はお母さんにとても似ていて、忘れていたことさえよみがえってきているだけなんだよ。」

遂に、妻がありのままの感情を伝えてくれる。
K: Well, I'd hate feeling like second choice.
「そう、私が二番目の選択のように感じられて嫌なのよ。」

二人とも感情が高まってきて、ウィリアムが
W: What do you mean?
「なんだって?」というのと同時に、妻も
K: Especially this weekend.
「特に、この週末はね」という。

ウィリアムが妻の本音を理解して
W: Second choice?
「二番目の選択かい?」と聞きただす。それに答えて、

K: Yes.
「そうよ。」という。

ウィリアムが続ける。
W: Forty years, Baby, come on... Second choice? Uh-uh. Honey, you're blowing this all out of proportion.
「40年だよ。どうなってんの。二番目なんて。大げさに考えすぎだよ。」と吹っ切れたように言う。「Blow out of proportion」 は「誇張する」という慣用句である、

妻も冷静になってきて、
K: Am I?
「そうかしら。」という。

ウィリアムがすかさず、
W: Are you jealous?
「やきもち焼いているの?」と茶化す。

妻のほうもすっかり冷静さを取り戻して、
K: Yeah, as a matter of fact.
「そう、本当のところはね。」と答える。

妻の心が和んだところで、ウィリアムが優しくいたわって、
W: Look, look, it was fleeting, inconsequential. 
「よく聞いて、それはつかの間の、とるに足らないものだったよ。」という。

そして妻が、
K: Sounded like you were more than that.
「それ以上に聞こえたけど。」

ウィリアムは妻の首筋にやさしく手を当てて、
W: I love you.
「愛している。」という。

妻もすっかり気分を取り戻して、
K: I love you, too.
「私もよ。」と応じる。

この後も意外な展開があるが、結末は映画を観て楽しんでください。

プログラマのための圏論:上級編(上)

プログラマのための圏論:上級編(上)』はこれまで、プログラマのための圏論(上級編)で説明してきたことをまとめました。圏論での重要な概念である、極限、米田の補題、随伴関手についてまとめてあります。

レーズン入りパウンドケーキを作る

パウンドケーキは、小麦粉、バター、砂糖、卵を1ポンドずつ用いることから、その名がつけられたそうだ。1ポンドは454gだが、このまま作ると4本ぐらいのパウンドケーキができてしまうので、今日はそれぞれを100g用いることにする。卵は50gを少し上回るぐらいなので2個用いる。また、小麦粉は薄力粉にした。バターは品薄で入手しにくいので、
ケーキ用マーガリンを用いた。

材料と道具に登場してもらおう。料理よりも手間がかかるのが、型に入れるオーブンシート。型の内径に合わせて、四隅を切り抜き、ぴったりと入るように細工するのだが、神経を使う作業となる。
f:id:bitterharvest:20180531200309j:plain
最初にする作業は、2個の卵を泡立てない程度に溶く。
f:id:bitterharvest:20180531200327j:plain
次は、バターを電動ミキサーで練る。バターがミキサーにくっついてしまうが、気にする必要はなさそうだ。
f:id:bitterharvest:20180531200343j:plain
これに砂糖は3回に分けて加え、そのつど電動ミキサーで練りこむ。
f:id:bitterharvest:20180531200454j:plain
その次は、卵だ。これも3回に分けて行うが、電動ミキサーのスピードを速くして混ぜ合わせる。
f:id:bitterharvest:20180531200826j:plain
最後は、薄力粉だが、これは一度に全部入れ、へらを垂直に入れて大きくかき混ぜる操作を繰り返す。入念に行いふんわりと弾力が出てきたら終了。
f:id:bitterharvest:20180531200537j:plain
さらに、レーズンを加えて均等に混ぜる。

できた生地を型に入れる。真ん中を低めに、端の方が高めになるようにする。さらに、レーズンを上にものせた。
f:id:bitterharvest:20180531200943j:plain
180度で余熱したオーブンで40分焼く。途中、15分経過したときに、果物ナイフを用いて縦に切れ目を入れる。このとき火傷をしないように、耐熱用のグローブで手を保護して行う。
f:id:bitterharvest:20180531201026j:plain
また、表面が黒焦げになることを防ぐために、さらに10分ぐらい経過した時に、アルミホイルをかぶせる。

時間が来たら、竹串をケーキの真ん中あたりで刺し、抜いたときに生の生地がついてこないかを確認する。もし、そうであれば、もう少し焼く。

出来上がったら型をオーブンから取り出す。
f:id:bitterharvest:20180531201112j:plain
2-3分おいて、型からパウンドケーキを取り出す。
f:id:bitterharvest:20180531202047j:plain
夕飯の後、デザートとしておいしくいただいた。
f:id:bitterharvest:20180531201941j:plain

今回はレーズンを用いたが、別のドライフルーツを入れてもよい。ただ、悩みはこれらが均等にパウンドケーキの中に納まらないことだ。薄力粉をつけるとうまくいくというブログの記事もあったが、もう少し、研究が必要だ。

伊豆半島ジオパーク ー 城ケ崎を訪れる

28日(月曜日)に伊豆半島の城ケ崎を訪れた。この半島は今年4月18日にユネスコから「世界ジオパーク」に認定された。伊豆半島は、フィリピン海プレートにのって南の方からやってきた火山島が日本列島にくっついて生まれた。火山によって作り出された地形が地質学上の様々な知見を与えてくれる重要な資源を有している。

これまでに、世界ジオパークとしてユネスコから認定されている地域は、糸魚川山陰海岸など8ヶ所あって、伊豆半島は9番目となる。今回訪れた城ケ崎も、伊豆半島ジオパークに含まれるエリアの一つだ。

城ケ崎を訪れたきっかけはジオパークに指定されたからではない。前の日に夕食を取ったイタリアン・レストランで、たまたま読んだ地元の伊豆新聞に、「城ケ崎あじさい」がきれいに咲いているというニュースが載っていたことによる。実は、伊豆半島世界ジオパークに指定されたことを、城ケ崎でその掲示を見るまでは知らなかった。連休に訪れたときも、ジオパークの看板がやけに目立つぐらいにしか感じていなかった。

前日は抜けるような青空であったが、屋外を歩くには暑すぎた。城ケ崎を訪れたこの日は、薄曇りで暑くもなく寒くもなかったので、野外を楽しむには適していた。向かった先の「ニューヨークミュージアム&フラワーガーデン」は、昨年の暮れにリニューアルオープンした。それまでは、「伊豆四季の花公園」と呼ばれていた。

リニューアルに伴って新たに開館したのが、「ティファニーミュージアム」だ。ここには、ティファニーランプやステンドグラスが飾られている。
f:id:bitterharvest:20180531135336j:plain
f:id:bitterharvest:20180531135356j:plain

ミュージアムの外はカフェになっているので、コーヒーを飲みながら城ヶ崎海岸の景色を楽しむ。右側の海岸線の先には城ケ崎の灯台が見える。
f:id:bitterharvest:20180531135421j:plain

左側の海岸線は蓮着寺のほうだ。突端を越えた先には日蓮上人が置き去りにされたといわれる俎岩があるが、ここからは見ることができない。
f:id:bitterharvest:20180531135436j:plain

ミュージアムを後にして、今日の目的であるあじさいを見に行く。その途中にジオスポットがあった。口上書きは以下の通り。
f:id:bitterharvest:20180531135507j:plain

そして、ジオスポットは、
f:id:bitterharvest:20180531135536j:plain

あじさい苑に入ると、最初に出会うのが城ケ崎あじさい。
f:id:bitterharvest:20180531135552j:plain

そして、沢山のあじさいを楽しむことができる。
f:id:bitterharvest:20180531135615j:plain
f:id:bitterharvest:20180531135630j:plain

ニューヨークミュージアム&フラワーガーデンに別れを告げて、門脇吊橋へと向かう。
f:id:bitterharvest:20180531135647j:plain

いつもはここで戻るのだが、今回はさらにその先の「ぼら納屋」まで歩を進めた。途中には、黒船防備のための砲台の跡がある。こんなので防備は大丈夫だと思ったのだろうか。黒船とまともに交戦しなくてよかったといまさらながら感じる。
f:id:bitterharvest:20180531135712j:plain

海岸線に沿って上り下りしているうちに、ぼら納屋につく。この納屋は1627年に紀伊家によって建築され、徳川幕府からの保護を受けてぼら漁業がおこなわれた。ぼら漁業は昭和39年まで続けられていたが、後継者不足とぼらの減少によって絶えたそうである。この納屋は当時の様子を残すために復元され、食堂として利用されている。
f:id:bitterharvest:20180531135735j:plain

このあと戻って、日蓮上人ゆかりの蓮着寺を訪れた。この寺は、日蓮を開祖とする法華宗に属し、1508年に開山された。
f:id:bitterharvest:20180531135846j:plain

俎岩の日蓮上人。日蓮鎌倉幕府を批判したために、1261年に伊豆に流罪となり、1263年に放免となるまでこの地にとどまった。
f:id:bitterharvest:20180531135906j:plain

天然記念物ののヤマモモ。国内最大を誇っている。
f:id:bitterharvest:20180531135938j:plain

今回歩いたエリアは、城ケ崎ピクニカルコースと呼ばれている。城ケ崎の海岸線に沿って、複雑な海岸線を登ったり下ったりする。海に近づいたり離れたりするので、角度を変えて風景を楽しむことができる。溶岩が流れ出て形成されたごつごつした海岸線や、浸食によって削られた深い谷があったりして、楽しませてくれる散策路だ。ニューヨークミュージアム&フラワーガーデンは地図には示されていないが、海洋公園の右隣だ。
f:id:bitterharvest:20180531150254p:plain

散策路に沿って、地質学的な特徴も丁寧に説明されているので、勉強になる散策路でもある。城ケ崎ピクニカルコースは蓮着寺の先で、城ケ崎自然探求路へとつながっている。さらに、地質学を学びたいときは好都合だ。この学問に興味を持った時に改めて訪れようと思っている。

随伴関手 - 随伴関手をHaskellで表現する

7.8 随伴関手をHaskellで表現する

随分と時間がかかったが、随伴関手をHaskellで表現するための準備がほぼ出そろった。ほぼといったのは、もう一つだけ、頭の体操をしておかなければならないことがある。それは、右随伴関手が表現可能関手でもあるということだ。

1)右随伴関手は表現可能関手である

表現可能関手を復習しておこう。局所的に小さな圏\(\mathcal{C}\)と集合の圏\(\mathcal{Set}\)において、\({\rm Hom}\)関手\(\mathcal{C}(A,-)\)と関手\(F\)の自然変換が、自然同型である時、即ち、
\begin{eqnarray}
\mathcal{C}(A,-) \simeq F
\end{eqnarray}
ならば、\(F\)を表現可能関手という。

それでは、右随伴関手が表現可能関手であることを示そう。随伴の定義は次のようになっていた。

\(\fbox {随伴の定義2:}\)
二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が次の条件を満たす時、随伴であるという。
\begin{eqnarray}
\mathcal{C} (L(Y),X) \simeq \mathcal{D} (Y,R(X)) \\
\end{eqnarray}

これを図で示すと以下のようになることも示した。
f:id:bitterharvest:20180704082601p:plain

そこで、\(\mathcal{D}\)は集合の圏でもあるので、これを\(\mathcal{Set}\)で、\(Y\)を単集合(singleton setに置き換えると下図を得る。
f:id:bitterharvest:20180704082614p:plain
従って、
\begin{eqnarray}
\mathcal{C} (L( ),X) \simeq \mathcal{D} ( ( ),R(X))
\end{eqnarray}
を得る。右側の\(\mathcal{D} ( ( ),R(X))\)は、単集合を\(R(X)\)に写すものである。関数の数は、その集合の要素の数と同じになる。従って、各\(x \in X\)に対して、一つの関数を与えるので、\(R\)は表現可能関手となる。即ち、
\begin{eqnarray}
\mathcal{C} (L( ),-) \simeq R
\end{eqnarray}
である。

2)Haskellで表現する

それではすべての材料がそろったので、Haskellで表すことにしよう。ここでは、最初に定義したものを実装することとしよう。定義は次のようになっていた。
\(\fbox {随伴の定義1:}\)
二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が次の条件を満たす時、随伴であるという。

\begin{eqnarray}
\xi : L \circ R \rightarrow I_\mathcal{C} \\
\mu : I_\mathcal{D} \rightarrow R \circ L
\end{eqnarray}

そこで、\(L,R\)を\(f,u\)とし、\(\xi,\mu\)を\(counit,unit\)とすると、次のようになる。

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}

class (Functor f, Representable u) => Adjunction f u where
  unit :: a -> u (f a)
  counit :: f (u a) -> a

class Representable f where
  type Rep f :: *
  tabulate :: (Rep f -> x) -> f x
  index :: f x -> Rep f -> x