종속 유형과 정제 유형


57

누군가가 종속 유형과 개선 유형의 차이점을 설명 할 수 있습니까? 내가 이해하는 것처럼 구체화 유형에는 조건자를 충족시키는 유형의 모든 값이 포함됩니다. 그것들을 구별하는 의존 타입의 기능이 있습니까?

도움이된다면 Liquid Haskell 프로젝트를 통해 Refined 유형과 Coq 및 Agda를 통해 종속 유형을 발견했습니다. 즉, 이론이 어떻게 다른지에 대한 설명을 찾고 있습니다.

답변:


33

주요 차이점은 기본 이론과 사용 방법의 두 가지 측면에 있습니다. 후자에 집중하자.

일반적으로 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

그러나 자동화는 가격이 책정됩니다. 완전히 의존적 인 세계에서와 같이 임의의 기능을 사양으로 사용할 수 없으므로 작성할 수있는 속성 클래스가 제한됩니다.

따라서 정교화 시스템의 목표 중 하나는 지정할 수있는 클래스 를 확장 하고 완전 종속 시스템의 시스템은 증명할 수있는 것을 자동화 하는 것입니다. 두 세계를 최대한 활용할 수있는 행복한 만남의 장소가있을 것입니다.


정제 유형 기반 사양에서 종속 유형 기반 사양으로 기계적으로 매핑하는 방법이 있습니까? 아니면 그러한 "동질성"이 아직 충분히 연구되지 않았습니까?
Erik Allik

1
AFAIK와 같은 "등방성"은 많이 연구되지 않았습니다. 그러나 최근의 연구가있다 : Lehmann과 Tanter의 "간결한 정제 유형 공식화"참조 (곧 등장 할 예정 임 ... GH 저장소 : github.com/pleiad/Refinements )
Ranjit Jhala

스칼라의 경로 의존형은 어떻습니까?
양 보

1
@RanjitJhala 실수로 마지막 단락의 목표가 잘못 돌아 왔다고 생각하십니까?
Noldorin

1
@ Noldorin 나는 Ranjit가 그의 마지막 단락을 알았다고 말할 것입니다. "정제 유형은 결정 가능한 조각으로 제한되어 검증 (및 추론)이 완전히 자동으로 수행됩니다"대 "... 종속적 [유형]에 필요한 증명 용어 ..." 따라서 구체화 유형에서 일하는 사람들은 여전히 ​​자동으로 추론 할 수없는 / 확인할 수있는 반면 구체화 유형에서 지정할 수있는 양을 늘리려 고 노력하는 반면 종속 유형에서 일하는 사람들은 증명 용어 생성을 자동화하려고합니다.
raiph

22

{V:(V)}

{엑스:12}

[1]에 설명 된 Liquid Type 시스템은 실제로 결정 가능하며 Liquid Haskell은 SMT 솔버를 사용합니다. 그러나 Liquid Haskell에는 증명 용어 (또는 비 종속적으로 입력 된 언어로 호출되는 값)도 필요합니다. Liquid Haskell 프로그램을 작성하기 위해 앉아 있으면 유형뿐만 아니라 고유 한 함수도 작성합니다.

[1] http://goto.ucsd.edu/~rjhala/liquid/liquid_types.pdf


1
sigma는 교회와 같은 인코딩을 사용하여 pi로 인코딩 할 수 있지만 AFAIK liquid haskell의 정제 기능 유형은 pi (종속 기능) 유형이 아닙니다.
fread2281

15

종속 유형은 어떤 방식 으로든 값에 의존하는 유형입니다. 전형적인 예는 "길이의 벡터 유형 n"이며, 여기서 n값은입니다. 질문에서 말하는 것처럼 구체화 유형은 주어진 술어를 만족시키는 주어진 유형의 모든 값으로 구성됩니다. 예를 들어 양수 유형. 이러한 개념은 특별히 관련이 없습니다 (내가 아는 것). 물론 "보다 큰 모든 숫자의 유형"과 같이 종속적 인 구체화 유형을 합리적으로 가질 수도 있습니다 n.


3
하나는 다른 것의 부분 집합입니까? 구체화 유형은 SMT를 사용하여 해결할 수있는 것처럼 보이지만 종속 유형은 자체 증명 용어가 필요합니다.
jmite

4
"하나는 다른 것의 부분 집합입니까?" 아니요. 이것이 내가 의존하지 않는 구체화 유형과 구체화가 아닌 종속 유형의 예를 제공 한 이유입니다.
Alexey Romanov

8
구체화 유형을 시그마로 인코딩 할 수 없습니까?
fread2281

3
당신의 모범은 당신의 요점을 보여주지 않는 것 같습니다. 양수는 0보다 큰 숫자로 정의 됩니다. 이는 "양수의 유형"이 정확히 ""보다 큰 모든 숫자의 유형 0"을 의미하지 않습니까?
akdom

2
벡터의 길이를 강제하는 구체화 술어가있을 수 없습니까?
CMCDragonkai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.