程序反转一词 具有多种含义,但可能始于麦卡锡(J. McCarthy)1956年的著作《图灵机在AI中定义的功能反转》。到目前为止,已经发现了程序反转和其他领域之间的许多联系,例如可逆编程(物理和逻辑),部分评估,验证,双向编程,逻辑编程和机器学习。
什么是程序反转?在第一个近似中,它是这样的:给定程序接受类型参数 并返回类型结果,产生一个程序,它“某种程度上”是的逆。我故意在这里含糊不清,因为可以用多种方式(和已经)阐明这个概念:例如,必须是内射的?是否应 返回所有或部分,使得?B P − 1 P P P − 1(b )a P (a )= b
有一些通用的方法可以使程序求逆,例如使用麦卡锡已经指出的对角化或使用部分评估,但它们往往效率不高。同样,我熟悉的大多数程序反转工作似乎都无法处理完整的高阶编程语言(即 -calculi)。
参考要求。用于 -calculi的程序求逆的显式算法的最新技术是什么(不限制高阶)?