Cảm hứng cho câu hỏi này là câu hỏi (mơ hồ) sau đây: Ngôn ngữ lập trình / nền tảng logic để có AI có thể lý giải về mã nguồn của chính nó và sửa đổi nó là gì?
Điều này hoàn toàn không nghiêm ngặt, vì vậy đây là nỗ lực của tôi để rút ra một câu hỏi cụ thể từ nó. Có hai điều tôi quan tâm:
(A) Một ngôn ngữ lập trình P có thể biểu diễn và thao tác các chương trình của chính nó như một Chương trình kiểu dữ liệu (ví dụ như AST). (Nếu muốn, một đối tượng thuộc loại Chương trình có thể được chuyển đổi thành Chuỗi, là văn bản của chương trình hợp lệ trong ngôn ngữ đó. Điều này ngược lại với những gì trình biên dịch thực hiện.)
(B) Một phương pháp để lý giải về những gì một chương trình trong ngôn ngữ P làm. Đây là hai cấp độ tôi đang nghĩ về nó:
- Một ngôn ngữ khác Q (với các khả năng chứng minh định lý) mô hình hóa những gì một chương trình P làm. Nó sẽ có thể diễn đạt và chứng minh các tuyên bố như "kết quả của việc chạy Chương trình p là foo."
- Một cách để suy luận về những gì một chương trình p: Chương trình thực hiện trong P ngôn ngữ riêng của mình. (Vì vậy, chúng tôi đang lấy P = Q ở trên.)
Ở mức độ nào đã có một cái gì đó như thế này được thực hiện, hoặc tiến triển theo hướng này là gì? Những trở ngại thực tế là gì? Theo ý định ban đầu của câu hỏi, cách tốt nhất để chính thức hóa vấn đề là gì?
*
Như các câu trả lời cho thấy (cảm ơn!), Cả (A) và (B1) có thể được thực hiện một cách riêng biệt, mặc dù có vẻ như việc thực hiện chúng cùng nhau là một câu hỏi nghiên cứu nhiều hơn.
Đây là một số suy nghĩ đầu tiên của tôi về câu hỏi (cảnh báo: khá mơ hồ). Xem thêm ý kiến của tôi về câu trả lời của Martin Berger.
Tôi quan tâm đến ngôn ngữ lập trình mô hình hóa cùng một ngôn ngữ lập trình, thay vì ngôn ngữ đơn giản hơn (vì vậy P = Q ở trên). Đây sẽ là một "bằng chứng về khái niệm" của một chương trình có thể "lý do về mã nguồn của chính nó." Các ngôn ngữ lập trình được gõ một cách phụ thuộc có thể đảm bảo về kết quả đầu ra của các chức năng của nó, nhưng điều này không được tính là "lý do về mã nguồn của chính nó" bất kỳ hơn "Thế giới xin chào!" được tính là một quine trong một ngôn ngữ sẽ tự động in ra một chuỗi trần --- cần phải có một số loại trích dẫn / tự tham khảo. Tương tự ở đây là có một kiểu dữ liệu đại diện cho Chương trình.
Có vẻ như một dự án khá lớn - ngôn ngữ càng đơn giản, càng khó diễn đạt mọi thứ bên trong nó; ngôn ngữ càng phức tạp thì càng phải thực hiện nhiều công việc để mô hình hóa ngôn ngữ.
Theo tinh thần của Định lý đệ quy, một chương trình sau đó có thể "lấy" mã nguồn của chính nó và sửa đổi nó (nghĩa là xuất ra một phiên bản sửa đổi của chính nó). (B2) sau đó cho chúng tôi biết rằng chương trình sẽ có thể thể hiện sự đảm bảo về chương trình đã sửa đổi (điều này sẽ có thể lặp lại, nghĩa là, nó sẽ có thể diễn tả điều gì đó về tất cả các sửa đổi trong tương lai-?).