LoginSignup
10

More than 5 years have passed since last update.

圏論の考え方でつくられていない、JavaScriptで動作する spinoza (スピノザ) - (3)

Last updated at Posted at 2015-01-24

前回に続き、関数、値、圏論、モナド、評価戦略、純粋関数型、その辺りの「数学的基礎」を教えるの圏論について言及している部分について、内容を検証していきます。

「数」というものは、
数と論理操作が、まったく同一である、ということ、
「数」そのものが無限に自分を参照して自分自身となっている構造、
無限自己参照構造体とも表現できる「何か」です。

誤りです。圏論で扱うトピックではありません。

この非常に精緻な構造をガチで語ろうとするのが圏論なんですね。
まあだから、圏論の圏の定義とかどうでも良いです。

誤りです。むしろ圏論から定義をとると何も残りません。

今わたしがこうやって話したことを
難しい言葉で表現すると、
..以下略..

wikipediaの引用ですが、正しい内容です。

「数」というものは、
数と論理操作が、まったく同一である、
操作と数、数と操作の区別が一切ないっていう構造、
「数」そのものが無限に自分を参照して自分自身となっている構造、
無限自己参照構造体とも表現できる「何か」です。

誤りです。圏論で扱うトピックではありません。

数っていうのが何か?っていう本質的議論こそが「圏論」です。

誤りです。圏論で扱うトピックではありません。

って、数の本質を語ること=圏論を語ることと同値なんです。

誤りです。

数と操作の区別なんてない、同じものだ、
それを論じるのが圏論で、

誤りです。

プログラミングの「ことば」、論理的にはまったく同じものを
勝手に違う言葉でいってるだけなんですが、言い換えると、

値と関数の区別なんてない、同じものだ、

ってことになります。

誤りです。圏論の適用による結果ではありません。

関数型プログラミングの根本である「集合写像」の数学概念が、
そのままコンピュータによる計算という「物質化」にそのまま当てはめることが不可能であるから、
より「集合写像」をより抽象化した「圏論」をもってその
「計算」=「物質化」を扱う必要があるということですね。

抽象化した、という記述は正しい内容です。圏論を利用する動機については誤りです。

を完全に論理的対象として扱えるようにした解決策としての「圏論」の具現化するならば、
実装は遅延評価でなければいけないし、遅延評価と不可分です。

誤りです。「a program is NOT a mapping」の解決策がモナドです。また、遅延評価にする必要はありませんし、圏論とは無関係です。

この圏論の導入は、
コンピュータのプログラミングが、
真に数学的と一致するような目的、
真に宣言的に記述できるようにするために導入されたのであり、
圏論を導入したコードというのであれば、宣言的にかけてアタリマエなんです。

誤りです。これは圏論ではなく、モナドを意味論に採用する理由です。

先行評価なら無限なんて宣言的に書けないんだから、そんなもんは圏論の実装ではない、ってことだし、

誤りです。遅延評価と圏論は無関係です。

純粋関数型を圏論が数学的基礎にあると語りながら、

純粋関数型と圏論は無関係です。Haskellが圏論の概念を多用しているだけに過ぎません。

これは、まさに圏論のことに他なりませんから、

遅延評価と圏論に関連はないため、誤りです。

IOモナドの理論的背景は圏論だ、ってことになります。

moggiの論文を元に実装されたものですから、正しい表明です。

ここまでの訳注

論理に対する記述は、圏論と直接関係があるわけではないので言及を避けています。

著者が頻繁に主張している「関数とは値」は、型無しラムダ計算のことを指していると考えられます。圏論の文脈ではCCCに $X \simeq X^X$ の同型を入れて作れますが、少なくともHaskellの理論的背景になっていません。

次回以降に続きます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10