『圏論入門—Haskellで計算する具体例から』(著:雪田修一)

一冊散策| 2020.08.26
新刊を中心に,小社刊行の本を毎月いくつか紹介します.

まえがき

このまえがきでは,圏論の初学者には馴染みのない用語が登場する.だいたいの雰囲気をつかんでいただければ十分である.後半に本書の目的とどのような読者を想定しているかを明示する.

圏論は,1940 年代の位相幾何学が生まれ故郷だ.「自然に同じと見なせる」とか,ある対象あるいは対応が,その他大勢の中で「普遍的」であるとか,そういうことをきちんとした言葉で述べたい,形式化したい,というのが圏論の開拓者たち Eilenberg や Mac Lane の動機だった.初期の著作で今日までも圏論のバイブルとして読み継がれている [1] およびその邦訳 [2] を第 1 の参考文献にあげておく.1950 年代から,数論や代数幾何のような分野では日常語になった.1970 年代から発展した,日本が世界に誇る代数解析 (佐藤超関数に始まる) の京都スクールの論文を読むには圏論の言葉の理解が必須だ.

圏論誕生の前の 19 世紀,ガロワ (Galois) の代数方程式の理論は,群の圏と体の圏の圏論的な絡み合いの話だ.筆者はガロワが圏論の種をまいた数学者だと考えるが,数学史の専門家の教えを請いたい.

圏論は生まれた直後から論理学やコンピューター科学への浸透が始まった.物理学でも盛んに使われている.関数型プログラミング言語 Haskell では圏論的な視点からライブラリーの構築あるいは再構築がされている.数式処理システム Axiom では,数学者が望むような圏論の言葉をそのままプログラミングできるようなインターフェースを提供している.他の有力プログラミング言語でも多くのアイデアが取り込まれつつある.

このような状況で,書店に行くと圏論の入門書から専門書までたくさん見ることができる.ネットで検索すれば,数学,論理学,コンピューター科学,物理学に関連する圏論の本がたくさん出版されているのが分かる.論文の数はさらに何桁も多い.

本書は圏論の入門書であり,米田の補題が最終章の到達点になっている.米田の補題 (the Yoneda lemma) は「数学でもっとも難しい自明のこと」(the hardest trivial thing in mathematics) とよく言われる.自明なのになぜ正しいと一発で言えないのか,もどかしい,そういう定理だ.「補題」というのは大きな定理を証明するための補助定理という意味だったし,今でも基本的にはそうだと思うが,いくつかの特別なケースでは,偉大な定理の尊称だ.中山の補題 (Nakayama’s lemma),Zorn の補題 (Zorn’s lemma) という世界中の数学者が毎日お世話になる,あるいは学生時代に一度は触れる超有名なのもある.圏論では米田の補題がきちんと理解できれば,入門コースは卒業と考えてよい.いや,それは言い過ぎか.筆者は何十年もかけてやっと感覚的に馴染んだ,というのが本当のところだ.米田の補題に触るところまで行けたら圏論入門コースは卒業だ,と言い直した方がよいかも知れない.とにかく本書のゴールはそこだ.この先,圏論との係りをもつ境遇なら,米田の補題は至るところであなたの導き手となるであろう.

本書では,データ構造の明示と図式追跡のパターン化 (文法) にこだわった.その理由は以下のとおりだ.

  • 圏論は型を意識しないと自然変換のあたりからわけが分からなくなる.たとえがよいか分からないが,「関数 $f (x)$」のような言い回しを普通に皆で使い,分かり合えるが,コンピュータープログラムに持ち込むときは,関数は $f (x)$ ではなくて $f$ だし,$f (x)$ は関数 $f$ を $x$ というデータに適用(function application) した式だ.そして我々人間にとっても,圏論の議論をするときに,人の心を捨ててコンピューターになったつもりで計算することが要求される場面がある.その計算が完了して,意味を振り返って考えるときに,人の心を取り戻すのだ.
  • 図式追跡という言葉における「追跡」は一目で見渡せないものを見ようしていることを言っている.どのような順で視線を這わせたらよいのか見当もつかない,そのような図式があとからあとから登場するのだ.

そのために以下の方針をとった.

  • 関手,自然変換,錐,極限などの概念にはほぼ漏れなくそれらのデータ構造を明示し,コンピューターに入力可能な姿を目指す.
  • Haskell の短いサンプルコードを多く掲載する.型が合わないものはだめ,と叱ってくれるので,成功するはずのない目標に向けて努力を続ける無駄を省くことができる.コードを実行することは定理の証明ではないが,証明のそこかしこの推論が正しいことを確信させてくれる.
  • サンプルコードは大きく 2 種類に分けた.1 つは圏 Hask に生息する野生の関手や自然変換の観察だ.他方は Haskell によって,おもちゃの圏の関手,自然変換,極限の絡み合う小世界を作って遊ぼう,というものだ.この 2 種類の区別を明示しないが,見れば分かる.
  • 図式追跡では,そこになぜその矢印を描きこむのか,という描き手の動機を可能な限り明確に述べる.完成した図式だけでなく,途中経過も随時提示する.
  • 図式には文法があり,描き順がある.これを筆者はまだ明確に定式化できていないが,その必要性を意識してのプレゼンテーションを心がける.

読者への注意を兼ねて本書の特徴を述べる.

  • 米田の補題を目指した圏論の入門書である.圏論再挑戦という人にも勧めたい.図式追跡の「文法」や圏のデータ構造を強く意識したときに理論は違って見えてくることを体験していただきたい.
  • モナドによる計算モデルを Haskell による実行可能な例で説明している.
  • 定理の証明はすべて詳しくつけてある.そのため,集合と写像,単射,全射,直積,関係の対称性,反射性,推移性,同値関係,同値類などの大学初年級の数学はきちんと理解している,あるいは教科書やネットで調べてすぐに思い出せる,あるいはすぐに補える,その程度の素養あるいは新しい知識の獲得スキルがあることが前提だ.
  • 一部の章で,線形代数や群・環・体を応用例にあげた.ただし,それらの例をスキップしても問題ない.ほんの少し楽しみ方が狭まるだけだ.
  • Haskell のサンプルコードが随所にある.これらをスキップしても圏論の議論自体は追いかけることができるが,Haskell の採用は本書の大きな特徴だから,読んだ方が楽しいことは保証する.実行してもらえばさらに楽しめるはずだ.なお,サンプルコードは「読み切り」を原則とし,一部の例外を除いて相互に参照する (import, export する) ことはしない.拾い読みもできるということだ.その代わり汎用性はまったくない.しかし,読み比べてもらえば一貫したデザインパターンがあることは見抜けるだろう.
  • 数学科の学生でも,定評のある入門書をメインテキストとして並行して読んでもらえば,本書はサブテキストとして有効だろう.
  • Haskell コミュニティーで盛んに開発されている圏論の美しいライブラリー群については一切触れない.それらは圏論の中級者以上のためのものだし,筆者に紹介する力量・経験が足りない.

論理学,コンピューター科学に興味ある読者にはアウディ [3] を強く勧める.日本語訳 [4] もある.なお,日本語の専門用語は圏論のバイブルの邦訳 [2] とレンスターの名著 [5] の邦訳 [6] を参考にした.用語の初出時には原則として英語を併記している.Haskell の処理系は GHCi version 8.6.5 を利用した.

原稿段階で査読をしていただいた皆様に感謝いたします.特に,数学的な適切性については前原和寿先生に,コンピューター科学の立場からは大森健児先生にさまざまな誤りをご指摘いただきました.また,日本評論社の佐藤大器氏には数学的内容だけでなく読者への心遣いに関する多くのご助言をいただきました.残っている誤りについてはすべて著者の責任に属します.最後に,朝から晩まで,本書の執筆に熱中した数か月を黙って支えてくれた妻に感謝します.

2020 年 5 月

雪田 修一

本書のサンプルプログラムなどはサポートサイト

https://www.nippyo.co.jp/shop/book/8340.htm

をご覧ください.また,本書に収録されていないサンプルプログラムなども含めて,さらに興味のある方は

https://yukita.cis.k.hosei.ac.jp/

を閲覧してください.

参考文献

  1. Saunders Mac Lane, Categories for the Working Mathematician, second edition, volume 5 of Graduate Texts in Mathematics, Springer, 1998.
  2. S. マックレーン著,三好博之,高木 理訳,圏論の基礎,丸善出版,2012.
  3. Steve Awodey, Category Theory, Oxford University Press, 2006.
  4. S. アウディ著,前原和寿訳,圏論 原著第 2 版,共立出版,2015.
  5. Tom Leinter, Basic Category Theory, volume 143 of Cambridge Studies in Advanced Mathematics, Cambridge University Press, 2014.
  6. T. レンスター著,斎藤恭司監修,土岡俊介訳,ベーシック圏論,丸善出版,2017.

目次

  • 第1章 圏・関手・自然変換
    • 1.1 集合と写像から
    • 1.2 圏・対象・射
    • 1.3 圏のデータ構造
    • 1.4 関手・反変関手
    • 1.5 忠実関手と充満関手
    • 1.6 自然変換
    • 1.7 Haskの部分圏
  • 第2章 自然変換と圏同値
    • 2.1 関手圏
    • 2.2 圏同値
  • 第3章 普遍性と極限
    • 3.1 始対象と終対象
    • 3.2 積
    • 3.3 余積
    • 3.4 極限
    • 3.5 余極限
    • 3.6 極限の存在
    • 3.7 余極限の存在
  • 第4章 関手と極限の交換
    • 4.1 関手は錐や余錐を写す
    • 4.2 Hom関手と極限
    • 4.3 Hom関手と余極限
    • 4.4 実行可能な例
    • 4.5 極限を関手とみる
  • 第5章 随伴
    • 5.1 随伴とは
    • 5.2 単位と余単位
    • 5.3 三角等式
    • 5.4 普遍射と随伴
    • 5.5 随伴の同値な言い替え
    • 5.6 随伴と圏同値
    • 5.7 随伴の大局的な自然性
    • 5.8 随伴と極限
  • 第6章 モナドとHaskellのMonad
    • 6.1 クライスリの三つ組
    • 6.2 Moggiのアイデア
    • 6.3 モナド
    • 6.4 HaskellのMonadインスタンス
    • 6.5 Functor,Applicative,そしてMonad
    • 6.6 モナドと随伴
  • 第7章 表現可能関手
    • 7.1 共変関手の表現
    • 7.2 反変関手の表現
    • 7.3 米田の補題
    • 7.4 Milewskiの「米田を理解する」
    • 7.5 米田の補題による反転工学
    • 7.6 随伴と極限の保存
  • 付録A 集合とユニバース
  • 付録B 出力のある計算
    • B.1 Functorインスタンス
    • B.2 Applicativeインスタンス
    • B.3 Monadインスタンス
  • 付録C 継続渡しによる計算
    • C.1 Functorインスタンス
    • C.2 Applicativeインスタンス
    • C.3 Monadインスタンス

書誌情報など

関連情報