Tengo problemas cuando intento multiplicar números de la Iglesia con lambda.
En primer lugar, ¿funciona?
MULT := $\lambda$ mnfx.m ( PLUS n )
MULT := $\lambda$ mnfx.m ( m SUCC n )
MULT := $\lambda$ mnfx.m(m f(n f x))
Por lo tanto, si multiplico 3 ( $\lambda$ fx.f(f(f x))) y 4 ( $\lambda$ fx.f(f(f(f x)))), debería verse así cuando empiece:
- ( $\lambda$ mnfx.m(m f(n f x)))( $\lambda$ fx.f(f(f x)))( $\lambda$ fx.f(f(f(f x))))
= $\lambda$ fx. $\lambda$ fx.f(f(f x))( $\lambda$ fx.f(f(f x)) f( $\lambda$ fx.f(f(f(f x))) f x))
= $\lambda$ fx. $\lambda$ fx.f(f(f x))( $\lambda$ fx.f(f(f x)) f(f(f(f x)))))
Aquí es donde estoy confundido. ¿Hago ( $\lambda$ fx.f(f(f x)))[f := f(f(f(f(f x))))]? O ( $\lambda$ fx.f(f(f x)))[f := f][x := f(f(f(f x)))]?
- Si hago lo primero, entonces termino con:
= $\lambda$ fx. $\lambda$ fx.f(f(f x))( $\lambda$ fx.f(f(f x)) f(f(f(f x)))))
= $\lambda$ fx. $\lambda$ fx.f(f(f x))( $\lambda$ x.f(f(f(f(f x))))(f(f(f(f x))))(f(f(f(f x)))) x))
Y no estoy seguro de dónde ir desde allí, porque no tengo parámetros para la x.
- Si hago lo segundo, entonces termino con:
= $\lambda$ fx. $\lambda$ fx.f(f(f x))(f
= $\lambda$ fx.f(f(f(f(f(f(f(f(f x))))))))
o 3 * 4 = 8, por lo que no puede ser correcto.