Термін "інверсія програми" має декілька відтінків значення, але, ймовірно, розпочався з роботи Дж. Маккарті 1956 р . Інверсія функцій, визначених машинами Тьюрінга в контексті ШІ. На сьогоднішній день виявлено багато зв'язків між інверсією програми та іншими сферами, наприклад, оборотне програмування (фізичне та логічне), часткове оцінювання, перевірка, двонаправлене програмування, логічне програмування та машинне навчання.
Що таке інверсія програми? У першому наближенні це що - щось на зразок цього: З огляду на програму приймають аргументи типу і повертати результати типу , виробляють програми , який «як - то» зворотний . Я навмисно маю тут розпливчастість, оскільки концепція може бути (і є) роз'яснена різними способами: наприклад, чи потрібно бути ін'єкційним? Повинен повернути все або тільки деякі такі , що ?
Існують загальні способи інвертування програми, наприклад, за допомогою діагоналізації, як уже вказував Маккарті, або з використанням часткової оцінки, але вони, як правило, не є ефективними. Крім того, більшість робіт з інверсії програм, з якими я знайомий, не здається мати справу з повною мовою програмування вищого порядку (тобто -calculi).
Довідковий запит. Який найсучасніший у явних алгоритмах програмної інверсії -calculi (без обмеження для вищого порядку)?