YES
The TRS could be proven terminating. The proof took 2667 ms.
The following DP Processors were used
Problem 1 was processed with processor DependencyGraph (107ms).
| Problem 2 was processed with processor SubtermCriterion (29ms).
| Problem 3 was processed with processor SubtermCriterion (1ms).
| Problem 4 was processed with processor PolynomialLinearRange4iUR (1076ms).
| | Problem 5 was processed with processor PolynomialLinearRange4iUR (669ms).
| | | Problem 6 was processed with processor PolynomialLinearRange4iUR (307ms).
| | | | Problem 7 was processed with processor PolynomialLinearRange4iUR (328ms).
| | | | | Problem 8 was processed with processor DependencyGraph (1ms).
Problem 1: DependencyGraph
Dependency Pair Problem
Dependency Pairs
mark#(if(X1, X2, X3)) | → | a__if#(mark(X1), X2, X3) | | mark#(minus(X1, X2)) | → | a__minus#(X1, X2) |
a__div#(s(X), s(Y)) | → | a__geq#(X, Y) | | a__if#(true, X, Y) | → | mark#(X) |
a__minus#(s(X), s(Y)) | → | a__minus#(X, Y) | | a__geq#(s(X), s(Y)) | → | a__geq#(X, Y) |
a__if#(false, X, Y) | → | mark#(Y) | | mark#(if(X1, X2, X3)) | → | mark#(X1) |
a__div#(s(X), s(Y)) | → | a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | mark#(s(X)) | → | mark#(X) |
mark#(geq(X1, X2)) | → | a__geq#(X1, X2) | | mark#(div(X1, X2)) | → | a__div#(mark(X1), X2) |
mark#(div(X1, X2)) | → | mark#(X1) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
The following SCCs where found
mark#(if(X1, X2, X3)) → a__if#(mark(X1), X2, X3) | a__if#(false, X, Y) → mark#(Y) |
mark#(if(X1, X2, X3)) → mark#(X1) | a__div#(s(X), s(Y)) → a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) |
a__if#(true, X, Y) → mark#(X) | mark#(s(X)) → mark#(X) |
mark#(div(X1, X2)) → mark#(X1) | mark#(div(X1, X2)) → a__div#(mark(X1), X2) |
a__minus#(s(X), s(Y)) → a__minus#(X, Y) |
a__geq#(s(X), s(Y)) → a__geq#(X, Y) |
Problem 2: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
a__geq#(s(X), s(Y)) | → | a__geq#(X, Y) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
a__geq#(s(X), s(Y)) | → | a__geq#(X, Y) |
Problem 3: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
a__minus#(s(X), s(Y)) | → | a__minus#(X, Y) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
a__minus#(s(X), s(Y)) | → | a__minus#(X, Y) |
Problem 4: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
mark#(if(X1, X2, X3)) | → | a__if#(mark(X1), X2, X3) | | a__if#(false, X, Y) | → | mark#(Y) |
mark#(if(X1, X2, X3)) | → | mark#(X1) | | a__div#(s(X), s(Y)) | → | a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) |
a__if#(true, X, Y) | → | mark#(X) | | mark#(s(X)) | → | mark#(X) |
mark#(div(X1, X2)) | → | mark#(X1) | | mark#(div(X1, X2)) | → | a__div#(mark(X1), X2) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
Polynomial Interpretation
- 0: 0
- a__div(x,y): 1
- a__div#(x,y): 2y + 2
- a__geq(x,y): 0
- a__if(x,y,z): 1
- a__if#(x,y,z): 2z + 2y
- a__minus(x,y): 3
- div(x,y): y + 2x + 1
- false: 0
- geq(x,y): 0
- if(x,y,z): z + 2y + x
- mark(x): x
- mark#(x): 2x
- minus(x,y): 0
- s(x): x
- true: 2
Improved Usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
mark#(div(X1, X2)) | → | mark#(X1) |
Problem 5: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
mark#(if(X1, X2, X3)) | → | a__if#(mark(X1), X2, X3) | | a__if#(false, X, Y) | → | mark#(Y) |
mark#(if(X1, X2, X3)) | → | mark#(X1) | | mark#(s(X)) | → | mark#(X) |
a__if#(true, X, Y) | → | mark#(X) | | a__div#(s(X), s(Y)) | → | a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) |
mark#(div(X1, X2)) | → | a__div#(mark(X1), X2) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
Polynomial Interpretation
- 0: 0
- a__div(x,y): 0
- a__div#(x,y): 0
- a__geq(x,y): 0
- a__if(x,y,z): 0
- a__if#(x,y,z): 2z + 2y
- a__minus(x,y): 3
- div(x,y): x
- false: 0
- geq(x,y): 0
- if(x,y,z): z + y + x + 1
- mark(x): x + 1
- mark#(x): 2x
- minus(x,y): 0
- s(x): x
- true: 0
Improved Usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
mark#(if(X1, X2, X3)) | → | a__if#(mark(X1), X2, X3) | | mark#(if(X1, X2, X3)) | → | mark#(X1) |
Problem 6: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
a__if#(false, X, Y) | → | mark#(Y) | | a__div#(s(X), s(Y)) | → | a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) |
a__if#(true, X, Y) | → | mark#(X) | | mark#(s(X)) | → | mark#(X) |
mark#(div(X1, X2)) | → | a__div#(mark(X1), X2) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
Polynomial Interpretation
- 0: 0
- a__div(x,y): y + 2x
- a__div#(x,y): y + x
- a__geq(x,y): 2y + 1
- a__if(x,y,z): z + y
- a__if#(x,y,z): z + y
- a__minus(x,y): 0
- div(x,y): y + 2x
- false: 2
- geq(x,y): 2y + 1
- if(x,y,z): z + y
- mark(x): x
- mark#(x): x
- minus(x,y): 0
- s(x): x + 1
- true: 0
Improved Usable rules
a__minus(s(X), s(Y)) | → | a__minus(X, Y) | | a__minus(0, Y) | → | 0 |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(0) | → | 0 |
a__if(false, X, Y) | → | mark(Y) | | a__div(0, s(Y)) | → | 0 |
mark(false) | → | false | | a__geq(X1, X2) | → | geq(X1, X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | a__if(X1, X2, X3) | → | if(X1, X2, X3) |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__geq(X, 0) | → | true |
mark(true) | → | true | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
a__if(true, X, Y) | → | mark(X) | | mark(s(X)) | → | s(mark(X)) |
a__div(X1, X2) | → | div(X1, X2) | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(0, s(Y)) | → | false | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
Problem 7: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
a__if#(false, X, Y) | → | mark#(Y) | | a__if#(true, X, Y) | → | mark#(X) |
a__div#(s(X), s(Y)) | → | a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | mark#(div(X1, X2)) | → | a__div#(mark(X1), X2) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
Polynomial Interpretation
- 0: 0
- a__div(x,y): 0
- a__div#(x,y): 2y
- a__geq(x,y): 2y + x
- a__if(x,y,z): 3z + y + 1
- a__if#(x,y,z): 2z + 2y
- a__minus(x,y): 1
- div(x,y): y + x + 1
- false: 0
- geq(x,y): 3y + 2x + 2
- if(x,y,z): 2z + x + 2
- mark(x): 0
- mark#(x): 2x
- minus(x,y): 1
- s(x): 1
- true: 0
Improved Usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
mark#(div(X1, X2)) | → | a__div#(mark(X1), X2) |
Problem 8: DependencyGraph
Dependency Pair Problem
Dependency Pairs
a__if#(false, X, Y) | → | mark#(Y) | | a__div#(s(X), s(Y)) | → | a__if#(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) |
a__if#(true, X, Y) | → | mark#(X) |
Rewrite Rules
a__minus(0, Y) | → | 0 | | a__minus(s(X), s(Y)) | → | a__minus(X, Y) |
a__geq(X, 0) | → | true | | a__geq(0, s(Y)) | → | false |
a__geq(s(X), s(Y)) | → | a__geq(X, Y) | | a__div(0, s(Y)) | → | 0 |
a__div(s(X), s(Y)) | → | a__if(a__geq(X, Y), s(div(minus(X, Y), s(Y))), 0) | | a__if(true, X, Y) | → | mark(X) |
a__if(false, X, Y) | → | mark(Y) | | mark(minus(X1, X2)) | → | a__minus(X1, X2) |
mark(geq(X1, X2)) | → | a__geq(X1, X2) | | mark(div(X1, X2)) | → | a__div(mark(X1), X2) |
mark(if(X1, X2, X3)) | → | a__if(mark(X1), X2, X3) | | mark(0) | → | 0 |
mark(s(X)) | → | s(mark(X)) | | mark(true) | → | true |
mark(false) | → | false | | a__minus(X1, X2) | → | minus(X1, X2) |
a__geq(X1, X2) | → | geq(X1, X2) | | a__div(X1, X2) | → | div(X1, X2) |
a__if(X1, X2, X3) | → | if(X1, X2, X3) |
Original Signature
Termination of terms over the following signature is verified: geq, minus, a__geq, a__div, div, true, mark, a__minus, 0, s, a__if, if, false
Strategy
There are no SCCs!