Il termine inversione di programma ha molteplici sfumature di significato, ma probabilmente è iniziato con il lavoro di J. McCarthy del 1956 The Inversion of Functions definito da Turing Machines nel contesto dell'IA. Ormai sono state scoperte molte connessioni tra inversione di programma e altri campi, ad esempio programmazione reversibile (fisica e logica), valutazione parziale, verifica, programmazione bidirezionale, programmazione logica e apprendimento automatico.
Che cos'è l'inversione del programma? In prima approssimazione si tratta di qualcosa di simile: Dato un programma prendendo argomenti di tipo A e di restituire i risultati di tipo B , produrre un programma P - 1 che è "in qualche modo" l'inverso di P . Sono deliberatamente vago qui, dal momento che il concetto può essere (ed è) chiarito in vari modi: ad esempio, deve essere iniettivo? dovrebbe restituire tutto o solo alcuni tale che ?
Esistono modi generici di invertire un programma, ad esempio utilizzando la diagonalizzazione come già sottolineato da McCarthy o utilizzando una valutazione parziale, ma tendono a non essere efficienti. Inoltre, la maggior parte dei lavori sull'inversione del programma con cui ho familiarità non sembra avere a che fare con linguaggi di programmazione di ordine superiore (ad esempio -calculi).
Richiesta di riferimento Qual è lo stato dell'arte degli algoritmi espliciti per l'inversione del programma di -calculi (senza alcuna limitazione sull'ordine superiore)?