Entiendo que un número de Iglesia parece a (... n veces ...) . Esto no significa nada más que "la función aplicados veces a la función ". λ s . λ z . s ss n z
Una posible definición de la función es la siguiente: . Mirando el cuerpo, entiendo la lógica detrás de la función. Sin embargo, cuando comienzo a evaluar, me atoro. Lo ilustraré con un ejemplo:t i m e s = λ m . λ n . λ s . metro
Ahora, en esta situación, si primero aplico , obtengo el resultado deseado. Sin embargo, si aplico primero, como debería porque la aplicación es asociativa desde la izquierda, obtengo un resultado incorrecto:( λ z . s
Ya no puedo reducir esto. ¿Qué estoy haciendo mal? El resultado debería ser
Respuestas:
Creo que su reducción es correcta (sin embargo, solo la he analizado). Al final, no puede aplicar a , esto nunca aparece en el término. es , no . Las funciones en el cálculo lambda toman un solo argumento; se curry efectivamente : una función de dos argumentos se implementa como una función de un argumento que toma el primer argumento y devuelve una nueva función de un argumento que toma el segundo argumento y devuelve el resultado.z λ z . f f z λ z . ( f f ) z λ z . f ( f z )(λz.sssz) z λz.ffz λz.(ff)z λz.f(fz)
Cometiste el mismo error al definir los números de la Iglesia. El número de la Iglesia para se basa en componer una función veces. “La función aplicó veces a la función ” . Lo que escribiste es la función aplicada veces a la función finalmente a , lo que no me parece un término útil.n s n z λ s . λ z . s ( s ( ... sn n s n z s n - 1 s zλs.λz.s(s(…sz)…)) s n−1 s z
( λ m n s . M ( n s ) ) ( λ s z . S (2×3 es así . Te dejaré comprobar que se reduce a .λ s z . s ( s ( s ( s ( s ((λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz))) λsz.s(s(s(s(s(sz)))))
fuente