YES(?, 2*a + 2*c + 12) Initial complexity problem: 1: T: (?, 1) start(a, b, c, d) -> stop(a, b, c, d) [ 0 >= a + 1 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> stop(a, b, c, d) [ 0 >= c + 1 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> stop(a, b, c, d) [ a >= 0 /\ a + 2 >= c /\ c >= 0 /\ c + 2 >= a /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> lbl81(a, b, c, d + 1) [ a >= 0 /\ c >= a + 3 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= c + 3 /\ c >= 0 /\ b = c /\ d = a ] (?, 1) lbl81(a, b, c, d) -> stop(a, b, c, d) [ c >= a + 3 /\ a >= 0 /\ d + 2 = c /\ b = c ] (?, 1) lbl81(a, b, c, d) -> lbl81(a, b, c, d + 1) [ c >= d + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] (?, 1) lbl81(a, b, c, d) -> lbl91(a, b + 1, c, d) [ d >= c + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] (?, 1) lbl91(a, b, c, d) -> stop(a, b, c, d) [ a >= c + 3 /\ c >= 0 /\ b + 2 = a /\ d = a ] (?, 1) lbl91(a, b, c, d) -> lbl81(a, b, c, d + 1) [ b >= a + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] (?, 1) lbl91(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= b + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] (1, 1) start0(a, b, c, d) -> start(a, c, c, a) start location: start0 leaf cost: 0 Testing for unsatisfiable constraints removes the following transitions from problem 1: lbl81(a, b, c, d) -> lbl91(a, b + 1, c, d) [ d >= c + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] lbl91(a, b, c, d) -> lbl81(a, b, c, d + 1) [ b >= a + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] We thus obtain the following problem: 2: T: (?, 1) start(a, b, c, d) -> stop(a, b, c, d) [ 0 >= a + 1 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> stop(a, b, c, d) [ 0 >= c + 1 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> stop(a, b, c, d) [ a >= 0 /\ a + 2 >= c /\ c >= 0 /\ c + 2 >= a /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> lbl81(a, b, c, d + 1) [ a >= 0 /\ c >= a + 3 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= c + 3 /\ c >= 0 /\ b = c /\ d = a ] (?, 1) lbl81(a, b, c, d) -> stop(a, b, c, d) [ c >= a + 3 /\ a >= 0 /\ d + 2 = c /\ b = c ] (?, 1) lbl81(a, b, c, d) -> lbl81(a, b, c, d + 1) [ c >= d + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] (?, 1) lbl91(a, b, c, d) -> stop(a, b, c, d) [ a >= c + 3 /\ c >= 0 /\ b + 2 = a /\ d = a ] (?, 1) lbl91(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= b + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] (1, 1) start0(a, b, c, d) -> start(a, c, c, a) start location: start0 leaf cost: 0 Repeatedly removing leaves of the complexity graph in problem 2 produces the following problem: 3: T: (?, 1) start(a, b, c, d) -> lbl81(a, b, c, d + 1) [ a >= 0 /\ c >= a + 3 /\ b = c /\ d = a ] (?, 1) start(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= c + 3 /\ c >= 0 /\ b = c /\ d = a ] (?, 1) lbl81(a, b, c, d) -> lbl81(a, b, c, d + 1) [ c >= d + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] (?, 1) lbl91(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= b + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] (1, 1) start0(a, b, c, d) -> start(a, c, c, a) start location: start0 leaf cost: 5 Repeatedly propagating knowledge in problem 3 produces the following problem: 4: T: (1, 1) start(a, b, c, d) -> lbl81(a, b, c, d + 1) [ a >= 0 /\ c >= a + 3 /\ b = c /\ d = a ] (1, 1) start(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= c + 3 /\ c >= 0 /\ b = c /\ d = a ] (?, 1) lbl81(a, b, c, d) -> lbl81(a, b, c, d + 1) [ c >= d + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] (?, 1) lbl91(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= b + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] (1, 1) start0(a, b, c, d) -> start(a, c, c, a) start location: start0 leaf cost: 5 A polynomial rank function with Pol(start) = 2*V_1 - V_2 + 2*V_3 - V_4 - 2 Pol(lbl81) = V_3 - V_4 - 1 Pol(lbl91) = 2*V_1 - V_2 - V_4 - 1 Pol(start0) = V_1 + V_3 - 2 orients all transitions weakly and the transitions lbl91(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= b + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] lbl81(a, b, c, d) -> lbl81(a, b, c, d + 1) [ c >= d + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] strictly and produces the following problem: 5: T: (1, 1) start(a, b, c, d) -> lbl81(a, b, c, d + 1) [ a >= 0 /\ c >= a + 3 /\ b = c /\ d = a ] (1, 1) start(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= c + 3 /\ c >= 0 /\ b = c /\ d = a ] (a + c + 2, 1) lbl81(a, b, c, d) -> lbl81(a, b, c, d + 1) [ c >= d + 3 /\ d >= a + 1 /\ a >= 0 /\ c >= d + 2 /\ b = c ] (a + c + 2, 1) lbl91(a, b, c, d) -> lbl91(a, b + 1, c, d) [ a >= b + 3 /\ a >= b + 2 /\ b >= c + 1 /\ c >= 0 /\ d = a ] (1, 1) start0(a, b, c, d) -> start(a, c, c, a) start location: start0 leaf cost: 5 Complexity upper bound 2*a + 2*c + 12 Time: 0.350 sec (SMT: 0.333 sec)