Bayangkan, kita mendefinisikan bilangan alami dalam kalkulus lambda yang diketik secara dependen sebagai angka Gereja. Mereka mungkin didefinisikan dengan cara berikut:
SimpleNat = (R : Set) → R → (R → R) → R
zero : SimpleNat
zero = λ R z _ → z
suc : SimpleNat → SimpleNat
suc sn = λ R z s → s (sn R z s)
SimpleNatRec : (R : Set) → R → (R → R) → SimpleNat → R
SimpleNatRec R z s sn = sn R z s
Namun, tampaknya kita tidak dapat mendefinisikan angka Gereja dengan jenis prinsip Induksi berikut:
NatInd : (C : Nat -> Set) -> (C zero) -> ((n : Nat) -> C n -> C (suc n)) -> (n : Nat) -> (C n)
Kenapa gitu? Bagaimana saya bisa membuktikan ini? Tampaknya masalahnya adalah dengan menentukan tipe untuk Nat yang menjadi rekursif. Apakah mungkin untuk mengubah lambda calculus untuk mengizinkan ini?
sumber