이것은 부분 답변입니다. SICP가 어떤 오류 또는 사람들을 언급하는지 전혀 알 수 없습니다. "왜"변수 이름 바꾸기가 정확하게 처리하기 어려울 수 있는지에 대한 힌트 만 제공 할 수 있습니다.
우선, 정의하는 것이 사소한 것처럼 보입니다. 예를 들어, 인덱스 합계에서 바운드 변수의 이름을 바꿀 수 있습니다
∑xe=∑y(e{y/x})
여기서, e 임의의 발현되고, e{y/x} 각각의 구문 여분 나타내고 x 와 y . 사소한가?
우리가 위의 규칙을 맹목적으로 적용하면
∑x(x+y)=∑y(y+y)
그 좋지 않다. " y 는 e 에서 발생하지 않습니다 "라는 요구 사항을 추가해야합니다. 그렇지 않으면 이름이 충돌합니다.
이제 올바른 이름 변경을 고려하십시오.
∑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 규칙"또는 같은 효과를 가정합니다.
잔인하게 정직하기 위해, 이것은 증거를 속이는 것입니다. 또한 "윙크 윙크, 너지 너지, 더 이상 말하지 마십시오!"를 추가 할 수도 있습니다. 같은 정신으로. 우리는 본질적으로 자비를 요구하고 독자에게 다음과 같이 말합니다. 모든 세부 사항을 포함하십시오. "
기술적으로, 이다 허위 진술을 증명하기 위해이 바로 가기를 악용 할 수. 그러나 경험이 풍부한 증거 검토자는 "도덕적으로 훌륭한"것이 무엇인지, 그리고 (매우 노력하여) 완벽하게 만들 수있는 것과 의심스러운 것을 알고 있습니다. 후자는 바운드 이름 의 실제 선택에 의존하는 것을 포함 할 수 있습니다 (그래서 우리는 약속 된대로 실제로 작동 하지 않습니다 !). 이 경우 검토에서 더 자세한 내용을 요구하므로이를 확신 할 수 있습니다.