종속 유형 검사가 결정 가능함을 보여주는 입증 기술


10

나는 현재 작업중 인 의존적 인 미적분학에 대한 유형 검사가 결정 가능하다는 것을 보여줄 필요가있는 상황에 처해 있습니다. 지금까지 나는 시스템이 강력하게 정규화되고 정의 평등이 결정 가능하다는 것을 증명할 수 있었다.

필자가 읽은 많은 참고 문헌에서 유형 검사의 결정 가능성은 강력한 정규화의 목록으로 나열되어 있으며 그러한 경우에는 그것을 믿지만 실제로 어떻게 표시하는지 궁금합니다.

특히, 나는 다음에 갇혀있다.

  • 잘 입력 된 용어가 강력하게 정규화된다고해서 알고리즘이 잘 입력되지 않은 입력에서 영원히 반복되지는 않습니다
  • 논리 관계는 일반적으로 강력한 정규화를 나타내는 데 사용되므로 유형 검사 용어를 진행할 때 편리한 감소 메트릭이 없습니다. 따라서 내 유형 규칙이 구문을 지시하더라도 규칙 적용이 결국 종료된다는 보장은 없습니다.

궁금한 점은 누구든지 의존적으로 유형이 지정된 언어에 대한 유형 검사의 결정 가능성에 대한 좋은 참조가 있습니까? 작은 핵심 미적분학이라면 괜찮습니다. 결정 가능성을 보여주는 증거 기술에 대해 논의하는 모든 것이 좋습니다.


7
일반적인 양방향 유형 검사 알고리즘은 용어의 유형 (또는 유형)을 먼저 확인하지 않고 용어 (또는 유형)를 정규화하려고 시도하지 않습니다. 유형이 지정되지 않은 용어의 정규화에 대해 걱정할 필요가 없습니다.
Andrej Bauer

7
규칙 적용과 관련하여 : 모든 용어 및 유형 규칙은 유형 변환을 제외하고 목표를 줄입니다. 따라서 양방향 접근 방식을 사용하여 유형 변환을 제어해야합니다.
Andrej Bauer

답변:


9

유형 검사의 경우에는 잘 작동하지만 실제로는 미묘한 부분이 있습니다. 여기에는 많은 관련 스레드에서 나타나는 것처럼 보이기 때문에 여기에 문제를 기록하고 "표준"종속성 유형 이론에서 유형을 검사 할 때 문제가 발생하는 이유를 설명하려고 시도합니다 (고의로 모호합니다. 이러한 문제는 관계없이 발생하는 경향이 있기 때문에) :

DΓt:ADΓA:ssutBΔDΔu:B

이 좋은 사실은 증명하기가 다소 어려우며, 매우 불쾌한 반증으로 상쇄됩니다.

사실 2 : 일반적으로, 와 하지 의 하위 유도 !DD DD

이것은 타입 시스템의 정확한 공식에 따라 다르지만 실제로 구현 된 대부분의 "운영"시스템은 사실 2를 만족시킵니다.

즉, 유도 유도를 통해 추론 할 때 "하위 용어"를 전달할 수 없거나, 무언가를 증명하려는 용어의 유형에 대해 귀납적 진술이 사실이라는 결론을 내릴 수 없습니다.

예를 들어 형식 변환이있는 시스템은 형식이없는 변환이있는 시스템과 같은 무해한 진술을 증명하려고 할 때이 사실은 당신을 매우 심하게 물리칩니다.

그러나 형식 유추의 경우 용어의 구조를 유도하여 동시 유형 및 정렬 (유형의 유형) 유추 알고리즘을 제공 할 수 있으며, Andrej가 제안한 것처럼 유형 지정 알고리즘이 포함될 수 있습니다. 주어진 용어 (및 문맥 , 및 와 같이 를 실패하거나 찾습니다 . 후자를 찾기 위해 유도 가설을 사용할 필요는 없습니다 파생, 특히 위에서 설명한 문제를 피하십시오.tΓA,sΓt:AΓA:s

중요한 경우 (실제로 변환이 필요한 유일한 경우)는 응용 프로그램입니다.

infer(t u):
   type_t, sort_t <- infer(t)
   type_t' <- normalize(type_t)
   type_u, sort_u <- infer(u)
   type_u' <- normalize(type_u)
   if (type_t' = Pi(A, B) and type_u' = A' and alpha_equal(A, A') then
      return B, sort_t (or the appropriate sort)
   else fail

정규화에 대한 모든 호출은 잘 된 용어로 수행되었는데, 이는 infer성공 의 불변입니다 .


그런데 Coq는 형식 검사 fix를 시도하기 전에 문장 의 본문을 정규화하기 때문에 결정 가능한 형식 검사가 없습니다 .

어쨌든, 잘 정형 된 용어의 정상적인 형태에 대한 한계는 천문학적이므로 결정 성 이론은이 시점에서 대부분 학문적입니다. 실제로, 인내심이있는 한 유형 검사 알고리즘을 실행하고 그 후에 완료되지 않은 경우 다른 경로를 시도하십시오.


나는 당신의 대답이 매우 유용하다는 것을 알았습니다. 감사합니다. 두 가지 질문이 있습니다. 1. "운영 체제"란 무엇입니까? 대안은 무엇입니까? 2. 예제를 통해보다 명확하게 설명 할 수 있습니다. 의미있는 것 (우리가 증명하려는 사실은 무엇입니까?) "유형 변환 시스템은 비 유형 변환 시스템과 동일합니다." 감사!
Łukasz Lew

1
@ ŁukaszLew 운영 시스템 (Coq 또는 Agda 소프트웨어에서 실제로 구현 된 시스템)에 대한 대안은 이론적 시스템으로 메타 이론적 특성을 증명하는 데 유용하지만 실제로는 비효율적이거나 사용하기 불편합니다. 운영 시스템과 이론 시스템의 동등성을 입증하는 것은 종종 시스템 설계의 중요한 부분입니다. 여기 더 얘기 : cstheory.stackexchange.com/a/41457/3984
코디

Lennart Augustsson의 더 간단하고 쉬운 것을 언급 할 가치가 있다고 생각합니다 ! . 이것은 형식 검사의 최소 Haskell 구현 및 종속 형식화 된 람다 미적분에 대한 일부 유추입니다. cody와 거의 일치하는 코드가 있습니다 infer(t u):. 그것을 찾으려면 " tCheck r (App f a) ="를 검색하십시오 . 보다 완전하지만 여전히 간단한 구현을 위해 Morte 's를typeWith 확인할 수 있습니다 .
Łukasz Lew

1
@ ŁukaszLew 형식화 vs 형식화되지 않은 변환 문제는 형식 이론의 두 가지 공식과 관련된 잘 알려진 공개 질문이며, 최근에 해결되었습니다 : pauillac.inria.fr/~herbelin/articles/…
cody

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