예를 들어, 내가 컴파일러/증명 검사 일하고, 나는 구문 트리가 있다면 내가 이와 같은, 궁금 해서요 :비교 구문 트리가 모듈로 알파 변환
data Expr
= Lambdas (Set String) Expr
| Var String
| ...
할 수있는 방법이 있다면 Expr
의 alpha-equivalence (등가 모듈로 이름 바꾸기)를 확인하십시오. 그러나이 Expr
은 람다의 변수 집합이 교환 가능하다는 점에서 람다 계산법과 다릅니다. 즉 매개 변수의 순서는 검사에 영향을 미치지 않습니다.
(간단히하기 위해 Lambda ["x","y"] ...
은 Lambda ["x"] (Lambda ["y"] ...)
과 구별되며이 경우 순서가 중요합니다.)
다른 말로 표현하면 두 개의 Exprs
이 주어지면 하나의 이름에서 어떻게 효율적으로 이름 바꾸기를 찾을 수 있습니까? 이러한 종류의 조합 문제는 NP 완성의 냄새를 풍깁니다.
너무 졸려서 생각할 수 없지만 문제는 통일의 특별한 경우처럼 들립니다 (예 : Prolog). 그게 어떻게 끝났는지 볼 수 있을까요? –
언 바운드 패키지를 사용하고'Set를 사용하는 대신'Lambdas [Name Expr] Expr'을 정의하면, 'aeq' 함수가 올바른 일을하는지 궁금하십니까? –