Основные различия заключаются в двух измерениях - в основной теории и в том, как они могут быть использованы. Давайте сосредоточимся на последнем.
Как пользователь, «логика» спецификаций в системах 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
Однако автоматизация имеет свою цену. Нельзя использовать произвольные функции в качестве спецификаций, как можно в полностью зависимом мире, что ограничивает класс свойств, которые можно написать.
Таким образом, одна цель систем уточнения состоит в том, чтобы расширить класс того, что может быть указано, а класс полностью зависимых систем - автоматизировать
то, что может быть доказано. Возможно, есть счастливое место встречи, где мы можем получить лучшее из обоих миров!