Ich interessiere mich für die Alpha-Äquivalenzbeziehung in Sprachen mit variablen Bindungen, wie zum Beispiel:
t := x:y 'x belong to y'
| bot 'False'
| t -> t 'implication'
| Ax.t 'forall x, t'
Oder der reine Lambda-Kalkül:
t := x 'variable'
| (t t) 'application '
| Lx.t 'abstraction: \x -> t'
Ich suche nach einem Algorithmus, mit dem ich feststellen kann, ob zwei Begriffe der Sprache Alpha-äquivalent sind oder nicht. Jede veröffentlichte Referenz ist ebenfalls sehr willkommen. Ich gehe von einer Datendarstellung der Begriffe als rekursiven Standardtyp aus, zum Beispiel in Haskell:
newtype Var = Var Int
data Term = Belong Var Var
| Bot
| Imply Term Term
| Forall Var Term