SLIDE 17 a practical case (V)
squares as sums of odd numbers
- Finally, we prove that the loop body preserves the invariant:
1
// t > (we are inside the loop!)
2
// r == (n - t) * (n - t) (invariant)
3
// s == 2 * (n - t) + 1 (invariant)
4
// r + s == (n - t) * (n - t) + 2 * (n - t) + 1 <=>
5
// r + 2 * (n - t) + 1 == (n - t) * (n - t) + 2 * (n - t) + 1 <=>
6
// r == (n - t) * (n - t) (as desired)
7
r = r + s;
8
// t > 0
9
// r == (n - t) * (n - t) + 2 * (n - t) + 1
10
// s + 2 == 2 * (n - t) + 3 <=> s == 2 * (n - t) + 1
11
s = s + 2;
12
// t - 1 >= 0 <=> t >= 1 <=> t > 0
13
// r == (n-t + 1) * (n-t + 1) == (n-t) * (n-t) + 2 * (n-t) + 1
14
// s == 2 * (n - t + 1) + 1 == 2 * (n - t) + 3
15
t = t - 1;
16
// t >= 0 (invariant)
17
// r == (n - t) * (n - t) (invariant)
18
// s == 2 * (n - t) + 1 (invariant)
Mari˜ no (Rigorous Software Development) Floyd-Hoare Logic for Program Verification October 2015 17 / 17