El término inversión de programa tiene múltiples matices de significado, pero probablemente comenzó con el trabajo de J. McCarthy de 1956 La inversión de las funciones definidas por las máquinas de Turing en el contexto de la IA. Hasta ahora se han descubierto muchas conexiones entre la inversión del programa y otros campos, por ejemplo, programación reversible (física y lógica), evaluación parcial, verificación, programación bidireccional, programación lógica y aprendizaje automático.
¿Qué es la inversión del programa? En primera aproximación es algo como esto: Dado un programa tomar argumentos de tipo A y devolver resultados de tipo B , producir un programa de P - 1 que es "de alguna manera" el inverso de P . Estoy deliberadamente siendo vago aquí, ya que el concepto se puede (y se) aclara de varias maneras: por ejemplo, ¿se requiere que P sea inyectable? En caso de que P - 1 ( b ) devuelva todo o solo algo a tal que P ( a ) = b?
Hay formas genéricas de invertir un programa, por ejemplo, utilizando la diagonalización como ya señaló McCarthy, o utilizando una evaluación parcial, pero tienden a no ser eficientes. Además, la mayoría del trabajo sobre inversión de programas con el que estoy familiarizado no parece tratar con lenguajes de programación completos de orden superior (es decir, cálculos ).
Solicitud de referencia. ¿Cuál es el estado de la técnica en algoritmos explícitos para la inversión de programas decálculos λ (sin restricción en el orden superior)?