[英]Check cnat. and got Type return
全部
我试图理解 SF-LF 书 chp4 中提到的教堂数字。
Definition cnat := forall X : Type, (X -> X) -> X -> X.
Definition one : cnat :=
fun (X : Type) (f : X -> X) (x : X) => f x.
Check cnat.
Check one.
我得到
cnat
: Type
one
: cnat
似乎cnat是某种类型,同时还有function。 怎么可能既是type又是function? 任何人都可以帮助解释一下吗?
“ forall (X: Type),
”语法是一种从X
参数化的类型形成类型的方法。 forall (X: Type), (X -> X) -> X -> X
是一种函数类型,给定类型X
会产生一个类型为(X -> X) -> X -> X
的值(即本身就是一个函数)。
“ fun (X: Type) =>
” 语法是一种从X
参数化的术语形成 function 的方法。 fun (X: Type) (f: X -> X) (x: X) => fx
是一个 function ,给定X
类型会产生 function fun (f: X -> X) (x: X) => fx
(它本身就是一个函数)。
fun
和forall
的共同点是它们涉及binders ,例如(X: Type)
(也像(f: X -> X)
, (x: X)
)。 fun
是一种涉及绑定器以形成函数的构造,但并非所有涉及绑定器的构造都形成函数: forall
是一种涉及绑定器以形成类型的构造。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.