Giả sử ta cần đặc tả phép thay đổ nội dung một bộ nhớ. Để đơn giản hĩa mà khơng làm mất tính được biểu diễn bởi sơ đồ sau :
1 0
2 0
3 0
bộ nhớ chỉ gồm 3 địa chỉ nhớ chứa 3 giá trị lúc đầu đều là 0 giả lệnh, làm thay đổi nội dung của bộ nhớ được ký hiệu bởi chg (x, y)
Ví dụ lệnh chg (2, 5) làm thay đổi địa chỉ thứ 2 từ giá trị 0 thành 5 :
1 0 1 0
2 0 chg (2, 5) 2 5
3 0 3 0
Như vậy, lệnh chg (x, y) đã thay đổi nội dung của địa chỉ x thành giá trị y và giữ nguyên nội dung của các địa chỉ cịn lại.
Gọi q là bộ nhớ lúc đầu và q’ là bộ nhớ nhận được sau khi thực hiện lệnh
chg (x, y), ta cĩ thể chuyển sơ đồ trên thành dạng điều kiện như sau :
Ta nĩi lệnh chg (x, y) đã chuyển bộ nhớ q thành q’.
Định nghĩa ngữ nghĩa của lệnh chg chính là đặc tả, nhờ viết điều kiện tương
đương với điều kiện (1.1)
Ví dụ sự kết hợp các điều kiện sau đây để đặc tả phép tốn thay đổi chg : q’ (x) = y
q’ (a) = q (a) nếu a ≠ x (1.2)
Như vậy ta đã ngầm ẩn thừa nhận rằng q và q’ chỉ định các hàm. Trong ví dụ này, với bộ nhớ 3 địa chỉ, miền xác định của hàm là tập hợp {1, 2, 3} tổng quát các địa chỉ và miền giá trị là các giá trị cĩ thể lưu trữ được trong bộ nhớ đang xét, chẳng hạn là tập hợp các số nguyên {-231, ..., 231} (1.3)
Một cách tổng quát, gọi A là tập hợp các địa chỉ, V là tập hợp các giá trị, ta cĩ: q ∈ A → V (1.4)
Như vậy một biểu thức dạng q (a) chỉ cĩ nghĩa nếu a ∈ A, từ đĩ q (a) chỉ cĩ nghĩa nếu a ∈ A, từ đĩ q (a) ∈ V. Do bộ nhớ q’ nhận được từ q sau khi thực hiện lệnh chg, q’ cũng thỏa mãn điều kiện (1.4)
q’ ∈ A → V
Tuy nhiên điều kiện (1.2) khơng phải ln ln cĩ nghĩa vì rằng biểu thức q’ (x) địi hỏi x ∈ A. Ta thấy điều kiện (1.1) dẫn đến (1.2) nhưng ngược lại khơng hồn tàon đúng.
Ta cĩ thể hạn chế các điều kiện (1.2) để cĩ được điều kiện tương đương như sau x ∈ A
y ∈ V
q’ (x) = y (1.5)
q’ (a) = q (a) với x ≠ a và x ∈ A
Trong (1.5), hai điều kiện đầu được gọi là điều kiện đầu (preconditions), hai điều kiện sau được gọi là các điều kiện sau (postconditions)
Ta cần kiểm tra (1.5) là chấp nhận được, nghĩa là cĩ điều kiện (1.4) là bất hiến (invariant). Muốn vậy ta cần chứng minh định lý sau đây :
((1.4) và (1.5)) kéo theo (1.4)’ (1.6)
Định lý về tính chấp nhận được (plausibility)
Ta cĩ thể nối hai điều kiện tương đương (1.1) và (1.5) q chg (x, y) q’
x ∈ A
Người ta nĩi q xác định trạng thái (state) của hệ thống, một điều kiện như (1.4) là một bất biến của hệ thống, (1.7) là đặc tả lệnh làm chuyển (tiến triển) trạng thái của hệ thống. Ở đây ta sử dụng các biến cĩ đánh dấu nháy để chỉ trạng thái của hệ thống sau khi chuyển đổi. Ta cũng nĩi một đặc tả là chấp nhận được (plausible) nếu đặc tả đĩ bảo tồn bất biến của hệ thống.
Nhận xét
Dễ dàng chứng minh định lý (1.6) nhưng cũng dễ dàng bước lại định lý bằng cách xét phản ví dụ sau :
1 0 1 0
2 0 chg (2, 5) 2 5
3 0 3 0
9 4 0
Rõ ràng ví dụ trên thỏa mãn các điều kiện (1.4) và (1.5) nhưng khơng thỏa mãn (1.4)’
Thực ra, lệnh chg (2, 5) thay đổi nội dung địa chỉ x (cho giá trị y) nhưng vẫn giữ nguyên các địa chỉ khác, nghĩa là kích thước bộ nhớ khơng thay đổi.