We consider termination of the STRS with no additional rule schemes: Signature: append :: list -> list -> list cons :: nat -> list -> list map :: (nat -> nat) -> list -> list mirror :: list -> list nil :: list reverse :: list -> list shuffle :: list -> list Rules: append(nil, U) -> U append(cons(X, Y), U) -> cons(X, append(Y, U)) reverse(nil) -> nil shuffle(nil) -> nil shuffle(cons(X, Y)) -> cons(X, shuffle(reverse(Y))) mirror(nil) -> nil mirror(cons(X, Y)) -> append(cons(X, mirror(Y)), cons(X, nil)) map(H, nil) -> nil map(H, cons(X, Y)) -> cons(H(X), map(H, 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) append#(cons(X, Y), U) => append#(Y, U) (2) shuffle#(cons(X, Y)) => reverse#(Y) (3) shuffle#(cons(X, Y)) => shuffle#(reverse(Y)) (4) mirror#(cons(X, Y)) => mirror#(Y) (5) mirror#(cons(X, Y)) => append#(cons(X, mirror(Y)), cons(X, nil)) (6) map#(H, cons(X, Y)) => map#(H, Y) ***** We apply the Graph Processor on D1 = (P1, R, i, c). We compute a graph approximation with the following edges: 1: 1 2: 3: 2 3 4: 4 5 5: 1 6: 6 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) append#(cons(X, Y), U) => append#(Y, U) P3. (1) shuffle#(cons(X, Y)) => shuffle#(reverse(Y)) P4. (1) mirror#(cons(X, Y)) => mirror#(Y) P5. (1) map#(H, cons(X, Y)) => map#(H, Y) ***** We apply the Subterm Criterion Processor on D2 = (P2, R, i, c). We use the following projection function: nu(append#) = 1 We thus have: (1) cons(X, Y) |>| Y All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }. ***** We apply the Reduction Pair [with HORPO] Processor on D3 = (P3, R, i, c). Constrained HORPO yields: shuffle#(cons(X, Y)) (>) shuffle#(reverse(Y)) append(nil, U) (>=) U append(cons(X, Y), U) (>=) cons(X, append(Y, U)) reverse(nil) (>=) nil shuffle(nil) (>=) nil shuffle(cons(X, Y)) (>=) cons(X, shuffle(reverse(Y))) mirror(nil) (>=) nil mirror(cons(X, Y)) (>=) append(cons(X, mirror(Y)), cons(X, nil)) map(H, nil) (>=) nil map(H, cons(X, Y)) (>=) cons(H(X), map(H, Y)) We do this using the following settings: * Disregarded arguments: cons 1 * Precedence and permutation: map { 2 } 1 > mirror { 1 } = shuffle { 1 } > append { 2 } 1 = cons { } 2 = nil { } > reverse { 1 } = shuffle# { 1 } * Well-founded theory orderings: [>]_{Bool} = {(true,false)} [>]_{Int} = {(x,y) | x < 1000 /\ x < y } All dependency pairs were removed. Processor output: { }. ***** We apply the Subterm Criterion Processor on D4 = (P4, R, i, c). We use the following projection function: nu(mirror#) = 1 We thus have: (1) cons(X, 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 D5 = (P5, R, i, c). We use the following projection function: nu(map#) = 2 We thus have: (1) cons(X, Y) |>| Y All DPs are strictly oriented, and may be removed. Hence, this DP problem is finite. Processor output: { }.