Główne różnice dotyczą dwóch wymiarów - leżącej u podstaw teorii i sposobu ich wykorzystania. Skupmy się na tym drugim.
Jako użytkownik „logika” specyfikacji w systemach LiquidHaskell i typach udoskonalania ogranicza się do rozstrzygających fragmentów, dzięki czemu weryfikacja (i wnioskowanie) jest całkowicie automatyczna, co oznacza, że nie wymaga się „wymaganych warunków dowodowych” w rodzaju potrzebnym w całości ustawienie zależne. Prowadzi to do znacznej automatyzacji. Na przykład porównaj sortowanie według wstawiania w LH:
http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ordered-lists
vs. w Idris
https://github.com/davidfstr/idris-insertion-sort/blob/master/InsertionSort.idr
Jednak automatyzacja ma swoją cenę. Nie można używać dowolnych funkcji jako specyfikacji, jak można to zrobić w całkowicie zależnym świecie, który ogranicza klasę właściwości, które można napisać.
Dlatego jednym z celów systemów udoskonalania jest rozszerzenie klasy tego, co można określić, podczas gdy celem systemów w pełni zależnych jest zautomatyzowanie
tego, co można udowodnić. Być może istnieje szczęśliwe miejsce spotkań, w którym możemy uzyskać to, co najlepsze z obu światów!
Typy uściślenia to po prostu zwykłe typy z predykatami. To znaczy, biorąc pod uwagę, że jest typowym typem, a jest pewnym predykatem naP TT P T
T
AFAIK, w Liquid Haskell, pozwalają również na niektóre typy funkcji zależnych , to znaczy typy [1]. Zauważ, że typy w pełni zależne (jak typy sigma) są niedozwolone.{x:T1→T2∣P}
Układ typu cieczy opisany w [1] jest rzeczywiście rozstrzygalny, a Liquid Haskell używa solverów SMT. Jednak Liquid Haskell wymaga również terminów próbnych (lub wartości, ponieważ są one wywoływane w języku niezależnym od typu): jeśli usiądziesz, aby napisać program Liquid Haskell, napiszesz własne funkcje, a nie tylko typy.
[1] http://goto.ucsd.edu/~rjhala/liquid/liquid_types.pdf
źródło
Typy zależne to typy, które w jakikolwiek sposób zależą od wartości. Klasycznym przykładem jest „typ wektorów długości
n
”, gdzien
jest wartością. Typy uściślenia, jak mówisz w pytaniu, składają się ze wszystkich wartości danego typu, które spełniają dany predykat. Np. Rodzaj liczb dodatnich. Te pojęcia nie są szczególnie powiązane (o których wiem). Oczywiście możesz również mieć zależne typy uściślenia, takie jak „typ wszystkich liczb większy niżn
”.źródło
0
”?