MAYBE Initial complexity problem: 1: T: (1, 1) f2(a, b, c, d) -> f1(a, b, c, d) (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ e >= 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ 0 >= e + 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, b, 0, d) [ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a + 1, a, e, d) [ e >= 1 /\ b >= f /\ a = b ] (?, 1) f1(a, b, c, d) -> f1(a + 1, a, e, d) [ 0 >= e + 1 /\ b >= f /\ a = b ] (?, 1) f1(a, b, c, d) -> f1(a, a, 0, d) [ b >= e /\ a = b ] (?, 1) f1(a, b, c, d) -> f300(a, b, c, e) [ a >= b /\ a >= b + 1 ] (?, 1) f1(a, b, c, d) -> f300(a, b, c, e) [ a >= b /\ b >= a + 1 ] start location: f2 leaf cost: 0 Testing for unsatisfiable constraints removes the following transition from problem 1: f1(a, b, c, d) -> f300(a, b, c, e) [ a >= b /\ b >= a + 1 ] We thus obtain the following problem: 2: T: (1, 1) f2(a, b, c, d) -> f1(a, b, c, d) (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ e >= 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ 0 >= e + 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, b, 0, d) [ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a + 1, a, e, d) [ e >= 1 /\ b >= f /\ a = b ] (?, 1) f1(a, b, c, d) -> f1(a + 1, a, e, d) [ 0 >= e + 1 /\ b >= f /\ a = b ] (?, 1) f1(a, b, c, d) -> f1(a, a, 0, d) [ b >= e /\ a = b ] (?, 1) f1(a, b, c, d) -> f300(a, b, c, e) [ a >= b /\ a >= b + 1 ] 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) -> f1(a, b, c, d) (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ e >= 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ 0 >= e + 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, b, 0, d) [ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, a, 0, d) [ b >= e /\ a = b ] start location: f2 leaf cost: 3 A polynomial rank function with Pol(f2) = -V_1 + V_2 Pol(f1) = -V_1 + V_2 orients all transitions weakly and the transition f1(a, b, c, d) -> f1(a + 1, b, e, d) [ 0 >= e + 1 /\ b >= a + 1 ] strictly and produces the following problem: 4: T: (1, 1) f2(a, b, c, d) -> f1(a, b, c, d) (?, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ e >= 1 /\ b >= a + 1 ] (a + b, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ 0 >= e + 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, b, 0, d) [ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, a, 0, d) [ b >= e /\ a = b ] start location: f2 leaf cost: 3 A polynomial rank function with Pol(f2) = -V_1 + V_2 Pol(f1) = -V_1 + V_2 orients all transitions weakly and the transition f1(a, b, c, d) -> f1(a + 1, b, e, d) [ e >= 1 /\ b >= a + 1 ] strictly and produces the following problem: 5: T: (1, 1) f2(a, b, c, d) -> f1(a, b, c, d) (a + b, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ e >= 1 /\ b >= a + 1 ] (a + b, 1) f1(a, b, c, d) -> f1(a + 1, b, e, d) [ 0 >= e + 1 /\ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, b, 0, d) [ b >= a + 1 ] (?, 1) f1(a, b, c, d) -> f1(a, a, 0, d) [ b >= e /\ a = b ] start location: f2 leaf cost: 3 Complexity upper bound ? Time: 0.390 sec (SMT: 0.365 sec)