Una evaluación de cálculo lambda con números de la Iglesia

10

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 scnλs.λz.ss n zszsnz

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 . metrotimestimes=λm.λn.λs.m(ns)

(λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)λs.(λs.λz.ssz)((λs.λz.sssz)s))λs.(λs.λz.ssz)(λz.sssz)λs.λz.(λz.sssz)(λz.sssz)z

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(λz.sssz)z(λz.sssz)(λz.sssz)

λs.λz.(λz.sssz)(λz.sssz)zλs.λz.(sss(λz.sssz))z

Ya no puedo reducir esto. ¿Qué estoy haciendo mal? El resultado debería serλs.λz.ssssssz

codd
fuente
Los números de la Iglesia en su término inicial no son correctos. 2 está representado por , no . λ s . λ z . s s zλs.λz.s(sz)λs.λz.ssz
Uday Reddy

Respuestas:

7

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 ( ... snnsnzs n - 1 s zλs.λz.s(s(sz)))sn1sz

( λ 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)))))

Gilles 'SO- deja de ser malvado'
fuente
En lo que respecta a su párrafo, tiene razón y yo lo sabía. Simplemente me llamó la atención que aplicar correctamente asociativo dio el resultado correcto. En cuanto al segundo párrafo: tienes razón. El uso de llaves no fue erróneo para mí, nuevamente debido a la asociatividad izquierda de la aplicación. ¡Reduciré todo de nuevo ahora y veré si mi falta de frenos causó mi error!
codd
Lo hizo. ¡Observar que mi notación implicaba un orden de aplicación incorrecto resolvió el problema! Aceptando tu respuesta.
codd