MAYBE Initial complexity problem: 1: T: (1, 1) f2(a, b, c, d) -> f300(a, b, c, d) (?, 1) f300(a, b, c, d) -> f300(b - 1, b - 1, e, d) [ a >= 1 /\ b >= 1 /\ e >= 1 /\ b + a >= 1 ] (?, 1) f300(a, b, c, d) -> f300(b - 1, b - 1, e, d) [ a >= 1 /\ b >= 1 /\ 0 >= e + 1 /\ b + a >= 1 ] (?, 1) f300(a, b, c, d) -> f300(a - 1, a - 2, 0, d) [ a >= 1 /\ b + a >= 1 /\ b >= 1 ] (?, 1) f300(a, b, c, d) -> f1(a, b, c, e) [ a >= 1 /\ 0 >= b + a /\ b >= 1 ] (?, 1) f300(a, b, c, d) -> f1(a, b, c, e) [ b >= 1 /\ 0 >= a ] (?, 1) f300(a, b, c, d) -> f1(a, b, c, e) [ 0 >= b ] start location: f2 leaf cost: 0 Testing for unsatisfiable constraints removes the following transition from problem 1: f300(a, b, c, d) -> f1(a, b, c, e) [ a >= 1 /\ 0 >= b + a /\ b >= 1 ] We thus obtain the following problem: 2: T: (1, 1) f2(a, b, c, d) -> f300(a, b, c, d) (?, 1) f300(a, b, c, d) -> f300(b - 1, b - 1, e, d) [ a >= 1 /\ b >= 1 /\ e >= 1 /\ b + a >= 1 ] (?, 1) f300(a, b, c, d) -> f300(b - 1, b - 1, e, d) [ a >= 1 /\ b >= 1 /\ 0 >= e + 1 /\ b + a >= 1 ] (?, 1) f300(a, b, c, d) -> f300(a - 1, a - 2, 0, d) [ a >= 1 /\ b + a >= 1 /\ b >= 1 ] (?, 1) f300(a, b, c, d) -> f1(a, b, c, e) [ b >= 1 /\ 0 >= a ] (?, 1) f300(a, b, c, d) -> f1(a, b, c, e) [ 0 >= b ] start location: f2 leaf cost: 0 Repeatedly removing leaves of the complexity graph in problem 2 produces the following problem: 3: T: (1, 1) f2(a, b, c, d) -> f300(a, b, c, d) (?, 1) f300(a, b, c, d) -> f300(b - 1, b - 1, e, d) [ a >= 1 /\ b >= 1 /\ e >= 1 /\ b + a >= 1 ] (?, 1) f300(a, b, c, d) -> f300(b - 1, b - 1, e, d) [ a >= 1 /\ b >= 1 /\ 0 >= e + 1 /\ b + a >= 1 ] (?, 1) f300(a, b, c, d) -> f300(a - 1, a - 2, 0, d) [ a >= 1 /\ b + a >= 1 /\ b >= 1 ] start location: f2 leaf cost: 2 Complexity upper bound ? Time: 0.517 sec (SMT: 0.492 sec)