YES
The TRS could be proven terminating. The proof took 4149 ms.
The following DP Processors were used
Problem 1 was processed with processor DependencyGraph (1004ms).
| Problem 2 was processed with processor SubtermCriterion (24ms).
| | Problem 11 was processed with processor SubtermCriterion (2ms).
| Problem 3 was processed with processor SubtermCriterion (2ms).
| Problem 4 was processed with processor PolynomialLinearRange4iUR (1766ms).
| | Problem 13 was processed with processor PolynomialLinearRange4iUR (1142ms).
| Problem 5 was processed with processor SubtermCriterion (23ms).
| Problem 6 was processed with processor SubtermCriterion (26ms).
| Problem 7 was processed with processor SubtermCriterion (23ms).
| | Problem 12 was processed with processor SubtermCriterion (1ms).
| Problem 8 was processed with processor SubtermCriterion (0ms).
| Problem 9 was processed with processor SubtermCriterion (3ms).
| Problem 10 was processed with processor SubtermCriterion (1ms).
Problem 1: DependencyGraph
Dependency Pair Problem
Dependency Pairs
proper#(cons(X1, X2)) | → | proper#(X1) | | top#(ok(X)) | → | top#(active(X)) |
active#(app(X1, X2)) | → | active#(X1) | | proper#(zWadr(X1, X2)) | → | proper#(X1) |
cons#(ok(X1), ok(X2)) | → | cons#(X1, X2) | | active#(app(X1, X2)) | → | app#(active(X1), X2) |
from#(ok(X)) | → | from#(X) | | active#(app(X1, X2)) | → | app#(X1, active(X2)) |
active#(cons(X1, X2)) | → | cons#(active(X1), X2) | | app#(mark(X1), X2) | → | app#(X1, X2) |
active#(zWadr(cons(X, XS), cons(Y, YS))) | → | cons#(X, nil) | | active#(prefix(L)) | → | prefix#(L) |
top#(mark(X)) | → | proper#(X) | | proper#(zWadr(X1, X2)) | → | proper#(X2) |
proper#(from(X)) | → | proper#(X) | | proper#(prefix(X)) | → | proper#(X) |
active#(app(cons(X, XS), YS)) | → | cons#(X, app(XS, YS)) | | active#(zWadr(cons(X, XS), cons(Y, YS))) | → | zWadr#(XS, YS) |
active#(prefix(X)) | → | prefix#(active(X)) | | top#(mark(X)) | → | top#(proper(X)) |
proper#(cons(X1, X2)) | → | proper#(X2) | | active#(app(cons(X, XS), YS)) | → | app#(XS, YS) |
active#(prefix(X)) | → | active#(X) | | zWadr#(X1, mark(X2)) | → | zWadr#(X1, X2) |
active#(from(X)) | → | s#(X) | | active#(zWadr(cons(X, XS), cons(Y, YS))) | → | app#(Y, cons(X, nil)) |
proper#(s(X)) | → | proper#(X) | | prefix#(ok(X)) | → | prefix#(X) |
prefix#(mark(X)) | → | prefix#(X) | | zWadr#(mark(X1), X2) | → | zWadr#(X1, X2) |
proper#(zWadr(X1, X2)) | → | zWadr#(proper(X1), proper(X2)) | | active#(zWadr(cons(X, XS), cons(Y, YS))) | → | cons#(app(Y, cons(X, nil)), zWadr(XS, YS)) |
active#(cons(X1, X2)) | → | active#(X1) | | zWadr#(ok(X1), ok(X2)) | → | zWadr#(X1, X2) |
active#(prefix(L)) | → | zWadr#(L, prefix(L)) | | cons#(mark(X1), X2) | → | cons#(X1, X2) |
proper#(app(X1, X2)) | → | app#(proper(X1), proper(X2)) | | active#(from(X)) | → | from#(active(X)) |
from#(mark(X)) | → | from#(X) | | proper#(app(X1, X2)) | → | proper#(X2) |
top#(ok(X)) | → | active#(X) | | active#(from(X)) | → | cons#(X, from(s(X))) |
active#(zWadr(X1, X2)) | → | active#(X1) | | proper#(from(X)) | → | from#(proper(X)) |
app#(X1, mark(X2)) | → | app#(X1, X2) | | proper#(app(X1, X2)) | → | proper#(X1) |
active#(app(X1, X2)) | → | active#(X2) | | active#(zWadr(X1, X2)) | → | zWadr#(active(X1), X2) |
active#(from(X)) | → | active#(X) | | proper#(prefix(X)) | → | prefix#(proper(X)) |
app#(ok(X1), ok(X2)) | → | app#(X1, X2) | | active#(zWadr(X1, X2)) | → | active#(X2) |
active#(s(X)) | → | s#(active(X)) | | s#(ok(X)) | → | s#(X) |
s#(mark(X)) | → | s#(X) | | proper#(cons(X1, X2)) | → | cons#(proper(X1), proper(X2)) |
active#(prefix(L)) | → | cons#(nil, zWadr(L, prefix(L))) | | active#(s(X)) | → | active#(X) |
proper#(s(X)) | → | s#(proper(X)) | | active#(zWadr(X1, X2)) | → | zWadr#(X1, active(X2)) |
active#(from(X)) | → | from#(s(X)) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
The following SCCs where found
prefix#(mark(X)) → prefix#(X) | prefix#(ok(X)) → prefix#(X) |
cons#(mark(X1), X2) → cons#(X1, X2) | cons#(ok(X1), ok(X2)) → cons#(X1, X2) |
app#(ok(X1), ok(X2)) → app#(X1, X2) | app#(X1, mark(X2)) → app#(X1, X2) |
app#(mark(X1), X2) → app#(X1, X2) |
proper#(s(X)) → proper#(X) | proper#(cons(X1, X2)) → proper#(X1) |
proper#(cons(X1, X2)) → proper#(X2) | proper#(zWadr(X1, X2)) → proper#(X1) |
proper#(app(X1, X2)) → proper#(X1) | proper#(app(X1, X2)) → proper#(X2) |
proper#(from(X)) → proper#(X) | proper#(zWadr(X1, X2)) → proper#(X2) |
proper#(prefix(X)) → proper#(X) |
from#(mark(X)) → from#(X) | from#(ok(X)) → from#(X) |
top#(mark(X)) → top#(proper(X)) | top#(ok(X)) → top#(active(X)) |
s#(mark(X)) → s#(X) | s#(ok(X)) → s#(X) |
zWadr#(ok(X1), ok(X2)) → zWadr#(X1, X2) | zWadr#(mark(X1), X2) → zWadr#(X1, X2) |
zWadr#(X1, mark(X2)) → zWadr#(X1, X2) |
active#(from(X)) → active#(X) | active#(s(X)) → active#(X) |
active#(app(X1, X2)) → active#(X1) | active#(zWadr(X1, X2)) → active#(X1) |
active#(zWadr(X1, X2)) → active#(X2) | active#(prefix(X)) → active#(X) |
active#(cons(X1, X2)) → active#(X1) | active#(app(X1, X2)) → active#(X2) |
Problem 2: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
zWadr#(ok(X1), ok(X2)) | → | zWadr#(X1, X2) | | zWadr#(mark(X1), X2) | → | zWadr#(X1, X2) |
zWadr#(X1, mark(X2)) | → | zWadr#(X1, X2) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
zWadr#(ok(X1), ok(X2)) | → | zWadr#(X1, X2) | | zWadr#(mark(X1), X2) | → | zWadr#(X1, X2) |
Problem 11: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
zWadr#(X1, mark(X2)) | → | zWadr#(X1, X2) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, ok, mark, proper, from, top, cons, nil
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
zWadr#(X1, mark(X2)) | → | zWadr#(X1, X2) |
Problem 3: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
prefix#(mark(X)) | → | prefix#(X) | | prefix#(ok(X)) | → | prefix#(X) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
prefix#(ok(X)) | → | prefix#(X) | | prefix#(mark(X)) | → | prefix#(X) |
Problem 4: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
top#(mark(X)) | → | top#(proper(X)) | | top#(ok(X)) | → | top#(active(X)) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Polynomial Interpretation
- active(x): x
- app(x,y): y + x + 1
- cons(x,y): x
- from(x): x + 2
- mark(x): x + 1
- nil: 0
- ok(x): x
- prefix(x): x + 1
- proper(x): x
- s(x): x
- top(x): 0
- top#(x): x
- zWadr(x,y): y + x + 2
Improved Usable rules
active(s(X)) | → | s(active(X)) | | active(app(X1, X2)) | → | app(X1, active(X2)) |
cons(mark(X1), X2) | → | mark(cons(X1, X2)) | | active(from(X)) | → | from(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | active(prefix(X)) | → | prefix(active(X)) |
proper(prefix(X)) | → | prefix(proper(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
prefix(ok(X)) | → | ok(prefix(X)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | s(mark(X)) | → | mark(s(X)) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(nil, YS)) | → | mark(nil) |
proper(s(X)) | → | s(proper(X)) | | proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(app(nil, YS)) | → | mark(YS) |
prefix(mark(X)) | → | mark(prefix(X)) | | zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | s(ok(X)) | → | ok(s(X)) |
from(ok(X)) | → | ok(from(X)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(cons(X1, X2)) | → | cons(active(X1), X2) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) | | proper(nil) | → | ok(nil) |
active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) | | active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | proper(from(X)) | → | from(proper(X)) |
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: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
top#(ok(X)) | → | top#(active(X)) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, ok, mark, proper, from, top, cons, nil
Strategy
Polynomial Interpretation
- active(x): 2x
- app(x,y): y
- cons(x,y): 2x + 1
- from(x): x
- mark(x): 0
- nil: 0
- ok(x): 2x + 1
- prefix(x): 2x
- proper(x): 0
- s(x): x
- top(x): 0
- top#(x): x + 1
- zWadr(x,y): x
Improved Usable rules
active(s(X)) | → | s(active(X)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(from(X)) | → | from(active(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) | | active(prefix(X)) | → | prefix(active(X)) |
prefix(ok(X)) | → | ok(prefix(X)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | s(mark(X)) | → | mark(s(X)) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(app(nil, YS)) | → | mark(YS) |
prefix(mark(X)) | → | mark(prefix(X)) | | zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | s(ok(X)) | → | ok(s(X)) |
from(ok(X)) | → | ok(from(X)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(app(X1, X2)) | → | app(active(X1), X2) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
zWadr(mark(X1), X2) | → | mark(zWadr(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 5: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
from#(mark(X)) | → | from#(X) | | from#(ok(X)) | → | from#(X) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
from#(mark(X)) | → | from#(X) | | from#(ok(X)) | → | from#(X) |
Problem 6: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
cons#(mark(X1), X2) | → | cons#(X1, X2) | | cons#(ok(X1), ok(X2)) | → | cons#(X1, X2) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
cons#(mark(X1), X2) | → | cons#(X1, X2) | | cons#(ok(X1), ok(X2)) | → | cons#(X1, X2) |
Problem 7: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
app#(ok(X1), ok(X2)) | → | app#(X1, X2) | | app#(X1, mark(X2)) | → | app#(X1, X2) |
app#(mark(X1), X2) | → | app#(X1, X2) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
app#(ok(X1), ok(X2)) | → | app#(X1, X2) | | app#(mark(X1), X2) | → | app#(X1, X2) |
Problem 12: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
app#(X1, mark(X2)) | → | app#(X1, X2) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, ok, mark, proper, from, top, cons, nil
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
app#(X1, mark(X2)) | → | app#(X1, X2) |
Problem 8: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
active#(from(X)) | → | active#(X) | | active#(s(X)) | → | active#(X) |
active#(app(X1, X2)) | → | active#(X1) | | active#(zWadr(X1, X2)) | → | active#(X1) |
active#(zWadr(X1, X2)) | → | active#(X2) | | active#(prefix(X)) | → | active#(X) |
active#(cons(X1, X2)) | → | active#(X1) | | active#(app(X1, X2)) | → | active#(X2) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
active#(s(X)) | → | active#(X) | | active#(from(X)) | → | active#(X) |
active#(app(X1, X2)) | → | active#(X1) | | active#(zWadr(X1, X2)) | → | active#(X1) |
active#(zWadr(X1, X2)) | → | active#(X2) | | active#(prefix(X)) | → | active#(X) |
active#(app(X1, X2)) | → | active#(X2) | | active#(cons(X1, X2)) | → | active#(X1) |
Problem 9: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
s#(mark(X)) | → | s#(X) | | s#(ok(X)) | → | s#(X) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
s#(mark(X)) | → | s#(X) | | s#(ok(X)) | → | s#(X) |
Problem 10: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
proper#(s(X)) | → | proper#(X) | | proper#(cons(X1, X2)) | → | proper#(X1) |
proper#(cons(X1, X2)) | → | proper#(X2) | | proper#(zWadr(X1, X2)) | → | proper#(X1) |
proper#(app(X1, X2)) | → | proper#(X1) | | proper#(app(X1, X2)) | → | proper#(X2) |
proper#(from(X)) | → | proper#(X) | | proper#(zWadr(X1, X2)) | → | proper#(X2) |
proper#(prefix(X)) | → | proper#(X) |
Rewrite Rules
active(app(nil, YS)) | → | mark(YS) | | active(app(cons(X, XS), YS)) | → | mark(cons(X, app(XS, YS))) |
active(from(X)) | → | mark(cons(X, from(s(X)))) | | active(zWadr(nil, YS)) | → | mark(nil) |
active(zWadr(XS, nil)) | → | mark(nil) | | active(zWadr(cons(X, XS), cons(Y, YS))) | → | mark(cons(app(Y, cons(X, nil)), zWadr(XS, YS))) |
active(prefix(L)) | → | mark(cons(nil, zWadr(L, prefix(L)))) | | active(app(X1, X2)) | → | app(active(X1), X2) |
active(app(X1, X2)) | → | app(X1, active(X2)) | | active(cons(X1, X2)) | → | cons(active(X1), X2) |
active(from(X)) | → | from(active(X)) | | active(s(X)) | → | s(active(X)) |
active(zWadr(X1, X2)) | → | zWadr(active(X1), X2) | | active(zWadr(X1, X2)) | → | zWadr(X1, active(X2)) |
active(prefix(X)) | → | prefix(active(X)) | | app(mark(X1), X2) | → | mark(app(X1, X2)) |
app(X1, mark(X2)) | → | mark(app(X1, X2)) | | cons(mark(X1), X2) | → | mark(cons(X1, X2)) |
from(mark(X)) | → | mark(from(X)) | | s(mark(X)) | → | mark(s(X)) |
zWadr(mark(X1), X2) | → | mark(zWadr(X1, X2)) | | zWadr(X1, mark(X2)) | → | mark(zWadr(X1, X2)) |
prefix(mark(X)) | → | mark(prefix(X)) | | proper(app(X1, X2)) | → | app(proper(X1), proper(X2)) |
proper(nil) | → | ok(nil) | | proper(cons(X1, X2)) | → | cons(proper(X1), proper(X2)) |
proper(from(X)) | → | from(proper(X)) | | proper(s(X)) | → | s(proper(X)) |
proper(zWadr(X1, X2)) | → | zWadr(proper(X1), proper(X2)) | | proper(prefix(X)) | → | prefix(proper(X)) |
app(ok(X1), ok(X2)) | → | ok(app(X1, X2)) | | cons(ok(X1), ok(X2)) | → | ok(cons(X1, X2)) |
from(ok(X)) | → | ok(from(X)) | | s(ok(X)) | → | ok(s(X)) |
zWadr(ok(X1), ok(X2)) | → | ok(zWadr(X1, X2)) | | prefix(ok(X)) | → | ok(prefix(X)) |
top(mark(X)) | → | top(proper(X)) | | top(ok(X)) | → | top(active(X)) |
Original Signature
Termination of terms over the following signature is verified: app, zWadr, s, prefix, active, mark, ok, from, proper, nil, cons, top
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
proper#(s(X)) | → | proper#(X) | | proper#(cons(X1, X2)) | → | proper#(X1) |
proper#(cons(X1, X2)) | → | proper#(X2) | | proper#(zWadr(X1, X2)) | → | proper#(X1) |
proper#(app(X1, X2)) | → | proper#(X1) | | proper#(app(X1, X2)) | → | proper#(X2) |
proper#(prefix(X)) | → | proper#(X) | | proper#(from(X)) | → | proper#(X) |
proper#(zWadr(X1, X2)) | → | proper#(X2) |