• − Các kiểu tiên đề gán khác nhau.
• − Các tiên đề và quy tắc suy diễn cho một số cấu trúc ngơn ngữ lập trình
(khối, thủ tục).
• − Phân tích chương trình.
IV.1. Điều kiện trước yếu nhất và điều kiện sau mạnh nhất của một dãy lệnh dãy lệnh
Trong mục trước, ta đã ký hiệu :
− WE tập hợp các giá trị các biến của một chương trình thoả mãn điều kiện E,
− fP là hàm tính được bởi dãy các lệnh P của một chương trình.
Nếu fP được định nghĩa cho mọi giá trị của WE , P khơng quẩn và khơng thực hiện các phép tính vơ định (ví dụ chia cho 0) nếu điều kiện trước E thoả mãn. Tính chất này được ký hiệu là termEP.
Bây giờ ta xét phát biểu E {P} S. Ta cĩ các tính chất sau đây : (i) E {P} S là true nếu và chỉ nếu fP (WE) ⊆ WS
(ii) Nếu termEP thì :
E {P} S là true nếu và chỉ nếu WE ⊆ fP−1 (WS)
V
Víí dduủû 1155 ::
(1) Cho phát biểu (q > 0) { q := q+1 } (q > 0), trong đĩ q là biến duy nhất của chương trình. Ta cĩ :
WE = WS =N+ , fq := q+1(N+) = N+ −{1} ⊆ N+ ,
(2) Cho phát biểu (q ≥ 0) ∧ (y ≥ 0) { q := q div y } (q ≥ 0) ∧ (y ≥ 0), trong đĩ q và y là các biến duy nhất của chương trình. Ta cĩ :
WE = WS =N × N , fq := q div y (N × N) = N × N+ ⊂ WS ,
nhưng f−1
q: := q div y (N × N) = N × N+⊇⁄ WE
Trong trường hợp WE = fP−1 (WS), E là điều kiện trước yếu nhất (la plus faible
précondition) phải được thoả mãn trước khi thực hiện P để cho S được thoả mãn sau đĩ.
Thực tế, nếu E’ {P} S và termE ’P thì WE ’ ⊆ fP−1 (WS) = WE và như vậy E’ → E. Mặt khác, nếu fP(WE) = WS , S là điều kiện sau mạnh nhất (la plus forte
postcondition) phải được thoả mãn sau khi thực hiện P nếu E là đúng trước. Thực tế, nếu E {P} S’ thì fP(WE) = WS ⊆ WS ’ , như vậy S → S’.
Ta ký hiệu hai hàm fppre và fppost như sau :
− với một dãy lệnh và với một điều kiện sau, fppre trả về điều kiện trước yếu
nhất tương ứng
− với một điều kiện trước và một dãy lệnh, fppost trả về điều kiện sau sau mạnh
nhất tương ứng.
Chú ý rằng các hàm fppre(P, S) và fppost(E, P) được định nghĩa gần như tương đương.
Bây giờ ta sẽ trình bày các tính chất của các hàm fppre và fppost.