考虑 lambda 立方体:
https://en.wikipedia.org/wiki/Lambda_cube
同时支持类型多态和依赖类型的类型系统:
(假设 a,b,c 是项,A,B,C 是类型)
可归类为λP2系统,是二阶谓词逻辑的体现。
它的扩展,称为构造微积分 (CoC),也支持:
它是大多数最强大的证明助手的基础,包括coq、LEAN3/4和agda。
这个额外的能力似乎没有用,因为任何这样的推论都可以重写成等价的对偶形式:
{ // primary
A -> B
}
{ // dual
∃ A, (g: G)
∀ (g: G), B
}
在这里,术语
G
(将被称为通用对象)只是一个中间结构,携带很少的编译时信息,可以由证明者/编译器即时生成,并且可以在运行中擦除-时间。
那么为什么需要 CoC(或许多依赖类型系统中的更高级规则)?具体来说: