我已经完成了精益教程的前三章,并且已经完成了命题逻辑中的几个证明。
现在我正试着回到过去,问自己愚蠢的问题。
我的理解是:
constant A : Type
。A
是一个术语,Type
是A
的类型。constant a : A
。constant B : A -> Type
,它是constant B' : Π (a : A), Type
的糖但是这种理解显然是错误的,因为这段代码并不是打字机:
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
为什么?我怀疑不是所有的术语都可以成为类型。我怀疑类型依赖于其他类型的术语不会变成类型。为什么?
发布于 2016-12-08 10:09:01
第一类误差
中的第一个类型错误的问题
constant C : Π (b : B), Type
您不能说b : B
,因为B
是A -> Type
类型的函数(没有定义),也就是说B
是一个值,而不是一个类型。提出像b : 1
、b : "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
工作的原因。
https://stackoverflow.com/questions/41026997
复制相似问题