YES(?, 12*b + 8*b^2 + 5) Initial complexity problem: 1: T: (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) (?, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ 0 >= e + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ e >= 1 ] (?, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ] (?, 1) f4(a, b, c, d) -> f19(a, b, c, d) [ a >= b ] start location: f0 leaf cost: 0 Repeatedly removing leaves of the complexity graph in problem 1 produces the following problem: 2: T: (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) (?, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ 0 >= e + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ e >= 1 ] (?, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ] start location: f0 leaf cost: 1 A polynomial rank function with Pol(f0) = 2*V_2 - 1 Pol(f4) = -2*V_1 + 2*V_2 - 1 Pol(f7) = -2*V_1 + 2*V_2 - 2 orients all transitions weakly and the transition f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ] strictly and produces the following problem: 3: T: (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) (2*b + 1, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ 0 >= e + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ e >= 1 ] (?, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ] start location: f0 leaf cost: 1 A polynomial rank function with Pol(f7) = 1 Pol(f4) = 0 and size complexities S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ]", 0-0) = ? S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ]", 0-1) = ? S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ]", 0-2) = ? S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ]", 0-3) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ e >= 1 ]", 0-0) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ e >= 1 ]", 0-1) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ e >= 1 ]", 0-2) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ e >= 1 ]", 0-3) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ 0 >= e + 1 ]", 0-0) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ 0 >= e + 1 ]", 0-1) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ 0 >= e + 1 ]", 0-2) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\\ 0 >= e + 1 ]", 0-3) = ? S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ]", 0-0) = ? S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ]", 0-1) = ? S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ]", 0-2) = ? S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ]", 0-3) = 0 S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ]", 0-0) = ? S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ]", 0-1) = ? S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ]", 0-2) = ? S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ]", 0-3) = ? S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-0) = 0 S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-1) = b S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-2) = c S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-3) = d orients the transitions f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ] f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ e >= 1 ] f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ 0 >= e + 1 ] f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ] weakly and the transition f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ] strictly and produces the following problem: 4: T: (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) (2*b + 1, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ b >= a + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b >= c + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ 0 >= e + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b >= c + 1 /\ e >= 1 ] (2*b + 1, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ c >= b ] start location: f0 leaf cost: 1 Applied AI with 'oct' on problem 4 to obtain the following invariants: For symbol f4: X_1 >= 0 For symbol f7: X_2 - X_3 >= 0 /\ X_3 - 1 >= 0 /\ X_2 + X_3 - 2 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ -X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 1 >= 0 /\ -X_1 + X_2 - 1 >= 0 /\ X_1 >= 0 This yielded the following problem: 5: T: (2*b + 1, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ c >= b ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ e >= 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ 0 >= e + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 ] (2*b + 1, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\ b >= a + 1 ] (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) start location: f0 leaf cost: 1 A polynomial rank function with Pol(f7) = V_2 Pol(f4) = V_2 Pol(f0) = V_2 orients all transitions weakly and the transitions f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ e >= 1 ] f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ 0 >= e + 1 ] strictly and produces the following problem: 6: T: (2*b + 1, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ c >= b ] (b, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ e >= 1 ] (b, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ 0 >= e + 1 ] (?, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 ] (2*b + 1, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\ b >= a + 1 ] (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) start location: f0 leaf cost: 1 A polynomial rank function with Pol(f7) = V_2 - V_3 + 1 and size complexities S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-0) = 0 S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-1) = b S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-2) = c S("f0(a, b, c, d) -> f4(0, b, c, d)", 0-3) = d S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\\ b >= a + 1 ]", 0-0) = b S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\\ b >= a + 1 ]", 0-1) = b S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\\ b >= a + 1 ]", 0-2) = b S("f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\\ b >= a + 1 ]", 0-3) = ? S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 ]", 0-0) = b S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 ]", 0-1) = b S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 ]", 0-2) = b S("f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 ]", 0-3) = 0 S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ 0 >= e + 1 ]", 0-0) = b S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ 0 >= e + 1 ]", 0-1) = b S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ 0 >= e + 1 ]", 0-2) = b S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ 0 >= e + 1 ]", 0-3) = ? S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ e >= 1 ]", 0-0) = b S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ e >= 1 ]", 0-1) = b S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ e >= 1 ]", 0-2) = b S("f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ b >= c + 1 /\\ e >= 1 ]", 0-3) = ? S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ c >= b ]", 0-0) = b S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ c >= b ]", 0-1) = b S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ c >= b ]", 0-2) = b S("f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\\ c - 1 >= 0 /\\ b + c - 2 >= 0 /\\ a + c - 1 >= 0 /\\ -a + c - 1 >= 0 /\\ b - 1 >= 0 /\\ a + b - 1 >= 0 /\\ -a + b - 1 >= 0 /\\ a >= 0 /\\ c >= b ]", 0-3) = ? orients the transition f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 ] weakly and the transition f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 ] strictly and produces the following problem: 7: T: (2*b + 1, 1) f7(a, b, c, d) -> f4(a + 1, b, c, d) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ c >= b ] (b, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ e >= 1 ] (b, 1) f7(a, b, c, d) -> f7(a, b - 1, c, e) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 /\ 0 >= e + 1 ] (8*b^2 + 6*b + 1, 1) f7(a, b, c, d) -> f7(a, b, c + 1, 0) [ b - c >= 0 /\ c - 1 >= 0 /\ b + c - 2 >= 0 /\ a + c - 1 >= 0 /\ -a + c - 1 >= 0 /\ b - 1 >= 0 /\ a + b - 1 >= 0 /\ -a + b - 1 >= 0 /\ a >= 0 /\ b >= c + 1 ] (2*b + 1, 1) f4(a, b, c, d) -> f7(a, b, a + 1, d) [ a >= 0 /\ b >= a + 1 ] (1, 1) f0(a, b, c, d) -> f4(0, b, c, d) start location: f0 leaf cost: 1 Complexity upper bound 12*b + 8*b^2 + 5 Time: 0.615 sec (SMT: 0.576 sec)