Tôi quan tâm đến khái niệm "sự hoàn thiện của T -Turing", như được định nghĩa bởi Axelsen và Glück (2011) . Một hệ thống hoàn thành r-Turing nếu nó có thể tính toán cùng một bộ chức năng như một máy Turing có thể đảo ngược mà không tạo ra bất kỳ dữ liệu "rác" nào. Điều này giống như việc có thể tính toán mọi chức năng là cả (a) tính toán và (b) tiêm.
Tôi muốn tính toán khám phá không gian của các hàm tiêm có thể tính toán được. Để thực hiện điều này, tôi đang tìm kiếm ngôn ngữ lập trình có thể đảo ngược "tối thiểu nhất" --- thứ gì đó có thể đóng vai trò tương đương với khả năng tính toán r-Turing mà tính toán lambda đóng cho tính toán Turing.
Tôi biết rằng có nhiều ngôn ngữ có thể đảo ngược mà mọi người đã phát triển và chứng minh là hoàn thành. Tuy nhiên, những điều này đang được phát triển với các ứng dụng thực tế trong tâm trí, và vì vậy các tác giả của họ tập trung vào việc cung cấp cho họ các tính năng biểu cảm hơn là làm cho chúng tối thiểu.
Có ai biết nếu một ngôn ngữ đảo ngược tối thiểu như vậy đã được mô tả, hoặc liệu có bất kỳ nghiên cứu theo hướng như vậy? Tôi khá mới đối với các tài liệu về chủ đề này, vì vậy tôi có thể dễ dàng bỏ qua nó. Ngoài ra, có ai có cái nhìn sâu sắc về cách một ngôn ngữ như vậy có thể được tạo ra?
Dưới đây là một bản tóm tắt về những gì tôi đang tìm kiếm. Tôi không biết liệu nó có thể được tạo ra hay không bằng cách sửa đổi phép tính lambda, hoặc liệu một loại ngôn ngữ hoàn toàn khác sẽ phải được sử dụng.
- r-Turing ngôn ngữ hoàn chỉnh - tính toán tất cả các hàm khả nghịch có thể tính toán và chỉ có thể tính toán các hàm khả nghịch
- Cú pháp và ngữ nghĩa tối thiểu nhất có thể. (Ví dụ: tính toán Lambda chỉ có các định nghĩa và ứng dụng chức năng, và không có gì khác.) Không cần thiết cho cú pháp hoặc ngữ nghĩa liên quan đến các tính toán của lambda, mặc dù chúng có thể.
- Chương trình = dữ liệu. Đó là, các chương trình hoạt động trên các biểu thức chứ không phải bất kỳ loại dữ liệu nào khác. Điều này đảm bảo rằng đầu ra của chương trình luôn có thể được hiểu là một chương trình. Điều này có lẽ ngụ ý rằng nó phải là một chức năng chứ không phải là một phong cách bắt buộc của ngôn ngữ.
- Có một số cách có hệ thống để chuyển đổi một chương trình thành nghịch đảo của nó, không liên quan đến tính toán nhiều hơn so với việc thực hiện tính toán nghịch đảo. (Không phải tất cả các ngôn ngữ không thể đảo ngược đều có thuộc tính này, nhưng một số ngôn ngữ thì có.)
Tôi nên nhấn mạnh rằng cách tiếp cận của Axelsen và Glück đối với điện toán đảo ngược hoàn toàn khác với cách tiếp cận nổi tiếng do Bennett, nơi một chương trình (nói chung không thể đảo ngược) được thực hiện bằng cách trả lại một số thông tin về lịch sử tính toán cùng với đầu ra. r-Turing tính đầy đủ là về khả năng tính toán các hàm tiêm mà không cần bất kỳ đầu ra bổ sung nào. Có một số thứ gọi là biến thể của "phép tính lambda có thể đảo ngược" có thể đảo ngược theo nghĩa của Bennet - đó không phải là thứ tôi đang tìm kiếm.