这是部分答案:我不知道SICP指的是哪些错误或人员。我只能提供一些提示,说明“为什么”变量重命名可能难以精确处理。
首先,定义它似乎微不足道。例如,我们可以重命名索引和中的绑定变量
∑xe=∑y(e{y/x})
ee{y/x}xy
好吧,如果我们盲目地应用上述规则,我们将得到
∑x(x+y)=∑y(y+y)
ye
现在,考虑这种正确的重命名
∑x∑y(x+y)=∑x∑z(x+z)
xy
e{y/x}yeye
然后,我们定义自由出现的次数:
free(x)={x}free(e+t)=free(e)∪free(t)free(∑xe)=free(e)∖{x}
最后,捕获避免替换:
- x{t/y}tx=yx
- (e+e′){t/y}=e{t/y}+e′{t/y}
- (∑xe){t/y}=??
x=yx∑xe
y≠x(∑xe){t/y}=∑x(e{t/y})xt
zyt∑xe(∑xe){t/y}=∑z(e{z/x}{t/y})
我希望我做对了。(顺便说一句,我的第一次尝试是错误的)
zz
αλx
现在,想象一下每次我们要在PL理论上证明某些东西时都必须处理这个复杂的定义。我们可以,但我们不想这么做。它无聊,乏味,容易出错,使证据混乱并且对读者没有洞察力。出于这个原因,许多PL的作者只是简单地跳过了这些细节,只是说(甚至认为是理所当然的!)术语应“按变量重命名”,所有绑定变量都假定与他们需要区别的内容有所区别,我们假设“ Barendregt约定”或具有相同效果的东西。
老实说,这是在作弊。我们还可以添加“眨眼眨眼,轻推微动,再也不说了!” 本着同样的精神。我们本质上是在求饶,并告诉读者:“看,这很无聊,我不想这样做,你不想阅读它-我们俩都知道,我们需要付出巨大的努力,才能将这一证明重写为包括所有详细信息”。
从技术上讲,这是可能利用此快捷方式证明虚假陈述。但是,经验丰富的证明审阅者知道什么是“道德上不错的”,并且可以(非常努力)做到完美,以及什么是可疑的。后者可能包含一些取决于绑定名称的实际选择的内容(因此,我们实际上并没有像承诺的那样“最多”工作!)。在这种情况下,审核将要求提供更多详细信息,以便可以说服他。