实际上是否可以从构造微积分中删除“Pi”?

时间:2015-12-06 17:33:59

标签: haskell types type-systems lambda-calculus

文章Simpler, Easier!声称即使没有“Pi”,也可以对依赖类型系统进行编码 - 也就是说,您可以为其重用“Lam”构造函数。但是,如果在某些情况下对“Pi”和“Lam”的处理方式不同,那又怎么可能呢?

此外,可以删除“明星”吗?我认为你可以用“λx.x”(id)替换所有出现的内容。

1 个答案:

答案 0 :(得分:6)

这就像Haskell中的(a, b)一样过载:它既可以是类型也可以是值。您可以对Πλ使用相同的绑定器,并且typechecker将根据您的上下文决定您的意思。如果您将一个绑定器与另一个绑定器进行类型检查,则前者为λ,后者为Π - 这就是为什么您无法明确地将*替换为λ x . x - 因为那时以前的活页夹可能是Π而后者是**作为活页夹对我没有任何意义)。 ∀ = λ* = λ x . x存在一个更大的问题:传递性* = ∀ x . x,这是假设False的常见方式 - 此类型必须在声音系统中无人居住,所以你根本就没有任何类型。

Coq俱乐部最近有一个帖子“forall和fun之间的相似之处”(gmane.org给了我“没有这样的信息”,这只是我吗?),这里有一些摘录:

Dominic Mulligan

  

这是另一个带有类似作品的小参考书目:

     

http://www.macs.hw.ac.uk/~fairouz/forest/papers/journals-publications/jfp05.pdf

     具有讽刺意味的是,根据那篇论文,Coquand首先提出了微积分   遵循约定的具有单个统一绑定器的构造   由De Bruijn在AutoMath建立。

Thorsten Altenkirch:

  

一个函数及其类型是非常不同的概念,即使它们有   一些肤浅的句法相似性。

     

特别是对于新手而言,这种识别非常混乱   完全误导。我认为应该理解类型   理论概念来自它们的意思而不是它们的样子。

Andreas Abel

  

我的学生Matthias Benkard也参与了这样一个系统,请参阅“Type   检查没有类型“

     

http://www.cse.chalmers.se/~abela/benkardThesis.pdf

请注意,第一个链接中描述的系统具有Π减少(即您可以像lambdas一样应用pi类型) - 如果您统一Πλ,您的系统也会拥有它内部(而不是语法上)。并且第二个链接中描述的系统统一了类型和值

  

一个直接后果是两者之间没有任何区别   类型及其居民:每个值都是包含自身的类型   及其所有部分;相反,每种类型都是复合值   由居民组成。

所以实际上只有一个活页夹(letfix除外)。