Я читал на зависимых типах, и у меня есть один вопрос, чтобы убедиться, что я не что-то недопонимаю. Wikipedia page on dependent types:Являются ли дженерики параметризуемыми значениями такими же, как и зависимые типы?
В информатике и логике зависимый тип - это тип, определение которого зависит от значения. «Пара целых чисел» - это тип. «Пара целых чисел, где вторая больше первой» является зависимым типом из-за зависимости от значения.
Предположим, что у меня есть язык, где я могу представлять собой число в диапазоне:
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;
}
и так далее.
Это отличается от зависимой печати? Если да, то как?
Зависимый тип позволяет прикрепить предикат к типу и проверить, что он выполняется во всех операциях. Если вы можете ограничить свою систему несколькими предикатами (например, min/max для диапазона), вы можете разгрузить его, чтобы ввести параметры в степень; Хаскелл вроде как позволяет это сделать, я слышал. То есть для практического случая чисел в пределах диапазона или списков не более N элементов вы, вероятно, можете это достичь.В общем случае, скорее всего, нет, иначе зачем людям изобретать языки, отпечатанные на разных языках? – 9000
@ 9000 Да, я в основном пытаюсь понять, могут ли определенные типы (такие как «Int», возможный «Список », а также несколько других), могут в основном использоваться в качестве строительных блоков для достижения целого тип системы зависимых типов или система зависимого типа - это нечто совсем другое. –