私は依存型について読んできました。何かを誤解していないことを確認するための質問が1つあります。これでWikipedia page on dependent types開始:コンピュータ科学とロジックでジェネリックは、依存型と同じ値でパラメータ化されていますか?
、依存の型は、その定義値に依存タイプです。 「整数の対」はタイプです。 「第2の値が第1より大きい整数の対」は、値に依存するため依存型です。
私は範囲の数を表すことができる言語があるとします。例えば
struct Int<Min, Max>
を、タイプInt<0, 10>
は0包括と10との間の排他的整数を表します。ボーナスとして
、私は一般的な分散を導入するとします。たとえば
struct Int<in Min, out Max>
を、そのようInt<3, 10>
やInt<0, 8>
ようなタイプのインスタンスは、タイプInt<0, 10>
の変数に割り当てることができます。だから
Int<Min1 + Min2, Max1 + Max2> operator+(Int<Min1, Max1> op1, Int<Min2, Max2> op2);
Int<0, 10>
とを追加するタイプInt<3, 14>
の結果を生成します:
今、このタイプの加算演算は次のようにシグネチャを持つことができます。そのようなタイプのシステムでは
、我々はまた、のようなペア、注文している可能性:ように
struct OrderedPair<Min, Mid, Max>
{
Int<Min, Mid> SmallerNumber;
Int<Mid, Max> LargerNumber;
}
をと。
これは従属型とは異なりますか?もしそうなら、どうですか?
依存型を使用すると、型に述語を添付して、すべての操作でその述語が保持されていることを確認できます。システムをいくつかの述語(範囲の最小/最大など)に制限することができれば、それをオフロードして、ある程度のパラメータを入力することができます。ハスケルはそうすることを許していると聞いた。つまり、範囲内の数値やN個以下の要素のリストの実際的なケースでは、おそらくそれを達成することができます。一般的なケースでは、おそらくそうでないかもしれないが、なぜ人々は依存型言語を発明するだろうか? – 9000
@ 9000ええ、私は基本的には、あるタイプ(この 'Int'、可能な 'List 'など)がビルディングブロックとして基本的に全体に届くかどうかを理解しようとしています従属型の型システム、または従属型システムは全く別のものです。 –