Основные различия заключаются в двух измерениях - в основной теории и в том, как они могут быть использованы. Давайте сосредоточимся на последнем.
Как пользователь, «логика» спецификаций в системах LiquidHaskell и типах уточнения в целом ограничена разрешимыми фрагментами, так что проверка (и вывод) полностью автоматическая, то есть не требуется «проверочных терминов» того типа, который необходим в полном объеме. зависимая настройка. Это приводит к значительной автоматизации. Например, сравните сортировку вставки в LH:
http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ordered-lists
против в Идрисе
https://github.com/davidfstr/idris-insertion-sort/blob/master/InsertionSort.idr
Однако автоматизация имеет свою цену. Нельзя использовать произвольные функции в качестве спецификаций, как можно в полностью зависимом мире, что ограничивает класс свойств, которые можно написать.
Таким образом, одна цель систем уточнения состоит в том, чтобы расширить класс того, что может быть указано, а класс полностью зависимых систем - автоматизировать
то, что может быть доказано. Возможно, есть счастливое место встречи, где мы можем получить лучшее из обоих миров!
Система Liquid Type, описанная в [1], действительно разрешима, и Liquid Haskell действительно использует решатели SMT. Однако для Liquid Haskell также требуются проверочные термины (или значения, так как они вызываются на языке с независимой типизацией): если вы садитесь за написание программы на Liquid Haskell, вы пишете свои собственные функции, а не только типы.
[1] http://goto.ucsd.edu/~rjhala/liquid/liquid_types.pdf
источник
Зависимые типы - это типы, которые в любом случае зависят от значений. Классическим примером является «тип векторов длины
n
», гдеn
это значение. Типы уточнения, как вы говорите в вопросе, состоят из всех значений данного типа, которые удовлетворяют данному предикату. Например, тип положительных чисел. Эти понятия не особенно связаны (что я знаю). Конечно, вы также можете разумно иметь зависимые типы уточнения, такие как «тип всех чисел больше чемn
».источник
0
»?