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

时间:2014-03-07 04:08:22

标签: 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。(a b)(b c))(\ lambda f x。f ^ n x)

=(\ lambda b c。((\ lambda f x。f ^ n x)b)(b c))//更换

=(\ 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步? 谢谢!

2 个答案:

答案 0 :(得分:1)

是的,这是正确的。将b c替换为x没有问题。见the substitution rule。虽然bc受到约束,但它们会受到相关术语的约束,因此它们在两个地方具有相同的含义。

答案 1 :(得分:0)

理解后继函数的两个定义的方法是从总和开始:

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)