参照要求:型システムに適用されるカテゴリ理論


13

プログラミング言語理論を真に理解するために、カテゴリー理論をどのように学ばなければならないかについて、私は聞き続けています。これまでのところ、カテゴリーの領域に足を踏み入れることなく、かなりのPLを学びました。しかし、私は自分が行方不明になっていたものを見るために飛躍する時だと思った。

残念ながら、私が見つけることのできるソースはどれも、型システムやプログラミングに接続しているようには見えません。彼らそれがコンピューター科学者のためのカテゴリー理論への入門であると言うが、それから一般的な抽象的なナンセンス(私はこれを愛情を込めて言う)に変わります。

私の質問は実際には2つあると思います:

  1. カテゴリー理論はPLの「深い概念」を理解するために不可欠ですか?
  2. 型システムとプログラミングへの実用的なアプリケーションの観点からカテゴリー理論を説明するソースは何ですか?

これまでのところ、私が得た最も遠いのは、ファンクターの漠然とした概念です(私が知る限り、これはMLのファンクターとは関係がないようです)。カテゴリ理論的な観点からモナドを理解するために頭の中に留めておかなければならない抽象化を恐れています。


2
@Raphaelあいまいにしか関係のない2つの異なる質問で構成される質問をするのは悪い考えです。しかし、質問1は主観的ではありません。むしろ、説明と説明を求めるリクエストです。質問2は、実際の説明ではなく、説明されている場所への参照に満足しているという意味で意味があったと思います。
トーマスクリンペル

2
将来的には、投稿ごとに質問を1つだけ行うことをお勧めします。質問1を行うことができ、得られた回答に応じて、質問2を個別に尋ねるかどうかを決定します。多くの場合、物事はよりスムーズに進みます。
DW

1
@Raphael質問1はどのように主観的ですか?判断するのは難しいかもしれませんが、それはあなたの言うことですか?そして、それは答えとして「それはあなたがどんな人であるかに依存します。」–それはあなたが意味するものですか?それでも、それが間違いなく不可欠であるか、間違いなく不可欠でないことが判明するかもしれませんよね?(そして人々はそれが必須ではないことに同意するようです。)
k.stm

1
@ k.stm質問の一般的な形が心配です。「公式言語の深い概念を理解するために代数は不可欠ですか?」と誰かが尋ねた場合、好みと好みに基づいて、異なる人が異なる答えを出すという事実を知っています。ここで違うとは思わない。
ラファエル

1
@Raphaelわかりました、わかりました。しかし、私はそれが客観的な質問に主観的な答えを与えている人々だと思います。(人々は言うような感じのコーヒーが健康であるかどうかを尋ねられ、「ああ、私は5つのカップの日を飲んでいると私は最高の気分!」。)
k.stm

回答:


15

カテゴリ理論は、プログラミング言語を理解するのに必要ではなく、プログラミング言語の高度な研究を行う必要さえありません。ほとんどのプログラミング言語の人々は(多くの)カテゴリー理論を知りません。

カテゴリー理論的手法は、プログラミング言語の研究のほんの一部で、つまり、関数プログラミングの分析で、特に、一部の計算効果がモナド構造を持つというMoggiの大きな発見以来、ほとんど役に立ちました。1990年代、Moggiの突破口に続いて、カテゴリカルメソッドを他の形式のプログラミング言語に拡張するために多くの研究が行われました。しかし、私の知る限り、オブジェクト指向、同時、並列、分散計算、時限計算、またはコンパイラに役立つカテゴリメソッドはすべて見つかりませんでした。このため、人々は大部分の拡張されたカテゴリ手法を放棄しました。

型付きプログラミングのカテゴリカルアプローチは、純粋な関数でうまく機能します。実際、いくつかの単純なタイピングシステムはカテゴリです。これは、たとえば

現在、並行プロセスのタイプ(セッションタイプなど)について多くの作業が行われていますが、2016年9月の時点では、それらはいずれも本質的にカテゴリに該当しません。

とはいえ、数学をあまり知ることはできませんし、カテゴリー理論を知ることは有用です。だから、費用/便益の問題です。もし数学が好きなら、多分あなたが代数の背景を少し持っているなら(例えば、集合、無料の環などの無料のグループは何ですか)、カテゴリ理論を学ぶのは簡単です、そしてあなたが(インスピレーションを受けた)仕事をするつもりなら関数型プログラミングでは、カテゴリを知っていると役立ちます。

最後に、カテゴリー理論は美しい数学であり、それがとてもきれいだからといって勉強する価値があります。


別の見解については、この議論におけるUday Reddyの貢献を参照してください。


「しかし、私の知る限りでは、カテゴリカルな方法が有用であるとは言えません...」それがまさに私の問題です。操作上のセマンティクスはこれらのすべての概念を正確に記述することができるため、私は見逃したとは感じませんでした。私は数学が大好きですが、抽象代数の私の背景は悲しいことに欠けています。私は一般的な代数構造の最低限の基本しか理解していません。これにより、カテゴリー理論の把握が特に面倒になりました。
ガーデンヘッド

2
@gardenheadそれなら、多分CTはあなたにとってそれほど便利ではないでしょう。型に関する研究を含む「関数型プログラミング」スペースで多くの論文を読みたい場合、それらの多くはCTの言語を使用します。
マーティンバーガー


2
さらに本cs.unibo.it/~asperti/PAPERS/book.pdf "Categories、Types、and Structures"をお勧めします。これは明らかに絶版ですが、それはいずれかのPDFへのリンクです著者のホームページなので、合法だと思います。
ジョンフォルコシュ

6

カテゴリ理論を学ぶことは膨大な時間の投資であり、それが価値があるかどうかの質問は非常に妥当です。私もまだこれに苦労しており、なぜそれを学ぶ必要があるかはすでにわかっています。私が書いた:

プログラミングを始めたときはアセンブリ言語が好きで、設定理論はアセンブリ言語に似ています。カテゴリ理論は、主流のZFCセット理論に組み込まれたロジックとモデル理論に関するすべての偏見を回避するための1つの選択肢です。

ここでの考え方は、特定の型理論またはプログラミング言語の可能なセマンティクスとして、セットまたは「不特定ビット」の代わりにカテゴリを使用することです。なぜこれをしたいのですか?アクションと観察の二重性を考慮してください。異なる観測(または少なくとも時間内の順序)が互いに干渉することはありません(量子力学の外側)が、これは必ずしも異なるアクションに当てはまるわけではありません。集合論に埋め込まれたロジックに関する偏見が根付いているため、観測のモデリングと比較して、アクションのモデリングが難しくなっています。


ここで主張するようなカテゴリー理論と型理論の間には本当に完全な対応があるとは確信していません。

構文とセマンティクスの二重性により、型理論をカテゴリー理論の形式的な構文言語または計算と見なすことができ、逆にカテゴリー理論を型理論のセマンティクスを提供すると考えることができます。

カテゴリ理論が型理論のセマンティクスを提供できることは確かですが(これは非常に便利です)、型理論がカテゴリ理論で行われたすべての計算を表現するのに十分に強力な形式構文言語を本当に提供するとは思えません。


実際には、有用な質問と類推を提案することにより、カテゴリー理論の有用性が生まれます。しかし、カテゴリー理論は、実際に重要な問題から単に気を散らすもの(時間の無駄)であることが判明した活動や質問を示唆することもできます。そして、カテゴリー理論を気にせずに論理と型理論を学ぶことができます。


ご意見ありがとうございます。カテゴリ理論を学ぶ理由は私のものとは異なるようです。あなたが興味を持っているのは純粋に数学的な観点からです。一方、型の理解を広げたいと思います。それでも、それの素敵は自分自身が近づいて適用することは困難カテゴリを見つけ、他の人のbesdiesを知っている
gardenhead
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.