型とプログラミング言語はサブタイピングにかなり重点を置いていますが、私が知る限り、サブタイピングは特に基本的なものではないようです。サブタイピングは、依存型よりも多くのものを提供しますか?依存型の操作はより多くの作業にバインドされるため、サブタイプが実際に役立つ理由を理解できます。しかし、プログラミング言語の基礎としてよりも数学の基礎として型理論に興味があります。サブタイピングに注意を払うべきですか?
型とプログラミング言語はサブタイピングにかなり重点を置いていますが、私が知る限り、サブタイピングは特に基本的なものではないようです。サブタイピングは、依存型よりも多くのものを提供しますか?依存型の操作はより多くの作業にバインドされるため、サブタイプが実際に役立つ理由を理解できます。しかし、プログラミング言語の基礎としてよりも数学の基礎として型理論に興味があります。サブタイピングに注意を払うべきですか?
回答:
サブタイピングと依存型は直交する概念です。
通常、サブタイプには包含の概念が備わっており、スーパータイプが期待される場所に1つのタイプの式を表示できます。
サブタイピングは決定可能である可能性が高く、実装で管理するのがより簡単です。
依存型付けは、はるかに表現力豊かです。しかし、グループをモノイドとも見なしたい場合は、余分な構造を忘れるために包摂の概念が必要です。多くの場合、Coqを使用する場合など、この種の強制に対処するための些細な証明義務が生成されるため、実際にはサブタイピングは何も追加しない場合があります。さらに重要なのは、グループについて話すときにモノイドの理論を再利用するなど、さまざまな理論をまとめて再利用できるようにする方法があることです。Coqの型クラスは、こうしたことを行うための最近の革新です。モジュールは古いアプローチです。
「従属型のサブタイピング」をすばやく実行すると、主に2000年頃から従属型にサブタイピングを追加する作業がたくさんあります。メタ理論は本当に難しいので、従属型のサブタイプは表示されません証明アシスタント。
ただし、プログラミング言語の基礎としてよりも数学の基礎として型理論に興味があります。サブタイプに注意を払う必要がありますか?
サブタイピングによって得られるもう1つのことは、サブサンプションは多くのコヒーレンスプロパティが保持されることを意味するということです。従属型理論では、サブタイプでできることをすべてモデル化するために、証明無関連の概念も必要です。たとえば、従属型理論では、従属レコードでサブセットを形成することを近似できます。
それができたら、従属型理論へのサブタイピングを体系的に精緻化できます。従属型理論(この場合はTwelf)にサブタイピングを追加する例については、William Lovasの論文を参照してください。