以下是lambda演算的合法后继函数吗?(教堂数字)

以下是lambda演算的合法后继函数吗?(教堂数字),lambda,lambda-calculus,church-encoding,Lambda,Lambda Calculus,Church Encoding,我从书中读到,教堂数字的继承者是: (\lambda n f x.f(n f x)) 昨晚我想到了这个: (\lambda a b c.(a b)(b c)) 我相信它还执行后续功能的功能。然而,我不是100%肯定我的减少是正确的。有人能检查一下并告诉我吗 下面是我的简化:让一个教堂数字为(\lambda f x.f^nx),其中f^nx实际上是(f(f(f…(x)))的一个简短版本…它代表数字n。预期结果应该是n+1,即(\lambda f x.f^{n+1}x) (\lambda a b c

我从书中读到,教堂数字的继承者是: (\lambda n f x.f(n f x))

昨晚我想到了这个: (\lambda a b c.(a b)(b c))

我相信它还执行后续功能的功能。然而,我不是100%肯定我的减少是正确的。有人能检查一下并告诉我吗

下面是我的简化:让一个教堂数字为(\lambda f x.f^nx),其中f^nx实际上是(f(f(f…(x)))的一个简短版本…它代表数字n。预期结果应该是n+1,即(\lambda f x.f^{n+1}x)

(\lambda a b c.(a b)(b c))(\lambda f x.f^n x)

=(\lambda b c.(\lambda f x.f^n x)b)(b c))//a被替换

=(\lambda b c.(\lambda x.b^n x)(b c))//f已替换

=(\lambda b c.(\lambda x.b^n x)(b c))//不是100%确定,我可以用(b c)替换x吗

=(\lambda b c.(b^n(b c))

=(\lambda b c.(b^(n+1)c)

这种减少正确吗,尤其是从步骤3到步骤4?
谢谢!

是的,这是正确的。用
bc
代替
x
没有问题。请参见。虽然
b
c
是绑定的,但它们都绑定在有问题的两个术语之上,因此它们在两个位置都有相同的含义。

理解后续函数的两个定义的方法是从t开始他说:

plus = \n,m,x,y. n x (m x y)
然后我们可以定义

succ1 = \n. plus one n 
succ2 = \n. plus n one
其中
one=\x,y.x y

简化这两个术语,我们得到

succ1 = \n,x,y. one x (n x y) 
      = \n,x,y. x (n x y)
succ2 = \n,x,y. n x (one x y) 
      = \n,x,y. n x (x y)

你基本上展示的,仅供参考,是
nf∘ f
f相同∘ n f
(当
n
是一个教堂数字时)。这是有意义的;
f
的每一个组合都相当于加1,因此表示加法是可交换的。n*1+1=1+n*1。