형식이 지정되지 않은 람다 미적분의 구현을 프로그래밍하는 데 2 주를 보냈습니다.람다 미적분 : 대입 피하기 대체의 재귀 정의
위키 피 디아에서 제공 한 대체 정의에 잘 맞는 대체를 피하기위한 재귀 적 정의 (즉, 알파 변환 형태로 대체를 사용합니다)를 공식화했을 수도 있습니다. 나는 그것이 매우 명확하고 단순하게 찾을 수 있기 때문에
이 맞다면 누군가가 나를 위해 그것의 정확성을 확인하고 수 있다면 정말 감사하겠습니다,이 정의는 거의 사용되지 않는 이유를 설명.
위키 백과의 정의 :
x[x := N] ≡ N
y[x := N] ≡ y, if x ≠ y
(M1 M2)[x := N] ≡ (M1[x := N]) (M2[x := N])
(λx.M)[x := N] ≡ λx.M
(λy.M)[x := N] ≡ λy.(M[x := N]), if x ≠ y, provided y ∉ FV(N)
내 추가 정의는 캡처 회피을 적용합니다 :
y' ∉ (FV(N) ∪ FV(M))
M' ≡ M[y:=y']
감사합니다. 는 사실은 원래 드 Brujin 인덱스 형태로 내 표현을 변환 한 후 표현을 출력 할 때 정상적인 형태로 다시 변환하지만 난 다시이 방법에 온 있도록 베타 감소 후 일치하는 이름을 유지하는 방법을 알아낼 수 없었다. 이 규칙으로 인해 사용 가능한 변수를 추적해야하는 이유를 이해할 수 없지만 작동 의미를 작성하고 이해하는지 확인합니다. – James
@James 당신이 그것을 계속 추적하지 않는다면, 전후의 표현이 같은 것을 의미한다는 보장은 없습니다. 당신이 미적분의 건전함을 증명하려고하는지 명확하게 알 수 있습니다. – HuStmpHrrr