program-proofing

Definition

Strongest Postcondition

The strongest postcondition of a program and a precondition is the most specific (most restrictive) formula such that the Hoare triple is partially correct.

Equivalently, it is the set of states reached by executing from states satisfying :

If a postcondition is implied by , then is partially correct.

Formal Semantics

In terms of the set of states , the SP represents the image of the set of states satisfying under the execution of :

Correctness Relation

A specification is partially correct if and only if the strongest postcondition implies the desired postcondition :

Base Cases

For the empty program, the strongest postcondition is simply the precondition:

Similarly to the wlp, the strongest postcondition can be used to define the axiomatic semantics of a programming language for partial correctness.

Sequencing

Examples

Swapping Values

Let be two conditions with:

Show that following Hoare triple is partially correct:

is partially correct if .

Further, we can show that the computed postcondition implies :

Assignment with fresh variable

For an assignment , if does not occur in the precondition and does not occur in the expression , then

This is the simple case where the new value of the assigned variable can be added directly.

Examples

  • is not a valid simplification, because is overwritten.
  • is not a valid simplification, because occurs in .

If the freshness condition does not hold, one has to remember the old value of the assigned variable using a fresh existentially quantified variable.