YES
The TRS could be proven terminating. The proof took 2585 ms.
The following DP Processors were used
Problem 1 was processed with processor DependencyGraph (145ms).
| Problem 2 was processed with processor PolynomialLinearRange4iUR (1306ms).
| | Problem 3 was processed with processor DependencyGraph (27ms).
| | | Problem 4 was processed with processor PolynomialLinearRange4iUR (510ms).
| | | | Problem 5 was processed with processor PolynomialLinearRange4iUR (356ms).
| | | | | Problem 6 was processed with processor DependencyGraph (2ms).
| | | | | | Problem 7 was processed with processor PolynomialLinearRange4iUR (30ms).
| | | | | | | Problem 8 was processed with processor PolynomialLinearRange4iUR (6ms).
Problem 1: DependencyGraph
Dependency Pair Problem
Dependency Pairs
a__from#(X) | → | mark#(X) | | mark#(from(X)) | → | a__from#(mark(X)) |
mark#(add(X1, X2)) | → | a__add#(mark(X1), mark(X2)) | | a__fst#(s(X), cons(Y, Z)) | → | mark#(Y) |
mark#(from(X)) | → | mark#(X) | | mark#(cons(X1, X2)) | → | mark#(X1) |
mark#(len(X)) | → | a__len#(mark(X)) | | mark#(fst(X1, X2)) | → | mark#(X1) |
a__add#(0, X) | → | mark#(X) | | mark#(fst(X1, X2)) | → | mark#(X2) |
mark#(fst(X1, X2)) | → | a__fst#(mark(X1), mark(X2)) | | mark#(add(X1, X2)) | → | mark#(X2) |
mark#(len(X)) | → | mark#(X) | | mark#(add(X1, X2)) | → | mark#(X1) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
The following SCCs where found
a__from#(X) → mark#(X) | mark#(from(X)) → a__from#(mark(X)) |
mark#(add(X1, X2)) → a__add#(mark(X1), mark(X2)) | a__fst#(s(X), cons(Y, Z)) → mark#(Y) |
mark#(from(X)) → mark#(X) | mark#(cons(X1, X2)) → mark#(X1) |
mark#(fst(X1, X2)) → mark#(X1) | a__add#(0, X) → mark#(X) |
mark#(fst(X1, X2)) → mark#(X2) | mark#(fst(X1, X2)) → a__fst#(mark(X1), mark(X2)) |
mark#(len(X)) → mark#(X) | mark#(add(X1, X2)) → mark#(X2) |
mark#(add(X1, X2)) → mark#(X1) |
Problem 2: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
a__from#(X) | → | mark#(X) | | mark#(from(X)) | → | a__from#(mark(X)) |
mark#(add(X1, X2)) | → | a__add#(mark(X1), mark(X2)) | | a__fst#(s(X), cons(Y, Z)) | → | mark#(Y) |
mark#(from(X)) | → | mark#(X) | | mark#(cons(X1, X2)) | → | mark#(X1) |
mark#(fst(X1, X2)) | → | mark#(X1) | | a__add#(0, X) | → | mark#(X) |
mark#(fst(X1, X2)) | → | mark#(X2) | | mark#(fst(X1, X2)) | → | a__fst#(mark(X1), mark(X2)) |
mark#(add(X1, X2)) | → | mark#(X2) | | mark#(len(X)) | → | mark#(X) |
mark#(add(X1, X2)) | → | mark#(X1) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
Polynomial Interpretation
- 0: 1
- a__add(x,y): 3y + 3x
- a__add#(x,y): 2y + 2x
- a__from(x): 3x
- a__from#(x): 2x
- a__fst(x,y): 2y + x
- a__fst#(x,y): 2y
- a__len(x): x
- add(x,y): 3y + 3x
- cons(x,y): x
- from(x): 3x
- fst(x,y): 2y + x
- len(x): x
- mark(x): x
- mark#(x): x
- nil: 1
- s(x): 0
Improved Usable rules
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | mark(s(X)) | → | s(X) |
mark(0) | → | 0 | | a__from(X) | → | from(X) |
a__len(X) | → | len(X) | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__len(nil) | → | 0 |
a__fst(X1, X2) | → | fst(X1, X2) | | mark(len(X)) | → | a__len(mark(X)) |
a__add(X1, X2) | → | add(X1, X2) | | a__len(cons(X, Z)) | → | s(len(Z)) |
a__fst(0, Z) | → | nil | | a__add(s(X), Y) | → | s(add(X, Y)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(nil) | → | nil |
mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
a__add(0, X) | → | mark(X) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
Problem 3: DependencyGraph
Dependency Pair Problem
Dependency Pairs
a__from#(X) | → | mark#(X) | | mark#(fst(X1, X2)) | → | a__fst#(mark(X1), mark(X2)) |
mark#(from(X)) | → | a__from#(mark(X)) | | mark#(add(X1, X2)) | → | a__add#(mark(X1), mark(X2)) |
a__fst#(s(X), cons(Y, Z)) | → | mark#(Y) | | mark#(from(X)) | → | mark#(X) |
mark#(cons(X1, X2)) | → | mark#(X1) | | mark#(len(X)) | → | mark#(X) |
mark#(add(X1, X2)) | → | mark#(X2) | | mark#(fst(X1, X2)) | → | mark#(X1) |
mark#(add(X1, X2)) | → | mark#(X1) | | mark#(fst(X1, X2)) | → | mark#(X2) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
The following SCCs where found
a__from#(X) → mark#(X) | mark#(fst(X1, X2)) → a__fst#(mark(X1), mark(X2)) |
mark#(from(X)) → a__from#(mark(X)) | a__fst#(s(X), cons(Y, Z)) → mark#(Y) |
mark#(from(X)) → mark#(X) | mark#(cons(X1, X2)) → mark#(X1) |
mark#(len(X)) → mark#(X) | mark#(add(X1, X2)) → mark#(X2) |
mark#(fst(X1, X2)) → mark#(X1) | mark#(add(X1, X2)) → mark#(X1) |
mark#(fst(X1, X2)) → mark#(X2) |
Problem 4: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
a__from#(X) | → | mark#(X) | | mark#(fst(X1, X2)) | → | a__fst#(mark(X1), mark(X2)) |
mark#(from(X)) | → | a__from#(mark(X)) | | a__fst#(s(X), cons(Y, Z)) | → | mark#(Y) |
mark#(from(X)) | → | mark#(X) | | mark#(cons(X1, X2)) | → | mark#(X1) |
mark#(len(X)) | → | mark#(X) | | mark#(add(X1, X2)) | → | mark#(X2) |
mark#(fst(X1, X2)) | → | mark#(X1) | | mark#(add(X1, X2)) | → | mark#(X1) |
mark#(fst(X1, X2)) | → | mark#(X2) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
Polynomial Interpretation
- 0: 0
- a__add(x,y): 2y + 2x + 1
- a__from(x): x
- a__from#(x): 2x
- a__fst(x,y): y + x
- a__fst#(x,y): 2y
- a__len(x): x
- add(x,y): 2y + 2x + 1
- cons(x,y): x
- from(x): x
- fst(x,y): y + x
- len(x): x
- mark(x): x
- mark#(x): 2x
- nil: 0
- s(x): 0
Improved Usable rules
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | mark(s(X)) | → | s(X) |
mark(0) | → | 0 | | a__from(X) | → | from(X) |
a__len(X) | → | len(X) | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__len(nil) | → | 0 |
a__fst(X1, X2) | → | fst(X1, X2) | | mark(len(X)) | → | a__len(mark(X)) |
a__add(X1, X2) | → | add(X1, X2) | | a__len(cons(X, Z)) | → | s(len(Z)) |
a__fst(0, Z) | → | nil | | a__add(s(X), Y) | → | s(add(X, Y)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(nil) | → | nil |
mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
a__add(0, X) | → | mark(X) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
mark#(add(X1, X2)) | → | mark#(X2) | | mark#(add(X1, X2)) | → | mark#(X1) |
Problem 5: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
a__from#(X) | → | mark#(X) | | mark#(from(X)) | → | a__from#(mark(X)) |
mark#(fst(X1, X2)) | → | a__fst#(mark(X1), mark(X2)) | | a__fst#(s(X), cons(Y, Z)) | → | mark#(Y) |
mark#(from(X)) | → | mark#(X) | | mark#(cons(X1, X2)) | → | mark#(X1) |
mark#(len(X)) | → | mark#(X) | | mark#(fst(X1, X2)) | → | mark#(X1) |
mark#(fst(X1, X2)) | → | mark#(X2) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
Polynomial Interpretation
- 0: 0
- a__add(x,y): y + 2
- a__from(x): 3x + 1
- a__from#(x): 2x + 1
- a__fst(x,y): 2y + x
- a__fst#(x,y): 2y
- a__len(x): x
- add(x,y): y + 2
- cons(x,y): x + 1
- from(x): 3x + 1
- fst(x,y): 2y + x
- len(x): x
- mark(x): x
- mark#(x): x + 1
- nil: 0
- s(x): 0
Improved Usable rules
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | mark(s(X)) | → | s(X) |
mark(0) | → | 0 | | a__from(X) | → | from(X) |
a__len(X) | → | len(X) | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__len(nil) | → | 0 |
a__fst(X1, X2) | → | fst(X1, X2) | | mark(len(X)) | → | a__len(mark(X)) |
a__add(X1, X2) | → | add(X1, X2) | | a__len(cons(X, Z)) | → | s(len(Z)) |
a__fst(0, Z) | → | nil | | a__add(s(X), Y) | → | s(add(X, Y)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(nil) | → | nil |
mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
a__add(0, X) | → | mark(X) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
mark#(fst(X1, X2)) | → | a__fst#(mark(X1), mark(X2)) | | mark#(from(X)) | → | a__from#(mark(X)) |
a__fst#(s(X), cons(Y, Z)) | → | mark#(Y) | | mark#(from(X)) | → | mark#(X) |
mark#(cons(X1, X2)) | → | mark#(X1) |
Problem 6: DependencyGraph
Dependency Pair Problem
Dependency Pairs
a__from#(X) | → | mark#(X) | | mark#(len(X)) | → | mark#(X) |
mark#(fst(X1, X2)) | → | mark#(X1) | | mark#(fst(X1, X2)) | → | mark#(X2) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
The following SCCs where found
mark#(len(X)) → mark#(X) | mark#(fst(X1, X2)) → mark#(X1) |
mark#(fst(X1, X2)) → mark#(X2) |
Problem 7: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
mark#(len(X)) | → | mark#(X) | | mark#(fst(X1, X2)) | → | mark#(X1) |
mark#(fst(X1, X2)) | → | mark#(X2) |
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
Polynomial Interpretation
- 0: 0
- a__add(x,y): 0
- a__from(x): 0
- a__fst(x,y): 0
- a__len(x): 0
- add(x,y): 0
- cons(x,y): 0
- from(x): 0
- fst(x,y): y + x + 1
- len(x): 3x
- mark(x): 0
- mark#(x): 3x
- nil: 0
- s(x): 0
There are no usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
mark#(fst(X1, X2)) | → | mark#(X1) | | mark#(fst(X1, X2)) | → | mark#(X2) |
Problem 8: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
Rewrite Rules
a__fst(0, Z) | → | nil | | a__fst(s(X), cons(Y, Z)) | → | cons(mark(Y), fst(X, Z)) |
a__from(X) | → | cons(mark(X), from(s(X))) | | a__add(0, X) | → | mark(X) |
a__add(s(X), Y) | → | s(add(X, Y)) | | a__len(nil) | → | 0 |
a__len(cons(X, Z)) | → | s(len(Z)) | | mark(fst(X1, X2)) | → | a__fst(mark(X1), mark(X2)) |
mark(from(X)) | → | a__from(mark(X)) | | mark(add(X1, X2)) | → | a__add(mark(X1), mark(X2)) |
mark(len(X)) | → | a__len(mark(X)) | | mark(0) | → | 0 |
mark(s(X)) | → | s(X) | | mark(nil) | → | nil |
mark(cons(X1, X2)) | → | cons(mark(X1), X2) | | a__fst(X1, X2) | → | fst(X1, X2) |
a__from(X) | → | from(X) | | a__add(X1, X2) | → | add(X1, X2) |
a__len(X) | → | len(X) |
Original Signature
Termination of terms over the following signature is verified: mark, from, len, a__add, add, fst, 0, s, a__fst, a__len, a__from, nil, cons
Strategy
Polynomial Interpretation
- 0: 0
- a__add(x,y): 0
- a__from(x): 0
- a__fst(x,y): 0
- a__len(x): 0
- add(x,y): 0
- cons(x,y): 0
- from(x): 0
- fst(x,y): 0
- len(x): x + 2
- mark(x): 0
- mark#(x): x + 1
- nil: 0
- s(x): 0
There are no usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed: