土岡俊介さんへ
こんにちは、結城浩です。
結城がNo.03で提示した「圏論ならでは」という質問について、 No.04でていねいにお返事くださりありがとうございました。
三点ほど挙げていただきましたが、 結城にとっては「なるほど」という部分、 正確にはわからないけれど雰囲気だけ感じた部分、 さっぱりわからないけれどおもしろそうな部分がある展開でした。
私が興味深く読んだのは「自明に自明」のところです。 特に「特殊性を使っているところと一般論から従うところとを切り分ける手段」を圏論が提供するという部分はたいへん興味深く読みました。 ある数学的対象に固有の話なのか、それとも他の数学的対象にも適用でき、もっと抽象化して論じられる話なのか、 その違いを際立たせてくれるとしたら、圏論の役割は非常に大きなものだと感じます。 数学をしている方には当たり前のことなのかもしれませんが、 私にとっては真に新しい視点でした。
残念ながら「一般随伴関手定理」の部分はほんのりと雰囲気だけ感じる程度、 また「圏論化」の部分については比喩としてしか理解できませんでした。 結城にとっての《理解の最前線》は、いただいたお返事よりもまだだいぶ手前にあるようです。残念。 しかしながら、No.03で私が書いた「多様な数学的対象や数学的事実に対して抽象度が高く統一的な表現を与える」 以上の「何か」が確かに存在するとわかったのはうれしいです。
デザインパターン
だいぶ以前になるのですが、 ある数学者さんが「圏論は当たり前のことを論じている」と語っていたのを思い出しました。 ちらっと耳にしただけなのでその真意まではわかりませんが、 圏論が特殊な部分と一般論とを切り分ける手段になっていると考えると、腑に落ちるところがあります (もちろん私は「当たり前」を否定的にとらえているわけではありません)。
数学から離れてしまうのですが、 私はプログラミングの分野で「デザインパターン」と呼ばれる概念のことを連想していました。 プログラムの設計で生じる問題を解決する際に、 類似した解法がしばしば用いられます。 「このような制約下にある問題を解決するにはこんな解法を用いるといい」 という経験を設計上の利害得失を考えた上で抽象化し、整理して名前をつけたもの。 それがデザインパターンです。
デザインパターンは設計を議論する際の語彙を与えますが、 しばしば「デザインパターンは当たり前のことしか言ってない」 とやや的外れな批判を受けることがあります。 デザインパターンは熟練した設計者ならよく経験しているものを整理したものですから、 「当たり前」に見えるのは「当たり前」なのです。
《同一視》が生む感動
ポアンカレの「数学は異なるものに同じ名前をつける技法」という言葉は、 結城も拙著『数学ガール/ゲーデルの不完全性定理』第8章のエピグラフとして使ったことがあります。 私自身の数学の理解は限られていますが、それにも関わらず《同一視》は大きな感動を生みます。 そのため、私は数学のあちこちに登場する《同一視》にたいへん興味を持っています。 《同一視》はNo.01にも書いた《二つの世界》をつなぐ鍵の一つであるように思います。
一般に《同一視》は、数学に限ったことではありません。 「何かを何かであると見なす」ことや「あれとこれは同じであると見なす」ことは普遍的な知的処理でしょう。 でも数学では「このような理由に基づいて見なす」のように「見なす」際の理由・根拠が示されます。 そこは大事なポイントではないかと思っています。
「数学ガール」の物語では、高校から大学の境目くらいで学ぶ数学を扱います。 そしてそこでは《同一視》や「見なす」が重要な役割を果たします。
私が小学校から中学校にかけて数を学んだとき、数は計算と不可分なものとして扱いました。 しかし、集合に代数構造を入れ公理によって数の体系を構成するという抽象代数に触れたとき、私は大きな意識の変化を体験しました。 その公理さえ満たすなら○○と「見なす」ことができる。そのように根拠が明確な《同一視》との出会いは、何回思い返しても感動があります。
「対象が一つで任意の射が同型射である圏」が群と見なせるということを学んだとき、 最初は意味がさっぱりわかりませんでした。でも理解してみると、 自分が持っていた群に対する理解はずいぶん偏っていたのだと気付きました。 意味がわからなかったのは、 群を考えるときにその元を粒のようなイメージでとらえてしまっていたからでした。
インタフェースとインプリメント
またプログラミングの話で恐縮です。 「○○を○○と見なす」発想はプログラミングにもよく登場します。 インタフェースとインプリメント(実装)を分けて考え、 たとえ実装が異なっていてもインタフェースさえ一致しているなら同一視するのは「見なす」発想です。
同じインタフェースを持っているプログラムは、実装が異なっていてもすべて同じものと見なす。 「プレイ」というインタフェースを持っていれば、 たとえそれが音楽を鳴らす場合でも、動画を再生する場合でも同じものと見なす。 インタフェースが守られていれば、プログラムを一つの「部品」と考えて交換しやすくなりますし、 実装を変えても同じように動くので改良や最適化をしやすくなりますし、他のマシンへの移植も楽になります。 《同一視》や「見なす」が実用的な価値を持ちます。
「実用的な価値」と呼ぶのは変かもしれませんが、同様の「実用的な価値」は数学の中にもありそうな気がします。 その数学的対象が何か最初のうちはわからない。でもそれがたとえば「群と見なせる」となったとたん、 群論の議論をすべてその数学的対象に適用できる。 そこでは《同一視》がとても「実用的な価値」を生んだように思えます。
語彙という点でもそうです。 ある数学的対象が群と見なせるとわかったときに、 群の用語、群の語彙をごっそり手に入れたことになります。 「群と見なしたとき、逆元は何に相当するだろうか」のように、 手に入れた語彙を使って数学的対象の構造を探る手がかりが得られそうです。
素直に読むことの難しさ
数学を学ぶときに私が陥りがちな失敗の話をします。 それはいわば《同一視》に足をすくわれる話になります。
私は《同一視》に感動するあまり、 類似点を見つけると「もしかして、これとこれは同じことを言っているんじゃないか! すごい!」 と舞い上がる傾向があります。
具体的な例を挙げますと、 たとえば充満関手を学んだときに「これは全射だ!」と思っただけで舞い上がり、 充満関手の定義をしっかり押さえなかったミスがありました。
私がそれに気付いたのは『ベーシック圏論』で「対象について本質的に全射」という概念が出てきたときでした。 「対象について本質的に全射」の定義を読んだときに「充満関手は、対象について本質的に全射だ」と勘違いしてしまったのです。 「全射」という言葉だけに引きずられてしまいましたが、 充満関手は射関数が全射なのでした。 自分の粗雑すぎる理解が恥ずかしいですね。
No.02で土岡さんが書いていた「定義を暗記してしまいましょう」というのを改めて思いました。 類似点だけを追い求めて理解したつもりになっても、 しっかりと定義に根ざした理解になっていないなら意味がありません。
それではこの辺で今回の手紙を閉じることにします。
土岡さんの次のお便りを楽しみにしています。