所以讓我定義的幾件事情:實施阿爾法等價 - 哈斯克爾
type Name = String
data Exp = Var Name
| App Exp Exp
| Lam Name Exp
deriving (Eq,Show,Read)
我想定義alpha-equivalence
,這是
alpha_eq :: Exp -> Exp -> Bool
-- The terms x and y are not alpha-equivalent, because they are not bound in a lambda abstraction
alpha_eq (Var x) (Var y) = False
alpha_eq (Lam x e1) (Lam y e2) = False
alpha_eq (App e1 e2) (App e3 e4) = False
例如Lam "x" (Var "x")
和Lam "y" (Var "y")
都是等價的。不過,我在Haskell
上既新鮮又可怕。有人可以提供關於如何實施alpha_eq
的線索嗎?有一件事我想過在這種情況下使用Map Name Int
所以我會:
['x' -> 0] ['y' -> 0]
所以在這種情況下Map['x'] == Map['y']
。但是,我在哈斯克爾又一次很可怕。你能否給我一個線索如何實現它?