以下是lambda演算的合法后继函数吗?(教堂数字)
我从书中读到,教堂数字的继承者是: (\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?以下是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
谢谢!是的,这是正确的。用
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。