在一些Cedille来源中使用以下Nats编码:
cNat : ★
cNat = ∀ X : ★ . X ➔ (∀ R : ★ . (R ➔ X) ➔ R ➔ X) ➔ X
cZ : cNat
cZ = Λ X . λ z . λ s . z
cS : ∀ A : ★ . (A ➔ cNat) ➔ A ➔ cNat
cS = Λ A . λ e . λ d . Λ X . λ z . λ s . s · A (λ a . e a · X z s) d
我想知道这是否是其他语言中使用的常见编码(Agda,Idris,Coq)。如果是这样,我如何解释它,它是如何工作的,以及如何构建这种类型的成员?
我已尝试将cS
应用于:
c0 = cZ
c1 = (cS -CNat (λ p : CNat . p) C0)
c2 = (cS -CNat (λ p : CNat . p) C1)
c3 = (cS -CNat (λ p : CNat . p) C2)
哪些检查,但对我来说看起来很奇怪。例如,p
可以被lambd中的任何cNat
替换。对我来说,cNat
看起来并不是同构的。我想我不会得到这种结构。