手続きについて考えて見た
前回述べた「手続き」ですが、
- カリー化(カリー化 Wikipedia 日本語版)で、
- 「f(a, b) = c という関数 f があるときに、F(a) = g(ここで、g は g(b) = c となる関数である)という関数 F が、f のカリー化」
と有り、
- カリー化をさらに「煮詰めて」、
- 引数0になるまでにしたら(全部を環境変数扱いにしてしまう)
- 関数で仕切られていない、ブログラムの部分も、
- 統一的に取り扱えないか
考えたのですが、
その際に、
Copilot Pro Think Deeper設定有り で本日9時に 「コンピュータ科学で、カリー化と高階関数の関連を、圏論の立場で言うとどうなりますか?」という問いをした所、
- 『2変数の関数 f: A × B → C を「カリー化」して、1変数の関数 f̄: A → C^B に変換する操作』は、
- 任意の対象 A, B, C に対して、以下の自然同型が成り立ち、
Hom(A × B, C) ≅ Hom(A, C^B) - カリー化を通じて得られる f̄ は、A の各元に対して「関数(BからCへの写像)」を返す関数となり、これが高階関数の一例となる
との回答(抜粋)を得ました。
つまり、
つまり、高階関数は引数の型の冪乗だから高階なんだ、すごいんだ、
と言う事かも知れません。
しかしながら、特に関数型プログラミングでは、
- 変数は不変が望ましい
とされているはずで、型であっても、実行時には1の集合に過ぎず、いくら冪乗しても「すごく」ならない様に思えて来ました。
すなわち、
すなわち、前に『「高階関数」のおかしさ 1』で述べた様に、
階位の高い、形而上の議論をする場合には、この様に、
- 1階の議論に比べて解像度が落ちる
- のは、人類の限界と言って良いのではないか?
と思いましたが、なのに、
それに比べて、プログラミング分野での「高階関数」は、(私が出会った解説記事などの、実例の範囲ですが)
- 全く解像度が落ちていない(単に無名関数を変数にセットしただけ)
例以外、見た事が有りません。
となるおかしさは、
- 実行時の「変数不変」をスポッと無視し、
- 実行前の虫の良い状態で、(明らかに出来たら凄い👍)高階関数だと言う
と言う欺瞞のせいに思えて来ました。
結論
これからも「高階関数」のおかしさにより幻惑されたせいでプログラミングが嫌いになる人は存在し続けることでしょう。