プログラミングのカテゴリー理論(ではない)?


21

Haskellやそれほど純粋ではないFP言語を学んだ後、カテゴリ理論について読むことにしました。カテゴリー理論をよく理解した後、私はカテゴリー理論の概念を使用してプログラムの設計を考える方法について考え始めましたが、どんなに一生懸命試みても、これは進むべき道ではないようです。

カテゴリー理論をプログラムの設計に関連付けるための多くの失敗した試みを費やした後、私は次のような結論に達しました:

  • カテゴリ理論は、プログラミング言語を設計するときに役立ちます
  • カテゴリ理論は、プログラムを設計するときに使用するものではありません(カテゴリの原則に基づいて設計された言語を使用する場合でも)。例:Haskellでプログラミングする場合、カテゴリ理論の概念ではなく、型、型コンストラクタ、関数、高階関数などを使用してプログラムを設計します。

要約すると、下層システムがあります(順序は低から高です):

カテゴリ理論->プログラミング言語->プログラム

特定のレイヤーでは、直下のレイヤーの概念を使用します。

この理解は正しいですか?そうでない場合は、プログラムの設計でカテゴリ理論の概念を直接使用できると考えている場合は、いくつかの記事またはブログの投稿を参照してください。

注:プログラムを設計するということは、並行性、並列処理、リアクティブ、メッセージパッシングなどのさまざまな概念に基づいてプログラム設計することを意味します。


1
モナドはプログラミング言語またはプログラムの一部と考えていますか?矢印?
デイブクラーク

2
これは、少なくとも部分的には哲学的な質問だと思います。正解が1つあるかどうかはわかりません。カテゴリ理論の熟練者は、プログラミング中に得られた直感を適用し、別の熟練者は異なる考え方を支持します。
ラファエル

2
書かれているほとんどのプログラムは、カテゴリー理論に触発されていないプログラミング言語を使用しています。私の知る限り、平均的なプログラマーはカテゴリー理論を認識していないため、ほとんどのプログラム(オペレーティングシステムとブラウザーを含む)は高等数学に触発されていません。
ユヴァルフィルマス

1
@YuvalFilmus:私の質問は、関数型プログラミング言語を対象として
はAnkur

回答:


13

もちろん、それはあなたがどんな種類のプログラムを設計しようとしているかに依存します。

おばさんのチョコレートショップ用の会計プログラムを設計している場合、カテゴリ理論が非常に役立つことは非常に疑わしいです。

しかし、もちろん、カテゴリー理論がプログラムの設計に非常に役立つ状況もあります(つまり、データ構造、ライブラリーなども意味します)。このような状況は、主に関係するプログラムが数学的な性質を持っている場合に発生します。

正確な実数と数学分析で発生する他の構造を計算するプログラムを作成する場合、最初に答える必要がある質問は、複雑な数学オブジェクト(微分可能な関数、多様体など)を正しく実装することの意味です。 )。ここでは、いくつかのカテゴリ理論と論理を知ることが非常に役立ちます。これらは、数学構造の定義を対応するデータ構造の仕様と実装に体系的に変換する方法を提供するためです。あなたが探すべき流行語は実現可能性理論です。しかし、これはほんの一例です。

カテゴリ理論がどのように役立つかを知る最良の方法は、多くのカテゴリ理論(および数学全般)を知っている人々によって書かれたプログラムを見ることです。この明白な例は、マルティンエスカルドと彼の不可能な機能です。

M.エスカルドとP.オリバ:シーケンシャルゲーム、ティコノフの定理、二重否定シフトに共通するもの、数学構造化関数型プログラミング2010、ACM Press。(コンパニオンHaskellおよびAgdaファイルを使用

これは単なるカテゴリー理論ではなく、論理とトポロジーであると不満を言うかもしれません。そのような苦情はひどく見当違いです。最良のカテゴリー理論は、常に他のものと混合されます。

最後に、私は少し自己割り当ての読書に基づいて物事の性質について壮大な結論を引き出すことをお勧めします。


それがまさに私のポイントです。会計ソフトウェアを設計する場合、型システムは設計用の私の言語になります。数学ソフトウェアを設計する場合でも、型システムを使用してカテゴリー理論の概念を表現します。これは基本的に、型理論または型システムがカテゴリ理論よりも一般的な抽象概念であることを示しています。
アンクール

1
それはばかげた声明です。そのような抜本的な発言を行う前に、おそらくもっと学ぶべきだと思います。多分、existentialtype.wordpress.com
2011/03/27 / the

私は研究者、博士号、科学者、数学者、カテゴリー理論家ではないので、私の発言に腹を立てないでください。それらはいくつかの科学雑誌や研究論文には掲載されません。私は、コインの反対側を理解しようとしている単なるプログラマーです。ところで、リンクをありがとう。
アンクール

1
私はこれに気付いています。それがまさにあなたがあなたのように結論を出すことに注意すべきだと提案している理由です。そして、これが、タイプ理論とカテゴリー理論の関係についての技術的な本ではなく、ボブ・ハーファーによるブログ投稿をあなたに言及している理由でもあります。私は助けようとしていますが、数学の分野全体の性質について壮大な結論を下すことになると、あなたにもう少し留保を期待します。
アンドレイバウアー

たとえば、「型理論はカテゴリ理論よりも一般的な抽象概念である」と述べました。これは、わずかな知識に基づいて作成しないことを知っておくべきステートメントの例です。私はこの分野で専門的に仕事をしていますが、そのような結論を下す場合や、反対の結論を下す場合でも、私は非常に慎重です。
アンドレイバウアー

6

以前は、CTを使用してデータ型を記述していました。

  1. データ型は、オブジェクトが(仕様言語)型の有限シーケンスであり、矢印が投影またはデータ型操作の合成である特定のカテゴリによって定義されました。たとえば、オブジェクトはドメインであり、スタックのプッシュ操作のコドメインです。これにより構文が得られますが、セマンティクスの概念はまだありません。
  2. 代数、つまり型のインスタンスは、理論から(小さな)セットのカテゴリであるEnsへのファンクターです。(ラッセルのパラドックスを避けるために「小さい」を使用しますが、それはほとんど問題ではありません。)
  3. カテゴリのクロージャプロパティが論理理論のファミリに対応していることがわかります。たとえば、理論カテゴリが製品の下で閉じられている場合、データ型は方程式によって公理化できます。プルバックを行うことによって理論カテゴリが閉じられる場合、データ型はホーン文によって公理化されます。

誰もこれに注意を払うかどうかは完全にはわかりません。これとそこのリンクが、より詳細に説明すると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.