void abort() { }; extern int __VERIFIER_nondet_int(); void assume_abort_if_not(int cond) { if(!cond) {abort();} } /*@ requires ((\old(cond) != 0)) && (cond != 0); ensures ((\old(cond) != 0)) && (1); @*/ void __VERIFIER_assert(int cond) { if (!(cond)) { ERROR: {/*@ assert(0); */;} } return; } int counter = 0; /*@ requires ((counter == 0)); ensures ((\old(counter) == 0)); @*/ int main() { int n; long long a, s, t; n = __VERIFIER_nondet_int(); a = 0; s = 1; t = 1; /*@ loop invariant ((((((((__int128) a * 2) + ((__int128) a * a)) + 1) == s) && (\old(counter) == 0)) && (t == (((__int128) a * 2) + 1)))); @*/ while (counter++<2) { __VERIFIER_assert(t == 2*a + 1); __VERIFIER_assert(s == (a + 1) * (a + 1)); __VERIFIER_assert(t*t - 4*s + 2*t + 1 == 0); // the above 2 should be equiv to if (!(s <= n)) break; a = a + 1; t = t + 2; s = s + t; } __VERIFIER_assert(t == 2 * a + 1); __VERIFIER_assert(s == (a + 1) * (a + 1)); __VERIFIER_assert(t*t - 4*s + 2*t + 1 == 0); return 0; }