답변:
주요 차이점은 기본 이론과 사용 방법의 두 가지 측면에 있습니다. 후자에 집중하자.
일반적으로 LiquidHaskell 및 정제 유형 시스템에서 사양의 "논리적"은 결정 가능한 조각으로 제한되므로 검증 (및 추론)이 완전히 자동으로 이루어 지므로 전체에 필요한 종류의 "증거 항"이 필요하지 않습니다. 종속 설정. 이는 상당한 자동화로 이어집니다. 예를 들어 LH에서 삽입 정렬을 비교하십시오.
http://ucsd-progsys.github.io/lh-workshop/04-case-study-insertsort.html#/ order-lists
Idris 대
https://github.com/davidfstr/idris-insertion-sort/blob/master/InsertionSort.idr
그러나 자동화는 가격이 책정됩니다. 완전히 의존적 인 세계에서와 같이 임의의 기능을 사양으로 사용할 수 없으므로 작성할 수있는 속성 클래스가 제한됩니다.
따라서 정교화 시스템의 목표 중 하나는 지정할 수있는 클래스 를 확장 하고 완전 종속 시스템의 시스템은 증명할 수있는 것을 자동화 하는 것입니다. 두 세계를 최대한 활용할 수있는 행복한 만남의 장소가있을 것입니다.
[1]에 설명 된 Liquid Type 시스템은 실제로 결정 가능하며 Liquid Haskell은 SMT 솔버를 사용합니다. 그러나 Liquid Haskell에는 증명 용어 (또는 비 종속적으로 입력 된 언어로 호출되는 값)도 필요합니다. Liquid Haskell 프로그램을 작성하기 위해 앉아 있으면 유형뿐만 아니라 고유 한 함수도 작성합니다.
종속 유형은 어떤 방식 으로든 값에 의존하는 유형입니다. 전형적인 예는 "길이의 벡터 유형 n
"이며, 여기서 n
값은입니다. 질문에서 말하는 것처럼 구체화 유형은 주어진 술어를 만족시키는 주어진 유형의 모든 값으로 구성됩니다. 예를 들어 양수 유형. 이러한 개념은 특별히 관련이 없습니다 (내가 아는 것). 물론 "보다 큰 모든 숫자의 유형"과 같이 종속적 인 구체화 유형을 합리적으로 가질 수도 있습니다 n
.
0
"을 의미하지 않습니까?