SICP의 한 라인은“유명한 논리 학자들이 여기서 당황스러운 오류를 일으켰다. 이것이 무엇을 의미합니까?


14

컨텍스트는 다음과 같습니다 ( "로컬 이름"이라는 제목 아래 컴퓨터 프로그램의 구조 및 해석 , 1.1.8 절).

프로 시저의 공식 매개 변수는 공식 매개 변수의 이름이 중요하지 않기 때문에 프로 시저 정의에서 매우 특별한 역할을합니다. 이러한 이름을 바운드 변수 라고하며 프로 시저 정의 가 형식 매개 변수를 바인딩 한다고합니다 . 정의 전체에서 바운드 변수의 이름이 일관되게 바뀌면 프로 시저 정의의 의미는 변경되지 않습니다.

마지막 줄의 끝에 각주 (26)가 있습니다.

일관된 이름 바꾸기의 개념은 실제로 미묘하고 공식적으로 정의하기가 어렵습니다. 유명한 논리 학자들이 여기서 당황스러운 실수를 저질렀습니다.

본문은 무엇을 또는 ​​누구를 말하는가? "일관된 이름 바꾸기"를 정의하는 것이 어려운 이유는 무엇이며, 어떤 논리학자가이를 정의하려고 시도하는 중에 오류가 발생했으며 그 오류는 무엇입니까?


3
나는 학생들에게 "일관된 바운드 변수 이름 바꾸기"를 이해하는 유일한 방법은 빌어 먹을 것을 올바르게 구현하는 것이라고 말합니다. 많은 논리 서적은 문제를 피하거나 불완전한 이름 바꾸기 절차를 제공하거나 최소한 주어진 이름 바꾸기 절차가 올바른 증거를 생략합니다. 그러나 나는 그 책이 어떤 험담을 언급하는지 모른다.
Andrej Bauer

5
변수 이름 바꾸기, 새로운 이름, 캡처 방지 대체 등을 정확하게 처리하는 것은 정의와 증거에서 실제로 번거로워지는 가장 사소한 것 중 하나입니다. 그러한 사소한 문제의 경우, 사소한 양의 정신주기 이상을 보내고 싶지 않지만 많은 까다로운 캡처 / 충돌 등을 피하기 위해 필요한 것보다 훨씬 더 많은 경우가 있습니다. PL 사람들은 종종 그들의주의를 기울입니다. 그런 다음 "Barendregt 규칙"을 호출하고 문제를 무시하고 필요할 때 여기 저기 "신선하게"남용합니다.
chi

1
가능한 경우 답변 상자 아래에 더 구체적인 답변을 주셔서 감사합니다. 내가 아니라고 반면,이 의견은 여전히 당신은 이미 손에 문제를 알게되는 사람이 읽을 수를 쓴 것처럼 문제의 소리가 신비하게
ubadub

@chi 특히이 주제를 다루는 권장 사항이 있다면 고맙겠습니다. 미리 감사드립니다
ubadub

답변:


11

이것은 부분 답변입니다. SICP가 어떤 오류 또는 사람들을 언급하는지 전혀 알 수 없습니다. "왜"변수 이름 바꾸기가 정확하게 처리하기 어려울 수 있는지에 대한 힌트 만 제공 할 수 있습니다.

우선, 정의하는 것이 사소한 것처럼 보입니다. 예를 들어, 인덱스 합계에서 바운드 변수의 이름을 바꿀 수 있습니다

xe=y(e{y/x})

여기서, e 임의의 발현되고, e{y/x} 각각의 구문 여분 나타내고 xy . 사소한가?

우리가 위의 규칙을 맹목적으로 적용하면

x(x+y)=y(y+y)

그 좋지 않다. " ye 에서 발생하지 않습니다 "라는 요구 사항을 추가해야합니다. 그렇지 않으면 이름이 충돌합니다.

이제 올바른 이름 변경을 고려하십시오.

xy(x+y)=xz(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=yxxe

yx(xe){t/y}=x(e{t/y})xt

zytxe(xe){t/y}=z(e{z/x}{t/y})

내가 제대로 이해했으면 좋겠다. (내가 처음 시도한 것은 틀렸다)

zz

αλx

이제 PL 이론에서 무언가 를 증명할 때마다이 복잡한 정의를 다루어야한다고 상상해보십시오 . 우리는 할 수 있지만 원하지 않습니다. 지루하고 지루하며 오류가 발생하기 쉬우 며 증거를 어지럽히고 독자에게 통찰력을 제공하지 않습니다. 이러한 이유로 많은 PL 작성자는 용어를 "변수 이름 변경"까지 적용하고 모든 바운드 변수를 구별해야 할 대상과는 다른 것으로 간주하고, 우리는 "Barendregt 규칙"또는 같은 효과를 가정합니다.

잔인하게 정직하기 위해, 이것은 증거를 속이는 것입니다. 또한 "윙크 윙크, 너지 너지, 더 이상 말하지 마십시오!"를 추가 할 수도 있습니다. 같은 정신으로. 우리는 본질적으로 자비를 요구하고 독자에게 다음과 같이 말합니다. 모든 세부 사항을 포함하십시오. "

기술적으로, 이다 허위 진술을 증명하기 위해이 바로 가기를 악용 할 수. 그러나 경험이 풍부한 증거 검토자는 "도덕적으로 훌륭한"것이 무엇인지, 그리고 (매우 노력하여) 완벽하게 만들 수있는 것과 의심스러운 것을 알고 있습니다. 후자는 바운드 이름 의 실제 선택에 의존하는 것을 포함 할 수 있습니다 (그래서 우리는 약속 된대로 실제로 작동 하지 않습니다 !). 이 경우 검토에서 더 자세한 내용을 요구하므로이를 확신 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.