従属型はサブタイプ化が行うすべてを提供しますか?


24

型とプログラミング言語はサブタイピングにかなり重点を置いていますが、私が知る限り、サブタイピングは特に基本的なものではないようです。サブタイピングは、依存型よりも多くのものを提供しますか?依存型の操作はより多くの作業にバインドされるため、サブタイプが実際に役立つ理由を理解できます。しかし、プログラミング言語の基礎としてよりも数学の基礎として型理論に興味があります。サブタイピングに注意を払うべきですか?

回答:


22

サブタイピングと依存型は直交する概念です。

通常、サブタイプには包含の概念が備わっており、スーパータイプが期待される場所に1つのタイプの式を表示できます。

サブタイピングは決定可能である可能性が高く、実装で管理するのがより簡単です。

依存型付けは、はるかに表現力豊かです。しかし、グループをモノイドとも見なしたい場合は、余分な構造を忘れるために包摂の概念が必要です。多くの場合、Coqを使用する場合など、この種の強制に対処するための些細な証明義務が生成されるため、実際にはサブタイピングは何も追加しない場合があります。さらに重要なのは、グループについて話すときにモノイドの理論を再利用するなど、さまざまな理論をまとめて再利用できるようにする方法があることです。Coqの型クラスは、こうしたことを行うための最近の革新です。モジュールは古いアプローチです。

「従属型のサブタイピング」をすばやく実行すると、主に2000年頃から従属型にサブタイピングを追加する作業がたくさんあります。メタ理論は本当に難しいので、従属型のサブタイプは表示されません証明アシスタント。


3
ありがとう、これはまさに私が探していたものです。cstheory.SEはそのような質問にふさわしい場所ではありませんが、今では多少好評を博しているようです。-5から+5のスケールで、将来、同様の質問を奨励または落胆させますか?サイドノートとして、私が理解しているように(ロバート・ハーパーを読んで)、型クラスはモジュールのサブカテゴリーです、そうですか?
ジョンサルバティエ

3
この質問は、cstheory.SEに適したものの境界のすぐ右側にあります。型クラスは実際にはモジュールのサブカテゴリではありません。型クラスがモジュール+型推論+ free_plumbingのようです。
デイブクラーク

2
従属型を使用したサブタイイングは、かなり簡単にいつでもモデル化/シミュレートできると思います。Haskellでは、HList(決定可能な型の等価性に基づいて構築されます)を使用すると、たとえばサブタイプを指定できます(「Haskellの見落とされたオブジェクトシステム」を参照)。サブタイティングに関する唯一の難しい部分は型推論であり、依存型を操作したら、とにかくその90%を捨てます。
-sclv

(コメントから回答に変更)
ニールクリシュナスワミ

Martin-Loefの型理論のサブセット理論は、基本的に構造の忘却をモデル化するために必要なものであり、1980年代に遡ります。これは、@ Neelが彼の答えで得ているようなものだと思います。
チャールズスチュワート

22

ただし、プログラミング言語の基礎としてよりも数学の基礎として型理論に興味があります。サブタイプに注意を払う必要がありますか?

サブタイピングによって得られるもう1つのことは、サブサンプションは多くのコヒーレンスプロパティが保持されることを意味するということです。従属型理論では、サブタイプでできることをすべてモデル化するために、証明無関連の概念も必要です。たとえば、従属型理論では、従属レコードでサブセットを形成することを近似できます。

{バツS|;Pバツ} 対 ΣバツSPバツ

SPバツバツ

バツ<:YバツバツバツYPバツPバツ

それができたら、従属型理論へのサブタイピングを体系的に精緻化できます。従属型理論(この場合はTwelf)にサブタイピングを追加する例については、William Lovasの論文を参照してください。

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