我正在解决Lambda演算的练习。但是,我的解决方案与答案不同,我看不出错了。

  1. 查找$( lambda x.xy)x $的免费变量。
    我的工作:$ fv((( lambda x.xy)x)x)= fv( lambda x.xy) cup fv(x)= {y } cup cup {x } = {x,x,x,x,y } $。
    模型答案:$ fv((( lambda x.xy)x)= {x } $。

  2. 查找$ lambda xy.x $的界变量。
    我的工作:一个变量$ y $具有绑定,但由于它不存在于$ lambda $ -abstraction的主体中,因此它不能绑定,因此$ bv( lambda xy.x)= {x } $只要。
    模型答案:$ bv( lambda xy.x)= {x,y } $。

有帮助吗?

解决方案

  1. 您的答案是正确的,$ y $肯定是免费的。模型是错误的。也许有一个错别字,答案是为$( lambda y.xy)x $

  2. 这取决于$ bv $的确切定义。通常,正式定义$ fv $,因为它更重要。 (界变量可以是 自由重命名 在一个条件下,但免费变量不能。 cup bv(n) bv( lambda xm)&=& {x } cup bv(m) end {eqnarray*},然后模型答案是正确的。请注意,此定义是有道理的:如果您有$ m $,并替换了一个免费变量的免费变量$ x $ term $ n $($ bv(n)= {} $),则期望$ bv(m)= bv(m [x:= n])$。如果您仅考虑在$ lambda $下也出现的绑定变量,则该属性将不存在。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top