什么构成精益的有效类型?

时间:2016-12-07 20:42:35

标签: proof theorem-proving lean

我已完成lean tutorial的前3章,我已经done a few proofs in propositional logic

现在我想回去一点ask myself dumb questions

我的理解是:

  1. 条款类型:constant A : TypeA是一个术语,TypeA
  2. 的类型
  3. 条款成为类型:constant a : A
  4. 术语的类型可能取决于另一个术语的类型:constant B : A -> Type,这是constant B' : Π (a : A), Type的糖
  5. 但是这种理解显然是错误的,因为这段代码没有进行类型检查:

    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

    为什么呢?我怀疑所有条款都不能成为类型。我怀疑其类型依赖于其他类型的术语不能成为类型。为什么呢?

1 个答案:

答案 0 :(得分:1)

第一类错误

中第一个类型错误的问题
constant C : Π (b : B), Type

是你不能说b : B,因为B是类型为A -> Type函数(没有定义),即B是一个,而非类型。 提出b : 1b : "xyz"b : (λ a : A, Type)等声明是没有意义的。

E.g。以下内容可行,因为B a : Type

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

第二类错误

中的第二种类型错误
constant C' : Π (B : A), (Π (b : B), Type)

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

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

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

第三类错误

constant C'' : B -> Type

未能进行类型检查的原因与第一种情况相同。 B是一个函数值,而我们需要一个类型 - 这就是constant B : A -> Type有效的原因。