extern unsigned int __VERIFIER_nondet_uint(); void abort() { }; /*@ requires (1); ensures ((((((((unsigned long long) \result * 4294967295) + n) + m) % 4294967296) < 1) || (((((unsigned long long) 4294967295 * n) % 4294967296) <= 0) && (\result == m)))); @*/ unsigned int sum(unsigned int n, unsigned int m) { if (n == 0) { return m; } else { return sum(n - 1, m + 1); } } int main() { unsigned int a = __VERIFIER_nondet_uint(); unsigned int b = __VERIFIER_nondet_uint(); unsigned int result = sum(a, b); if (result != a + b) { ERROR: {/*@ assert(0); */;abort();} } }