void abort() { }; extern int __VERIFIER_nondet_int(); void assume_abort_if_not(int cond) { if(!cond) {abort();} } /*@ requires ((cond != 0)) && (cond != 0); ensures ((cond != 0)) && (1); @*/ void __VERIFIER_assert(int cond) { if (!(cond)) { ERROR: {/*@ assert(0); */;} } return; } int main() { int n; long long a, s, t; n = __VERIFIER_nondet_int(); assume_abort_if_not(n>=0 && n<=50); a = 0; s = 1; t = 1; /*@ loop invariant (((((((__int128) a * 2) + ((__int128) a * a)) + 1) == s) && (t == (((__int128) a * 2) + 1)))); @*/ while (1) { __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; }