We consider termination of the LCTRS with only rule scheme Calc: Signature: ack :: Int -> Int -> Int ackNat :: Bool -> Int -> Int -> Int cond1 :: Bool -> Int -> Int -> Int cond2 :: Bool -> Int -> Int -> Int f :: Bool -> Int -> o Rules: f(true, x) -> f(ack(10, 10) >= x, x + 1) | x = x ack(x, y) -> ackNat(x >= 0 /\ y >= 0, x, y) | x = x /\ y = y ackNat(true, x, y) -> cond1(x = 0, x, y) | x = x /\ y = y ackNat(false, x, y) -> 0 | x = x /\ y = y cond1(true, x, y) -> y + 1 | x = x /\ y = y cond1(false, x, y) -> cond2(y = 0, x, y) | x = x /\ y = y cond2(true, x, y) -> ack(x - 1, y + 1) | x = x /\ y = y cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) | x = x /\ y = y The system is accessible function passing by a sort ordering that equates all sorts. We start by computing the initial DP problem D1 = (P1, R, i, c), where: P1. (1) f#(true, x) => ack#(10, 10) | x = x (2) f#(true, x) => f#(ack(10, 10) >= x, x + 1) | x = x (3) ack#(x, y) => ackNat#(x >= 0 /\ y >= 0, x, y) | x = x /\ y = y (4) ackNat#(true, x, y) => cond1#(x = 0, x, y) | x = x /\ y = y (5) cond1#(false, x, y) => cond2#(y = 0, x, y) | x = x /\ y = y (6) cond2#(true, x, y) => ack#(x - 1, y + 1) | x = x /\ y = y (7) cond2#(false, x, y) => ack#(x, y - 1) | x = x /\ y = y (8) cond2#(false, x, y) => ack#(x - 1, ack(x, y - 1)) | x = x /\ y = y ***** We apply the Graph Processor on D1 = (P1, R, i, c). We compute a graph approximation with the following edges: 1: 3 2: 3: 4 4: 5 5: 6 7 8 6: 3 7: 3 8: 3 There is only one SCC, so all DPs not inside the SCC can be removed. Processor output: { D2 = (P2, R, i, c) }, where: P2. (1) ack#(x, y) => ackNat#(x >= 0 /\ y >= 0, x, y) | x = x /\ y = y (2) ackNat#(true, x, y) => cond1#(x = 0, x, y) | x = x /\ y = y (3) cond1#(false, x, y) => cond2#(y = 0, x, y) | x = x /\ y = y (4) cond2#(true, x, y) => ack#(x - 1, y + 1) | x = x /\ y = y (5) cond2#(false, x, y) => ack#(x, y - 1) | x = x /\ y = y (6) cond2#(false, x, y) => ack#(x - 1, ack(x, y - 1)) | x = x /\ y = y ***** We apply the Usable Rules Processor on D2 = (P2, R, i, c). We obtain 7 usable rules (out of 8 rules in the input problem). Processor output: { D3 = (P2, R2, i, c) }, where: R2. (1) ackNat(true, x, y) -> cond1(x = 0, x, y) | x = x /\ y = y (2) ackNat(false, x, y) -> 0 | x = x /\ y = y (3) ack(x, y) -> ackNat(x >= 0 /\ y >= 0, x, y) | x = x /\ y = y (4) cond1(true, x, y) -> y + 1 | x = x /\ y = y (5) cond1(false, x, y) -> cond2(y = 0, x, y) | x = x /\ y = y (6) cond2(true, x, y) -> ack(x - 1, y + 1) | x = x /\ y = y (7) cond2(false, x, y) -> ack(x - 1, ack(x, y - 1)) | x = x /\ y = y ***** No progress could be made on DP problem D3 = (P2, R2, i, c).