Poly 模块中有 4 个与教堂数字相关的练习:
Definition cnat := forall X : Type, (X -> X) -> X -> X.
据我了解,cnat 是一个接受函数 f(x) 的函数,它是参数 x 并返回它的这个参数的值:f(x)。
然后有 0、1、2 和 3 的 4 个示例以教会符号表示。
但是如何解决这个问题?我知道我们必须再次应用该功能。cnat 返回的值将作为参数。但是如何编码呢?使用递归?
Definition succ (n : cnat) : cnat
(* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.
更新
我试过这个:
Definition succ (n : cnat) : cnat :=
match n with
| zero => one
| X f x => X f f(x) <- ?