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


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.