是什么使一种语言(及其类型系统)能够证明有关其自身术语的定理?


12

我最近尝试实现Aaron的Cedille-Core,这是一种极简主义的编程语言,能够证明有关其术语的数学定理。我还证明了其上的λ编码数据类型的归纳法,这使他的扩展为什么必要的原因更加清楚。

几乎没有,我仍然想知道这些扩展来自何处。为什么他们是他们自己?什么使他们合理?我知道,例如,某些扩展(例如递归)破坏了该语言作为证明系统的地位。如果我决定也将CoC与其他原语一起扩展,我将如何辩解?我知道有必要进行标准化的证明,但这并不能证明这些原语“有意义”。

简而言之,什么使语言(及其类型系统)成为能够证明自己的术语定理的系统呢?


我读了有关这个问题的一个博客,但我现在无法找到它:(它包含了句“系统T是足够了!”或者类似的东西,它谈到依赖型系统。
Labbekak

2
找到了它:queuea9.wordpress.com/2010/01/17/…它实际上是由亚伦·史坦普(Aaron Stump)编写的,因此您可能已经知道了。
Labbekak

无保护的递归“破坏”了语言作为证明系统,无保护的递归没有。为了证明原语有意义,我想说您建立了一个模型。为了证明有关其术语的定理,它需要一种Curry-Howard同构和相关类型,以便您证明的事物(类型)可以谈论您的术语。
xavierm02 '18

Answers:


5

[随后进行自我广告,但是我认为这是相关的。]

tututuv,(λx.x)vv

当然,您也可以假定等价,并且有几种不同形式的量词(类型化/非类型化,通用/存在)。该机制可用于推理任何程序(不必证明它们已终止或什至是键入)。唯一的限制是用作证明的程序必须被系统终止证明(任意的通用递归导致不一致)。

如果您想检查一下,这里有一些参考:

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.