2.34/2.42 MAYBE 2.34/2.42 2.34/2.42 DP problem for innermost termination. 2.34/2.42 P = 2.34/2.42 cond2#(false, x, y) -> ack#(x - 1, ack(x, y - 1)) 2.34/2.42 cond2#(false, x, y) -> ack#(x, y - 1) 2.34/2.42 cond2#(true, I0, I1) -> ack#(I0 - 1, I1 + 1) 2.34/2.42 cond1#(false, I2, I3) -> cond2#(I3 = 0, I2, I3) 2.34/2.42 ackNat#(true, I8, I9) -> cond1#(I8 = 0, I8, I9) 2.34/2.42 ack#(I10, I11) -> ackNat#(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f#(true, I12) -> f#(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 f#(true, I12) -> ack#(10, 10) 2.34/2.42 R = 2.34/2.42 cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) 2.34/2.42 cond2(true, I0, I1) -> ack(I0 - 1, I1 + 1) 2.34/2.42 cond1(false, I2, I3) -> cond2(I3 = 0, I2, I3) 2.34/2.42 cond1(true, I4, I5) -> I5 + 1 2.34/2.42 ackNat(false, I6, I7) -> 0 2.34/2.42 ackNat(true, I8, I9) -> cond1(I8 = 0, I8, I9) 2.34/2.42 ack(I10, I11) -> ackNat(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f(true, I12) -> f(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 2.34/2.42 This problem is converted using chaining, where edges between chained DPs are removed. 2.34/2.42 2.34/2.42 DP problem for innermost termination. 2.34/2.42 P = 2.34/2.42 cond2#(false, x, y) -> ack#(x - 1, ack(x, y - 1)) 2.34/2.42 cond2#(false, x, y) -> ack#(x, y - 1) 2.34/2.42 cond2#(true, I0, I1) -> ack#(I0 - 1, I1 + 1) 2.34/2.42 cond1#(false, I2, I3) -> cond2#(I3 = 0, I2, I3) 2.34/2.42 ackNat#(true, I8, I9) -> cond1#(I8 = 0, I8, I9) 2.34/2.42 ack#(I10, I11) -> ackNat#(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f#(true, I12) -> f_1#(I12) 2.34/2.42 f#(true, I12) -> ack#(10, 10) 2.34/2.42 f_1#(I12) -> f#(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 ack#(I10, I11) -> cond1#(I10 = 0, I10, I11) [I10 >= 0 && I11 >= 0] 2.34/2.42 ack#(I10, I11) -> cond2#(I11 = 0, I10, I11) [I10 >= 0 && I11 >= 0, not(I10 = 0)] 2.34/2.42 ack#(I10, I11) -> ack#(I10 - 1, I11 + 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), I11 = 0] 2.34/2.42 ack#(I10, I11) -> ack#(I10, I11 - 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 ack#(I10, I11) -> ack#(I10 - 1, ack(I10, I11 - 1)) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 ackNat#(true, I8, I9) -> cond2#(I9 = 0, I8, I9) [not(I8 = 0)] 2.34/2.42 ackNat#(true, I8, I9) -> ack#(I8 - 1, I9 + 1) [not(I8 = 0), I9 = 0] 2.34/2.42 ackNat#(true, I8, I9) -> ack#(I8, I9 - 1) [not(I8 = 0), not(I9 = 0)] 2.34/2.42 ackNat#(true, I8, I9) -> ack#(I8 - 1, ack(I8, I9 - 1)) [not(I8 = 0), not(I9 = 0)] 2.34/2.42 cond1#(false, I2, I3) -> ack#(I2 - 1, ack(I2, I3 - 1)) [not(I3 = 0)] 2.34/2.42 cond1#(false, I2, I3) -> ack#(I2, I3 - 1) [not(I3 = 0)] 2.34/2.42 cond1#(false, I2, I3) -> ack#(I2 - 1, I3 + 1) [I3 = 0] 2.34/2.42 R = 2.34/2.42 cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) 2.34/2.42 cond2(true, I0, I1) -> ack(I0 - 1, I1 + 1) 2.34/2.42 cond1(false, I2, I3) -> cond2(I3 = 0, I2, I3) 2.34/2.42 cond1(true, I4, I5) -> I5 + 1 2.34/2.42 ackNat(false, I6, I7) -> 0 2.34/2.42 ackNat(true, I8, I9) -> cond1(I8 = 0, I8, I9) 2.34/2.42 ack(I10, I11) -> ackNat(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f(true, I12) -> f(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 2.34/2.42 The dependency graph for this problem is: 2.34/2.42 0 -> 13, 12, 11, 10, 9, 5 2.34/2.42 1 -> 13, 12, 11, 10, 9, 5 2.34/2.42 2 -> 13, 12, 11, 10, 9, 5 2.34/2.42 3 -> 2.34/2.42 4 -> 2.34/2.42 5 -> 2.34/2.42 6 -> 8 2.34/2.42 7 -> 13, 12, 10, 9, 5 2.34/2.42 8 -> 7, 6 2.34/2.42 9 -> 2.34/2.42 10 -> 2.34/2.42 11 -> 13, 12, 5, 9, 10 2.34/2.42 12 -> 13, 12, 5, 9, 10, 11 2.34/2.42 13 -> 13, 5, 9, 10, 11, 12 2.34/2.42 14 -> 2.34/2.42 15 -> 5, 9, 10, 12, 13 2.34/2.42 16 -> 5, 9, 10, 11, 12, 13 2.34/2.42 17 -> 5, 9, 10, 11, 12, 13 2.34/2.42 18 -> 5, 9, 10, 11, 12, 13 2.34/2.42 19 -> 5, 9, 10, 11, 12, 13 2.34/2.42 20 -> 5, 9, 10, 12, 13 2.34/2.42 Where: 2.34/2.42 0) cond2#(false, x, y) -> ack#(x - 1, ack(x, y - 1)) 2.34/2.42 1) cond2#(false, x, y) -> ack#(x, y - 1) 2.34/2.42 2) cond2#(true, I0, I1) -> ack#(I0 - 1, I1 + 1) 2.34/2.42 3) cond1#(false, I2, I3) -> cond2#(I3 = 0, I2, I3) 2.34/2.42 4) ackNat#(true, I8, I9) -> cond1#(I8 = 0, I8, I9) 2.34/2.42 5) ack#(I10, I11) -> ackNat#(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 6) f#(true, I12) -> f_1#(I12) 2.34/2.42 7) f#(true, I12) -> ack#(10, 10) 2.34/2.42 8) f_1#(I12) -> f#(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 9) ack#(I10, I11) -> cond1#(I10 = 0, I10, I11) [I10 >= 0 && I11 >= 0] 2.34/2.42 10) ack#(I10, I11) -> cond2#(I11 = 0, I10, I11) [I10 >= 0 && I11 >= 0, not(I10 = 0)] 2.34/2.42 11) ack#(I10, I11) -> ack#(I10 - 1, I11 + 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), I11 = 0] 2.34/2.42 12) ack#(I10, I11) -> ack#(I10, I11 - 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 13) ack#(I10, I11) -> ack#(I10 - 1, ack(I10, I11 - 1)) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 14) ackNat#(true, I8, I9) -> cond2#(I9 = 0, I8, I9) [not(I8 = 0)] 2.34/2.42 15) ackNat#(true, I8, I9) -> ack#(I8 - 1, I9 + 1) [not(I8 = 0), I9 = 0] 2.34/2.42 16) ackNat#(true, I8, I9) -> ack#(I8, I9 - 1) [not(I8 = 0), not(I9 = 0)] 2.34/2.42 17) ackNat#(true, I8, I9) -> ack#(I8 - 1, ack(I8, I9 - 1)) [not(I8 = 0), not(I9 = 0)] 2.34/2.42 18) cond1#(false, I2, I3) -> ack#(I2 - 1, ack(I2, I3 - 1)) [not(I3 = 0)] 2.34/2.42 19) cond1#(false, I2, I3) -> ack#(I2, I3 - 1) [not(I3 = 0)] 2.34/2.42 20) cond1#(false, I2, I3) -> ack#(I2 - 1, I3 + 1) [I3 = 0] 2.34/2.42 2.34/2.42 We have the following SCCs. 2.34/2.42 { 6, 8 } 2.34/2.42 { 11, 12, 13 } 2.34/2.42 2.34/2.42 DP problem for innermost termination. 2.34/2.42 P = 2.34/2.42 ack#(I10, I11) -> ack#(I10 - 1, I11 + 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), I11 = 0] 2.34/2.42 ack#(I10, I11) -> ack#(I10, I11 - 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 ack#(I10, I11) -> ack#(I10 - 1, ack(I10, I11 - 1)) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 R = 2.34/2.42 cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) 2.34/2.42 cond2(true, I0, I1) -> ack(I0 - 1, I1 + 1) 2.34/2.42 cond1(false, I2, I3) -> cond2(I3 = 0, I2, I3) 2.34/2.42 cond1(true, I4, I5) -> I5 + 1 2.34/2.42 ackNat(false, I6, I7) -> 0 2.34/2.42 ackNat(true, I8, I9) -> cond1(I8 = 0, I8, I9) 2.34/2.42 ack(I10, I11) -> ackNat(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f(true, I12) -> f(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 2.34/2.42 We use the reverse value criterion with the projection function NU: 2.34/2.42 NU[ack#(z1,z2)] = z1 2.34/2.42 2.34/2.42 This gives the following inequalities: 2.34/2.42 I10 >= 0 && I11 >= 0/\not(I10 = 0)/\I11 = 0 ==> I10 > I10 - 1 with I10 >= 0 2.34/2.42 I10 >= 0 && I11 >= 0/\not(I10 = 0)/\not(I11 = 0) ==> I10 >= I10 2.34/2.42 I10 >= 0 && I11 >= 0/\not(I10 = 0)/\not(I11 = 0) ==> I10 > I10 - 1 with I10 >= 0 2.34/2.42 2.34/2.42 We remove all the strictly oriented dependency pairs. 2.34/2.42 2.34/2.42 DP problem for innermost termination. 2.34/2.42 P = 2.34/2.42 ack#(I10, I11) -> ack#(I10, I11 - 1) [I10 >= 0 && I11 >= 0, not(I10 = 0), not(I11 = 0)] 2.34/2.42 R = 2.34/2.42 cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) 2.34/2.42 cond2(true, I0, I1) -> ack(I0 - 1, I1 + 1) 2.34/2.42 cond1(false, I2, I3) -> cond2(I3 = 0, I2, I3) 2.34/2.42 cond1(true, I4, I5) -> I5 + 1 2.34/2.42 ackNat(false, I6, I7) -> 0 2.34/2.42 ackNat(true, I8, I9) -> cond1(I8 = 0, I8, I9) 2.34/2.42 ack(I10, I11) -> ackNat(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f(true, I12) -> f(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 2.34/2.42 We use the reverse value criterion with the projection function NU: 2.34/2.42 NU[ack#(z1,z2)] = z2 2.34/2.42 2.34/2.42 This gives the following inequalities: 2.34/2.42 I10 >= 0 && I11 >= 0/\not(I10 = 0)/\not(I11 = 0) ==> I11 > I11 - 1 with I11 >= 0 2.34/2.42 2.34/2.42 All dependency pairs are strictly oriented, so the entire dependency pair problem may be removed. 2.34/2.42 2.34/2.42 DP problem for innermost termination. 2.34/2.42 P = 2.34/2.42 f#(true, I12) -> f_1#(I12) 2.34/2.42 f_1#(I12) -> f#(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 R = 2.34/2.42 cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) 2.34/2.42 cond2(true, I0, I1) -> ack(I0 - 1, I1 + 1) 2.34/2.42 cond1(false, I2, I3) -> cond2(I3 = 0, I2, I3) 2.34/2.42 cond1(true, I4, I5) -> I5 + 1 2.34/2.42 ackNat(false, I6, I7) -> 0 2.34/2.42 ackNat(true, I8, I9) -> cond1(I8 = 0, I8, I9) 2.34/2.42 ack(I10, I11) -> ackNat(I10 >= 0 && I11 >= 0, I10, I11) 2.34/2.42 f(true, I12) -> f(ack(10, 10) >= I12, I12 + 1) 2.34/2.42 2.34/5.39 EOF