我能学到的最直观的依存类型理论是什么?


46

我有兴趣真正掌握依赖类型。我读过最TaPL和读取(如果不是完全吸收)“相关类型” ATTaPL。我也阅读并浏览了很多有关依赖类型的文章。

许多类型理论的讨论似乎都集中在向以前的类型系统添加增量功能,而不是“从类型系统X进行的下一个大型概括是什么?”。依赖类型似乎是System F的下一个大型概括,但是我还没有找到直观,规范的依赖类型语言。对(归纳)构造的微积分的许多引用使我认为CoC是该语言,但是我所看到的对该语言的解释对我而言似乎并不十分清楚或直观。

我期望/猜测这种语言将具有以下功能:(并且请让我知道是否有任何特别的东西因为困惑或不现实而跳出来)

  • 广义抽象(可以具有从类型层次结构中的任何域到其他种类,种类->术语,术语->类型'''等的功能)
  • 具有无限的键入层次结构(术语:类型:类型':类型”:...)
  • 最少数量的基本元素。我在想该语言对于每个级别都只声明一个元素。例如,它可能断言(():Unit:Type:Type':...)。其他元素是从这些元素构建的。
  • 总和和产品类型是可导出的。

我也在寻找该语言的解释,理想情况下将讨论:

  • 该语言中抽象与量化之间的关系。如果它们不统一,请解释为什么它们不统一。
  • 无限类型层次结构明确

我之所以问这个问题,是因为我想学习依存类型理论,也因为我想编写一份指南,假设具有一点CS知识,就可以教授证明助手和依存类型语言的用法以及如何理解。

(交叉发布到Reddit)

Answers:


35

有几种不同的解决方法:

  1. 相依类型理论。这可能不是学习依存类型的最简单方法,但是您可以查看《演算》论文及其变体,Pure Type Systems,以及Martin Hofmann的文章(关于依存类型的语法和语义)。

  2. 定理证明。首先,看一下我对一个相关问题的回答:我将如何学习Coq证明助手的基础理论?

  3. ΠΣ等等。当然,还有马克·哈曼(Marc Hamann)回答中的亚当·克里帕拉(Adam Chlipala)的书。

在开始使用定理证明之前,我倾向于开始编程,然后再探讨更多理论问题。


我可以找到Epigram的论文,但找不到Epigram的实际下载,只能找到尚未完成的Epigram2。有什么想法吗?
约翰·萨尔瓦捷

1
您是否找到了:e-pig.org/darcs/Pig09/web?Epigram在页面底部可用。
Dave Clarke

3
由于AFAIK已有相当长的一段时间,Epigram 1基本上没有维护-这些天作者使用Agda(在侧面研究Epigram 2时)。
Blaisorblade 2014年

在2019年,我认为Epigram 2永远不会发生-但是现在有Idris(和Idris 2!)。
xrq

14

λπ

Twelf是一个很好的基于LF的定理证明系统。回顾Frank Pfenning提供的高级课程笔记,可以很好地介绍LF的理论和实践。

就是说,如果您的兴趣是建设性数学而不是类型理论的要点,那可能不是最好的第一个系统:LF表示逻辑框架,并且它是一个用于公理化理论的系统,并且不常用于目标系统。如果您的目标是使用基于Martin-Loef类型理论的系统,那么这可能是最好的介绍-Dave提到了Agda-也许是一个更好的起点,因为在这种情况下,您可以更快地处理算术和归纳类型框架。


10

CoC最有可能成为现实。只需深入研究Coq并完成一个很好的教程,例如Software Foundations(TaPL和ATTaPL的Pierce就参与其中)。

一旦您了解了依赖类型的实用方面,请回到理论来源:然后它们将变得更加有意义。

您的功能列表听起来基本上是正确的,但查看它们在实践中的效果值得一千个功能点。

(另一个更高级的教程是Adam Chlipala的带依赖类型认证编程


“直觉”也许是这里的症结所在:CoC / CIC中不只是依赖类型,还有很多直觉。这是一个很好的最终目标-在我看来,选择实际上是在Coq和Twelf之间进行的-但也许不是迈向“真正可靠地把握依赖类型”的最佳第一步。
查尔斯·斯图尔特

@查尔斯:你的观点是正确的。从实用的角度来看,我仍然认为这是一个不错的选择。尽管对CoC / CIC的全面理解可能是一项更复杂的工作,但是Coq(加上存在良好的基础级教程)使您可以轻松地专注于仅学习编程方面或基本的证明辅助方面(如您的兴趣决定),甚至在您掌握所有复杂性之前。对于不具有理论背景的人,我认为这符合“直觉”。
马克·哈曼


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.