Quy tắc khung như một máy chủ thay đổi?


18

Một quy tắc khung , giống như quy tắc được đưa ra dưới đây, nắm bắt ý tưởng rằng, đưa ra một chương trình cvới điều kiện tiên quyết pgiữ trước khi nó chạy và hậu điều kiện qgiữ sau đó, một số điều kiện rời rạc rnên giữ cả trước và sau khi cchạy. (Liên *kết yêu cầu các đối số của nó tách rời nhau.) Thông thường, các điều kiện trước và sau là trạng thái của một đống, và clà một chương trình hiệu quả để sửa đổi heap theo một cách nào đó.

    {p} c {q}
----------------- (where no free variable in r is modified by c)
{p * r} c {q * r}

Các cuộc thảo luận về quy tắc khung mà tôi thấy dường như luôn tập trung vào cách phần rời rạc của heap r, được bảo tồn. Điều này cho phép "lý luận cục bộ": khi suy luận về hiệu ứng ccó, chúng ta có thể bỏ qua rphần heap và chỉ quan tâm đến phần thực sự thay đổi. Nhưng một cách khác để xem xét nó là sự thay đổi từ pđếnq được bảo tồn, mặc dù rbây giờ đang ngồi ở đó. Nói cách khác, điều quan trọng là chúng ta kết thúc với hậu điều kiện {q * r}, hơn là {q' * r}đối với một số người khác q'.

Vì vậy, câu hỏi của tôi là liệu có bất kỳ điều trị các nguyên tắc khung mà thảo luận hoặc làm cho việc sử dụng bảo quản-of-change-từ- p-to- qđiều.


Một câu trả lời cho câu hỏi của riêng tôi nằm trong bài báo này: software.imdea.org/~gotsman/ con / interproc-sas06.pdf , trong câu (nhấn mạnh của tôi) "Nếu P đảm bảo dấu chân của C được phân bổ, thì theo Frame, thực thi C có sự hiện diện của bộ nhớ bổ sung R dẫn đến cùng một hành vi và C không chạm vào bộ nhớ thêm. " Đó là "kết quả trong cùng một hành vi" mà tôi đang tìm kiếm ai đó chỉ ra, ngoài việc "C không chạm vào bộ nhớ thêm". (Cảm ơn @kaosjester đã liên kết.)
Lindsey Kuper

1
Nếu bạn đọc qua các bằng chứng âm thanh của quy tắc khung và các quy tắc khác của Logic phân tách, bạn sẽ phát hiện ra rằng họ đang làm chính xác những gì bạn đang theo sau, tức là, họ nói về cách thay đổi từ sang q . Đừng chú ý đến các thuộc tính địa phương và khung được đề cập ở đó. pq
Uday Reddy

Câu trả lời:


11

Nhưng tài sản không thay đổi qnày không thực sự nắm giữ!

Hãy xem xét {emp} x := alloc(0) {x |-> 0}. Bây giờ, nếu tôi đóng khung y |-> 3, tôi nhận được

{y |-> 3} x := alloc(0) {x |-> 0 * y |-> 3}

nhưng, theo quy luật hệ quả, tôi có thể thay đổi điều kiện hậu

{y |-> 3} x := alloc(0) {(x |-> 0 /\ x != y) * y |-> 3}

Để làm cho điều này cụ thể hơn, giả sử ylà số 37. Khi tôi chạy lệnh cấp phát trong một đống hoàn toàn trống, có thể tôi sẽ kết thúc việc phân bổ địa chỉ 37, vì vậy x = 37. Nhưng, nếu tôi thay vào đó bắt đầu với một đống chứa một ô duy nhất tại địa chỉ y = 37, kết quả này không còn có thể! Thêm một khung vào điều kiện tiên quyết đã cắt tỉa một số điều không đặc biệt trong hậu điều kiện.

Bài viết "Hành động cục bộ và logic phân tách trừu tượng" (Calcagno, O'Hearn và Yang) là tất cả về việc hiểu quy tắc khung từ góc độ ngữ nghĩa sâu sắc hơn. Định nghĩa chính của bài báo là địa phương cho "hành động", trong đó một hành động là (đại diện ngữ nghĩa của) một chương trình. Địa phương nói rằng khi bạn thêm vào một số đống khung hình, cách duy nhất mà hậu điều kiện ban đầu có thể được thay đổi là cắt tỉa một số điều không đặc biệt như trên. Và, trên thực tế, cắt tỉa chỉ phát sinh vì phân bổ.


Cảm ơn ví dụ và tham khảo! Ví dụ của bạn có ý nghĩa. Tuy nhiên, qcó công bằng không khi nói rằng điều đó chỉ có thể thay đổi thành " q, và cả ..."? Và, hơn nữa, nếu phân bổ là điều duy nhất có thể cắt tỉa tính không điều kiện trong hậu điều kiện (đó là một kết quả tuyệt vời trong chính nó), thì, nếu có một phần của điều kiện hậu độc lập, thì đó là một phần của điều kiện hậu Đảm bảo giữ nguyên? Chúng tôi có thể nói rằng postcondition giữ nguyên để đổi tên alpha của các địa điểm không? (Tôi có một ví dụ trong đầu, nhưng có lẽ điều này được giải thích tốt hơn qua email.)
Lindsey Kuper

1
Có, qchỉ có thể thay đổi thành " q, và cũng có thể ..." Nói cách khác, hậu điều kiện chỉ có thể trở nên mạnh mẽ hơn : nó sẽ bao hàm hậu quả ban đầu. Đây là một phần của định nghĩa về địa phương cho các hành động. Tuy nhiên, sự thật không phải là sự thay đổi đối với hậu điều kiện chỉ gắn liền với việc đổi tên. Trong ví dụ tôi đã đưa ra, thực tế thêm xykhác biệt là đúng bất kể địa chỉ cụ thể được chọn cho y. Ví dụ ghi lại sự mới mẻ của phân bổ, đó là bất biến khi đổi tên.
Aaron Turon

11

PQ

PR{h1h2|h1Ph2Rdom(h1)dom(h2)=}

Vì vậy, trong quy tắc khung

{P}c{Q}{PR}c{QR}

R (và và ) không nói về các đống cụ thể --- chúng là các thuộc tính của các đống (vì các tập con và các vị từ là tương đương). Cách tốt nhất để hiểu những gì đang diễn ra là bằng cách xem định nghĩa về ý nghĩa của bộ ba Hoare:PQ

{P}c{Q}h1P.hHeaps.t.h#h1.h2Q.h1h;ch2h;skip

Định nghĩa này về cơ bản nói rằng (1) nếu bạn chạy với bất kỳ nào trong , thì bạn sẽ hoàn thành ở một số trạng thái cuối cùng trong và (2) nếu bạn thêm vào bất kỳ bộ nhớ phụ nào , bộ nhớ đó sẽ không thay đổi vào cuối cuộc chạy Nhưng lưu ý rằng cụ thể mà bạn nhận được có thể khác nhau, đối với các lựa chọn khác nhau của --- điều được đảm bảo là các thuộc tính và sẽ tiếp tục được gia hạn, không phải là bạn có được kết quả chính xác như nhau.h 1 P h 2 Q h h 2 h P Qch1Ph2Qh h2h PQ

Không quá khó, nhưng vẫn đáng để thực hiện, để xem định nghĩa về bộ ba Hoare này ngụ ý rằng quy tắc khung giữ như thế nào. Như bạn lưu ý, đây là một loại thuộc tính "bảo toàn thay đổi" và nó có một biểu thức đặc biệt sinh động trong tuyên bố của quy tắc thành phần song song trong logic tách đồng thời:

{P1}c1{Q1}{P2}c2{Q2}{P1P2}c1||c2{Q1Q2}

Nếu và hoạt động trên các vùng bộ nhớ khác nhau, thì mỗi vùng sẽ không can thiệp vào các thuộc tính của thực thi của người khác khi chúng được chạy song song.c 2c1c2

Có một cuộc thảo luận về vấn đề này trong bài báo của Hoare et al, On Locality và Luật trao đổi về quy trình đồng thời , trong đó họ chỉ ra cách đưa ra một đại số hợp nhất của các chương trình và khẳng định.


Định nghĩa cho bộ ba Hoare có vẻ sai: Cần phải nói rằng việc thực thi không có lỗi, nó sẽ cho phép không chấm dứt, có lẽ không nên loại trừ các mô hình không có tính đơn điệu an toàn. (Nhưng, vâng, tôi đồng ý hoàn toàn hợp lý khi nói về "bảo toàn thay đổi" vì những lý do bạn giải thích.)
Radu GRIGore

3
(1) Tôi đã đưa ra ngữ nghĩa cho tổng ba lần chính xác và do đó, nó khẳng định rằng lệnh hoàn thành an toàn - Tôi thấy rằng tính chính xác hoàn toàn làm cho việc giải thích ký tự forall / tồn tại của các điều kiện trước và sau điều kiện dễ thấy hơn. (2) Ngữ nghĩa của bộ ba này thực sự được phát minh (IIRC bởi Birkedal và Yang) để xử lý các ngôn ngữ không có tính đơn điệu an toàn trong ngữ nghĩa ngôn ngữ, bằng cách xây dựng nó thành ý nghĩa của bộ ba. Kết quả là, bạn có thể có các cấu trúc không đơn điệu (ví dụ: truy vấn về mức độ lớn của heap) trong ngôn ngữ, trong khi vẫn có quy tắc khung cho logic Hoare.
Neel Krishnaswami

(1) OK, nhưng những bộ ba đó được viết khác nhau. (2) Tôi không biết điều đó. Để viết lại những gì bạn đã nói: không có sự đơn điệu, bạn có thể mất quy tắc khung và tiếp tục sử dụng bộ ba Hoare như bình thường, đó là những gì tôi đã nhận được trong nhận xét đầu tiên, nhưng bạn cũng có thể củng cố định nghĩa của bộ ba để bạn lấy lại quy tắc khung. (3) Tôi không thấy lý do tại sao nó ngăn chặn lỗi. Bạn có cho rằng là xác định? c
Radu GRIGore

1
Cảm ơn, Neel! Bạn nói đúng, tôi đã kết hợp các thuộc tính P và Q với các đống cụ thể. Vì vậy, để tổng hợp bình luận của bạn: Q được bảo tồn, nhưng đống cụ thể mà bạn có được ở cuối có thể là một khác nhau đống Q-thỏa mãn hơn bạn đã nhận được trước đó. Đúng?
Lindsey Kuper

1
@RaduGRIGore: vâng, tôi đã cho rằng ngôn ngữ mang tính quyết định và giả định này sẽ thất bại khi chúng ta thêm đồng thời. Bắt tốt đẹp!
Neel Krishnaswami

2

Mặc dù không liên quan 100%, nhưng điều này có hương vị của sự không hợp đồng.

Nếu chúng ta nghĩ {p} là điều kiện trước trên c và {q} là điều kiện hậu trên c, ý tưởng về quy tắc khung này sẽ đảm bảo rằng điều kiện trước và sau giữ trong mọi bối cảnh tính toán, không phải trường hợp đơn giản không có gì khác tồn tại.

Điều đó nói rằng, tôi không thể nói rằng tôi đã thấy một quy tắc khung như vậy được trình bày trong bất kỳ hàng tá giấy tờ hợp đồng nào tôi đã đọc. Đó chắc chắn là một ý tưởng tuyệt vời, tuy nhiên, và đòi hỏi một sự thay đổi như vậy có thể làm được rất nhiều đối với việc phát triển một sự hiểu biết hữu hình hợp lý của idempotent hợp đồng.


Cảm ơn đã bình luận. Hừm, thú vị - Tôi tự hỏi liệu có ai khác đọc cái này biết về các giấy tờ hợp đồng có thuộc tính khung không.
Lindsey Kuper
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.