Die Hauptunterschiede liegen in zwei Dimensionen - in der zugrunde liegenden Theorie und in der Art und Weise, wie sie verwendet werden können. Konzentrieren wir uns nur auf Letzteres.
Als Benutzer ist die "Logik" von Spezifikationen in LiquidHaskell- und Verfeinerungssystemen im Allgemeinen auf entscheidbare Fragmente beschränkt, so dass die Verifizierung (und Inferenz) vollständig automatisch erfolgt, dh, man benötigt keine "Beweisbegriffe" der Art, die vollständig benötigt werden abhängige Einstellung. Dies führt zu einer erheblichen Automatisierung. Vergleichen Sie beispielsweise die Einfügesortierung in LH:
http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ordered-lists
in Idris
https://github.com/davidfstr/idris-insertion-sort/blob/master/InsertionSort.idr
Die Automatisierung hat jedoch einen Preis. Man kann keine willkürlichen Funktionen als Spezifikationen verwenden, wie man es in der vollständig abhängigen Welt kann, was die Klasse von Eigenschaften einschränkt, die man schreiben kann.
Ein Ziel von Verfeinerungssystemen besteht daher darin , die Klasse des Spezifizierbaren zu erweitern, während das Ziel von vollständig abhängigen Systemen darin besteht, das zu automatisieren,
was bewiesen werden kann. Vielleicht gibt es einen glücklichen Treffpunkt, auf dem wir das Beste aus beiden Welten bekommen können!
Das in [1] beschriebene Liquid Type-System ist in der Tat entscheidend, und Liquid Haskell verwendet SMT-Löser. Für Liquid Haskell sind jedoch auch Proofbegriffe (oder Werte, wie sie in einer nicht abhängig typisierten Sprache genannt werden) erforderlich: Wenn Sie sich hinsetzen, um ein Liquid Haskell-Programm zu schreiben, schreiben Sie Ihre eigenen Funktionen, nicht nur die Typen.
[1] http://goto.ucsd.edu/~rjhala/liquid/liquid_types.pdf
quelle
Abhängige Typen sind Typen, die in irgendeiner Weise von Werten abhängen. Ein klassisches Beispiel ist "die Art der Vektoren der Länge
n
", wobein
ein Wert ist. Verfeinerungstypen bestehen, wie Sie in der Frage sagen, aus allen Werten eines bestimmten Typs, die ein bestimmtes Prädikat erfüllen. ZB die Art der positiven Zahlen. Diese Konzepte sind nicht besonders verwandt (das weiß ich). Natürlich können Sie auch vernünftigerweise abhängige Verfeinerungstypen haben, wie "Typ aller Zahlen größer alsn
".quelle
0
“?