Term Rewriting System R: [x, y, z] rev(nil) -> nil rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y)) rev1(x, nil) -> x rev1(x, ++(y, z)) -> rev1(y, z) rev2(x, nil) -> nil rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z)))) Termination of R to be shown. This program has no overlaps, so it is sufficient to show innermost termination. R contains the following Dependency Pairs: REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z)))) REV2(x, ++(y, z)) -> REV(rev2(y, z)) REV2(x, ++(y, z)) -> REV2(y, z) REV(++(x, y)) -> REV1(x, y) REV(++(x, y)) -> REV2(x, y) REV1(x, ++(y, z)) -> REV1(y, z) Furthermore, R contains two SCCs. SCC1: REV1(x, ++(y, z)) -> REV1(y, z) Removing rules from R by ordering and analyzing Dependency Pairs, Usable Rules, and Usable Equations. This is possible by using the following (C_E-compatible) Polynomial ordering. Polynomial interpretation: POL(++(x_1, x_2)) = 1 + x_1 + x_2 POL(REV1(x_1, x_2)) = 1 + x_1 + x_2 The following Dependency Pairs can be deleted: REV1(x, ++(y, z)) -> REV1(y, z) This transformation is resulting in no new subcycles. SCC2: REV2(x, ++(y, z)) -> REV2(y, z) REV2(x, ++(y, z)) -> REV(rev2(y, z)) REV(++(x, y)) -> REV2(x, y) REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z)))) By using a polynomial ordering, at least one Dependency Pair of this SCC can be strictly oriented. Additionally, the following rules can be oriented: rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z)))) rev2(x, nil) -> nil rev(nil) -> nil rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y)) Used ordering: Polynomial ordering with Polynomial interpretation: POL(nil) = 0 POL(++(x_1, x_2)) = 1 + x_2 POL(rev2(x_1, x_2)) = x_2 POL(REV(x_1)) = x_1 POL(rev1(x_1, x_2)) = 0 POL(rev(x_1)) = x_1 POL(REV2(x_1, x_2)) = x_2 resulting in no subcycles. Termination of R successfully shown. Duration: 0.729 seconds.