YES(?, 2*a + 2*b + 2*c + 207) Initial complexity problem: 1: T: (1, 1) evalterminatestart(a, b, c) -> evalterminateentryin(a, b, c) (?, 1) evalterminateentryin(a, b, c) -> evalterminatebb1in(b, a, c) (?, 1) evalterminatebb1in(a, b, c) -> evalterminatebbin(a, b, c) [ 100 >= b /\ a >= c ] (?, 1) evalterminatebb1in(a, b, c) -> evalterminatereturnin(a, b, c) [ b >= 101 ] (?, 1) evalterminatebb1in(a, b, c) -> evalterminatereturnin(a, b, c) [ c >= a + 1 ] (?, 1) evalterminatebbin(a, b, c) -> evalterminatebb1in(a - 1, c, b + 1) (?, 1) evalterminatereturnin(a, b, c) -> evalterminatestop(a, b, c) start location: evalterminatestart leaf cost: 0 Repeatedly removing leaves of the complexity graph in problem 1 produces the following problem: 2: T: (1, 1) evalterminatestart(a, b, c) -> evalterminateentryin(a, b, c) (?, 1) evalterminateentryin(a, b, c) -> evalterminatebb1in(b, a, c) (?, 1) evalterminatebb1in(a, b, c) -> evalterminatebbin(a, b, c) [ 100 >= b /\ a >= c ] (?, 1) evalterminatebbin(a, b, c) -> evalterminatebb1in(a - 1, c, b + 1) start location: evalterminatestart leaf cost: 3 Repeatedly propagating knowledge in problem 2 produces the following problem: 3: T: (1, 1) evalterminatestart(a, b, c) -> evalterminateentryin(a, b, c) (1, 1) evalterminateentryin(a, b, c) -> evalterminatebb1in(b, a, c) (?, 1) evalterminatebb1in(a, b, c) -> evalterminatebbin(a, b, c) [ 100 >= b /\ a >= c ] (?, 1) evalterminatebbin(a, b, c) -> evalterminatebb1in(a - 1, c, b + 1) start location: evalterminatestart leaf cost: 3 A polynomial rank function with Pol(evalterminatestart) = -V_1 + V_2 - V_3 + 101 Pol(evalterminateentryin) = -V_1 + V_2 - V_3 + 101 Pol(evalterminatebb1in) = V_1 - V_2 - V_3 + 101 Pol(evalterminatebbin) = V_1 - V_2 - V_3 + 100 orients all transitions weakly and the transition evalterminatebb1in(a, b, c) -> evalterminatebbin(a, b, c) [ 100 >= b /\ a >= c ] strictly and produces the following problem: 4: T: (1, 1) evalterminatestart(a, b, c) -> evalterminateentryin(a, b, c) (1, 1) evalterminateentryin(a, b, c) -> evalterminatebb1in(b, a, c) (a + b + c + 101, 1) evalterminatebb1in(a, b, c) -> evalterminatebbin(a, b, c) [ 100 >= b /\ a >= c ] (?, 1) evalterminatebbin(a, b, c) -> evalterminatebb1in(a - 1, c, b + 1) start location: evalterminatestart leaf cost: 3 Repeatedly propagating knowledge in problem 4 produces the following problem: 5: T: (1, 1) evalterminatestart(a, b, c) -> evalterminateentryin(a, b, c) (1, 1) evalterminateentryin(a, b, c) -> evalterminatebb1in(b, a, c) (a + b + c + 101, 1) evalterminatebb1in(a, b, c) -> evalterminatebbin(a, b, c) [ 100 >= b /\ a >= c ] (a + b + c + 101, 1) evalterminatebbin(a, b, c) -> evalterminatebb1in(a - 1, c, b + 1) start location: evalterminatestart leaf cost: 3 Complexity upper bound 2*a + 2*b + 2*c + 207 Time: 0.118 sec (SMT: 0.111 sec)