前回までは関数、値、圏論、モナド、評価戦略、純粋関数型、その辺りの「数学的基礎」を教えるというエントリについて議論を進めてきました。今回はこのシリーズのタイトルのインスパイア元である、圏論の考え方でつくられた、JavaScriptで動作する純粋関数型プログラミング言語 spinoza (スピノザ) の圏論について書かれた部分の内容について検証していきます。
圏論とは、
【数】というものの代数的構造を論じるための数学理論です。
誤りです。圏論について説明するときに【数】を強調するのは適切ではありません。
【数】=【数への操作】
と、無限に自己参照する再帰構造になっている「何か」であり、
こういう代数構造を論じるのが「圏論」なのです。
誤りです。
【数】が【数への操作】とまったく区別がつかない「何か」であることを論じる
「圏論」
誤りです。
圏論において、
【集合】
と
【写像】
というのが、同じものなんだから
誤りです。そのような事実はありません。
より抽象化した言葉遣いで、それぞれ
【対象(object)】
と
【射(arrow)】と呼ぶ
正しい呼び方です。また、対象が集合とは限らないことも筆者は理解していると想像できます。
【対象(object)】のオブジェクト、
ファーストクラス・オブジェクトとしての【関数】として考えられます。
ここでは、オブジェクト指向のオブジェクトではありません。
「ファーストクラス・オブジェクト」の「オブジェクト」は「オブジェクト指向のオブジェクト」ですので、誤りです。「ファーストクラス・オブジェクト」の「オブジェクト」と圏論の対象(object)は別の言葉です。
ここまでの訳注
このシリーズのほかのエントリと同様に、圏論について書かれていない部分については言及していません。
圏論の考え方でつくられたプログラミング言語には、萩野先生が論文にまとめたCPLの実装がgithubに上がっています。論文のリンクは切れていますが、ネット上のどこからかは入手可能ではないかと思います。詳細は読んでいませんが、意味論を圏論で作って簡約も圏論の枠組の規則で行うって話じゃないかと予想しています。その辺りの真偽は各自で確認してみてください。
ということで、このシリーズはこれでおしまいです。