本文へジャンプ

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

きわめて抽象度が高く、それゆえに近寄りがたい印象がもたれている圏論。その圏論のもわーっとしている入口へ案内します。とはいえ、圏論のきちんとした定義をわずかな文章で示してもわかりにくいばかりなので、ここではまず小さな例で雰囲気をつかんでください。興味がわいたら、最後に紹介する文献をどうぞ。

矢印ばっかり描いているのだ

数学では普通、「集合 A があって、その元 a ∈ A があって……」というように、集合ベースで話が進みます。圏論というのは、代わりに対象を使う数学のコトバです。ぱっと見でいえば、「矢印ばかり描いている」という印象になるでしょう。
 次の図を見てください。

西田教授が見たCG分野

X、Y、Z、X ⊔ Y というのが対象で、その間に描いてある矢印が射です。

圏論ではこの図を、

  • X、Y が与えられたとき、
  • 特別な X ⊔ Y と、κ1、κ2 がとれる。
  • どう特別かというと、ほかに Z とf、g というものが現れたとき、
  • 図を可換にする (hκ1=f、hκ2=g) ようなh がただ1 つ定まる。

というふうに読みます。いったい、何を言っているのでしょうか?

実はこれ、集合の排他的和 X ⊔ Y の、集合と関数の圏 Sets における「圏論的特徴付け」なのです。排他的和とは、集合の合併をただし重複がないようにとるという意味で、具体的には、たとえばラベル1、2 を付けて、

西田教授が見たCG分野

というようにします。すると、κ1、κ2 は X、Y を X ⊔ Y に「埋め込む」関数で、h は f と g から「場合分け」(X ⊔ Y の元が X 由来だったら f を適用、Y 由来だったら g を適用)でつくられることがわかります。そう思って、もういちど図1を眺めてみてください。なんとなくイメージが湧いたかなあ……。
 さて、図の意味をなんとなく了解してもらえたとして、なんでわざわざこんな面倒くさい言い換えをするのでしょうか。
 すごく大ざっぱにいって、圏論の基本的アイデアは次のようなものです。

“あるモノについて調べるとき、そのモノの「成り立ち」を考えるのではなく、
そのモノと他のモノの間の「作用」や「関係性」を考える”

排他的和 X ⊔ Y の例でいうと、その集合としての成り立ち(元 (1、x) や (2、y) があって……)はまったく無視して、「f と g が h を引き起こして……」というふうに考えるわけですね。ここでは圏の対象 X、Y……が集合、射 f、g、h……が関数になっています。前者が「モノ」、後者が「作用」です。

圏論は数学の便利なコトバ

このような圏論的「矢印で考えよう!」思考法の威力は、集合や関数に限らず、いろいろなモノ、作用をも同じように扱えるというところにあります。
 実際、さっき出てきた圏 Sets は集合を扱うための圏でしたが、関数型プログラムを扱う圏 Types というものもあります。この場合は、プログラムが扱う int や bool などのデータの型が対象で、その間のプログラムが射(矢印)です。このとき、Sets の X ⊔ Y に対応するのが、関数型プログラミングでいうところの直和型なのです。
 このほかにも、考えたい対象や射を換えて、ブール代数とその準同型写像の圏 Bool、位相空間と連続写像の圏 Top、さらにいうと圏とその間の写像(関手と呼ぶ)の圏 Cat など、いろんな圏があります。そして、対象と射が変わっても、圏論のコトバは共通して使えます。あたかも「n を自然数とする。このとき……」とやるように、「C を圏とする。このとき……」とやるわけですね。
 圏論は、情報科学だけでなく数学のなかでも異なる分野をつなぐ「抽象言語」のような役割をしていて、その立ち位置は一種独特です。

圏論の便利なところをひとつ挙げましょう※1

“対象、射としてとる概念の抽象度をいろいろ変えることによって、
その局面局面でフォーカスしたい抽象度にぴったりの数学的コトバが提供される”

集合のコトバでは、要素ベースでいちばん下のレベルからすべてのディテールを積み上げていかなければいけないところを、圏論のコトバを使えば、適切な圏を選ぶことで「いままさに気になっているレベルの構造」だけをササッと書けます。

※1:京都大学数理解析研究所の小嶋泉先生がおっしゃっていたことです。

ページトップへ戻る