Introductory Example for Abstract Interpretation
Prove that this program (in simple programming language) never reports error:
N = 20;
i = N;
x = 2;
while (i > 0) {
x = x + 4;
i = i - 1;
}
if (x==0) {
error; // assert(false)
} else {
y = 1000/x;
}
Solutions we know so far:
- execute program (what if N=2000000)? What if N is not known?
- symbolically execute program (how many times will we go through loop?)
- provide sufficient loop invariant
- what is loop invariant suficient to prove x!=0 after loop?
- today: steps towards computing it