Questions tagged «dependent-types»

类型理论和类型系统的重叠特征。

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中将它们添加为原语?


1
为什么Coq会在其核心语言中包含let表达式
Coq在其核心语言中包含let表达式。我们可以这样将let表达式转换为应用程序: let x : t = v in b ~> (\(x:t). b) v 我知道这并不总是可行,因为v在进行typechecking时该值不可用b。但是,可以通过特殊外壳对表单应用程序进行类型检查来轻松解决此问题(\(x:t). b) v。这使我们可以在进行类型检查时以特殊情况为代价删除let表达式。为什么Coq include仍然包含let表达式?它们是否还有其他优点(除了不需要特殊情况)?

2
在类型系统中证明分类操作
我想知道编程语言中的类型系统可以带来多大的好处。例如,我知道在依赖类型的编程语言中,我们可以创建一个Vector在类型签名中合并向量大小的类。这就像事实上的例子。我们还可以append使用这些签名编写函数,以便编译器证明结果列表的大小将是输入列表的总和。 例如,是否有一种方法可以对排序算法的类型签名进行编码,以便编译器保证结果列表是输入列表的排列?如果可能的话,如何做到这一点?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.