1
为什么在依赖类型系统中将递归类型用作证明的原语?
我是类型理论和依赖编程的新手。我一直在研究构造(CoC)和其他纯类型系统的演算。我对将其用作编译器系统的保存证明中间表示特别感兴趣。 据我所知,(共)递归类型表示的,在计算上,使用作为唯一的类型构造函数。不过,我已经读过,它们不能用于归纳构建证明(请原谅,我现在找不到位置!),例如,我无法在普通CoC中证明(即使可以键入)。ΠΠ\Pi0≠10≠10\neq 1NatNat\texttt{Nat}Π(N:∗).Π(S:N→N).Π(Z:N).NΠ(N:∗).Π(S:N→N).Π(Z:N).N\Pi(\mathbb{N}:*).\Pi(S:\mathbb{N}\rightarrow\mathbb{N}).\Pi(Z:\mathbb{N}).\mathbb{N} 我认为这就是为什么他们建立了归纳结构(CIC)的原因。它是否正确?但为什么?我找不到任何材料来解释为什么不使用(共)归纳类型作为原语就无法表示这样的证明。如果不是这样,那么为什么要在CIC中将它们添加为原语?