We consider termination of the STRS with no additional rule schemes: Signature: and :: a -> a -> a cons :: c -> d -> d false :: b filter :: (c -> b) -> d -> d filter2 :: b -> (c -> b) -> c -> d -> d map :: (c -> c) -> d -> d nil :: d not :: a -> a or :: a -> a -> a true :: b Rules: not(not(X)) -> X not(or(Y, U)) -> and(not(Y), not(U)) not(and(V, W)) -> or(not(V), not(W)) and(P, or(X1, Y1)) -> or(and(P, X1), and(P, Y1)) and(or(V1, W1), U1) -> or(and(U1, V1), and(U1, 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) not#(or(Y, U)) => not#(Y) (2) not#(or(Y, U)) => not#(U) (3) not#(or(Y, U)) => and#(not(Y), not(U)) (4) not#(and(V, W)) => not#(V) (5) not#(and(V, W)) => not#(W) (6) and#(P, or(X1, Y1)) => and#(P, X1) (7) and#(P, or(X1, Y1)) => and#(P, Y1) (8) and#(or(V1, W1), U1) => and#(U1, V1) (9) and#(or(V1, W1), U1) => and#(U1, W1) (10) map#(F2, cons(Y2, U2)) => map#(F2, U2) (11) filter#(I2, cons(P2, X3)) => filter2#(I2(P2), I2, P2, X3) (12) filter2#(true, Z3, U3, V3) => filter#(Z3, V3) (13) 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 3 4 5 2: 1 2 3 4 5 3: 6 7 8 9 4: 1 2 3 4 5 5: 1 2 3 4 5 6: 6 7 8 9 7: 6 7 8 9 8: 6 7 8 9 9: 6 7 8 9 10: 10 11: 12 13 12: 11 13: 11 There are 4 SCCs. Processor output: { D2 = (P2, R, i, c) ; D3 = (P3, R, i, c) ; D4 = (P4, R, i, c) ; D5 = (P5, R, i, c) }, where: P2. (1) and#(P, or(X1, Y1)) => and#(P, X1) (2) and#(P, or(X1, Y1)) => and#(P, Y1) (3) and#(or(V1, W1), U1) => and#(U1, V1) (4) and#(or(V1, W1), U1) => and#(U1, W1) P3. (1) not#(or(Y, U)) => not#(Y) (2) not#(or(Y, U)) => not#(U) (3) not#(and(V, W)) => not#(V) (4) not#(and(V, W)) => not#(W) P4. (1) map#(F2, cons(Y2, U2)) => map#(F2, U2) P5. (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 Usable Rules Processor on D2 = (P2, R, i, c). We obtain 0 usable rules (out of 11 rules in the input problem). Processor output: { D6 = (P2, {}, i, c) }. ***** We apply the Subterm Criterion Processor on D3 = (P3, R, i, c). We use the following projection function: nu(not#) = 1 We thus have: (1) or(Y, U) |>| Y (2) or(Y, U) |>| U (3) and(V, W) |>| V (4) and(V, W) |>| W All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }. ***** We apply the Subterm Criterion Processor on D4 = (P4, 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 D5 = (P5, 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: { D7 = (P6, R, i, c) }, where: P6. (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 D6 = (P2, {}, i, c). Constrained HORPO yields: and#2(P, or2(X1, Y1)) (>) and#2(P, X1) and#2(P, or2(X1, Y1)) (>) and#2(P, Y1) and#2(or2(V1, W1), U1) (>) and#2(U1, V1) and#2(or2(V1, W1), U1) (>) and#2(U1, W1) We do this using the following settings: * Monotonicity requirements: this is a strongly monotonic reduction pair (all arguments of function symbols were regarded). * Precedence and permutation: or2 { 1 } 2 > and#2 { 1 2 } * Well-founded theory orderings: [>]_{Bool} = {(true,false)} [>]_{Int} = {(x,y) | x < 1000 /\ x < y } Processor output: { }. ***** We apply the Graph Processor on D7 = (P6, 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: { }.