Estou interessado na relação de equivalência alfa em idiomas com ligações variáveis, como:
t := x:y 'x belong to y'
| bot 'False'
| t -> t 'implication'
| Ax.t 'forall x, t'
Ou o cálculo lambda puro:
t := x 'variable'
| (t t) 'application '
| Lx.t 'abstraction: \x -> t'
Estou procurando um algoritmo que permita determinar se dois termos da linguagem são equivalentes a alfa ou não. Qualquer referência publicada também é muito bem-vinda. Estou assumindo uma representação de dados dos termos como um tipo recursivo padrão, por exemplo, em Haskell:
newtype Var = Var Int
data Term = Belong Var Var
| Bot
| Imply Term Term
| Forall Var Term
fonte