유형 검사의 경우에는 잘 작동하지만 실제로는 미묘한 부분이 있습니다. 여기에는 많은 관련 스레드에서 나타나는 것처럼 보이기 때문에 여기에 문제를 기록하고 "표준"종속성 유형 이론에서 유형을 검사 할 때 문제가 발생하는 이유를 설명하려고 시도합니다 (고의로 모호합니다. 이러한 문제는 관계없이 발생하는 경향이 있기 때문에) :
DΓ⊢t:AD′Γ⊢A:ssu≤tBΔD′′Δ⊢u:B
이 좋은 사실은 증명하기가 다소 어려우며, 매우 불쾌한 반증으로 상쇄됩니다.
사실 2 : 일반적으로, 와 하지 의 하위 유도 !D′D′′ 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
를 시도하기 전에 문장 의 본문을 정규화하기 때문에 결정 가능한 형식 검사가 없습니다 .
어쨌든, 잘 정형 된 용어의 정상적인 형태에 대한 한계는 천문학적이므로 결정 성 이론은이 시점에서 대부분 학문적입니다. 실제로, 인내심이있는 한 유형 검사 알고리즘을 실행하고 그 후에 완료되지 않은 경우 다른 경로를 시도하십시오.