“无类型演算可用不动点组合子在没有 原语时构造一般递归,具体 $Y/Z$ 展开与策略边界由专页承担。”
形式陈述
给定函数
也就是
对任意
两边有共同归约结果,所以
记
递归参数
直觉
递归定义常写成“函数在函数体里调用自己”,但这里没有函数名可供自引用。组合子改写问题:先把递归体写成一个接收 self 的普通高阶函数
这种构造揭示了语法递归与语义不动点的联系,却没有把二者合并。
例子与边界
把阶乘的递归体写成
在正常序下,
类型边界同样关键。若某个满足开头 β-方程的闭组合子
推论与应用
不动点组合子说明“递归”不是无类型函数计算必须额外假设的语法能力:只靠抽象、应用和自应用就能编码递归。它也让传名调用与传值调用的差别变得可观察——二者共享 β-规则,却对先展开函数体还是先求实参作出不同选择。
在编程语言中,具名 let rec 或 fix 通常比直接展开
参考资料
- H. B. Curry and Robert Feys, Combinatory Logic, Vol. I, North-Holland, 1958,fixed-point combinators。
- Henk Barendregt, The Lambda Calculus: Its Syntax and Semantics, revised ed., North-Holland, 1984,fixed-point combinators and reduction strategies。
- Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002,untyped recursion and typed fixed-point operators。