bitterharvest’s diary

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

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

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}\)と集合の圏\(\mathbf{Set}\)において、\({\rm Hom}\)関手\(\mathcal{C}(A,-)\)と関手\(F\)の自然変換が、自然同型である時、即ち、
\begin{eqnarray}
\mathcal{C}(A,-) \cong 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) \cong \mathcal{D} (Y,R(X)) \\
\end{eqnarray}

これを図で示すと以下のようになることも示した。
f:id:bitterharvest:20181211153230p:plain
そこで、\(\mathcal{D}\)は集合の圏でもあるので、これを\(\mathbf{Set}\)で、\(Y\)を単集合(singleton setに置き換えると下図を得る。
f:id:bitterharvest:20190527145944p:plain
従って、
\begin{eqnarray}
\mathcal{C} (L( ),X) \cong \mathcal{D} ( ( ),R(X))
\end{eqnarray}
を得る。右側の\(\mathcal{D} ( ( ),R(X))\)は、単集合を\(R(X)\)に写すものである。関数の数は、その集合の要素の数と同じになる。従って、各\(x \in X\)に対して、一つの関数を与えるので、\(R\)は表現可能関手となる。即ち、
\begin{eqnarray}
\mathcal{C} (L( ),-) \cong 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}
ϵ : L \circ R \rightarrow I_\mathcal{C} \\
η : I_\mathcal{D} \rightarrow R \circ L
\end{eqnarray}

そこで、\(L,R\)を\(f,u\)とし、\(ϵ,η\)を\(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

\(\fbox {随伴の定義 2:}\)
また、定義2に従うと、次のようになる。

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

class (Functor f, Representable u) => Adjunction f u where
  leftAdjunct :: (f a -> b) -> a - u b
  rightAdjunct :: (a -> u b) -> f a - b

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

定義1と定義2のいずれかが満たされればよいが、両方を一緒に含めても構わないので、この場合には次のようになる。

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

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

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

なお、三角恒等式は次の条件となる。

  rightAdjunct unit = id
  leftAdjunct counit = id

随伴関手 - 随伴の別定義

7.7 随伴の別定義

1)別定義

随伴の定義にはこれまでと異なる方法がある。それは次のように定義される。

\(\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) \cong \mathcal{D} (Y,R(X)) \\
\end{eqnarray}

これを、下図に示す。
f:id:bitterharvest:20181211153230p:plain

もう少し、詳しく説明しよう。

まず、定義をするための準備をしよう。今、二つの圏\(\mathcal{C},\mathcal{D}\)からそれぞれターゲットとなる対象\(X\)とソースとなる対象\(Y\)を適当に選んだとしよう。そして、ソースである対象\(Y\)を\(L\)によって、\(\mathcal{C}\)に写像したとしよう。これにより、二つの対象\(L(Y),X\)の間で、\({\rm Hom}\)集合\(\mathcal{C}(L(Y),X)\)を定義することができる。

同様にして、ターゲットである対象\(X\)を\(R\)によって、\(\mathcal{D}\)に写像したとしよう。これにより、二つの対象\(Y,R(X)\)の間で、\({\rm Hom}\)集合\(\mathcal{C}(Y,R(X))\)を定義することができる。

それでは随伴の定義をしてみよう。関手の対\(L,R\)が随伴の時かつその時に限り、二つの\({\rm Hom}\)集合\(\mathcal{C}(L(Y),X)\)と\(\mathcal{D}(Y,R(X)))\)は同型
\begin{eqnarray}
\mathcal{C}(L(Y),X) \cong \mathcal{D}(Y,R(X))
\end{eqnarray}
である。即ち、\(X,Y\)に対して自然である。

ここで、自然であるとは、\(\mathcal{C}\)から\({\rm Hom}\)集合の圏\({\rm Set}\)に対して、次の二つの関手
\begin{eqnarray}
X \rightarrow C(L(Y), X) \\
X \rightarrow D(Y, R(X))
\end{eqnarray}
の間に自然変換があり、さらに、
\(\mathcal{D}\)から\({\rm Hom}\)集合の圏\({\rm Set}\)に対して、次の二つの関手
\begin{eqnarray}
Y \rightarrow C(L(Y), X) \\
Y \rightarrow D(Y, R(X))
\end{eqnarray}
の間に自然変換があり、そして、自然変換は可逆(invertible)であることである。

これが、随伴の別定理である。

これと、今までに示してきた定義(下記に示す)が同一となる。
\(\fbox {随伴の定義1:}\)
二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が三角恒等式を満たす次の射\(ϵ,η\)を有する時、随伴であるという。

\begin{eqnarray}
ϵ : L \circ R \rightarrow I_\mathcal{C} \\
η : I_\mathcal{D} \rightarrow R \circ L
\end{eqnarray}

それでは、二つの定義が同じであることの証明の概略を示そう。

2)証明の概略

定義2から定義1を導いてみよう。

同型は、任意の対象\(X\)に対して働くので、\(X=L(Y)\)としよう。そうすると、
\begin{eqnarray}
\mathcal{C}(L(Y), L(Y)) \cong \mathcal{C}(Y,R(L(Y))
\end{eqnarray}

これより、左辺は少なくとも一つの射、即ち、恒等射\(I\)を持たなければならない。自然変換は恒等射を、\({\rm Hom}\)集合\(\mathcal{C}(Y,R(L(Y)))\)の一つの要素に写像する。ここで、\(I\)を挿入すると、\(\mathcal{C}(I(Y),R(L(Y)))\)の中の一つの要素にとなる。\(Y\)は任意なので、これは、まさしく、\(η : I_\mathcal{D} \rightarrow R \circ L\)と同じである。

同じように、\(ϵ: L \circ R \rightarrow I_\mathcal{C}\)を得ることができる。

また、二つの自然変換、即ち、
\begin{eqnarray}
X \rightarrow C(L(Y), X) \\
X \rightarrow D(Y, R(X))
\end{eqnarray}

\begin{eqnarray}
Y \rightarrow C(L(Y), X) \\
Y \rightarrow D(Y, R(X))
\end{eqnarray}
が可逆であることから三角恒等式を導くことができる。

逆に定義1から定義2も導いてみよう。
ここでは、片方(\(\mathcal{C}(L(Y),X)\)または\(\mathcal{D}(Y,R(X))\))の射が定まった時に他方(\(\mathcal{D}(Y,R(X))\)または\(\mathcal{C}(L(Y),X)\))の射が一意的に定まることを示せばよい。

そこで、\(f\)を\(\mathcal{C}(L(Y),X)\)の任意の射としてみよう。これを関手\(R\)を用いて\(\mathcal{D}\)上に持ち上げると、
\begin{eqnarray}
R \circ f : R(L(Y)) \rightarrow R(X)
\end{eqnarray}
となる。
そこで、随伴の定義1での射\(η\)を用いると
\begin{eqnarray}
η: I_D \rightarrow R \circ L \\
η_X: I_D(Y) \rightarrow R \circ L (Y) \\
η_X: Y \rightarrow R \circ L (Y)
\end{eqnarray}
を得る。

従って、
\begin{eqnarray}
R \circ f \circ η_X: Y \rightarrow R (X)
\end{eqnarray}
となる。\(\phi_x = R \circ f \circ η_X\)とすると、
\begin{eqnarray}
\phi_X: Y \rightarrow R (X)
\end{eqnarray}
が一意に定まることが分かる。

同様に、\(\mathcal{D}(Y,R(X)\)の任意の射に対しても、\(\mathcal{C}(L(Y),X)\))の射が一意的に定まることが分かる。そして、三角恒等式を利用して、二つの自然変換が可逆となることを示すことができる。

これにより同型であること、即ち、
\begin{eqnarray}
\mathcal{C}(L(Y),X) \cong \mathcal{D}(Y,R(X))
\end{eqnarray}
を導くことができる。

随伴関手 - 随伴から導き出される可換図式

7.6 随伴から導き出される可換図式

随伴の定義からどのような可換図式が導きだされるかを考えてみよう。随伴の定義は次のようになっている。

二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が三角恒等式を満たす次の射\(ϵ,η\)を有する時、随伴であるという。

\begin{eqnarray}
ϵ : L \circ R \rightarrow I_\mathcal{C} \\
η : I_\mathcal{D} \rightarrow R \circ L
\end{eqnarray}

そこで、この式を用いて\(L\)を変形してみよう。

最初に、\(L\)は\(L \circ I_\mathcal{D}\)に変形できる。次に、\(η : I_\mathcal{D} \rightarrow R \circ L \)を用いて、\( L \circ R \circ L \)に変形できる。さらに、\(ϵ : L \circ R \rightarrow I_\mathcal{C} \)を用いて、\( I_\mathcal{C} \circ L \)に変形できる。これは、\( L \)と同じである。

式の変形を可換図式で表すと下図の左側を得る。
f:id:bitterharvest:20181211152314p:plain

同様に、\(R\)で始めると、
\begin{eqnarray}
&&R \\
&=& I_\mathcal{D} \circ R \\
&=& R \circ L \circ R \\
&=& R \circ I_\mathcal{C} \\
&=& R
\end{eqnarray}
をえる。これを可換図式にしたのが、上図の右側である。

この二つの可換図式は、英語ではTriangle Identitiesと呼ばれている。

上の可換図式は、関手をベースに考えたが、圏をベースに可換図式を描くと次のようになる。
f:id:bitterharvest:20181211153053p:plain

随伴の定義をウィキペディアで調べると、違う方法で定義されることが分かる。次回は、この話をしよう。

随伴関手 - 随伴の解釈

7.5 随伴の解釈

随伴の定義は次のようになっていた。

二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が三角恒等式を満たす次の射\(ϵ,η\)を有する時、随伴であるという。

\begin{eqnarray}
ϵ : L \circ R \rightarrow I_\mathcal{C} \\
η : I_\mathcal{D} \rightarrow R \circ L
\end{eqnarray}

この定義を理解することとしよう。随伴の趣旨は、二つの局所的に小さな圏があった時にそれが等しいということを定義することであった。そこで、一方の圏\(\mathcal{D}\)に、左随伴関手\(L\)を施した後で、右随伴関手\(R\)を施したときに、下図のように圏\(\mathcal{D}\)に戻ってくる。
f:id:bitterharvest:20180522103401p:plain

通常は等しいというときは、重なることが前提になっているが、圏論ではこれを緩めてある。関数\(η\)だけずれていても等しいということにしている。これを示すと下図のようになる。
f:id:bitterharvest:20181211152725p:plain

即ち、恒等射\(I_D\)の任意の要素を\(d\)とした時、これに\(R \circ L\)を施したとする。このとき、その移動後の場所は、同じところではなく、自然変換\(η: I_D \rightarrow R \circ L\)を行った先、即ち、\(R \circ L (d)\)となる。これが圏論での二つの圏が等しいと見なす定義の内容の一つだ。これまでの同型という言葉は使えないので、随伴という言葉を用いている。

この移動は、\(R \circ L \)というコンテナの中に\(d\)を納めるという気分だ。コンテナに入れただけなので同じと見なしてもよいだろうということだ。そして、モノイドでの\(return\)と同じだということも感覚的にわかると思う。
f:id:bitterharvest:20181211152741p:plain

逆に、圏\(\mathcal{C}\)に、右随伴関手\(R\)を施した後で、左随伴関手\(L\)を施したときに、下図のように圏\(\mathcal{C}\)に戻ってくる場合について考えてみよう。
f:id:bitterharvest:20181211152758p:plain
このときは、\(L \circ R \)というコンテナの中から前から入っていた\(c\)を取り出すという気分だ。コモノイドでの\(extract\)と同じだということがやはり感覚的にとらえることができ面白い。

随伴関手 - 随伴の定義

7.4 随伴の定義

数学で最も重要な概念はと問われた時、皆さんは何と答えるだろうか。私は、「等しい」だと思う。算数から数学へと教科の名前が変わり、少し大人になったと感じさせてくれた中学で、すぐに習ったのが三角形の合同であった。ある三角形を移動したり回転したりして、別の三角形にぴったりと重ね合わせることができるなら、二つの三角形は合同だというものだ。

大学になると「等しい」という概念をもう少し抽象的に学ぶようになる。それは「同型」だ。集合\(A,B\)が存在したときに、次の条件を満足する\(f: A \rightarrow B, g: B \rightarrow A\)が存在するとき、二つの集合は同型と言われる。その条件は、
\begin{eqnarray}
g \circ f=I_A \\
f \circ g=I_B
\end{eqnarray}
である。図で表すと次のようになる。なお、このような写像\(f,g\)を同型写像という。
f:id:bitterharvest:20180521112223p:plain

同型という概念は、合同という概念の上位概念となっているので、合同な二つの三角形はもちろん同型でもある。それでは、さらなる上位概念を圏においても定めたい。即ち、二つの圏が与えられた時に、これらが「等しい」といはどのようなことなのかを定めたい。

上の図は集合と関数から成り立っていたが、これらを対応する圏論の用語で置き換えると、集合のところは(局所的に小さな)圏\(\mathcal{C},\mathcal{D}\)となり、関数のところは関手\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)となる。
f:id:bitterharvest:20180521112303p:plain

条件は、そのまま置き換えると、
\begin{eqnarray}
L \circ R=I_\mathcal{C} \\
R \circ L=I_\mathcal{D}
\end{eqnarray}

ところで、上の条件は、左側の関手と右側の関手が等しいと言っている。圏論では、二つの関手が等しいという概念を別に用意している。自然同型(naturally isomorphic)だ。

下図を用いて自然変換(natural transoformation)を復習しておこう。
f:id:bitterharvest:20180521112327p:plain

\(\fbox {自然変換の定義:}\)
上の図で、関手\(F,G\)の自然変換\(\alpha\)とは、次の条件を満たすものである。
1) 自然変換\(\alpha\)は、全ての対象\(X \in \mathcal{C}\)に、\(\mathcal{D}\)の対象間での射\(\alpha_X:F(X) \rightarrow G(X)\)を対応させる。ここで、\(\alpha_X\)は自然変換\(\alpha\)の\(X\)での成分と呼ばれる。
2) 成分は全ての射\(f:X \rightarrow Y\)に対して、次を成り立たせる。
\begin{eqnarray}
\alpha_Y \circ F(f) = G(f) \circ \alpha_X
\end{eqnarray}
なお、ここでは、\(F,G\)が共に共変(covariant)である場合について定義したが、共に反変(contravariant)の時は、\(F(f),G(f)\)の矢印は反対になる。

次に、関手\(F,G\)が自然同型であるとは次のように定義される。なお、自然同型は、英語の方はいくつかの表現があり、先にあげたnaturally isomorphicのほかにnatural isomorphism, natural equivalence, isomorphism of functorsがある。

\(\fbox {自然同型の定義:}\)
全ての\(X \in \mathcal{C}\)の対象\(X\)に対して、射\(\alpha_X\)が\(\mathcal{D}\)において同型射(isomorphic)であるならば、\(\alpha\)は自然同型である。

ここで、同型射とは、同型写像と同じ意味である。即ち、\(\beta_X \circ \alpha_X = I_{F(X)}\), \(\alpha_X \circ \beta_X = I_{G(X)}\)となるような\(\beta_X: G(X) \rightarrow F(X)\)が存在することを言う。

そこで、等しいことの条件を緩めて、自然同型\(\cong\)を用いると次のようになる。
\begin{eqnarray}
L \circ R \cong I_\mathcal{C} \\
R \circ L \cong I_\mathcal{D}
\end{eqnarray}

圏論の人々は、これでも条件がきつすぎると感じているので、さらに条件を次のように緩めている。そして、同型ではなく随伴(adjunction)と呼ぶ。定義は次のようになる。

\(\fbox {随伴の定義:}\)
二つの局所的に小さな圏\(\mathcal{C},\mathcal{D}\)において、関手の対\(R: \mathcal{C} \rightarrow \mathcal{D}, L: \mathcal{D} \rightarrow \mathcal{C}\)が三角恒等式を満たす次の射\(ϵ,η\)を有する時、随伴であるという。また、\(L,R\)のそれぞれを左随伴関手、右随伴関手という。また、\(L \circ R \)は圏\(\mathcal{C}\)での自己関手(endofunctor)、同様に\(R \circ L \)は圏\(\mathcal{D}\)での自己関手となっていることにも注意を払っておく必要がある。

\begin{eqnarray}
ϵ : L \circ R \rightarrow I_\mathcal{C} \\
η : I_\mathcal{D} \rightarrow R \circ L
\end{eqnarray}

三角恒等式

\(ϵ\)を用いて、\(\mathcal{C}\)上では\(L \circ R\)は、\( I_\mathcal{C}\)に置き換えることで\(L \circ R\)を消去することができ、また\(\mathcal{D}\)上では\( I_\mathcal{D}\)を自由に挿入することができるので、\(η\)を用いて\(R \circ L\)作り出すことで、次を得る。
\begin{eqnarray}
L &=& L \circ I_\mathcal{D} \rightarrow L \circ R \circ L \rightarrow I_\mathcal{C} \circ L = L \\
R &=& I_\mathcal{D} \circ R \rightarrow R \circ L \circ R \rightarrow R \circ I_\mathcal{C} = R
\end{eqnarray}

それぞれの式で、左辺から右辺(上の式では\(L\)と\(L\))への射が恒等射となる時、これを三角恒等式という。即ち、
\begin{eqnarray}
ϵ L \circ L η &=& Id_L \\
R ϵ \circ η R &=& Id_R
\end{eqnarray}

三角恒等式の可換図式は以下のようになる。
f:id:bitterharvest:20181211152417p:plain

なお、\(ϵ,η\)はそれぞれ\(counit,unit\)という関数名でも呼ばれる。Haskellではこれらの関数は別の名前で呼ばれている。即ち、\(counit\)はコモナド(comonad)での関数\(extract\)として、\(unit\)はモナド(monad)での関数\(return\)として使われる。

プロから教わった「鯵のソテー」を母の日に挑戦する

5月13日は母の日。実母も義母もすでに他界していて、感謝する対象は既にいないのだが、母として長いこと子供たちの養育に尽くしてくれた妻に感謝を込めて、特別な料理をプレゼントした。

「鯵のソテー」だが、プロの方から教わった特別な料理だ。この方のお店は、東京大神宮近くの隠れ家的なお店で、イタリアンレストランだ。大学に在職していた時の同僚たちや、気の置けない高校時代の友人たちと利用するお店だ。

母の日の前日に、高校3年生の時の同じクラスの親しかった仲間たちとこのレストランでランチを共にした。高校時代に戻って、遠慮することなく、好き勝手に話をするので、別のお客さんがいると迷惑をかけるが、それほど多くない人数なのに貸し切りにしてくれ、しかも、長い時間、居座り続けることを許してくれるので、とてもありがたいお店だ。

長い人生経験を経て、話している話題は今日的なのだが、それに対する意見の持ちようは高校時代と全く変わらないのにびっくりさせられる。高校の時が人格形成期だったのがその理由なのだろうが、タイムスリップしたような気分を味わう。

お店からは、美味しい料理とそれにぴったりのワインがタイムリーにサービスされるのだが、皆、話すことに夢中になっていて、料理を味わうゆとりがない。一生懸命に料理を作ってくださったシェフの方に申し訳ないなと思いながらも、それを忘れて、高校時代の思い出話に花を咲かせた。

帰り際に、宿題がありますとレシピを手渡された。かつての同僚が、一月ぐらい前に、お店の方に手ごろなレシピを教えてあげてくださいと依頼してくれていたのだ。そのレシピが、「鯵のソテー、フレッシュトマトと香草のソース」だ。

プロのレシピを手渡されたのは初めてなので、早速、母の日に挑戦することとした。

例によって食材に登場してもらおう。主役はもちろん鯵。今回は、いつもの安売り店ではなく、デパ地下の高級感のある魚屋さんで仕入れた。このため、ゼイゴと呼ばれる側面についている骨と内臓を魚屋さんの方で取り除いてくれた。ソテーのスープの主役になるのは、トマト。美味しそうなトマトがたくさん出回っているので、これも同じデパ地下で仕入れた。さらに、玉ねぎだが、友達が水俣から取り寄せてくれたサラダ玉葱を用いることにし、いつもより高級な食材で勝負だ。

しかし、白ワインだけは、自宅のワインセラーにあるものを使うことがためらわれたので、カルディで仕入れることとした。物色していると、隣のお客さんがお店の人に、料理用に白ワインを利用したいのですがどれがいいでしょうかと相談している。お店の人が、栓がスクリューになっているのがお薦めですと言っている。別の機会のために貯蔵しておくのに便利だし、飲んでも美味しいのでと理由を説明している。それではということで、1000円を少し超えているイタリア産のシャルドネを選んだ。ハーブの方は、家庭菜園にオレガノとパセリがあったので、スイートバジルとチャービルを購入した。母の日なので、少し、ぜいたくにという戦略で臨んだ。その他に利用したのはニンニク、オリーブオイル、塩、胡椒だ。
f:id:bitterharvest:20180513220129j:plain

食材がそろった後は、下ごしらえだ。ニンニクは、一片を細かく切った。
f:id:bitterharvest:20180513221831j:plain

玉ねぎは半分を利用してスライスした。
f:id:bitterharvest:20180513221946j:plain

トマトは1個を1㎝角に切った。
f:id:bitterharvest:20180513222045j:plain

ハーブは、パセリ、オレガノスイートバジル、チャービルの4種類を混ぜて細かく切り、大匙2杯ぐらいの量を利用した。
f:id:bitterharvest:20180513222306j:plain

鯵は、内臓の切り口の部分に塩、胡椒をし、表面にも同じように塩、胡椒をした後、薄力粉を均等にまぶした。なお、魚屋さんではえらの部分の骨は落としてくれなかったので、この時に、切断した。
f:id:bitterharvest:20180513222500j:plain

下ごしらえが済んだので、次は、鯵の表面に焦げ目をつける作業だ。
フライパンにオリーブオイルを多めに入れ、さらに、にんにくを入れてつぶした。その後、中火にしてぱちぱちという音が出るまで、ニンニクを炒めた。
f:id:bitterharvest:20180513222756j:plain

その後、頭が右側になるようにして、魚をフライパンに入れる。熱は中火である。表面に焦げ目がついたとき、ひっくり返し、反対側の表面にも焦げ目をつける。
f:id:bitterharvest:20180513222939j:plain

中まで火が通っていなくても構わないが、両面に焦げ目がついたら、鯵をいったんクッキングペーパーの上に取り除く。
f:id:bitterharvest:20180513223306j:plain

残っているオリーブオイルを利用して、中火で玉ねぎを透明感が出るまで炒める。
f:id:bitterharvest:20180513223433j:plain

強火にして白ワイン200CCをフライパンに加え、そして、アルコール分を飛ばす。
f:id:bitterharvest:20180513223852j:plain

今度は、左側を頭にして鯵をフライパンに再度入れる。
f:id:bitterharvest:20180513224010j:plain

さらに、トマトとハーブを加える。
f:id:bitterharvest:20180513224113j:plain

蓋をして、2分間中火で煮る。
f:id:bitterharvest:20180513224257j:plain

ソースがとろっとした感じになるので出来上がり。
f:id:bitterharvest:20180513224417j:plain

そして、食卓に並べる。
f:id:bitterharvest:20180513224503j:plain

妻もとても美味しいと言ってくれたので、思い出に残る母の日になりました。
プロのシェフに教えてもらったレシピの通りに本当に実現できたかどうかは疑わしいのだが、普段の料理とは一味も二味も違うので、すごいなと感じた。

随伴関手 - 米田の埋め込み

7.2 余米田の補題

米田の補題では、共変\(\rm{Hom}\)関手\(\mathcal{C}(A,-)\)を用いていたが、これを反変\(\rm{Hom}\)関手\(\mathcal{C}(-,A)\)に変えたのが、余米田の補題となる。

次のようになる。局所的に小さな圏\(\mathcal{C}\)と集合の圏\(\mathbf{Set}\)、これらによって作られる関手圏\([\mathcal{C},\mathbf{Set}]\)を考える。今、任意の対象\(A \in \mathcal{C}\)と任意の関手\(F: \mathcal{C} \rightarrow \mathbf{Set}\)に対して、
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(-,A),F) \cong F(A)
\end{eqnarray}
が成り立つ。ただし、\(\mathcal{C}(-,A): \mathcal{C} \rightarrow \mathbf{Set}\)は関手であり、\([\mathcal{C},\mathbf{Set}](\mathcal{C}(-,A),F)\)は\(\mathcal{C}(-,A)\)から\(F\)への自然変換である。

図で示すと次のようになる。
f:id:bitterharvest:20190527144405p:plain
証明は、米田の補題でのそれを利用すると、同じように行える。

7.3 米田の埋め込み

米田の補題は、米田の埋め込みを証明するために利用したものである。米田の補題で、関手\(F\)を反変関手にしたものを、前回の記事で紹介した。
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(A,-), \mathcal{C}(B,-)) \cong \mathcal{C}(B,A)
\end{eqnarray}

これが米田の埋め込みと呼ばれている。図で表すと次のようになる。
f:id:bitterharvest:20190527144425p:plain
米田の埋め込みは\(B\)から\(A\)への\({\rm Hom}\)集合と、\(\mathcal{C}(A,-)\)から\(\mathcal{C}(B,-)\)への\({\rm Hom}\)集合とは同型であるといっている。

これは、局所的に小さな圏\(\mathcal{C}\)の任意の二つの対象\(A\)と\(B\)を選び、また、その対象間の\({\rm Hom}\)集合を\(\mathcal{C}(A,B)\)とした時、関手圏\([\mathcal{C},\mathbf{Set}]\)にはこれと同型の構造が存在する。即ち、\(A\)に対して対象\(\mathcal{C}(B,-)\)が、また、\(B\)に対して対象\(\mathcal{C}(A,-)\)が対応し、\(\mathcal{C}(A,B)\)に対して、対象\(\mathcal{C}(B,-)\)から対象\(\mathcal{C}(A,-)\)への同型の\({\rm Hom}\)集合が存在する。

従って、米田の埋め込みは、局所的に小さな圏\(\mathcal{C}\)の構造が、関手圏\([\mathcal{C},\mathbf{Set}]\)に忠実に(faithful)しかも充満に(full)埋め込まれることを述べている。なお、忠実は単射であることを言い、充満は全射であることを言う。

米田の埋め込みを利用してみよう。

例1

今、\(f \in \mathcal{C}(B,A)\)と\(u \in \mathcal{C}(A,X)\)が図のように与えられたとしよう。この時、自然変換\(\alpha_X\)を求めよう。これには、\(u’ \in \mathcal{C}(B,X)\)を求めればよいが、\(u’ = u \circ f\)となることは自明である。
f:id:bitterharvest:20190527144522p:plain
参考のために、三つの対象の場合も図に挙げておく。対応関係を確認して欲しい。
f:id:bitterharvest:20190527144620p:plain

例2

関手圏\([\mathcal{C},\mathbf{Set}]\)において、\(\mathcal{C}(A,-)\)と \(\mathcal{C}(B,-)\)が同型の時、小さい圏\(\mathcal{C}\)において、\(A\)と\(B\)は同型である。また、逆も成り立つ。証明は試みて欲しい。

例3

前順序(preorder)集合を考えてみよう。これは、任意の二つの要素に対して、\(a \leq b\)であれば矢印があり、そうでなければ矢印はないという性質を有している。

それでは、前順序集合に対して余米田の埋め込みを利用してみよう。
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(-,A), \mathcal{C}(-,B)) \cong \mathcal{C}(A,B)
\end{eqnarray}

今、右辺が\(A \leq B\)であったとする。この時、\({\rm Hom}\)集合\(\mathcal{C}(A,B)\)での関数の数が1であることに注意して、これを満たす左辺を求めて見よう。

今、任意の\(X\)に対して\(X \leq A\)の時は、前順序の関数が一つ存在するので\({\rm Hom}\)集合としての\(\mathcal{C}(-,A)\)は関数の数は1になり、そうでないときは前順序の関数が存在しないので空\(\phi\)となる。\(X \leq B\)についても同じである。なお、ここでは、\(X\)は\(A\)でもなく\(B\)でもないとする。

左辺の\({\rm Hom}\)集合での関数の数が1なので、\({\rm Hom}\)集合としての自然変換\([\mathcal{C},\mathbf{Set}](\mathcal{C}(X,A), \mathcal{C}(X,B))\)も1になるはずである。自然変換は、\(\mathcal{C}(X,A) \rightarrow \mathcal{C}(X,B))\)での組み合わせとなる。従って、以下の四つの組合せのどれかということになるが、どれが該当するのであろうか。この中の、一つだといっている。
\begin{eqnarray}
id_\phi: \phi \rightarrow \phi \\
absurb: \phi \rightarrow 1 \\
id_1: 1 \rightarrow 1 \\
prohibit: 1 \rightarrow \phi
\end{eqnarray}

この中で、4番目は関数が値を持たないこととなり関数ではない。従って、最初の三つが候補となるが、正しいのは3遍目となる。これは、\(X \leq A\)ならば、\(X \leq B\)であるといっている。これを示したのが下図である。
f:id:bitterharvest:20190527144643p:plain
このように、米田の補題、あるいは、余米田の補題は証明の助けにもなる。

次回は、圏論の中心である随伴関手を説明しよう。

随伴関手 - 米田の補題:復習

7.随伴関手

7.1 米田の補題:復習

米田の補題は次のようになっていた。

局所的に小さな圏\(\mathcal{C}\)と集合の圏\(\mathbf{Set}\)、これらによって作られる関手圏\([\mathcal{C},\mathbf{Set}]\)を考えよう。今、任意の対象\(A \in \mathcal{C}\)と任意の関手\(F: \mathcal{C} \rightarrow \mathbf{Set}\)に対して、
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(A,-),F) \cong F(A)
\end{eqnarray}
が成り立つ。ただし、\(\mathcal{C}(A,-) : \mathcal{C} \rightarrow \mathbf{Set}\)である。すなわち、これは関手である。このため、\([\mathcal{C},\mathbf{Set}](\mathcal{C}(A,-),F)\)は、関手\(\mathcal{C}(A,-)\)から\(F\)への自然変換である。

米田の補題Haskellでは、どのようにあらわすことができるであろうか。自然変換は、多相関数(polymorphic function)で表すことができる。従って、型シグネチャで表すと

forall x. (a -> x) -> F x ~= F a

となる。Haskellでは、\(forall \ x\)を省略することができるが、ここでは、\(\mathcal{C}(A,-)\)の部分がどのように表されるかを正確に期するために、\(forall \ x\)をわざわざ付けた。

上の型シグネチャで、\( forall \ x. (a \rightarrow x) \rightarrow F \ x \)は高次の多相関数となっている。また、\(F \ a\)はデータ型である。

それでは少し、例を挙げてみよう。

例1)リスト

リストは関手なので、これを用いると、米田の補題は次のように書き換えられる。
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(A,-),[- ]) \cong [A]
\end{eqnarray}

また、Haskellで表すと

forall x. (a -> x) -> [x] ~= [a] 

となる。

そこで、左辺を自然変換\(\alpha\)とすると、

α :: forall x. (a -> x) -> [x]

となる。

これは、リストに対する関手と同じなので、

α f = fmap f

と考えることができる。これをクロージャと考えると、これに対する入力は\([a]\)と考えることができる。例えば、\([a1,a2,…,an]\)とすると、

fmap f [a1,a2,…,an] 
=[f(a1),f(a2),…,f(an)] 
=[x1,x2,…,xn] 

となる。

例2)\({\rm Hom}\)集合の関手

関手を\(\mathcal{C}(B,-)\)にしてみよう。この時、\(F(A)\)は\(\mathcal{C}(B,A)\)になることに注意すると、米田の補題から、
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(A,-), \mathcal{C}(B,-)) \cong \mathcal{C}(B,A)
\end{eqnarray}
となる。これをHaskellで表すと、

forall x. (a -> x) -> (b -> x) ~= (b -> a)

となる。\((b \rightarrow x)\)はリーダーであることに注意しよう。これは、

α :: (a -> x) -> (b -> x)
g :: b -> a

とすると、

α f = f . g

となる。

例3)継続渡し

関手を\(Id\)にしてみよう。米田の補題から、
\begin{eqnarray}
[\mathcal{C},\mathbf{Set}](\mathcal{C}(A,-),Id) \cong Id(A)
\end{eqnarray}
となる。これをHaskellで表すと、

forall x. (a -> x) -> x ~= a

となる。

これも同じように、自然変換を\(\alpha\)とすると、

α :: (a -> x) -> x
α f = f

これは、前に説明した継続渡しである。継続渡しは時間的な推移を表現できることに特徴がある。