Burada gerçekten bir incelik var, ancak tip kontrolü durumunda işler iyi çalışıyor. Konuyu burada yazacağım, çünkü birçok ilgili iş parçacığında ortaya çıkıyor ve "standart" bağımlı bir tür teorisinde tip kontrolü yaparken neden her şeyin yolunda gittiğini açıklamaya çalışıyorum (kasten belirsiz olacağım, çünkü bu konular ne olursa olsun ortaya çıkma eğilimindedir):
Aslında 1: Eğer olan bir türevidir , daha sonra bir derivasyon vardır arasında tür için , her subterm ve, , bir tür olduğu , bir bağlam ve türev ve .DΓ⊢t:AD′Γ⊢A:ssu≤tBΔD′′Δ⊢u:B
Bu güzel gerçeği kanıtlamak biraz zor ve oldukça kötü bir karşı gerçekle dengeleniyor:
Gerçek 2: Genel olarak ve ! türevleri değildir .D′D′′ D
Bu biraz tip sisteminizin kesin formülasyonuna bağlıdır, ancak pratikte uygulanan çoğu "operasyonel" sistem Gerçek 2'yi karşılar.
Bu, türevler üzerinde tümevarım yaparak akıl yürütürken "alt terimlere geçemeyeceğiniz" veya tümevarım ifadesinin, bir şeyleri kanıtlamaya çalıştığınız terimin türü hakkında doğru olduğu sonucuna varamayacağınız anlamına gelir.
Bu gerçek, masum ifadeleri kanıtlamaya çalışırken sizi oldukça sert bir şekilde ısırır; örneğin, dönüştürülmüş dönüşümlü sistemler, dönüştürülmemiş dönüşümlü olanlara eşdeğerdir.
Bununla birlikte , tür çıkarımı durumunda, Andrej'nin önerdiği gibi, terimin yapısında indüksiyonla eşzamanlı bir tür ve sıralama (türün türü) çıkarsama algoritması verebilirsiniz. Belirli bir (ve bağlam terimi için , ve olacak şekilde başarısız olur veya bulursunuz. ve özellikle yukarıda açıklanan problemden kaçınırsınız.tΓA,sΓ⊢t:AΓ⊢A:s
Önemli olan (ve gerçekten dönüşüm gerektiren tek durum) uygulama:
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
Her normalleştirme çağrısı, iyi yazılmış terimlerle yapıldı, çünkü bu, infer
başarısının değişmezidir .
Bu arada, uygulandığı gibi, Coq, tür denetimi kontrol fix
etmeye başlamadan önce ifadelerin gövdesini normalleştirdiği için kararlı tür kontrolüne sahip değildir .
Her halükarda, iyi yazılmış terimlerin normal formları üzerindeki sınırlar o kadar astronomiktir ki, karar verilebilirlik teoremi bu noktada çoğunlukla akademiktir. Pratikte, tür kontrol algoritmasını sabrınız olduğu sürece çalıştırırsınız ve o zamana kadar tamamlanmadıysa farklı bir rota deneyin.