什么是Parigot Mendler编码?

Mai*_*tor 9 coq agda isabelle 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
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是其他语言中使用的常见编码(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)
Run Code Online (Sandbox Code Playgroud)

哪个检查,但对我来说看起来很奇怪.p例如,可以用任何cNat里面的lambdas 代替.cNat对我来说,这看起来并不是同构的.我想我没有得到这种结构.