Definition
= the most general condition that, if true before , guarantees afterwards.

Core equivalence
is valid


Backward rules (compute inside-out)

constructrule
skip
assignment
sequence
conditional
whileneeds user-given invariant ; check , ,

Live example (same one every time)

Program: x:=x+1; y:=x*2
Post:

Hence code

Any other precondition stronger than also works; is the weakest.