추론을 결정할 수있는 가장 강력한 알려진 유형 시스템은 무엇입니까?


22

Hindley-Milner 형식 유추 ( 다형성이 있는 단순 형식의 미적분)에는 형식 유추가 결정 가능 하다는 것이 잘 알려져 있습니다. 주석없이 모든 프로그램의 기본 형식을 재구성 할 수 있습니다.λ

Haskell 스타일 유형 클래스를 추가하면이 결정 성을 유지하는 것처럼 보이지만 추가를 추가하면 주석이없는 추론을 만들 수 없습니다 (유형 군, GADT, 종속 유형, Rank-N 유형, 시스템 등).ω

궁금한 점이 있습니다. 완전히 결정 가능한 추론을 가진 가장 강력한 알려진 유형 시스템은 무엇입니까? Hindley-Milner (완전히 결정 가능)와 종속 유형 (완전히 결정 불가능) 사이에있을 것입니다. 추론 결정 성을 유지하기 위해 추가 할 수있는 DT의 측면이 있습니까? 이것이 얼마나 멀리 진행될 수 있는지 조사하기 위해 어떤 연구가 수행 되었습니까?

저는 가장 강력한 단일 시스템이 없으며 추론을 유지하면서 HM에 추가 할 수있는 무한한 작은 증분 변경이있을 수 있음을 알고 있습니다. 그러나 실제로 발견 된 몇 가지 시스템 후보가있을 수 있습니다.

편집 : "가장 강한"시스템이 없다는 것을 감안할 때, Hindley Milner를 결정 가능한 추론으로 확장 하는 주목할만한 시스템을 간략하게 설명하는 대답을 받아들 입니다. 액체 유형, 등급 -2 등이 이에 해당합니다.


4
@jmite 나는 다른 사람들과 동의합니다. 알려진 명확한 경계는 없습니다. 있을 수 있을지 의심됩니다. 결정 유형 유추는 실제로 모든 언어 기능에 따라 달라집니다 (예 : 하위 유형이 있는지 여부). 우리가 아는 상위 유형의 HM 확장에서 명확한 경계를 찾을 수 있습니다. k> 2의 경우 유형 유추를 결정할 수 없습니다. 그렇지 않으면 결정할 수 없습니다.
Martin Berger

@MartinBerger 나는 가장 강한 것이 없다는 것을 인정하지만, 당신이 언급 한 Rank-2와 같이 주목할만한 것들을 요약하는 좋은 대답이 여전히 있다고 생각합니다.
jmite

1
@jmite 타입 추론에 대한 결정론에 대한 개요를 갖는 것이 좋을 것입니다. 그런 것은 없으며, 모두 약 100 장의 논문이 배포되어 있습니다. 어쩌면 당신은 하나를 작성할 수 있습니다, 그것은 지역 사회에 훌륭한 서비스가 될 것입니다.
Martin Berger

질문에 대한 답변을 작성하는 것이 어려울 수 있지만 Didier Rémy의 최근 유형 추론 작업 (참조와 함께)이 질문자에게 흥미로울 수 있습니다.
ejgallego

답변:


2

[편집 : Voilà 각각에 몇 마디]

HM 유형 추론을 확장하는 방법에는 여러 가지가 있습니다. 내 대답은 그 중 일부를 성공적으로 구현하려는 많은 시도에 근거합니다. 내가 우연히 만난 것은 파라 메트릭 다형성 입니다. 이 방향으로 HM을 확장하려는 유형 시스템은 시스템 F를 향하는 경향이 있으므로 유형 주석이 필요합니다. 내가 본 방향으로 주목할만한 두 가지 확장은 다음과 같습니다.

  • HMF는 모든 System-F 유형에 대해 유형 유추를 허용합니다. 즉, 유형의 "중간"에 범용 정량화를 수행 할 수 있으며 HM 다형성 유형과 같이 가장 높은 범위에 외관이 암시 적으로 배치되지 않습니다. 이 백서에는 유형 주석이 몇 개나 필요한지에 대한 명확한 규칙이 존재하지 않는다고 분명히 명시되어 있습니다. 또한 유형은 시스템 F의 유형이며 일반적으로 주체 유형이 없습니다.

  • MLF는 HM의 확장 일뿐만 아니라 유형에 대해 일종의 한정된 수량화를 도입하여 HM의 주요 유형 속성을 다시 얻는 시스템 F의 확장이기도합니다. 저자가 비교 한 결과, MLF는 HMF보다 강력하며 주석은 다형성으로 사용되는 매개 변수에만 필요합니다.

HM을 확장하는 또 다른 방법은 구속 조건 도메인의 변형을 통하는 것입니다.

  • HM (X)는 제약 도메인 X를 통해 파라미터 화 된 Hindley-Milner입니다.이 접근 방식에서 HM 알고리즘은 X에 대한 도메인 솔버로 전송되는 제약 조건을 생성합니다. 일반적인 HM의 경우 도메인 솔버는 통합 절차이며 도메인은 구성됩니다 용어 집합의 유형은 유형 및 유형 변수에서 빌드됩니다.
    X의 또 다른 예는 Presburger 산술 언어 (이 경우 형식 유추 / 확인을 결정할 수 있음) 또는 Peano 산술 언어 (더 이상 결정할 수 없음)로 표현 된 제약 조건 일 수 있습니다. X는 다양한 유형의 이론에 따라 달라지며, 각각 필요한 유형 주석의 양과 지역화에 관한 자체 요구 사항이 있으며 전혀 또는 전혀 범위가 아닙니다.

  • Haskell의 형식 클래스는 형식의 형식 조건 MyClass(MyType)자를 추가하여 제약 조건 도메인의 일종의 확장이기도합니다 (즉, MyType 형식에 대한 MyClass 인스턴스가 있음을 의미 함).
    그들은 기본적으로 그들이 구현하는 (거의) 직교 개념이기 때문에 유형 클래스는 형식 유추를 유지 애드혹 다형성을 .
    예를 들어, 상징 걸릴 val유형을 val :: MyClass a => a당신이 인스턴스를 가질 수있는 MyClass A, MyClass B형식 유추가 이미 컴파일러가 사용하는 클래스의 어떤 인스턴스를 추론 할 수 있음을 수행하기 때문에 코드에서 해당 심볼을 참조하는 경우 등, 실제로입니다. 이는 유형 val이 사용되는 컨텍스트에 따라 다릅니다. 그렇기 때문에 단일 val문장을 실행 하면ambiguous type error : 컴파일러는 컨텍스트를 기반으로 유형을 유추 할 수 없습니다.

GADT, 유형 패밀리, 종속 유형, 시스템 (F) ω 등과 같은 고급 유형 시스템의 경우 유형은 더 이상 "유형"이 아니며 복잡한 계산 객체가됩니다. 예를 들어, 동일하게 보이지 않는 두 가지 유형이 반드시 다른 것은 아닙니다. 따라서 유형 평등은 사소한 것이 아닙니다 (전혀).

: 당신에게 실제 복잡성의 예를 제공하기 위해의 목록의 의존의 형태 생각 해보자 목록에있는 개체의 유형을이고 길이입니다. append 함수는 type을 가지며 zip 함수는입니다 . 이제 람다가 있다고 상상해보십시오 . 여기서 zip의 첫 번째 인수는 type 이고 두 번째 인수 는 type 입니다. 거의 동일하지만 타입 체커가 "+"가 자연수에서 통근한다는 것을 알지 않는 한, (n + m)이 문자 그대로 (m + n)이 아니기 때문에 함수를 거부해야합니다. 더 이상 형식 유추 / 형식 검사에 관한 것이 아니라 정리 증명에 관한 것입니다.NList a nan
append :: NList a n -> NList a m -> NList a (n + m)zip :: NList a n -> NList b n -> NList (a, b) n
\a: NList t n, b: NList t m -> zip (append a b) (append b a)NList t (n + m)NList t (m + n)

액체 유형은 일부 종속 유형 유추를 수행하는 것으로 보입니다. 그러나 내가 이해하는 것처럼, 그것은 실제로 의존적 인 유형이 아니며 정적 경계를 계산하기 위해 추가 유추가 이루어지는 일반적인 HM 유형과 비슷합니다.

이게 도움이 되길 바란다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.