Thuật ngữ đảo ngược chương trình có nhiều sắc thái ý nghĩa, nhưng có lẽ đã bắt đầu với tác phẩm năm 1956 của J. McCarthy The Inversion of Function Defined by Turing Machines trong bối cảnh AI. Cho đến nay, nhiều kết nối giữa đảo ngược chương trình và các lĩnh vực khác đã được phát hiện, ví dụ lập trình đảo ngược (vật lý và logic), đánh giá một phần, xác minh, lập trình hai chiều, lập trình logic và học máy.
Chương trình đảo ngược là gì? Đánh giá ban đầu của nó một cái gì đó như thế này: Cho một chương trình dùng các tham số kiểu và trả kết quả của loại , tạo ra một chương trình đó là "bằng cách nào đó" nghịch đảo của . Tôi đang cố tình mơ hồ ở đây, vì khái niệm này có thể được (và) được làm rõ theo nhiều cách khác nhau: ví dụ có bắt buộc phải tiêm không? Có nên trả lại toàn bộ hay chỉ một số mà ?A B P - 1 P P P - 1 ( b ) a P ( a ) = b
Có những cách chung để đảo ngược một chương trình, ví dụ như sử dụng đường chéo như đã được McCarthy chỉ ra, hoặc sử dụng đánh giá một phần, nhưng chúng có xu hướng không hiệu quả. Ngoài ra, hầu hết các công việc về đảo ngược chương trình mà tôi quen thuộc dường như không đối phó với các ngôn ngữ lập trình bậc cao đầy đủ hơn (ví dụ -calculi).
Yêu cầu tham khảo. Trạng thái tiên tiến trong các thuật toán rõ ràng để đảo ngược chương trình của -calculi (không hạn chế về thứ tự cao hơn) là gì?