Lambda calculus Lambda演算中的结合性

Lambda calculus Lambda演算中的结合性,lambda-calculus,associativity,Lambda Calculus,Associativity,我正在写这本书的练习题。我遇到的一个问题是证明以下几点: 表明应用程序不是关联的;事实上,x(yz)并不等于(xy)z 以下是我迄今为止所做的工作: Let x = λa.λb. ab Let y = λb.λc. bc Let z = λa.λc. ac (xy)z => ((λa.λb. ab) (λb.λc. bc)) (λa.λc. ac) => (λb. (λb.λc. bc) b) (λa.λc. ac) => (λb.λc. bc) (λa.λc

我正在写这本书的练习题。我遇到的一个问题是证明以下几点: 表明应用程序不是关联的;事实上,x(yz)并不等于(xy)z

以下是我迄今为止所做的工作:

Let x = λa.λb. ab
Let y = λb.λc. bc
Let z = λa.λc. ac

(xy)z => ((λa.λb. ab) (λb.λc. bc)) (λa.λc. ac)    
=> (λb. (λb.λc. bc) b) (λa.λc. ac)    
=> (λb.λc. bc) (λa.λc. ac)    
=> (λc. (λa.λc. ac) c)

x(yz) => (λa.λb. ab) ((λb.λc. bc) (λa.λc. ac))    
=> (λb. ((λb.λc. bc) (λa.λc. ac)) b)    
=> (λb. (λc. (λa.λc. ac) c) b)

这是正确的吗?请帮我理解。

这些推导看起来很好,一目了然


从概念上讲,只要认为x、y和z可以表示任何可计算的函数,很明显,其中一些函数是不关联的。比如说,x是“减2”,y是“除以2”,z是“双精度”。在这个例子中,x(yz)=‘减去2’和(xy)z=‘减去1’。

看起来还可以,但为了简单起见,用矛盾来证明如何

假设(xy)z=x(yz),让


并证明((xy)z)0≠ (x(yz))0.

我也认为你的反例是正确的。
您可能会得到一个更简单的反例,如下所示:

x=λa.nyz变量,然后:

(xy)z=>((λa.n)y)z=>nz
x(yz)=>(λa.n)(y z)=>n


你提到的巴伦德雷格的那本书非常正式和精确(一本很棒的书),所以最好能有这个练习的精确陈述

我想实际的目标是找到x、y和z的实例化 x(y z)减少为布尔真=\xy.x,(x y)z减少为布尔假=\xy.y

然后,您可以取例如x=\z.true和z=I=\z.z(y任意)

但我们如何证明真与假是不可转换的呢?你无法在微积分中证明它,因为你没有否定:你只能证明等式而不能证明不等式。然而,让我们观察一下,如果真=假,那么所有项都是相等的

事实上,对于任何M和N,如果真=假,那么

                         true M N = false M N
但是真的mn减少到M,而假的mn减少到N,所以

                              M = N
因此,如果true=false,所有项都将相等,并且演算将是微不足道的。因为我们可以找到不平凡的lambda演算模型,所以并没有这样的问题
模型可能等同于真与假(更一般地说,可能等同于不同范式的术语,这需要我们讨论bohm out技术)。

+1为在发布之前实际付出一些努力!
                              M = N