我想使用Agda作为我的类型检查器和计算器来测试system F中的一些定义。我第一次尝试引入教堂自然数是这样写的 Num = forall {x} -> (x -> x) -> (x -> x) 它将像常规类型别名一样使用: zero : Num
zero f x = x 但是,Num的定义没有类型(kind?)让它工作并尽可能接近system F符号的最合适的方法是什么?
在学习Haskell时,我遇到了一个挑战,要找到两个函数f和g,比如f g和f . g是等价的(以及总计,所以f = undefined或f = (.) f之类的东西不算在内)。给出的解决方案是,f和g都等于\x -> x . x (或join (.))。(我注意到这并不是Haskell特有的;它可以用纯粹的组合逻辑表示为“查找f和g以便f g = B <e
我一直在读的计算机程序书的结构和解释通过定义零和增量函数来呈现教会数字increment: λf. λx. f ((n f) x)
对我来说,这似乎相当复杂,我花了很长时间才弄明白并推导出一个(λf.λx. f x)和两个(λf.λx. f (f x))。用这种方式编码数字难道不是简单得多吗,因为零是空的