Proving Correctness of Some Small Examples
In this demo we go through several examples and prove them correct using the Jahob system.
A Recursive Function
Consider the following recursive function:
private static int f(int x, int y)
{
if (y == 0) {
return 0;
} else {
if (y % 2 == 0) {
int z = f(x, y / 2);
return (2 * z);
} else {
return (x + f(x, y - 1));
}
}
}
- What does 'f' compute?
- How can we prove it?
An Iterative Example
private static int fi(int x, int y)
{
int r = 0;
int i = 0;
while
(i < y) {
i = i + 1;
r = r + x;
}
return r;
}
- How can we prove it?
- What is and is not inductive loop invariant in this example
A verification condition formula for preserving an invariant:
- we will see methods to prove such invariants
Transforming iterative version
- changing initial condition