与教会数字一起使用的公式

时间:2017-04-04 19:53:31

标签: lambda lambda-calculus church-encoding

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的编号系统,但我发现很难将它们拼凑在一起。

1 个答案:

答案 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