MAYBE Initial complexity problem: 1: T: (?, 1) f2(a, b, c, d, e, f, g, h, i, j, k) -> f2(a, b, m, n, l, o, g, h, i, j, k) [ l >= 1 /\ b >= a + 1 ] (?, 1) f2(a, b, c, d, e, f, g, h, i, j, k) -> f2(a, b, m, n, l, o, g, h, i, j, k) [ 0 >= l + 1 /\ b >= a + 1 ] (?, 1) f2(a, b, c, d, e, f, g, h, i, j, k) -> f2(a, b, m, n, 0, f, g, h, i, j, k) [ b >= a + 1 ] (?, 1) f2(a, b, c, d, e, f, g, h, i, j, k) -> f300(a, b, m, n, e, f, l, h, i, j, k) [ a >= b ] (1, 1) f1(a, b, c, d, e, f, g, h, i, j, k) -> f2(a, b, c, d, e, f, g, m, n, n, m) start location: f1 leaf cost: 0 Slicing away variables that do not contribute to conditions from problem 1 leaves variables [a, b]. We thus obtain the following problem: 2: T: (1, 1) f1(a, b) -> f2(a, b) (?, 1) f2(a, b) -> f300(a, b) [ a >= b ] (?, 1) f2(a, b) -> f2(a, b) [ b >= a + 1 ] (?, 1) f2(a, b) -> f2(a, b) [ 0 >= l + 1 /\ b >= a + 1 ] (?, 1) f2(a, b) -> f2(a, b) [ l >= 1 /\ b >= a + 1 ] start location: f1 leaf cost: 0 Repeatedly removing leaves of the complexity graph in problem 2 produces the following problem: 3: T: (1, 1) f1(a, b) -> f2(a, b) (?, 1) f2(a, b) -> f2(a, b) [ b >= a + 1 ] (?, 1) f2(a, b) -> f2(a, b) [ 0 >= l + 1 /\ b >= a + 1 ] (?, 1) f2(a, b) -> f2(a, b) [ l >= 1 /\ b >= a + 1 ] start location: f1 leaf cost: 1 Complexity upper bound ? Time: 0.144 sec (SMT: 0.134 sec)