Lambda 使用教会数字的公式

Lambda 使用教会数字的公式,lambda,lambda-calculus,church-encoding,Lambda,Lambda Calculus,Church Encoding,定义了一些用于教会数字的公式,如 SUCC := λn.λf.λx.f (n f x) 在他第一次定义lambda演算的论文中,他说 ..两个变量的函数,其值取形式良好的 公式F和X是递归的形式 稍后在他的论文中,他调用了这个函数B(m,n) 如何使用所有这些信息来描述像B这样的函数如何在suc1 我知道我们必须计算出输入和输出作为素数的幂,因为在整个论文中,他使用了哥德尔的编号系统,但是我发现很难把它们全部拼凑起来。我使用了带有javascript的lambda演算。我将尝试展示一些小示例,

定义了一些用于教会数字的公式,如

SUCC := λn.λf.λx.f (n f x)
在他第一次定义lambda演算的论文中,他说

..两个变量的函数,其值取形式良好的 公式F和X是递归的形式

稍后在他的论文中,他调用了这个函数
B(m,n)

如何使用所有这些信息来描述像
B
这样的函数如何在
suc1


我知道我们必须计算出输入和输出作为素数的幂,因为在整个论文中,他使用了哥德尔的编号系统,但是我发现很难把它们全部拼凑起来。

我使用了带有javascript的lambda演算。我将尝试展示一些小示例,
SUCC
和函数
B
aka Bluebird/Compose如何工作以及如何组合

首先是一个带有教会数字的小提示(JS):

对于JS中的教堂数字,Succesor
SUCC:=λnfx.f(nfx)
constsucc=n=>f=>x=>f(n(f)(x))
。 我们可以看到,
succ
-函数只需要取一个教堂数字,然后在前面添加一个
f
,这样带有主体
f(x)
succ(n1)
将是
f(x))
。因此,它最终总共完成了
f
的1+n合成

// 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
还有另一种编写后继函数的方法,因为我们正在进行n次复合:复合函数。Smullyan根据咖喱的
B
combinator将其命名为蓝鸟

B:=λfgx.f(gx)

在JS中:
const B=f=>g=>x=>f(g(x))

现在可以组合
succ
B
-功能

const succ = n => f => x => B(f) (n(f)) (x)  
现在我们有了一个实际的复合函数,我们可以定义后续函数,而不必提及最终的x值参数

constsucc=n=>f=>B(f)(n(f))

const succ = n => f => x => B(f) (n(f)) (x)