Slide 11.6: Example I of program correctness Slide 11.8: Example II of program correctness Home |
{x = X and y = Y} t := x; x := y; y := t; {x = Y and y = X}
We first compute wp(C, Q)
as follows:
wp(t:=x; x:=y; y:=t, x=Y and y=X) = wp(t:=x, wp(x:=y; y:=t, x=Y and y=X)) (Statement-lists) = wp(t:=x, wp(x:=y, wp(y:=t, x=Y and y=X))) (Statement-lists) = wp(t:=x, wp(x:=y, wp(y:=t, x=Y) and wp(y:=t, y=X))) (Conjunction) = wp(t:=x, wp(x:=y, wp(y:=t, x=Y)) and wp(x:=y, wp(y:=t, y=X))) (Conjunction) = wp(t:=x, wp(x:=y, wp(y:=t, x=Y))) and wp(t:=x, wp(x:=y, wp(y:=t, y=X))) (Conjunction)by distributivity of conjunction and the axiomatic semantics of statement-lists. Now
wp(t:=x, wp(x:=y, wp(y:=t, x=Y))) = wp(t:=x, wp(x:=y, x=Y)) (Assignment) = wp(t:=x, y=Y) (Assignment) = (y = Y) (Assignment)and
wp(t:=x, wp(x:=y, wp(y:=t, y=X))) = wp(t:=x, wp(x:=y, t=X)) (Assignment) = wp(t:=x, t=X) (Assignment) = (x = X) (Assignment)by the rule of substitution for assignments. Thus,
wp(t:=x; x:=y; y:=t, x=Y and y=X) = (x = X and y = Y)The second step is to show that
P → wp(C, Q)
.
But in this case P
actually equals the weakest precondition, since P = (x=X and y=Y)
.
Since P = wp(C, Q)
, clearly P → wp(C, Q)
.
The proof of correctness is complete.