本文へジャンプ

圏論は数学をするための「高級言語」 蓮尾一郎

情報科学における圏論ファン

なぜか、情報科学科には一定数の「圏論ファン」がいます。彼らは多くの場合、次のような経緯でファンになります。

  • プログラミング言語にはこだわりがある。プログラムは、知的で(難しそうで)かつエレガントな言語を選んでカッコよく書きたい。
  • 関数型プログラミング言語(Haskell、OCamlなど)はパッと見わかりにくいが、プログラムが数学的で、短く正確に書けて、なんだかカッコいいのではないか。
  • 関数型プログラミングの先達は、圏論という数学のコトバを使っているらしい。ということは、圏論もカッコよさそう!

応用先は関数プログラミングに限りません。システム検証、プログラム意味論、量子計算……僕の研究では、圏論を情報科学のいろんな数学的側面に使っています。情報科学科は「プログラミングを訓練する場所」だと思われがちだけれど、そうではなくって、プログラミングの「科学」を学ぶところであり、そのある部分はほとんど数学です。だから、数学のコトバである圏論が便利に使えます。
 ところで、プログラムを書くときには、

  • アセンブリのような低級言語(プログラマーがメモリの使い方をひとつひとつ指示する。がんばればなんでも書けるし、高速化・チューニングもできるが、書くのがたいへんで間違いやすい)
  • Java やHaskell のような高級言語(仕事の本質を「こういうことやってね」と大局的に書いて、あとはコンパイラにおまかせ。コンパイラが自動的に低級言語のプログラムに翻訳する)

という2つの世界があります。これはまさに、数学における集合論 vs. 圏論の構図に対比できるのではないでしょうか※2

圏論はすべてを解決するか?

圏論という数学のコトバは、最近数学のあらゆる分野で使われています。 実は、圏論ユーザーのなかで情報科学者、計算機科学者が占める割合はかなりのものです。これはなぜかと考えてみると、情報科学の人って「どのプログラミング言語で書くか」にこだわるじゃないですか。「やっぱりオレはHaskellでないと!」みたいな。圏論の、数学をするための高級言語としての側面が、コトバにこだわる情報科学者にアピールするのかもしれません。

圏論のカッコよさに眩惑されて、「これこそ世界を変える、すべての科学の新たな基礎言語だ!」と思ってしまう人もときどきいます。けれども、僕の見る限り、決してそうではありません。

プログラミングの世界では、パフォーマンスを極限まで突き詰めようとすると、やっぱりCやアセンブリまで遡る必要があります。同じように、圏論でなんでも一般化すればいいわけではないのです。「カッコいい一般化」をして「情報科学として役に立つ」「おもしろいことを引っぱり出す」ためには、センスと修練がいります。そこがチャレンジングで楽しいので、日々修練を積み重ねているわけです。

「圏論を紹介するコラムをわかりやすく」といわれても、正直、困るんです。圏も含め、数学的な概念について聞かれたとき、普通は定義を述べるんだけれども、それは料理を説明するためにレシピを読み上げているようなもの。どんな味と香りがしてどういうふうに魅力的なのか、全然わかりません。特に、圏の定義の無味乾燥っぷりといったらないのです。その圏論の魅力を、いったいどう伝えたらよいでしょうか……。

これを読んで興味がわいたら、『数学セミナー』(日本評論社)のオムニバス連載「圏論の歩き方」を読んでみてください。数学の高級言語としての圏論のいろんな使い方が、多士済々の数学者、数理科学者、生物学者、情報科学者……によって、紹介されていますよ。そのうち、本にまとめられるはずです。

※2:京都大学数理解析研究所の勝股審也先生がおっしゃっていたことです。

ページトップへ戻る