// verifast_options{disable_overflow_check target:ILP32} extern void abort(void); //@ requires true; //@ ensures true; void reach_error() //@ requires false; //@ ensures true; {} int sum(int n, int m) //@ requires true; //@ ensures (((((result == (2 + m)) && (2 == n)) || ((result <= m) && ((n + m) <= result))) || ((result == (m + 1)) && (n == 1))) || (2 < n)); { if (n <= 0) { return m + n; } else { return sum(n - 1, m + 1); } } int main(void) //@ requires module(sum_2x3_2__verifast_instrumented, true); //@ ensures junk(); { //@ open_module(); int a = 2; int b = 3; int result = sum(a, b); if (result != a + b) { ERROR: {reach_error();abort();} } return 0; }