We consider termination of the LCTRS with only rule scheme Calc: Signature: cond :: Int -> Int -> Int -> Int if :: Bool -> Int -> Int -> Int min :: Int -> Int -> Int minus :: Int -> Int -> Int Rules: minus(x, x) -> 0 | x = x minus(x, y) -> cond(min(x, y), x, y) | x = x /\ y = y cond(y, x, y) -> 1 + minus(x, y + 1) | y = y /\ x = x min(u, v) -> if(u < v, u, v) | u = u /\ v = v if(true, u, v) -> u | u = u /\ v = v if(false, u, v) -> v | u = u /\ v = v 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) minus#(x, y) => min#(x, y) | x = x /\ y = y (2) minus#(x, y) => cond#(min(x, y), x, y) | x = x /\ y = y (3) cond#(y, x, y) => minus#(x, y + 1) | y = y /\ x = x (4) min#(u, v) => if#(u < v, u, v) | u = u /\ v = v ***** We apply the Graph Processor on D1 = (P1, R, i, c). We compute a graph approximation with the following edges: 1: 4 2: 3 3: 1 2 4: 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) minus#(x, y) => cond#(min(x, y), x, y) | x = x /\ y = y (2) cond#(y, x, y) => minus#(x, y + 1) | y = y /\ x = x ***** We apply the Chaining Processor Processor on D2 = (P2, R, i, c). We chain DPs according to the following mapping: cond#(y, x, y) => cond#(min(x, y + 1), x, y + 1) | y = y /\ x = x /\ (x = x /\ y + 1 = y + 1) is obtained by chaining cond#(y, x, y) => minus#(x, y + 1) | y = y /\ x = x and minus#(x', y') => cond#(min(x', y'), x', y') | x' = x' /\ y' = y' The following DPs were deleted: cond#(y, x, y) => minus#(x, y + 1) | y = y /\ x = x minus#(x, y) => cond#(min(x, y), x, y) | x = x /\ y = y By chaining, we added 1 DPs and removed 2 DPs. Processor output: { D3 = (P3, R, i, c) }, where: P3. (1) cond#(y, x, y) => cond#(min(x, y + 1), x, y + 1) | y = y /\ x = x /\ (x = x /\ y + 1 = y + 1) ***** We apply the Usable Rules Processor on D3 = (P3, R, i, c). We obtain 3 usable rules (out of 6 rules in the input problem). Processor output: { D4 = (P3, R2, i, c) }, where: R2. (1) if(true, u, v) -> u | u = u /\ v = v (2) if(false, u, v) -> v | u = u /\ v = v (3) min(u, v) -> if(u < v, u, v) | u = u /\ v = v ***** No progress could be made on DP problem D4 = (P3, R2, i, c).