void abort() { }; extern unsigned short __VERIFIER_nondet_ushort(); /*@ requires (1); ensures ((cond != 0)); @*/ 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() { short a; long long n, x, y, z; a = __VERIFIER_nondet_ushort(); assume_abort_if_not(a>=0 && a<=1); n = 0; x = 0; y = 1; z = 6; /*@ loop invariant (((((((((x == 0) && (a <= 1)) && (n == 0)) && (y == 1)) && (0 <= a)) && (z == 6)) || ((((((a <= 1) && (2 <= n)) && ((((__int128) n * 6) + 6) == z)) && ((((3 * ((__int128) n * n)) + ((__int128) n * 3)) + 1) == y)) && ((((__int128) n * n) * n) == x)) && (((__int128) z * x) == (((__int128) x * 12) + (((__int128) a * x) * 6))))) || ((((((z == 12) && (a <= 1)) && (7 == y)) && (x == 1)) && (0 <= a)) && (n == 1)))); @*/ while (1) { __VERIFIER_assert(z == 6 * n + 6); __VERIFIER_assert(y == 3 * n * n + 3 * n + 1); __VERIFIER_assert(x == n * n * n); __VERIFIER_assert(y*z - 18*x - 12*y + 2*z - 6 == 0); __VERIFIER_assert((z*z) - 12*y - 6*z + 12 == 0); if (!(n <= a)) break; n = n + 1; x = x + y; y = y + z; z = z + 6; } __VERIFIER_assert(z == 6*n + 6); __VERIFIER_assert(6*a*x - x*z + 12*x == 0); __VERIFIER_assert(a*z - 6*a - 2*y + 2*z - 10 == 0); __VERIFIER_assert(2*y*y - 3*x*z - 18*x - 10*y + 3*z - 10 == 0); __VERIFIER_assert(z*z - 12*y - 6*z + 12 == 0); __VERIFIER_assert(y*z - 18*x - 12*y + 2*z - 6 == 0); return 0; }