我最近完成了一个大学课程,其中包括Haskell和Agda(一种依赖类型的函数式编程语言),并且想知道是否有可能用组合逻辑替换这些中的lambda演算。使用Haskell,这似乎可以使用S和K组合器,从而使其无点。我想知道Agda的等价物是什么。即,可以在不使用任何变量的情况下制作与Agda等效的依赖类型的函数式编程语言吗?
此外,是否有可能以某种方式用组合器取代量化?我不知道这是巧合,但通用量化例如使类型签名看起来像lambda表达式。有没有办法从类型签名中删除通用量化而不改变其含义?例如。在:
forall a : Int -> a < 0 -> a + a < a
如果不使用forall可以表达同样的事情吗?
答案 0 :(得分:8)
我猜“Bracket Abstraction”也适用于依赖类型 在某些情况下。在以下文件的第5节中 你会发现一些K和S类型:
令人发指但有意义的巧合
依赖类型安全语法和评估
2010年斯特拉斯克莱德大学Conor McBride
将lambda表达式转换为组合表达式 大致对应于将自然演绎证明转换为 希尔伯特式证明。