Term Rewriting System R: [Z, X, Y, X1, X2] active(fst(0, Z)) -> mark(nil) active(fst(s(X), cons(Y, Z))) -> mark(cons(Y, fst(X, Z))) active(from(X)) -> mark(cons(X, from(s(X)))) active(add(0, X)) -> mark(X) active(add(s(X), Y)) -> mark(s(add(X, Y))) active(len(nil)) -> mark(0) active(len(cons(X, Z))) -> mark(s(len(Z))) active(cons(X1, X2)) -> cons(active(X1), X2) active(fst(X1, X2)) -> fst(active(X1), X2) active(fst(X1, X2)) -> fst(X1, active(X2)) active(from(X)) -> from(active(X)) active(add(X1, X2)) -> add(active(X1), X2) active(add(X1, X2)) -> add(X1, active(X2)) active(len(X)) -> len(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) fst(mark(X1), X2) -> mark(fst(X1, X2)) fst(X1, mark(X2)) -> mark(fst(X1, X2)) fst(ok(X1), ok(X2)) -> ok(fst(X1, X2)) from(mark(X)) -> mark(from(X)) from(ok(X)) -> ok(from(X)) add(mark(X1), X2) -> mark(add(X1, X2)) add(X1, mark(X2)) -> mark(add(X1, X2)) add(ok(X1), ok(X2)) -> ok(add(X1, X2)) len(mark(X)) -> mark(len(X)) len(ok(X)) -> ok(len(X)) proper(0) -> ok(0) proper(s(X)) -> s(proper(X)) proper(nil) -> ok(nil) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(fst(X1, X2)) -> fst(proper(X1), proper(X2)) proper(from(X)) -> from(proper(X)) proper(add(X1, X2)) -> add(proper(X1), proper(X2)) proper(len(X)) -> len(proper(X)) s(ok(X)) -> ok(s(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Termination of R to be shown. R contains the following Dependency Pairs: PROPER(len(X)) -> LEN(proper(X)) PROPER(len(X)) -> PROPER(X) PROPER(fst(X1, X2)) -> FST(proper(X1), proper(X2)) PROPER(fst(X1, X2)) -> PROPER(X1) PROPER(fst(X1, X2)) -> PROPER(X2) PROPER(cons(X1, X2)) -> CONS(proper(X1), proper(X2)) PROPER(cons(X1, X2)) -> PROPER(X1) PROPER(cons(X1, X2)) -> PROPER(X2) PROPER(add(X1, X2)) -> ADD(proper(X1), proper(X2)) PROPER(add(X1, X2)) -> PROPER(X1) PROPER(add(X1, X2)) -> PROPER(X2) PROPER(from(X)) -> FROM(proper(X)) PROPER(from(X)) -> PROPER(X) PROPER(s(X)) -> S(proper(X)) PROPER(s(X)) -> PROPER(X) LEN(mark(X)) -> LEN(X) LEN(ok(X)) -> LEN(X) ACTIVE(cons(X1, X2)) -> CONS(active(X1), X2) ACTIVE(cons(X1, X2)) -> ACTIVE(X1) ACTIVE(add(X1, X2)) -> ADD(active(X1), X2) ACTIVE(add(X1, X2)) -> ACTIVE(X1) ACTIVE(fst(X1, X2)) -> FST(active(X1), X2) ACTIVE(fst(X1, X2)) -> ACTIVE(X1) ACTIVE(add(s(X), Y)) -> S(add(X, Y)) ACTIVE(add(s(X), Y)) -> ADD(X, Y) ACTIVE(fst(s(X), cons(Y, Z))) -> CONS(Y, fst(X, Z)) ACTIVE(fst(s(X), cons(Y, Z))) -> FST(X, Z) ACTIVE(len(cons(X, Z))) -> S(len(Z)) ACTIVE(len(cons(X, Z))) -> LEN(Z) ACTIVE(len(X)) -> LEN(active(X)) ACTIVE(len(X)) -> ACTIVE(X) ACTIVE(from(X)) -> FROM(active(X)) ACTIVE(from(X)) -> ACTIVE(X) ACTIVE(fst(X1, X2)) -> FST(X1, active(X2)) ACTIVE(fst(X1, X2)) -> ACTIVE(X2) ACTIVE(from(X)) -> CONS(X, from(s(X))) ACTIVE(from(X)) -> FROM(s(X)) ACTIVE(from(X)) -> S(X) ACTIVE(add(X1, X2)) -> ADD(X1, active(X2)) ACTIVE(add(X1, X2)) -> ACTIVE(X2) CONS(mark(X1), X2) -> CONS(X1, X2) CONS(ok(X1), ok(X2)) -> CONS(X1, X2) TOP(mark(X)) -> TOP(proper(X)) TOP(mark(X)) -> PROPER(X) TOP(ok(X)) -> TOP(active(X)) TOP(ok(X)) -> ACTIVE(X) ADD(ok(X1), ok(X2)) -> ADD(X1, X2) ADD(mark(X1), X2) -> ADD(X1, X2) ADD(X1, mark(X2)) -> ADD(X1, X2) FROM(mark(X)) -> FROM(X) FROM(ok(X)) -> FROM(X) FST(ok(X1), ok(X2)) -> FST(X1, X2) FST(mark(X1), X2) -> FST(X1, X2) FST(X1, mark(X2)) -> FST(X1, X2) S(ok(X)) -> S(X) Furthermore, R contains nine SCCs. SCC1: LEN(ok(X)) -> LEN(X) LEN(mark(X)) -> LEN(X) 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(mark(x_1)) = 1 + x_1 POL(LEN(x_1)) = 1 + x_1 POL(ok(x_1)) = 1 + x_1 The following Dependency Pairs can be deleted: LEN(ok(X)) -> LEN(X) LEN(mark(X)) -> LEN(X) This transformation is resulting in no new subcycles. SCC2: FST(X1, mark(X2)) -> FST(X1, X2) FST(mark(X1), X2) -> FST(X1, X2) FST(ok(X1), ok(X2)) -> FST(X1, X2) 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(FST(x_1, x_2)) = 1 + x_1 + x_2 POL(mark(x_1)) = 1 + x_1 POL(ok(x_1)) = 1 + x_1 The following Dependency Pairs can be deleted: FST(X1, mark(X2)) -> FST(X1, X2) FST(mark(X1), X2) -> FST(X1, X2) FST(ok(X1), ok(X2)) -> FST(X1, X2) This transformation is resulting in no new subcycles. SCC3: CONS(ok(X1), ok(X2)) -> CONS(X1, X2) CONS(mark(X1), X2) -> CONS(X1, X2) 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(mark(x_1)) = 1 + x_1 POL(ok(x_1)) = 1 + x_1 POL(CONS(x_1, x_2)) = 1 + x_1 + x_2 The following Dependency Pairs can be deleted: CONS(ok(X1), ok(X2)) -> CONS(X1, X2) CONS(mark(X1), X2) -> CONS(X1, X2) This transformation is resulting in no new subcycles. SCC4: ADD(X1, mark(X2)) -> ADD(X1, X2) ADD(mark(X1), X2) -> ADD(X1, X2) ADD(ok(X1), ok(X2)) -> ADD(X1, X2) 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(ADD(x_1, x_2)) = 1 + x_1 + x_2 POL(mark(x_1)) = 1 + x_1 POL(ok(x_1)) = 1 + x_1 The following Dependency Pairs can be deleted: ADD(X1, mark(X2)) -> ADD(X1, X2) ADD(mark(X1), X2) -> ADD(X1, X2) ADD(ok(X1), ok(X2)) -> ADD(X1, X2) This transformation is resulting in no new subcycles. SCC5: FROM(ok(X)) -> FROM(X) FROM(mark(X)) -> FROM(X) 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(FROM(x_1)) = 1 + x_1 POL(mark(x_1)) = 1 + x_1 POL(ok(x_1)) = 1 + x_1 The following Dependency Pairs can be deleted: FROM(ok(X)) -> FROM(X) FROM(mark(X)) -> FROM(X) This transformation is resulting in no new subcycles. SCC6: S(ok(X)) -> S(X) 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(S(x_1)) = 1 + x_1 POL(ok(x_1)) = 1 + x_1 The following Dependency Pairs can be deleted: S(ok(X)) -> S(X) This transformation is resulting in no new subcycles. SCC7: PROPER(s(X)) -> PROPER(X) PROPER(from(X)) -> PROPER(X) PROPER(add(X1, X2)) -> PROPER(X2) PROPER(add(X1, X2)) -> PROPER(X1) PROPER(cons(X1, X2)) -> PROPER(X2) PROPER(cons(X1, X2)) -> PROPER(X1) PROPER(fst(X1, X2)) -> PROPER(X2) PROPER(fst(X1, X2)) -> PROPER(X1) PROPER(len(X)) -> PROPER(X) 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(add(x_1, x_2)) = 1 + x_1 + x_2 POL(PROPER(x_1)) = 1 + x_1 POL(s(x_1)) = 1 + x_1 POL(from(x_1)) = 1 + x_1 POL(fst(x_1, x_2)) = 1 + x_1 + x_2 POL(len(x_1)) = 1 + x_1 POL(cons(x_1, x_2)) = 1 + x_1 + x_2 The following Dependency Pairs can be deleted: PROPER(s(X)) -> PROPER(X) PROPER(from(X)) -> PROPER(X) PROPER(add(X1, X2)) -> PROPER(X2) PROPER(add(X1, X2)) -> PROPER(X1) PROPER(cons(X1, X2)) -> PROPER(X2) PROPER(cons(X1, X2)) -> PROPER(X1) PROPER(fst(X1, X2)) -> PROPER(X2) PROPER(fst(X1, X2)) -> PROPER(X1) PROPER(len(X)) -> PROPER(X) This transformation is resulting in no new subcycles. SCC8: ACTIVE(add(X1, X2)) -> ACTIVE(X2) ACTIVE(fst(X1, X2)) -> ACTIVE(X2) ACTIVE(from(X)) -> ACTIVE(X) ACTIVE(len(X)) -> ACTIVE(X) ACTIVE(fst(X1, X2)) -> ACTIVE(X1) ACTIVE(add(X1, X2)) -> ACTIVE(X1) ACTIVE(cons(X1, X2)) -> ACTIVE(X1) 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(add(x_1, x_2)) = 1 + x_1 + x_2 POL(from(x_1)) = 1 + x_1 POL(ACTIVE(x_1)) = 1 + x_1 POL(fst(x_1, x_2)) = 1 + x_1 + x_2 POL(len(x_1)) = 1 + x_1 POL(cons(x_1, x_2)) = 1 + x_1 + x_2 The following Dependency Pairs can be deleted: ACTIVE(add(X1, X2)) -> ACTIVE(X2) ACTIVE(fst(X1, X2)) -> ACTIVE(X2) ACTIVE(from(X)) -> ACTIVE(X) ACTIVE(len(X)) -> ACTIVE(X) ACTIVE(fst(X1, X2)) -> ACTIVE(X1) ACTIVE(add(X1, X2)) -> ACTIVE(X1) ACTIVE(cons(X1, X2)) -> ACTIVE(X1) This transformation is resulting in no new subcycles. SCC9: TOP(ok(X)) -> TOP(active(X)) TOP(mark(X)) -> TOP(proper(X)) By using a polynomial ordering, at least one Dependency Pair of this SCC can be strictly oriented. Additionally, the following rules can be oriented: active(cons(X1, X2)) -> cons(active(X1), X2) active(add(X1, X2)) -> add(active(X1), X2) active(fst(X1, X2)) -> fst(active(X1), X2) active(add(s(X), Y)) -> mark(s(add(X, Y))) active(fst(s(X), cons(Y, Z))) -> mark(cons(Y, fst(X, Z))) active(len(cons(X, Z))) -> mark(s(len(Z))) active(len(X)) -> len(active(X)) active(add(0, X)) -> mark(X) active(from(X)) -> from(active(X)) active(fst(X1, X2)) -> fst(X1, active(X2)) active(len(nil)) -> mark(0) active(from(X)) -> mark(cons(X, from(s(X)))) active(fst(0, Z)) -> mark(nil) active(add(X1, X2)) -> add(X1, active(X2)) proper(len(X)) -> len(proper(X)) proper(nil) -> ok(nil) proper(fst(X1, X2)) -> fst(proper(X1), proper(X2)) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(add(X1, X2)) -> add(proper(X1), proper(X2)) proper(from(X)) -> from(proper(X)) proper(s(X)) -> s(proper(X)) proper(0) -> ok(0) cons(mark(X1), X2) -> mark(cons(X1, X2)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) add(ok(X1), ok(X2)) -> ok(add(X1, X2)) add(mark(X1), X2) -> mark(add(X1, X2)) add(X1, mark(X2)) -> mark(add(X1, X2)) fst(ok(X1), ok(X2)) -> ok(fst(X1, X2)) fst(mark(X1), X2) -> mark(fst(X1, X2)) fst(X1, mark(X2)) -> mark(fst(X1, X2)) s(ok(X)) -> ok(s(X)) len(mark(X)) -> mark(len(X)) len(ok(X)) -> ok(len(X)) from(mark(X)) -> mark(from(X)) from(ok(X)) -> ok(from(X)) Used ordering: Polynomial ordering with Polynomial interpretation: POL(active(x_1)) = x_1 POL(add(x_1, x_2)) = 1 + x_1 + x_2 POL(nil) = 0 POL(s(x_1)) = 0 POL(mark(x_1)) = 1 + x_1 POL(ok(x_1)) = x_1 POL(fst(x_1, x_2)) = 1 + x_1 + x_2 POL(0) = 0 POL(cons(x_1, x_2)) = x_1 POL(proper(x_1)) = x_1 POL(TOP(x_1)) = 1 + x_1 POL(from(x_1)) = 1 + x_1 POL(len(x_1)) = 1 + x_1 resulting in one subcycle. SCC9.Polo1: TOP(ok(X)) -> TOP(active(X)) By using a polynomial ordering, at least one Dependency Pair of this SCC can be strictly oriented. Additionally, the following rules can be oriented: active(cons(X1, X2)) -> cons(active(X1), X2) active(add(X1, X2)) -> add(active(X1), X2) active(fst(X1, X2)) -> fst(active(X1), X2) active(add(s(X), Y)) -> mark(s(add(X, Y))) active(fst(s(X), cons(Y, Z))) -> mark(cons(Y, fst(X, Z))) active(len(cons(X, Z))) -> mark(s(len(Z))) active(len(X)) -> len(active(X)) active(add(0, X)) -> mark(X) active(from(X)) -> from(active(X)) active(fst(X1, X2)) -> fst(X1, active(X2)) active(len(nil)) -> mark(0) active(from(X)) -> mark(cons(X, from(s(X)))) active(fst(0, Z)) -> mark(nil) active(add(X1, X2)) -> add(X1, active(X2)) cons(mark(X1), X2) -> mark(cons(X1, X2)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) add(ok(X1), ok(X2)) -> ok(add(X1, X2)) add(mark(X1), X2) -> mark(add(X1, X2)) add(X1, mark(X2)) -> mark(add(X1, X2)) fst(ok(X1), ok(X2)) -> ok(fst(X1, X2)) fst(mark(X1), X2) -> mark(fst(X1, X2)) fst(X1, mark(X2)) -> mark(fst(X1, X2)) len(mark(X)) -> mark(len(X)) len(ok(X)) -> ok(len(X)) from(mark(X)) -> mark(from(X)) from(ok(X)) -> ok(from(X)) Used ordering: Polynomial ordering with Polynomial interpretation: POL(active(x_1)) = x_1 POL(add(x_1, x_2)) = x_2 POL(nil) = 0 POL(s(x_1)) = 0 POL(TOP(x_1)) = x_1 POL(mark(x_1)) = 0 POL(from(x_1)) = x_1 POL(ok(x_1)) = 1 + x_1 POL(fst(x_1, x_2)) = x_1 POL(len(x_1)) = x_1 POL(0) = 0 POL(cons(x_1, x_2)) = x_1 resulting in no subcycles. Termination of R successfully shown. Duration: 28.66 seconds.