We consider termination of the STRS with no additional rule schemes: Signature: cons :: nat -> list -> list map :: (nat -> nat) -> list -> list merge :: list -> list -> list -> list nil :: list Rules: merge(nil, nil, X) -> X merge(nil, cons(Y, U), V) -> merge(U, nil, cons(Y, V)) merge(cons(W, P), X1, Y1) -> merge(X1, P, cons(W, Y1)) map(G1, nil) -> nil map(H1, cons(W1, P1)) -> cons(H1(W1), map(H1, P1)) 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) merge#(nil, cons(Y, U), V) => merge#(U, nil, cons(Y, V)) (2) merge#(cons(W, P), X1, Y1) => merge#(X1, P, cons(W, Y1)) (3) map#(H1, cons(W1, P1)) => map#(H1, P1) ***** We apply the Graph Processor on D1 = (P1, R, i, c). We compute a graph approximation with the following edges: 1: 2 2: 1 2 3: 3 There are 2 SCCs. Processor output: { D2 = (P2, R, i, c) ; D3 = (P3, R, i, c) }, where: P2. (1) merge#(nil, cons(Y, U), V) => merge#(U, nil, cons(Y, V)) (2) merge#(cons(W, P), X1, Y1) => merge#(X1, P, cons(W, Y1)) P3. (1) map#(H1, cons(W1, P1)) => map#(H1, P1) ***** We apply the Usable Rules Processor on D2 = (P2, R, i, c). We obtain 0 usable rules (out of 5 rules in the input problem). Processor output: { D4 = (P2, {}, i, c) }. ***** We apply the Subterm Criterion Processor on D3 = (P3, R, i, c). We use the following projection function: nu(map#) = 2 We thus have: (1) cons(W1, P1) |>| P1 All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }. ***** We apply the Usable rules with respect to HORPO Processor on D4 = (P2, {}, i, c). Constrained HORPO yields: merge#3(nil0, cons2(Y, U), V) (>) merge#3(U, nil0, cons2(Y, V)) merge#3(cons2(W, P), X1, Y1) (>) merge#3(X1, P, cons2(W, Y1)) We do this using the following settings: * Disregarded arguments: merge#3 3 * Precedence and permutation: nil0 { } > cons2 { 1 2 } = merge#3 { 1 2 } * Well-founded theory orderings: [>]_{Bool} = {(true,false)} [>]_{Int} = {(x,y) | x < 1000 /\ x < y } Processor output: { }.