wikipedia entry on lambda calculus定义了一些与教会数字相似的公式,如
SUCC := λn.λf.λx.f (n f x)
在Churches论文中,他首先定义了他的lambda演算,他说
..两个变量的函数,其值取自格式良好 公式F和X,是公式
{F}(X)
,是递归的..
后来他在论文中称他为B(m,n)
。
如何使用所有这些信息来描述像B
这样的函数如何在SUCC 1
上起作用
我知道我们必须将输入和输出计算为素数的力量,因为在整篇论文中他使用了Gódel的编号系统,但我发现很难将它们拼凑在一起。
答案 0 :(得分:0)
我在 JavaScript 中使用 lambda 演算。我将尝试展示一些小例子,说明 → echo "Hello" | grep "This won't be found" || true
→ echo $?
0
和函数 SUCC
aka Bluebird/Compose 如何工作以及如何组合。
首先用Church-Numerals(在JS中)提醒一下:
B
和 JS 中教堂数字的继承者 const n0 = f => x => x
const n1 = f => x => f(x)
const n2 = f => x => f(f(x))
const n3 = f => x => f(f(f(x)))
:
SUCC := λnfx.f(nfx)
。
我们可以看到 const succ = n => f => x => f( n(f)(x) )
-Function 只需要一个 Church-Numeral 并在前面添加一个 succ
,这样 f
的主体为 succ(n1)
将是 {{1} }.因此,它最终总共做了 1 + n 个 f(x)
组合。
f(f(x))
还有另一种写后继的方法,因为我们正在做 n-fold 组合:一个 compose 函数。 Smullyan 以 Curry 的 f
组合子命名为 Bluebird。
// example creating new Church-Numbers with the Succesor-Function
const n4 = succ(n3)
const n5 = succ(n4)
// or do Addition with Church-Numbers
const n7 = n2(succ)(n5)
const n10 = n5(succ)(n5)
//to test if it works, us the helper-function churchtoJsNum
const churchtoJsNum = n => n(x => x + 1)(0)
churchtoJsNum(n10) // 10
在 JS 中:B
现在可以结合 B := λfgx.f(gx)
和 const B = f => g => x => f(g(x))
-Function。
succ
现在我们有了一个实际的组合函数,我们可以定义后继函数而无需提及最终的 x 值参数。
B