Der Begriff Programminversion hat mehrere Bedeutungsschattierungen, wurde aber wahrscheinlich mit J. McCarthys 1956er Arbeit The Inversion of Functions Defined by Turing Machines im Kontext der KI begonnen. Inzwischen wurden viele Zusammenhänge zwischen Programminversion und anderen Bereichen entdeckt, z. B. reversible Programmierung (physikalisch und logisch), Teilbewertung, Verifizierung, bidirektionale Programmierung, Logikprogrammierung und maschinelles Lernen.
Was ist Programminversion? In erster Näherung ist es ungefähr so: Wenn ein Programm Argumente vom Typ und Ergebnisse vom Typ zurückgibt, erzeugen Sie ein Programm , das "irgendwie" die Umkehrung von . Ich bin hier absichtlich vage, da das Konzept auf verschiedene Weise geklärt werden kann (und wird): z. B. muss injektiv sein? Sollte alle oder nur einige so dass ?A B P - 1 P P P - 1 ( b ) a P ( a ) = b
Es gibt generische Möglichkeiten, ein Programm zu invertieren, z. B. die Diagonalisierung, wie bereits von McCarthy ausgeführt, oder die teilweise Bewertung, aber sie sind in der Regel nicht effizient. Außerdem scheinen sich die meisten mir bekannten Arbeiten zur Programminversion nicht mit vollständigen Programmiersprachen höherer Ordnung (dh -calculi) zu befassen.
Referenzanfrage. Was ist der Stand der Technik bei expliziten Algorithmen zur Programminversion von -calculi (ohne Einschränkung der höheren Orderness)?