YES
The TRS could be proven terminating. The proof took 19632 ms.
The following DP Processors were used
Problem 1 was processed with processor DependencyGraph (677ms).
| Problem 2 was processed with processor SubtermCriterion (3ms).
| Problem 3 was processed with processor SubtermCriterion (0ms).
| Problem 4 was processed with processor SubtermCriterion (1ms).
| Problem 5 was processed with processor SubtermCriterion (0ms).
| Problem 6 was processed with processor PolynomialOrderingProcessor (15601ms).
| | Problem 13 was processed with processor PolynomialOrderingProcessor (1726ms).
| Problem 7 was processed with processor SubtermCriterion (0ms).
| Problem 8 was processed with processor SubtermCriterion (0ms).
| | Problem 12 was processed with processor SubtermCriterion (0ms).
| Problem 9 was processed with processor SubtermCriterion (1ms).
| Problem 10 was processed with processor SubtermCriterion (0ms).
| Problem 11 was processed with processor SubtermCriterion (1ms).
Problem 1: DependencyGraph
Dependency Pair Problem
Dependency Pairs
top#(ok(X)) | → | top#(active(X)) | | active#(isList(__(V1, V2))) | → | isList#(V1) |
active#(__(__(X, Y), Z)) | → | __#(X, __(Y, Z)) | | isPal#(ok(X)) | → | isPal#(X) |
proper#(isList(X)) | → | proper#(X) | | proper#(and(X1, X2)) | → | and#(proper(X1), proper(X2)) |
proper#(and(X1, X2)) | → | proper#(X2) | | proper#(isPal(X)) | → | proper#(X) |
top#(mark(X)) | → | proper#(X) | | active#(__(X1, X2)) | → | __#(active(X1), X2) |
proper#(__(X1, X2)) | → | proper#(X1) | | __#(mark(X1), X2) | → | __#(X1, X2) |
top#(mark(X)) | → | top#(proper(X)) | | active#(isNePal(V)) | → | isQid#(V) |
proper#(isNePal(X)) | → | proper#(X) | | active#(isNePal(__(I, __(P, I)))) | → | and#(isQid(I), isPal(P)) |
proper#(isNeList(X)) | → | proper#(X) | | active#(isNeList(__(V1, V2))) | → | isNeList#(V2) |
and#(mark(X1), X2) | → | and#(X1, X2) | | isNePal#(ok(X)) | → | isNePal#(X) |
proper#(isNePal(X)) | → | isNePal#(proper(X)) | | isQid#(ok(X)) | → | isQid#(X) |
proper#(isQid(X)) | → | proper#(X) | | proper#(isPal(X)) | → | isPal#(proper(X)) |
active#(isNeList(__(V1, V2))) | → | isNeList#(V1) | | active#(isNeList(__(V1, V2))) | → | isList#(V1) |
and#(ok(X1), ok(X2)) | → | and#(X1, X2) | | proper#(and(X1, X2)) | → | proper#(X1) |
top#(ok(X)) | → | active#(X) | | active#(isNeList(V)) | → | isQid#(V) |
active#(and(X1, X2)) | → | and#(active(X1), X2) | | proper#(__(X1, X2)) | → | __#(proper(X1), proper(X2)) |
active#(isPal(V)) | → | isNePal#(V) | | active#(__(X1, X2)) | → | active#(X2) |
isList#(ok(X)) | → | isList#(X) | | active#(__(X1, X2)) | → | __#(X1, active(X2)) |
proper#(isList(X)) | → | isList#(proper(X)) | | isNeList#(ok(X)) | → | isNeList#(X) |
active#(isNePal(__(I, __(P, I)))) | → | isPal#(P) | | proper#(isQid(X)) | → | isQid#(proper(X)) |
active#(__(X1, X2)) | → | active#(X1) | | active#(isNeList(__(V1, V2))) | → | isList#(V2) |
__#(ok(X1), ok(X2)) | → | __#(X1, X2) | | active#(__(__(X, Y), Z)) | → | __#(Y, Z) |
active#(isList(V)) | → | isNeList#(V) | | active#(isList(__(V1, V2))) | → | and#(isList(V1), isList(V2)) |
__#(X1, mark(X2)) | → | __#(X1, X2) | | active#(isNePal(__(I, __(P, I)))) | → | isQid#(I) |
proper#(__(X1, X2)) | → | proper#(X2) | | active#(isNeList(__(V1, V2))) | → | and#(isList(V1), isNeList(V2)) |
proper#(isNeList(X)) | → | isNeList#(proper(X)) | | active#(and(X1, X2)) | → | active#(X1) |
active#(isNeList(__(V1, V2))) | → | and#(isNeList(V1), isList(V2)) | | active#(isList(__(V1, V2))) | → | isList#(V2) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
The following SCCs where found
isQid#(ok(X)) → isQid#(X) |
isList#(ok(X)) → isList#(X) |
__#(mark(X1), X2) → __#(X1, X2) | __#(ok(X1), ok(X2)) → __#(X1, X2) |
__#(X1, mark(X2)) → __#(X1, X2) |
isPal#(ok(X)) → isPal#(X) |
isNeList#(ok(X)) → isNeList#(X) |
and#(ok(X1), ok(X2)) → and#(X1, X2) | and#(mark(X1), X2) → and#(X1, X2) |
isNePal#(ok(X)) → isNePal#(X) |
active#(__(X1, X2)) → active#(X1) | active#(__(X1, X2)) → active#(X2) |
active#(and(X1, X2)) → active#(X1) |
proper#(__(X1, X2)) → proper#(X1) | proper#(isPal(X)) → proper#(X) |
proper#(and(X1, X2)) → proper#(X2) | proper#(isList(X)) → proper#(X) |
proper#(isQid(X)) → proper#(X) | proper#(isNePal(X)) → proper#(X) |
proper#(isNeList(X)) → proper#(X) | proper#(__(X1, X2)) → proper#(X2) |
proper#(and(X1, X2)) → proper#(X1) |
top#(mark(X)) → top#(proper(X)) | top#(ok(X)) → top#(active(X)) |
Problem 2: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
and#(ok(X1), ok(X2)) | → | and#(X1, X2) | | and#(mark(X1), X2) | → | and#(X1, X2) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
and#(ok(X1), ok(X2)) | → | and#(X1, X2) | | and#(mark(X1), X2) | → | and#(X1, X2) |
Problem 3: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
active#(__(X1, X2)) | → | active#(X1) | | active#(__(X1, X2)) | → | active#(X2) |
active#(and(X1, X2)) | → | active#(X1) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
active#(__(X1, X2)) | → | active#(X1) | | active#(__(X1, X2)) | → | active#(X2) |
active#(and(X1, X2)) | → | active#(X1) |
Problem 4: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
isNePal#(ok(X)) | → | isNePal#(X) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
isNePal#(ok(X)) | → | isNePal#(X) |
Problem 5: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
isNeList#(ok(X)) | → | isNeList#(X) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
isNeList#(ok(X)) | → | isNeList#(X) |
Problem 6: PolynomialOrderingProcessor
Dependency Pair Problem
Dependency Pairs
top#(mark(X)) | → | top#(proper(X)) | | top#(ok(X)) | → | top#(active(X)) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Polynomial Interpretation
- __(x,y): y + 4x + 1
- a: 3
- active(x): x
- and(x,y): y + x
- e: 3
- i: 3
- isList(x): 3x + 2
- isNeList(x): 3x + 1
- isNePal(x): x + 3
- isPal(x): x + 4
- isQid(x): x
- mark(x): x + 1
- nil: 1
- o: 3
- ok(x): x
- proper(x): x
- top(x): -2
- top#(x): 4x + 1
- tt: 2
- u: 4
Improved Usable rules
active(__(X1, X2)) | → | __(active(X1), X2) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | active(isQid(a)) | → | mark(tt) |
active(__(X, nil)) | → | mark(X) | | active(isNePal(V)) | → | mark(isQid(V)) |
proper(i) | → | ok(i) | | __(mark(X1), X2) | → | mark(__(X1, X2)) |
active(isQid(o)) | → | mark(tt) | | isQid(ok(X)) | → | ok(isQid(X)) |
proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) | | proper(e) | → | ok(e) |
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | proper(a) | → | ok(a) |
active(isQid(i)) | → | mark(tt) | | active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) |
active(isList(V)) | → | mark(isNeList(V)) | | isNePal(ok(X)) | → | ok(isNePal(X)) |
active(isQid(e)) | → | mark(tt) | | active(and(X1, X2)) | → | and(active(X1), X2) |
isPal(ok(X)) | → | ok(isPal(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | proper(o) | → | ok(o) |
active(__(nil, X)) | → | mark(X) | | active(isPal(V)) | → | mark(isNePal(V)) |
active(isQid(u)) | → | mark(tt) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
active(isPal(nil)) | → | mark(tt) | | active(isNeList(V)) | → | mark(isQid(V)) |
isList(ok(X)) | → | ok(isList(X)) | | active(isList(nil)) | → | mark(tt) |
proper(u) | → | ok(u) | | active(and(tt, X)) | → | mark(X) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) | | proper(nil) | → | ok(nil) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | active(__(X1, X2)) | → | __(X1, active(X2)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
top#(mark(X)) | → | top#(proper(X)) |
Problem 13: PolynomialOrderingProcessor
Dependency Pair Problem
Dependency Pairs
top#(ok(X)) | → | top#(active(X)) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, proper, isQid, top, nil
Strategy
Polynomial Interpretation
- __(x,y): x + 1
- a: -1
- active(x): x
- and(x,y): y + 1
- e: -1
- i: 5
- isList(x): 1
- isNeList(x): 1
- isNePal(x): 1
- isPal(x): 1
- isQid(x): 1
- mark(x): 1
- nil: 1
- o: -1
- ok(x): x + 3
- proper(x): -2
- top(x): -2
- top#(x): 2x - 2
- tt: 3
- u: -1
Improved Usable rules
active(__(X1, X2)) | → | __(active(X1), X2) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | active(isQid(a)) | → | mark(tt) |
active(__(X, nil)) | → | mark(X) | | active(isNePal(V)) | → | mark(isQid(V)) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | active(isQid(o)) | → | mark(tt) |
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(isQid(i)) | → | mark(tt) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isList(V)) | → | mark(isNeList(V)) |
active(isQid(e)) | → | mark(tt) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(ok(X1), ok(X2)) | → | ok(__(X1, X2)) | | active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) |
active(__(nil, X)) | → | mark(X) | | active(isPal(V)) | → | mark(isNePal(V)) |
active(isQid(u)) | → | mark(tt) | | active(isPal(nil)) | → | mark(tt) |
active(isNeList(V)) | → | mark(isQid(V)) | | active(isList(nil)) | → | mark(tt) |
active(and(tt, X)) | → | mark(X) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | active(__(X1, X2)) | → | __(X1, active(X2)) |
__(X1, mark(X2)) | → | mark(__(X1, X2)) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
top#(ok(X)) | → | top#(active(X)) |
Problem 7: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
isPal#(ok(X)) | → | isPal#(X) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
isPal#(ok(X)) | → | isPal#(X) |
Problem 8: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
__#(mark(X1), X2) | → | __#(X1, X2) | | __#(ok(X1), ok(X2)) | → | __#(X1, X2) |
__#(X1, mark(X2)) | → | __#(X1, X2) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
__#(mark(X1), X2) | → | __#(X1, X2) | | __#(ok(X1), ok(X2)) | → | __#(X1, X2) |
Problem 12: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
__#(X1, mark(X2)) | → | __#(X1, X2) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, proper, isQid, top, nil
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
__#(X1, mark(X2)) | → | __#(X1, X2) |
Problem 9: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
isQid#(ok(X)) | → | isQid#(X) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
isQid#(ok(X)) | → | isQid#(X) |
Problem 10: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
proper#(__(X1, X2)) | → | proper#(X1) | | proper#(isPal(X)) | → | proper#(X) |
proper#(and(X1, X2)) | → | proper#(X2) | | proper#(isList(X)) | → | proper#(X) |
proper#(isQid(X)) | → | proper#(X) | | proper#(isNePal(X)) | → | proper#(X) |
proper#(isNeList(X)) | → | proper#(X) | | proper#(__(X1, X2)) | → | proper#(X2) |
proper#(and(X1, X2)) | → | proper#(X1) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
proper#(__(X1, X2)) | → | proper#(X1) | | proper#(isPal(X)) | → | proper#(X) |
proper#(and(X1, X2)) | → | proper#(X2) | | proper#(isQid(X)) | → | proper#(X) |
proper#(isList(X)) | → | proper#(X) | | proper#(isNePal(X)) | → | proper#(X) |
proper#(isNeList(X)) | → | proper#(X) | | proper#(__(X1, X2)) | → | proper#(X2) |
proper#(and(X1, X2)) | → | proper#(X1) |
Problem 11: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
isList#(ok(X)) | → | isList#(X) |
Rewrite Rules
active(__(__(X, Y), Z)) | → | mark(__(X, __(Y, Z))) | | active(__(X, nil)) | → | mark(X) |
active(__(nil, X)) | → | mark(X) | | active(and(tt, X)) | → | mark(X) |
active(isList(V)) | → | mark(isNeList(V)) | | active(isList(nil)) | → | mark(tt) |
active(isList(__(V1, V2))) | → | mark(and(isList(V1), isList(V2))) | | active(isNeList(V)) | → | mark(isQid(V)) |
active(isNeList(__(V1, V2))) | → | mark(and(isList(V1), isNeList(V2))) | | active(isNeList(__(V1, V2))) | → | mark(and(isNeList(V1), isList(V2))) |
active(isNePal(V)) | → | mark(isQid(V)) | | active(isNePal(__(I, __(P, I)))) | → | mark(and(isQid(I), isPal(P))) |
active(isPal(V)) | → | mark(isNePal(V)) | | active(isPal(nil)) | → | mark(tt) |
active(isQid(a)) | → | mark(tt) | | active(isQid(e)) | → | mark(tt) |
active(isQid(i)) | → | mark(tt) | | active(isQid(o)) | → | mark(tt) |
active(isQid(u)) | → | mark(tt) | | active(__(X1, X2)) | → | __(active(X1), X2) |
active(__(X1, X2)) | → | __(X1, active(X2)) | | active(and(X1, X2)) | → | and(active(X1), X2) |
__(mark(X1), X2) | → | mark(__(X1, X2)) | | __(X1, mark(X2)) | → | mark(__(X1, X2)) |
and(mark(X1), X2) | → | mark(and(X1, X2)) | | proper(__(X1, X2)) | → | __(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(and(X1, X2)) | → | and(proper(X1), proper(X2)) |
proper(tt) | → | ok(tt) | | proper(isList(X)) | → | isList(proper(X)) |
proper(isNeList(X)) | → | isNeList(proper(X)) | | proper(isQid(X)) | → | isQid(proper(X)) |
proper(isNePal(X)) | → | isNePal(proper(X)) | | proper(isPal(X)) | → | isPal(proper(X)) |
proper(a) | → | ok(a) | | proper(e) | → | ok(e) |
proper(i) | → | ok(i) | | proper(o) | → | ok(o) |
proper(u) | → | ok(u) | | __(ok(X1), ok(X2)) | → | ok(__(X1, X2)) |
and(ok(X1), ok(X2)) | → | ok(and(X1, X2)) | | isList(ok(X)) | → | ok(isList(X)) |
isNeList(ok(X)) | → | ok(isNeList(X)) | | isQid(ok(X)) | → | ok(isQid(X)) |
isNePal(ok(X)) | → | ok(isNePal(X)) | | isPal(ok(X)) | → | ok(isPal(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: isList, e, a, isNeList, o, __, mark, isPal, i, and, u, tt, isNePal, active, ok, isQid, proper, nil, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
isList#(ok(X)) | → | isList#(X) |