¿Hay alguna técnica para resolver ecuaciones funcionales para funciones desconocidas en el cálculo lambda?
Supongamos que tengo la función de identidad definida extensivamente como tal:
(es decir, escribiendo una ecuación para el comportamiento esperado de esa función) y ahora quiero resolverlo por haciendo alguna transformación algebraica para obtener la fórmula intensional para esa función:
que indica cómo hace exactamente la función lo que se esperaba (es decir, cómo implementarla en el cálculo lambda).
Por supuesto, la función de identidad se usa solo como ejemplo. Estoy interesado en métodos más generales para resolver tales ecuaciones. En particular, me gustaría encontrar una función que satisfaga el siguiente requisito:
es decir, "inyecta" la función dada en la función lambda dada antes de su "cuerpo" (que es una expresión lambda arbitraria), posiblemente separándola y construyendo una nueva, para que se convierta un parámetro al que se aplica la función .( λ x . M ) M f
fuente
Creo que tengo una respuesta parcial, con respecto a la ecuación con la función de identidad:
Queremos resolverlo encontrando la fórmula para , que tendrá la forma con alguna expresión aún desconocida como su cuerpo. Vamos a sustituirlo por en la ecuación original:( λ p . M ) M II (λp.M) M I
luego aplique la función a en el lado izquierdo:x
¿Pero qué tenemos aquí? :> Esta ecuación es la fórmula para la expresión que estamos buscando, después de sustituir cada aparición de en ella con , y dice que después debería verse como el lado derecho :) En otras palabras, la función buscamos es:p xM p x
cuál por supuesto es la respuesta correcta :)
Probemos el mismo enfoque para encontrar la fórmula del combinador de . Queremos que funcione de tal manera que, cuando se aplique a sí mismo, se produzca aplicado a sí mismo:ω
Ahora vamos a encontrar la fórmula para , que es de la forma por alguna expresión aún desconocido . Sustituyendo esto en la ecuación obtenemos:( λ x . M ) Mω (λx.M) M
Al aplicarlo al parámetro en el lado izquierdo se obtiene la fórmula para :M
Esto dice que después de sustituir cada aparición de en con , produjo , por lo que podemos deducir que la expresión original antes de la sustitución debería haber sido , por lo que la función que estábamos buscando debería se parece a esto:M ω ωx M ω M xωω M xx
que es el caso :)
Sin embargo, tengo la sensación de que podría ser tan fácil solo porque el lado derecho ya estaba en la forma que estamos buscando.
fuente