Assume Guarantee Reasoning with Procedures
Procedures without parameters or results
Given
var x, y;
proc P() requires Pre(x,y) ensures Post(x,y) { c }
Suppose we verify
proc Q() { c1; P(); c2; }
We will reduce it to:
Postconditions that refer to pre state
var x : int; proc dec() requires x > 0 ensures x <= (old x) { x = x - 2; }
proc Q() { c1; dec(); c2; }
Procedures with Parameters
One way to derive rules: use assignments to reduce parameters to changes to global state.