Sự khác biệt giữa quan hệ logic và mô phỏng là gì?


29

Tôi là người mới bắt đầu làm việc về các phương pháp chứng minh tính tương đương của chương trình. Tôi đã đọc một vài bài viết về việc xác định quan hệ logic hoặc mô phỏng để chứng minh hai chương trình là tương đương nhau. Nhưng tôi khá bối rối về hai kỹ thuật này.

Tôi chỉ biết các mối quan hệ logic được xác định theo quy nạp trong khi các mô phỏng dựa trên sự cưỡng chế. Tại sao chúng được định nghĩa theo những cách như vậy? Ưu và nhược điểm của họ tương ứng là gì? Tôi nên chọn cái nào trong các tình huống khác nhau?


1
Bạn có thể muốn cung cấp các liên kết đến những giấy tờ bạn đã đọc. Điều này sẽ làm cho nó rõ ràng hơn những ví dụ cụ thể đang làm bạn bối rối.
Marc Hamann

1
Đối với các mối quan hệ logic, tôi đã đọc bài viết gần đây của Hur và Dreyer "Mối quan hệ logic của Kripke giữa ML và lắp ráp" (POPL'11). Ngoài ra, tôi đã đọc các chương cổ điển trong cuốn sách "Chủ đề nâng cao về các loại và ngôn ngữ lập trình" của Pierce. Tôi thấy các mối quan hệ logic được định nghĩa theo cách tự nhiên trên cấu trúc kiểu của ngôn ngữ, nhưng nếu ngôn ngữ không có cấu trúc kiểu (chẳng hạn như C) thì sao? (Có vẻ như một câu hỏi khác, tôi đoán vậy.)
Hongjin Liang

1
Để mô phỏng, tôi đã đọc bài báo gốc "Luật đại số cho chủ nghĩa không đồng nhất và đồng thời" của Hennessy và Milner. "Sự chia đôi nhỏ của Koutavas và Wand về lý luận về các chương trình mệnh lệnh bậc cao" (POPL'06) là không thể hiểu đối với tôi và tôi không chắc tại sao họ gọi phương pháp của họ là "bisimulation".
Hongjin Liang

3
sẽ tốt hơn nếu bạn bao gồm thông tin bạn đã cung cấp trong các bình luận trong bài viết. Bạn có thể chỉnh sửa câu hỏi của mình bằng cách nhấp vào liên kết chỉnh sửa bên dưới câu hỏi.
Kaveh

1
@HongjinLiang: Nếu bạn không có cấu trúc kiểu (hoặc nếu bạn có kiểu đệ quy), bạn có thể sử dụng các quan hệ logic được lập chỉ mục theo bước - với các quan hệ logic bạn sử dụng quy nạp trên các loại, với lập chỉ mục từng bước bạn thực hiện quy trình theo dõi. Bạn sẽ tìm thấy con trỏ trong tuyên bố nghiên cứu của Amal Ahmed: ccs.neu.edu/home/amal/ahmed-research.pdf . (Một tổng quan khác về nghiên cứu về quan hệ logic là bài nói chuyện này của Derek Dreyer và trong tuyên bố nghiên cứu của ông: mpi-sws.org/~dreyer/research.pdf ).
Blaisorblade

Câu trả lời:


20

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 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 MM ' 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 XX ' . Xác định mối quan hệ R giữa chúng. Nếu các máy thuộc loại F ( X )F (MMMMXXRF(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 .


Tôi đã tự hỏi liệu có đúng không khi nói rằng mối quan hệ được đề cập ở trên là cái gọi là nâng quan hệ của R đã cho F mô tả máy. F(R)Rfunctor F
Dave Clarke

@DaveClarke Vâng, đó là ý tưởng tương tự. Trong kiểu định nghĩa Reynold, mỗi hàm tạo kiểu được trang bị một hành động quan hệ liên kết, với mỗi quan hệ R : X X , một mối quan hệ tương ứng F ( R ) : F ( X ) F ( X ) thỏa mãn một số tiên đề. Trong một số cộng đồng khác, họ muốn lấy F ( R ) từ các nguyên tắc khác, từ đó họ gọi chúng là thang máy quan hệ . Chữ F (FR:XXF(R):F(X)F(X)F(R) họ sản xuất theo quy trình này sẽ là một hành động quan hệ theo nghĩa Reynold. F(R)
Uday Reddy

14

Một trong những khác biệt chính là quan hệ logic được sử dụng như một kỹ thuật để chỉ ra rằng một lớp chương trình (ví dụ: đầu vào cho trình biên dịch) tương ứng với một lớp chương trình khác (ví dụ: đầu ra của trình biên dịch), trong khi quan hệ mô phỏng được sử dụng để hiển thị sự tương ứng giữa hai chương trình.

Điểm giống nhau giữa hai khái niệm là cả hai đều xác định mối quan hệ được sử dụng để thể hiện sự tương ứng giữa hai thực thể khác nhau. Theo một nghĩa nào đó, người ta có thể nghĩ về một mối quan hệ logic như một mối quan hệ mô phỏng được xác định theo quy nạp theo cú pháp của các loại. Nhưng các loại quan hệ mô phỏng khác nhau tồn tại.

Quan hệ logic có thể được sử dụng để hiển thị sự tương ứng giữa một ngôn ngữ như ML và bản dịch của nó sang ngôn ngữ lắp ráp, như trong bài báo bạn đọc. Một mối quan hệ logic được xác định theo quy nạp trên cấu trúc kiểu. Một mối quan hệ logic cung cấp một phương tiện thành phần để hiển thị, ví dụ, bản dịch là chính xác, bằng cách chỉ ra rằng bản dịch là chính xác cho từng hàm tạo kiểu. Tại các loại hàm, điều kiện điều kiện chính xác sẽ nói như thế, bản dịch của hàm này lấy đầu vào được dịch tốt sang đầu ra được dịch tốt.

Quan hệ logic là một kỹ thuật linh hoạt cho các ngôn ngữ dựa trên phép tính lambda. Các ứng dụng khác của quan hệ logic bao gồm (từ đây ): mô tả tính xác định của lambda, định nghĩa ngữ nghĩa biểu thị liên quan, đặc trưng cho đa hình tham số, mô hình hóa giải nghĩa trừu tượng, xác minh biểu thức dữ liệu, xác định ngữ nghĩa trừu tượng hoàn toàn và mô hình hóa trạng thái địa phương theo ngôn ngữ bậc cao.

Quan hệ mô phỏng thường được sử dụng để hiển thị sự tương đương của hai chương trình. Thông thường các chương trình như vậy tạo ra một số loại quan sát, chẳng hạn như gửi tin nhắn trên các kênh. Một chương trình P mô phỏng Q khác nếu P có thể làm mọi thứ mà Q có thể làm, mặc dù có lẽ nhiều hơn.

Bisimulation, đại khái, là hai quan hệ mô phỏng đặt lại với nhau. Bạn chỉ ra rằng chương trình P và mô phỏng chương trình Q và chương trình Q có thể mô phỏng chương trình P và bạn có một phép chia đôi, mặc dù điều kiện bổ sung thường có mặt. Mục nhập của bisimulation của Wikipedia là một điểm khởi đầu tốt (chính xác hơn). Hàng ngàn biến thể của ý tưởng tồn tại, nhưng đó là một ý tưởng cơ bản đã được phát minh lại trong ít nhiều cùng một dạng khoa học máy tính, logic phương thức và lý thuyết mô hình. Bài viết của Sangiorgi cho một lịch sử tuyệt vời của ý tưởng.

Một bài báo thiết lập mối quan hệ giữa hai khái niệm là Lưu ý về mối quan hệ logic giữa ngữ nghĩa và cú pháp của Andy Forge, sử dụng các quan hệ logic, cuối cùng là một khái niệm ngữ nghĩa được định nghĩa về mặt cú pháp , để chứng minh một tính chất nhất định về tính lưỡng tính ứng dụng , đó là một khái niệm cú pháp thuần túy.


Cảm ơn rất nhiều cho lời giải thích chi tiết của bạn! Tôi sẽ đọc tài liệu tham khảo của bạn và cố gắng tìm ra các kết nối / sự khác biệt sâu sắc giữa hai.
Hongjin Liang

bạn có chắc chắn về câu lệnh "Bạn hiển thị chương trình P đó và mô phỏng chương trình Q và chương trình Q đó có thể mô phỏng chương trình P và bạn có một phép chia đôi."? Đặt A = (a. (B + c)) + (a.b + ac) và B = a.b + ac khi tôi có thể nói với A tương tự như B, B tương tự như A, nhưng A và B không giống nhau.
András Salamon

@ András: Bạn nói đúng. Tuyên bố của tôi không đủ chính xác. Sự khác biệt được trừu tượng hóa bằng cụm từ "Một số điều kiện bổ sung có thể có mặt".
Dave Clarke

Hennessy và Milner đã định nghĩa ba loại quan hệ tương đương trong bài báo gốc của họ để chia đôi và đưa ra một số ví dụ để minh họa cho sự khác biệt của họ. Tuyên bố ban đầu của bạn thực sự là một phương tiện trong bài báo của họ, yếu hơn so với phép chia đôi và mạnh hơn tương đương dấu vết. Tôi không chắc tương đương nào tốt hơn. Có lẽ nó phụ thuộc vào sử dụng thực tế.
Hongjin Liang

Mô phỏng cũng được sử dụng như một kỹ thuật chứng minh để thiết lập sàng lọc dữ liệu giữa hai loại dữ liệu. Mỗi một trong những bằng chứng mô phỏng đó liên quan đến toàn bộ các lớp chương trình. Xem ví dụ [1] để biết chi tiết. Điều này cho thấy rằng sự khác biệt giữa hai khái niệm thậm chí còn mờ hơn. [1]: CAR Hoare, He J và JW Sanders. Quy định trong sàng lọc dữ liệu. Thư xử lý thông tin , 25: 71-76, 1987.
Kai

8

Hai loại quan hệ dường như được sử dụng trong các bối cảnh khác nhau. Mô phỏng logic cho các ngôn ngữ được gõ và quan hệ mô phỏng khi xử lý các phép tính quy trình hoặc logic phương thức diễn giải trên các hệ thống chuyển tiếp. Dave Clarke đã cung cấp nhiều lời giải thích trực quan, vì vậy tôi sẽ chỉ thêm một vài gợi ý có thể giúp ích.

Đã có công việc mô tả đặc điểm của cả hai khái niệm bằng cách sử dụng giải thích trừu tượng. Nó có thể không phải là những gì bạn muốn, nhưng ít nhất cả hai khái niệm được xử lý trong cùng một khung toán học.

Samson Abramsky đã sử dụng các mối quan hệ logic để chứng minh tính đúng đắn và chấm dứt phân tích nghiêm ngặt đối với phép tính Lambda lười biếng ( Giải thích trừu tượng, Quan hệ logic và Mở rộng Kan ). Ông cũng chỉ ra rằng các mối quan hệ logic xác định các hàm trừu tượng theo nghĩa kết nối Galois của giải thích trừu tượng. Gần đây, Backhouse và Backhouse đã chỉ ra cách xây dựng các kết nối Galois cho các loại bậc cao hơn từ các kết nối Galois cho các loại cơ sở và các cấu trúc này có thể được mô tả tương đương bằng cách sử dụng các mối quan hệ logic ( Quan hệ logic và Kết nối Galois ). Do đó, trong bối cảnh cụ thể của các ngôn ngữ chức năng đánh máy, hai khái niệm là tương đương.

Quan hệ mô phỏng đặc trưng cho việc bảo quản tài sản giữa các cấu trúc Kripke cho các logic phương thức và thời gian khác nhau. Thay vì các loại, chúng ta có phương thức trong một logic. Quan hệ mô phỏng cũng xác định các kết nối Galois và do đó, trừu tượng hóa. Người ta có thể hỏi nếu những trừu tượng này có tính chất đặc biệt. Câu trả lời là trừu tượng tiêu chuẩn là trừu tượng dựa trên quan hệ âm thanh và mô phỏng đã hoàn tất. Khái niệm về sự hoàn thiện liên quan đến các kết nối Galois, có thể không đồng nhất với các giải thích trực quan. Dòng công việc này đã được phát triển bởi David Schmidt ( Quan hệ nhị phân bảo tồn cấu trúc cho trừu tượng chương trình ), và Francesco Ranzato và Francesco Tapparo ( Bảo tồn mạnh mẽ tổng quát bằng cách diễn giải trừu tượng ).


Câu trả lời của bạn rất hữu ích khi kết nối các khái niệm với giải thích trừu tượng. Cảm ơn bạn!
Hongjin Liang

Một câu hỏi chân thành: Tôi không phải là chuyên gia, nhưng không phải Reynold (1983, "Các loại, trừu tượng hóa và đa hình tham số") đã xác định các mối quan hệ logic là các kết nối Galois (Phần 6)? Sự khác biệt duy nhất tôi nhận thấy: anh ta không nói thuật ngữ "kết nối Galois" mà chỉ nói "điều chỉnh chức năng tương đương giữa các đơn hàng một phần được coi là danh mục" và anh ta giới hạn trong các miền. OTOH, Backhouse và Backhouse trích dẫn Reynold nhưng không thảo luận về yêu cầu này, bằng cách này hay cách khác.
Blaisorblade 11/03/2015

6

Tôi muốn nói rằng hai khái niệm này hơi mơ hồ. Cả hai đều là về quan hệ nhị phân của các cơ chế tính toán mà bằng cách nào đó thể hiện một khái niệm về bình đẳng. Quan hệ logic được xác định bằng cách tạo ra cấu trúc kiểu, trong khi mô phỏng có thể được xác định theo cách bạn muốn, nhưng thuật ngữ ám chỉ sự cưỡng chế.

π


Tài liệu tham khảo của bạn thực sự tốt đẹp! Tôi chưa từng nghe quan hệ logic cho các chương trình đồng thời trước đây. Cảm ơn bạn! Tôi đoán khó khăn của việc xác định mối quan hệ logic là trong việc tìm cấu trúc kiểu. Với cùng cấu trúc kiểu, một mối quan hệ logic có thể được xác định giữa các ngôn ngữ lập trình khác nhau. Mặt khác, một mô phỏng đòi hỏi các chương trình mô hình hóa bởi một hệ thống chuyển trạng thái, điều này có thể gây khó chịu nếu các chương trình được viết cho các mô hình trạng thái khác nhau.
Hongjin Liang

Xin chào! Có, việc tìm kiếm một cấu trúc kiểu thích hợp có thể không phải lúc nào cũng dễ dàng. Bạn có thể xác định mô phỏng bằng các hệ thống chuyển tiếp khác nhau cho hai phép tính bạn muốn so sánh. Người ta có thể lập luận rằng định nghĩa mô phỏng yếu thực hiện điều đó. Tất cả những gì bạn thực sự cần để xác định mô phỏng là mối quan hệ để so sánh các nhãn chuyển tiếp.
Martin Berger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.