什么是Parigot Mendler编码?

时间:2018-03-06 03:36:31

标签: coq isabelle agda idris

在一些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看起来并不是同构的。我想我不会得到这种结构。

0 个答案:

没有答案