No he leído esto en ninguna parte, pero así es como creo que podría haberse derivado:Y
Tengamos una función recursiva , quizás un factorial o algo así. Informalmente, definimos f como término pseudo-lambda donde f aparece en su propia definición:FFF
F= … F... f...
Primero, nos damos cuenta de que la llamada recursiva se puede factorizar como un parámetro:
F= ( λ r . ( ... r ... r ... ) )METROF
Ahora podríamos definir si solo tuviéramos una manera de pasarlo como un argumento para sí mismo. Esto no es posible, por supuesto, porque no tenemos f a mano. Lo que tenemos a la mano es M . Como M contiene todo lo que necesitamos para definir f , podemos tratar de pasar M como argumento en lugar de f e intentar reconstruir f a partir de él más adelante. Nuestro primer intento se ve así:FFMETROMETROfMff
f=(λr.(…r…r…))M(λr.(…r…r…))M
Sin embargo, esto no es completamente correcto. Antes, consiguió sustituido por r dentro de M . Pero ahora pasamos M en su lugar. Tenemos que arreglar de alguna manera todos los lugares en los que usamos r para que reconstruyen f de M . En realidad, esto no es nada difícil: ahora que sabemos que f = M M , en todas partes donde usamos r simplemente lo reemplazamos por ( r r ) .frMMrfMf=MMr(rr)
f=(λr.(…(rr)…(rr)…))M′(λr.(…(rr)…(rr)…))M′
Esta solución es buena, pero tuvimos que alterar dentro. Esto no es muy conveniente. Podemos hacer esto de manera más elegante sin tener que modificar M introduciendo otro λ que envía a M su argumento aplicado a sí mismo: Expresando M ′ como λ x . M ( x x ) obtenemosMMλMM′λx.M(xx)
f=(λx.(λr.(…r…r…))M(xx))(λx.(λr.(…r…r…))M(xx))
De esta manera, cuando se sustituye por x , M M se sustituye por r , que es, por definición, igual a f . ¡Esto nos da una definición no recursiva de f , expresada como un término lambda válido!MxMMrff
La transición a ahora es fácil. Podemos tomar un término lambda arbitrario en lugar de M y realizar este procedimiento en él. Entonces podemos factorizar M y definirYMM
Y=λm.(λx.m(xx))(λx.m(xx))
De hecho, reduce a f como lo definimos.YMf
Nota: He derivado como se define en la literatura. El combinador que has descrito es una variante de Y de llamada por valor de idiomas, a veces también llamado Z . Ver este artículo de Wikipedia .YYZ