YES(?, 42*a + 23) Initial complexity problem: 1: T: (1, 1) evalfstart(a, b, c) -> evalfentryin(a, b, c) (?, 1) evalfentryin(a, b, c) -> evalfbb3in(b, a, 0) [ a >= 1 /\ b >= 1 ] (?, 1) evalfbb3in(a, b, c) -> evalfreturnin(a, b, c) [ 0 >= b ] (?, 1) evalfbb3in(a, b, c) -> evalfbb4in(a, b, c) [ b >= 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ 0 >= d + 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ d >= 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfreturnin(a, b, c) (?, 1) evalfbbin(a, b, c) -> evalfbb1in(a, b, c) [ a >= c + 1 ] (?, 1) evalfbbin(a, b, c) -> evalfbb3in(a, b, 0) [ c >= a ] (?, 1) evalfbb1in(a, b, c) -> evalfbb3in(a, b - 1, c + 1) (?, 1) evalfreturnin(a, b, c) -> evalfstop(a, b, c) start location: evalfstart leaf cost: 0 Repeatedly removing leaves of the complexity graph in problem 1 produces the following problem: 2: T: (1, 1) evalfstart(a, b, c) -> evalfentryin(a, b, c) (?, 1) evalfentryin(a, b, c) -> evalfbb3in(b, a, 0) [ a >= 1 /\ b >= 1 ] (?, 1) evalfbb3in(a, b, c) -> evalfbb4in(a, b, c) [ b >= 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ 0 >= d + 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ d >= 1 ] (?, 1) evalfbbin(a, b, c) -> evalfbb1in(a, b, c) [ a >= c + 1 ] (?, 1) evalfbbin(a, b, c) -> evalfbb3in(a, b, 0) [ c >= a ] (?, 1) evalfbb1in(a, b, c) -> evalfbb3in(a, b - 1, c + 1) start location: evalfstart leaf cost: 3 Repeatedly propagating knowledge in problem 2 produces the following problem: 3: T: (1, 1) evalfstart(a, b, c) -> evalfentryin(a, b, c) (1, 1) evalfentryin(a, b, c) -> evalfbb3in(b, a, 0) [ a >= 1 /\ b >= 1 ] (?, 1) evalfbb3in(a, b, c) -> evalfbb4in(a, b, c) [ b >= 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ 0 >= d + 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ d >= 1 ] (?, 1) evalfbbin(a, b, c) -> evalfbb1in(a, b, c) [ a >= c + 1 ] (?, 1) evalfbbin(a, b, c) -> evalfbb3in(a, b, 0) [ c >= a ] (?, 1) evalfbb1in(a, b, c) -> evalfbb3in(a, b - 1, c + 1) start location: evalfstart leaf cost: 3 Applied AI with 'oct' on problem 3 to obtain the following invariants: For symbol evalfbb1in: X_1 - X_3 - 1 >= 0 /\ X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 For symbol evalfbb3in: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_1 - 1 >= 0 For symbol evalfbb4in: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 For symbol evalfbbin: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 This yielded the following problem: 4: T: (?, 1) evalfbb1in(a, b, c) -> evalfbb3in(a, b - 1, c + 1) [ a - c - 1 >= 0 /\ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 ] (?, 1) evalfbbin(a, b, c) -> evalfbb3in(a, b, 0) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ c >= a ] (?, 1) evalfbbin(a, b, c) -> evalfbb1in(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ a >= c + 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ d >= 1 ] (?, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ 0 >= d + 1 ] (?, 1) evalfbb3in(a, b, c) -> evalfbb4in(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ a - 1 >= 0 /\ b >= 1 ] (1, 1) evalfentryin(a, b, c) -> evalfbb3in(b, a, 0) [ a >= 1 /\ b >= 1 ] (1, 1) evalfstart(a, b, c) -> evalfentryin(a, b, c) start location: evalfstart leaf cost: 3 A polynomial rank function with Pol(evalfbb1in) = 7*V_2 + 3*V_3 - 6 Pol(evalfbb3in) = 7*V_2 + 3*V_3 - 3 Pol(evalfbbin) = 7*V_2 + 3*V_3 - 5 Pol(evalfbb4in) = 7*V_2 + 3*V_3 - 4 Pol(evalfentryin) = 7*V_1 - 3 Pol(evalfstart) = 7*V_1 - 3 orients all transitions weakly and the transitions evalfbbin(a, b, c) -> evalfbb3in(a, b, 0) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ c >= a ] evalfbbin(a, b, c) -> evalfbb1in(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ a >= c + 1 ] evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ d >= 1 ] evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ 0 >= d + 1 ] evalfbb3in(a, b, c) -> evalfbb4in(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ a - 1 >= 0 /\ b >= 1 ] evalfbb1in(a, b, c) -> evalfbb3in(a, b - 1, c + 1) [ a - c - 1 >= 0 /\ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 ] strictly and produces the following problem: 5: T: (7*a + 3, 1) evalfbb1in(a, b, c) -> evalfbb3in(a, b - 1, c + 1) [ a - c - 1 >= 0 /\ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 ] (7*a + 3, 1) evalfbbin(a, b, c) -> evalfbb3in(a, b, 0) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ c >= a ] (7*a + 3, 1) evalfbbin(a, b, c) -> evalfbb1in(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ a >= c + 1 ] (7*a + 3, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ d >= 1 ] (7*a + 3, 1) evalfbb4in(a, b, c) -> evalfbbin(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 2 >= 0 /\ a - 1 >= 0 /\ 0 >= d + 1 ] (7*a + 3, 1) evalfbb3in(a, b, c) -> evalfbb4in(a, b, c) [ c >= 0 /\ b + c - 1 >= 0 /\ a + c - 1 >= 0 /\ a - 1 >= 0 /\ b >= 1 ] (1, 1) evalfentryin(a, b, c) -> evalfbb3in(b, a, 0) [ a >= 1 /\ b >= 1 ] (1, 1) evalfstart(a, b, c) -> evalfentryin(a, b, c) start location: evalfstart leaf cost: 3 Complexity upper bound 42*a + 23 Time: 0.415 sec (SMT: 0.391 sec)