从属类型,细化类型和Hoare逻辑之间的区别


18

我几乎不了解依赖类型理论。来自维基百科:

从属类型是其定义取决于值的类型。

从我的类型理论课程中,我记得一个从属类型是:

由类型索引的类型族。

但是我对依赖类型,细化类型和hoare逻辑感到困惑。

因为从Depenedent VS细化类型来看,细化类型看起来像Hoare逻辑。除了仅允许陈述必须满足的陈述之外,还有哪些功率改进类型还提供什么(看起来与Hoare Logic几乎相同)?

相较于细化类型,从属类型还提供了哪些其他功能?并且从属类型比优化类型+ Sat / Constraint求解器更强大。

任何人都可以举例说明。

Answers:


18

Paul-AndréMelliès和Noam Zeilberger最近的工作对此进行了探索。特别是,论文的函子是类型细化系统类型细化系统的Isbell对偶定理。还有关于第一个演讲的视频。

我认为,由于人们认为特定系统具有代表性,因此细化类型存在很多混淆,这导致这些特定系统的目标和细节归因于总体思想。简称为类型细化系统对独立存在的术语进行分类,而(非细化的)依赖或其他类型则是术语的一部分。这听起来很熟悉,甚至可能有点矛盾。

如果您查看“咖喱”类型(外部)与“教堂”类型(内部),则可能会出现潜在的熟悉且可能矛盾的部分。当我们想到“咖喱”类型时,我们认为类型是对已经具有含义的未类型术语进行分类。在“教堂”类型中,唯一存在的术语是类型良好的术语,即类型约束是我们语法的一部分。因此,我要说的是,Curry样式类型系统实际上是对未类型化术语进行细化的类型细化系统,而Church-style样式系统不是类型细化系统。这意味着,例如,我们可以将简单类型的lambda演算视为类型优化系统或非优化类型系统。

当然,没有人说我们的术语必须是无类型的术语。我们也可以将类型细化系统应用于类型化的术语,并且从历史上看,这是产生细化类型(通过该名称)的上下文。但是,软打字的应用说明了与上述情况更接近的情况。

到目前为止,我还没有对依赖类型进行任何说明。原因是这是一个完全正交的问题。我会说原型依赖型系统通常以教堂风格呈现,因此不是类型优化系统,而是NuPRL(基于计算型理论,是最原型依赖型理论的变体,Martin-Löf类型理论)就像我已经描述的那样,它是一个公然的类型优化系统。在条款可能NuPRL甚至类型!诚然,“ PRL”代表“程序优化逻辑”的事实也可能是小费。另一方面,ML的细化类型描述了细化类型系统,可能是术语的起源,无论如何都不是从属类型系统。

至于Hoare三元组,它们是类型优化系统。在第一篇论文中,它们实际上用作类型优化系统的示例。但是,Hoare类型理论给出了可以被视为具有Hoare三元组的语言的非提炼型系统。

要获得有关不同系统的“功能”的答案,您需要指定特定的(家族)从属类型系统和特定的(家族)精炼类型系统。术语“从属类型系统”涵盖了非常广泛的类型系统,而“类型优化系统”则更为广泛。即使那样,这些术语也不是互斥的,因此它也不是“依赖类型系统”和“优化类型系统”之间的比较。但是,如果使用“依赖类型系统”,则考虑的是Coq之类的东西,而考虑“精炼类型系统”,则是“ 液体类型 ”之类的东西那就好一面了。一般认为,Coq足够强大,可以处理实际上的所有数学。您可以从字面上实现并证明Coq中的SMT求解器是正确的,然后再使用它;可以制定与子集类型非常相似的模拟。(NuPRL实际上具有子集类型。)另一方面,SMT求解器通常限于可确定的理论,而Coq没有这样的限制。许多系统(例如“液体类型”)都具有用于限定谓词的有限且不可扩展的语言。(当然,用“依赖类型系统”可以指Dependent ML,用“类型细化系统” NuPRL [也可以是依赖类型系统]来表示是另一种方式。)


1
非常感谢,真的有帮助。是的,他正在实践编程中阅读“依赖类型”(popl '99),并感到困惑。干杯。
Pushpa

1
这是一个了不起的答案。谢谢你写
乔纳森·斯特林
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.