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 c
với điều kiện tiên quyết p
giữ trước khi nó chạy và hậu điều kiện q
giữ sau đó, một số điều kiện rời rạc r
nên giữ cả trước và sau khi c
chạ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à c
là 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 c
có, chúng ta có thể bỏ qua r
phầ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ù r
bâ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.