Recordemos que el principal axioma del cálculo es:
Sin embargo, una computadora no puede identificar los términos -equivalentes tal y como lo hacemos con nuestra mente, se necesita del siguiente axioma en su lugar.
Una manera de ahorrarnos el lidiar con la -equivalencia es usar índices de Bruijn, donde, en lugar de nombrar a las variables, usamos números para representar la distancia que hay entre una variable ligada y su respectiva lambda.
type Ind = Int
data Expr
= Var Ind
| App Expr Expr
| Lam Expr| Cálculo λ (con nombres) | Cálculo λ (de Bruijn) | Haskell |
|---|---|---|
(Lam (Var 0)) | ||
(Lam (Lam (Var 1))) | ||
(Lam (Var 0)) == (Lam (Var 0)) |