Termin inwersja programu ma wiele odcieni znaczenia, ale prawdopodobnie zaczął się od pracy J. McCarthy'ego z 1956 r. Inwersja funkcji zdefiniowanych przez maszyny Turinga w kontekście sztucznej inteligencji. Do tej pory odkryto wiele połączeń między inwersją programu a innymi polami, np. Programowanie odwracalne (fizyczne i logiczne), częściowa ocena, weryfikacja, programowanie dwukierunkowe, programowanie logiki i uczenie maszynowe.
Co to jest inwersja programu? W pierwszym przybliżeniu jest to coś takiego: Biorąc pod uwagę program biorąc argumenty typu i zwracania wyników typu , produkować program , który jest „jakoś” odwrotność . Celowo jestem tutaj niejasny, ponieważ pojęcie to można (i jest) wyjaśnić na różne sposoby: np. Czy musi być iniekcyjne? Czy należy zwrócić wszystkie, czy tylko niektóre takie, że ?
Istnieją ogólne sposoby odwracania programu, np. Użycie diagonalizacji, jak już wskazał McCarthy, lub częściowa ocena, ale zwykle nie są one skuteczne. Również większość prac nad inwersją programów, które znam, nie dotyczy pełnych języków programowania wyższego rzędu (tj. -calculi).
Wniosek o referencję. Jaki jest stan techniki w jawnych algorytmach do odwracania programu -calculi (bez ograniczeń wyższych rzędów)?