精益中的有效类型是什么?

What constitutes a valid type in lean?

我已经完成了 lean tutorial, and I've already done a few proofs in propositional logic 的前 3 章。

现在我想往回走一点 ask myself dumb questions

我的理解是:

  1. 术语可以 种类型:constant A : TypeA 是一个术语,TypeA 的类型。
  2. 条款可以成为类型:constant a : A
  3. 一个术语的类型可以取决于另一个术语的类型:constant B : A -> Type,它是 constant B' : Π (a : A), Type
  4. 的糖

但是这个理解显然是错误的,因为这段代码没有类型检查:

constant A : Type

constant a : A

constant B : A -> Type

constant B' : Π (a : A), Type

constant C : Π (b : B), Type

constant C' : Π (B : A), (Π (b : B), Type)

constant C'' : B -> Type

所有以 constant C 开头的行,即第 9、11 和 13 行抛出错误 error: type expected at B

为什么?我怀疑并非 all 项都可以成为类型。我怀疑 类型依赖于其他类型的术语不能成为类型 。为什么?

第一次输入错误

第一个类型错误的问题

constant C : Π (b : B), Type

是你不能说b : B,因为B是一个函数(没有定义)类型A -> Type,即B 是一个 ,不是类型。 像 b : 1b : "xyz"b : (λ a : A, Type).

这样的声明没有意义

例如以下将起作用,因为 B a : Type:

constant C : Π (b : B a), Type

第二类错误

第二类错误

constant C' : Π (B : A), (Π (b : B), Type)

源于这样一个事实,即不知道B是一个类型,我们所知道的B是它是A类型的某个值(居民)。为了能够以这种方式使用 B,您需要这样的东西:

constant C' : Π (B : Type), (Π (b : B), Type)

即我们明确地说 B 是一种类型。

第三类错误

constant C'' : B -> Type

类型检查失败的原因与第一种情况相同。 B 是一个函数值,而我们在这里需要一个类型——这就是 constant B : A -> Type 起作用的原因。