Lambda calculus Lambda演算中的结合性
我正在写这本书的练习题。我遇到的一个问题是证明以下几点: 表明应用程序不是关联的;事实上,x(yz)并不等于(xy)z 以下是我迄今为止所做的工作: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
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.n和y,z变量,然后: (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