We consider termination of the STRS with no additional rule schemes: Signature: 0 :: a cons :: c -> d -> d double :: a -> a false :: b filter :: (c -> b) -> d -> d filter2 :: b -> (c -> b) -> c -> d -> d map :: (c -> c) -> d -> d minus :: a -> a -> a nil :: d plus :: a -> a -> a s :: a -> a true :: b Rules: minus(X, 0) -> X minus(s(Y), s(U)) -> minus(Y, U) double(0) -> 0 double(s(V)) -> s(s(double(V))) plus(0, W) -> W plus(s(P), X1) -> s(plus(P, X1)) plus(s(Y1), U1) -> plus(Y1, s(U1)) plus(s(V1), W1) -> s(plus(minus(V1, W1), double(W1))) map(J1, nil) -> nil map(F2, cons(Y2, U2)) -> cons(F2(Y2), map(F2, U2)) filter(H2, nil) -> nil filter(I2, cons(P2, X3)) -> filter2(I2(P2), I2, P2, X3) filter2(true, Z3, U3, V3) -> cons(U3, filter(Z3, V3)) filter2(false, I3, P3, X4) -> filter(I3, X4) 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#(s(Y), s(U)) => minus#(Y, U) (2) double#(s(V)) => double#(V) (3) plus#(s(P), X1) => plus#(P, X1) (4) plus#(s(Y1), U1) => plus#(Y1, s(U1)) (5) plus#(s(V1), W1) => minus#(V1, W1) (6) plus#(s(V1), W1) => double#(W1) (7) plus#(s(V1), W1) => plus#(minus(V1, W1), double(W1)) (8) map#(F2, cons(Y2, U2)) => map#(F2, U2) (9) filter#(I2, cons(P2, X3)) => filter2#(I2(P2), I2, P2, X3) (10) filter2#(true, Z3, U3, V3) => filter#(Z3, V3) (11) filter2#(false, I3, P3, X4) => filter#(I3, X4) ***** We apply the Graph Processor on D1 = (P1, R, i, c). We compute a graph approximation with the following edges: 1: 1 2: 2 3: 3 4 5 6 7 4: 3 4 5 6 7 5: 1 6: 2 7: 3 4 5 6 7 8: 8 9: 10 11 10: 9 11: 9 There are 5 SCCs. Processor output: { D2 = (P2, R, i, c) ; D3 = (P3, R, i, c) ; D4 = (P4, R, i, c) ; D5 = (P5, R, i, c) ; D6 = (P6, R, i, c) }, where: P2. (1) minus#(s(Y), s(U)) => minus#(Y, U) P3. (1) double#(s(V)) => double#(V) P4. (1) plus#(s(P), X1) => plus#(P, X1) (2) plus#(s(Y1), U1) => plus#(Y1, s(U1)) (3) plus#(s(V1), W1) => plus#(minus(V1, W1), double(W1)) P5. (1) map#(F2, cons(Y2, U2)) => map#(F2, U2) P6. (1) filter#(I2, cons(P2, X3)) => filter2#(I2(P2), I2, P2, X3) (2) filter2#(true, Z3, U3, V3) => filter#(Z3, V3) (3) filter2#(false, I3, P3, X4) => filter#(I3, X4) ***** We apply the Subterm Criterion Processor on D2 = (P2, R, i, c). We use the following projection function: nu(minus#) = 1 We thus have: (1) s(Y) |>| Y All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }. ***** We apply the Subterm Criterion Processor on D3 = (P3, R, i, c). We use the following projection function: nu(double#) = 1 We thus have: (1) s(V) |>| V All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }. ***** We apply the Usable Rules Processor on D4 = (P4, R, i, c). We obtain 4 usable rules (out of 14 rules in the input problem). Processor output: { D7 = (P4, R2, i, c) }, where: R2. (1) double(0) -> 0 (2) double(s(V)) -> s(s(double(V))) (3) minus(X, 0) -> X (4) minus(s(Y), s(U)) -> minus(Y, U) ***** We apply the Subterm Criterion Processor on D5 = (P5, R, i, c). We use the following projection function: nu(map#) = 2 We thus have: (1) cons(Y2, U2) |>| U2 All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }. ***** We apply the Subterm Criterion Processor on D6 = (P6, R, i, c). We use the following projection function: nu(filter#) = 2 nu(filter2#) = 4 We thus have: (1) cons(P2, X3) |>| X3 (2) V3 |>=| V3 (3) X4 |>=| X4 We may remove the strictly oriented DPs. Processor output: { D8 = (P7, R, i, c) }, where: P7. (1) filter2#(true, Z3, U3, V3) => filter#(Z3, V3) (2) filter2#(false, I3, P3, X4) => filter#(I3, X4) ***** We apply the Usable rules with respect to an argument wiltering [with HORPO] Processor on D7 = (P4, R2, i, c). Constrained HORPO yields: plus#2(s1(P), X1) (>) plus#2(P, X1) plus#2(s1(Y1), U1) (>) plus#2(Y1, s1(U1)) plus#2(s1(V1), W1) (>) plus#2(minus2(V1, W1), double1(W1)) minus2(X, 00) (>=) X minus2(s1(Y), s1(U)) (>=) minus2(Y, U) We do this using the following settings: * Disregarded arguments: double1 1 minus2 2 plus#2 2 * Precedence and permutation: double1 { } > minus2 { } 1 = plus#2 { 1 } = s1 { 1 } > 00 { } * Well-founded theory orderings: [>]_{Bool} = {(true,false)} [>]_{Int} = {(x,y) | x < 1000 /\ x < y } Processor output: { }. ***** We apply the Graph Processor on D8 = (P7, R, i, c). We compute a graph approximation with the following edges: 1: 2: As there are no SCCs, this DP problem is removed. Processor output: { }.