Las principales diferencias son a lo largo de dos dimensiones: en la teoría subyacente y en cómo se pueden usar. Vamos a centrarnos en lo último.
Como usuario, la "lógica" de las especificaciones en LiquidHaskell y los sistemas de tipo de refinamiento en general, se restringe a fragmentos decidibles para que la verificación (e inferencia) sea completamente automática, lo que significa que uno no requiere "términos de prueba" del tipo necesario en su totalidad entorno dependiente Esto lleva a una automatización significativa. Por ejemplo, compare el orden de inserción en LH:
http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ordered-lists
vs. en Idris
https://github.com/davidfstr/idris-insertion-sort/blob/master/InsertionSort.idr
Sin embargo, la automatización tiene un precio. No se pueden usar funciones arbitrarias como especificaciones como se puede en el mundo totalmente dependiente, lo que restringe la clase de propiedades que uno puede escribir.
Por lo tanto, un objetivo de los sistemas de refinamiento es extender la clase de lo que se puede especificar, mientras que la de los sistemas totalmente dependientes es automatizar
lo que se puede probar. ¡Quizás haya un lugar de encuentro feliz donde podamos obtener lo mejor de ambos mundos!