Hoare logic - tổng số chính xác của các vòng lặp


7

Xem xét một vòng lặp while của mẫu:

while (C) {S}

với điều kiện và phần thân của vòng lặp.CS

Đặt và tương ứng là một bất biến và một biến thể của vòng lặp này. Quy tắc về tính chính xác của vòng lặp while được đưa ra trong sách giáo khoa của tôi bằng cách:IV

NếuIV0

[ICV=v0]S[IV<v0]

Sau đó[I]while (C) {S}[I¬C]

Từ những gì tôi nghĩ tôi hiểu, để vòng lặp chấm dứt, biến thể phải giảm nghiêm ngặt và nó cũng phải được giới hạn bởi số không. Tuy nhiên, khi tôi dịch nó theo toán học, tôi có được một đề xuất khác với sách giáo khoa của mình: V

[V0V=v0]S[V0V<v0]

Câu hỏi của tôi : Đây có phải là đề xuất cuối cùng và quy tắc trong sách giáo khoa của tôi nói cùng một điều về những gì cần phải được chứng minh để vòng lặp chấm dứt? Nói cách khác: là

[ICV0V=v0]S[IV0V<v0]

giống như

IV0 cùng với[ICV=v0]S[IV<v0]

Tại sao hay tại sao không?


Khiếu nại rằng "phải giảm nghiêm ngặt và nó cũng phải bị giới hạn bởi số 0" là đủ gây hiểu lầm. Bạn cũng cần 𝚅 là một hàm có phạm vi được thiết lập tốt. Thay vào đó, chỉ cần tưởng tượng sử dụng các số hữu tỷ không âm và xây dựng một ví dụ ngược.
Kai

Câu trả lời:


4

Chúng tương đương nhau, theo nghĩa là mỗi khi bạn có thể áp dụng quy tắc sách giáo khoa, bạn cũng có thể áp dụng quy tắc của riêng mình và ngược lại. Bất biến cho hai quy tắc là tương tự nhau, nhưng không giống nhau.

Chuyển đổi một thể hiện quy tắc sách giáo khoa thành một thể hiện của quy tắc của bạn

Giả sử chúng tôi có một ứng dụng hoặc quy tắc sách giáo khoa của bạn. Tức là, chúng tôi đã tìm thấy một số trong đó:I

IV0 cùng với[ICV=v0]S[IV<v0]

Sau đó, nhờ hàm ý ở trên, chúng ta cũng có . Sử dụng quy tắc PrePost, chúng tôi có thể viết lại bất biến thành tương đương và chúng tôi nhận được một ứng dụng quy tắc của bạn:IIV0

[ICV0V=v0]S[IV0V<v0]

Ở đây, chúng tôi sử dụng cùng một bất biến như trong quy tắc sách giáo khoa.

Chuyển đổi một thể hiện của quy tắc của bạn thành một thể hiện quy tắc sách giáo khoa

Bây giờ, cho hướng ngược lại. Giả sử chúng tôi đã tìm thấy cho quy tắc của bạn:I

[ICV0V=v0]S[IV0V<v0]

Bây giờ, chúng ta không thể giả sử , vì vậy chúng ta không thể sử dụng cho quy tắc sách giáo khoa. Tuy nhiên, chúng ta có thể sử dụng như một bất biến mới . Chúng tôi tầm thường có bằng cách xây dựng (*). Hơn nữa, từ giả thuyếtIV0II:=IV0IV0

[ICV0V=v0]S[IV0V<v0]

chúng ta có thể có được (bằng PrePost)

[ICV=v0]S[IV<v0] (**)

Thuộc tính (*) và (**) chính xác là những gì chúng ta cần để áp dụng quy tắc sách giáo khoa.

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.