Tôi có một câu trả lời cho câu hỏi này có thể là tiểu thuyết. Trên thực tế, tôi vẫn đang suy nghĩ về nó trong 6 tháng qua hoặc lâu hơn và nó chưa được viết trong các bài báo.
Luận điểm chung là các nguyên tắc lý luận quan hệ như "quan hệ logic", "mô phỏng" và thậm chí "bất biến" là những biểu hiện của sự trừu tượng hóa dữ liệu hoặc ẩn thông tin. Bất cứ nơi nào có thông tin ẩn, những nguyên tắc này mọc lên.
Những người đầu tiên phát hiện ra nó là các nhà lý thuyết automata. Automata có trạng thái ẩn. Vì vậy, bạn cần lý luận quan hệ để nói về sự tương đương của họ. Các nhà lý thuyết Automata đã vật lộn với sự đồng hình trong một thời gian, đã từ bỏ và đưa ra một khái niệm gọi là "bao trùm quan hệ", đó là một dạng của quan hệ mô phỏng.
Milner đã chọn ý tưởng này trong một bài báo ít được biết đến nhưng rất cơ bản có tên là " Một khái niệm đại số về mô phỏng giữa các chương trình " vào năm 1971. Hoare biết và sử dụng nó để đưa ra " Bằng chứng về tính chính xác của biểu diễn dữ liệu " vào năm 1972 (nhưng được sử dụng Chức năng trừu tượng thay vì quan hệ vì ông nghĩ rằng chúng "đơn giản hơn"). Sau đó, ông rút lại yêu cầu đơn giản và quay lại sử dụng các mối quan hệ trong "Tinh chỉnh dữ liệu được tinh chỉnh ". Reynold đã sử dụng lý luận quan hệ trong " Craft of Lập trình", Chương 5 (1981). Ông nghĩ rằng các mối quan hệ là tự nhiên và chung chung hơn các chức năng trừu tượng. Nếu bạn quay lại và đọc chương này, bạn sẽ thấy các ý tưởng tham số quan hệ lẩn khuất, chờ đợi để được khám phá. Chắc chắn, hai năm sau, Reynold đã xuất bản "Các loại, trừu tượng và đa hình tham số" (1983).
Có vẻ như tất cả những ý tưởng này không liên quan gì đến các loại, nhưng chúng thực sự làm được. Ngôn ngữ Stateful và các mô hình đã được xây dựng trong dữ liệu trừu tượng. Bạn không cần xác định "loại dữ liệu trừu tượng" để ẩn thông tin. Bạn chỉ cần khai báo một biến cục bộ và ẩn nó. Chúng tôi có thể dạy nó cho sinh viên năm thứ nhất trong các lớp Java trong vài tuần đầu tiên. Nhạt toẹt.
Mặt khác, các ngôn ngữ và mô hình chức năng phải lấy thông tin của chúng ẩn thông qua các loại . Các mô hình chức năng không có sự trừu tượng hóa dữ liệu tích hợp. Chúng ta phải thêm nó vào một cách rõ ràng, sử dụng hoặc ∃ . Vì vậy, nếu bạn dịch một ngôn ngữ trạng thái sang ngôn ngữ chức năng, bạn sẽ nhận thấy tất cả trạng thái cục bộ được dịch thành các biến loại. Để biết mô tả rõ ràng về cách thức hoạt động của nó, hãy xem bài viết " Đối tượng và các lớp trong các ngôn ngữ giống như Algol " của tôi, nhưng các ý tưởng thực sự đến từ Reynold 1981 ("Bản chất của Algol"). Chúng tôi chỉ hiểu những ý tưởng cổ điển tốt hơn bây giờ.∀∃
Hãy hai máy và M ' mà bạn muốn chứng minh tương đương. Milner 1971 nói, xác định một mối quan hệ giữa các bang M và M ' và cho thấy hai máy duy trì mối quan hệ. Reynolds parametricity nói, suy nghĩ của các trạng thái của máy là thuộc về loại X và X ' . Xác định mối quan hệ R giữa chúng. Nếu các máy thuộc loại F ( X ) và F (MM′MM′XX′RF(X) , tham số hóa bằng các loại của các quốc gia của họ, sau đó kiểm tra xem hai máy có liên quan bởi mối quan hệ FF(X′) . F(R)
Vì vậy, mô phỏng và tham số quan hệ về cơ bản là cùng một ý tưởng . Nó không chỉ đơn thuần là một sự tương đồng bề ngoài. Cái trước được tạo cho các ngôn ngữ có trạng thái nơi có sự trừu tượng hóa dữ liệu tích hợp. Loại thứ hai được tạo cho các ngôn ngữ không trạng thái nơi thu được dữ liệu trừu tượng thông qua các biến loại.
Thế còn quan hệ logic thì sao? Nhìn bề ngoài, quan hệ logic dường như là một ý tưởng tổng quát hơn. Trong khi tham số nói về cách liên hệ các biến loại trong cùng một mô hình, các mối quan hệ logic xuất hiện liên quan đến các loại trên các mô hình khác nhau. (Dave Clarke đã viết một giải trình tuyệt vời về điều này trước đó.) Nhưng cảm giác của tôi là (và nó vẫn cần phải được chứng minh) rằng đây là một ví dụ của một dạng tham số loại cao hơn chưa được hình thành. Hãy theo dõi để biết thêm tiến bộ trên mặt trận đó.
[Ghi chú thêm] Mối liên hệ giữa quan hệ logic và mô phỏng được thảo luận trong bài báo gần đây của chúng tôi Quan hệ logic và tham số: Một chương trình Reynold cho Lý thuyết danh mục và Ngôn ngữ lập trình .