Le terme inversion de programme a plusieurs nuances de sens, mais a probablement commencé avec le travail de J. McCarthy de 1956, The Inversion of Functions Defined by Turing Machines dans le contexte de l'IA. À présent, de nombreuses connexions entre l'inversion de programme et d'autres domaines ont été découvertes, par exemple la programmation réversible (physique et logique), l'évaluation partielle, la vérification, la programmation bidirectionnelle, la programmation logique et l'apprentissage automatique.
Qu'est-ce que l'inversion de programme? En première approximation , il est quelque chose comme ceci: Étant donné un programme prenant des arguments de type A et le retour des résultats de type B , produire un programme P - 1 qui est « en quelque sorte » l'inverse de P . Je suis délibérément vague ici, car le concept peut être (et est) clarifié de diverses manières: par exemple, P doit-il être injectif? Faut - P - 1 ( b ) retourner tout ou seulement une partie d' une telle que P ( a ) = b?
Il existe des moyens génériques d'inverser un programme, par exemple en utilisant la diagonalisation comme déjà souligné par McCarthy, ou en utilisant une évaluation partielle, mais ils ont tendance à ne pas être efficaces. De plus, la plupart des travaux sur l'inversion de programmes que je connais ne semblent pas concerner les langages de programmation d'ordre supérieur (c'est-à-dire -calculi).
Demande de réference. Quel est l'état de l'art dans les algorithmes explicites pour l'inversion de programme des -calculi (sans restriction sur l'ordre supérieur)?