extern int __VERIFIER_nondet_int(); void abort() { }; /*@ requires (1); ensures ((((((((((((((((((((((((3 == \result) && (x == 3)) || ((19 == \result) && (19 == x))) || ((11 == \result) && (x == 11))) || ((x == 6) && (6 == \result))) || ((9 == \result) && (x == 9))) || ((x == 17) && (17 == \result))) || ((x == 18) && (18 == \result))) || ((2 == \result) && (x == 2))) || (20 < x)) || ((10 == \result) && (x == 10))) || ((5 == \result) && (5 == x))) || ((20 == \result) && (x == 20))) || ((8 == \result) && (x == 8))) || ((7 == \result) && (7 == x))) || ((12 == \result) && (x == 12))) || ((\result == 1) && (x == 1))) || ((14 == \result) && (x == 14))) || ((x == 4) && (4 == \result))) || ((x == 15) && (15 == \result))) || ((13 == \result) && (x == 13))) || ((x == 16) && (16 == \result))) || ((\result == 0) && (x == 0)))); @*/ int id(int x) { if (x==0) return 0; return id(x-1) + 1; } int main() { int input = 20; int result = id(input); if (result != 20) { ERROR: {/*@ assert(0); */;abort();} } }