YES
The TRS could be proven terminating. The proof took 1080 ms.
The following DP Processors were used
Problem 1 was processed with processor DependencyGraph (38ms).
| Problem 2 was processed with processor PolynomialLinearRange4iUR (841ms).
| | Problem 3 was processed with processor DependencyGraph (13ms).
| | | Problem 4 was processed with processor PolynomialLinearRange4iUR (67ms).
| | | | Problem 5 was processed with processor DependencyGraph (4ms).
Problem 1: DependencyGraph
Dependency Pair Problem
Dependency Pairs
foldf#(x, cons(y, z)) | → | foldf#(x, z) | | f'#(triple(a, b, c), A) | → | foldf#(triple(cons(A, a), nil, c), b) |
f#(t, x) | → | f'#(t, g(x)) | | f'#(triple(a, b, c), B) | → | f#(triple(a, b, c), A) |
f''#(triple(a, b, c)) | → | foldf#(triple(a, b, nil), c) | | f#(t, x) | → | g#(x) |
f'#(triple(a, b, c), A) | → | f''#(foldf(triple(cons(A, a), nil, c), b)) | | foldf#(x, cons(y, z)) | → | f#(foldf(x, z), y) |
Rewrite Rules
g(A) | → | A | | g(B) | → | A |
g(B) | → | B | | g(C) | → | A |
g(C) | → | B | | g(C) | → | C |
foldf(x, nil) | → | x | | foldf(x, cons(y, z)) | → | f(foldf(x, z), y) |
f(t, x) | → | f'(t, g(x)) | | f'(triple(a, b, c), C) | → | triple(a, b, cons(C, c)) |
f'(triple(a, b, c), B) | → | f(triple(a, b, c), A) | | f'(triple(a, b, c), A) | → | f''(foldf(triple(cons(A, a), nil, c), b)) |
f''(triple(a, b, c)) | → | foldf(triple(a, b, nil), c) |
Original Signature
Termination of terms over the following signature is verified: foldf, f, f', g, f'', A, B, C, triple, nil, cons
Strategy
The following SCCs where found
foldf#(x, cons(y, z)) → foldf#(x, z) | f'#(triple(a, b, c), A) → foldf#(triple(cons(A, a), nil, c), b) |
f#(t, x) → f'#(t, g(x)) | f'#(triple(a, b, c), B) → f#(triple(a, b, c), A) |
f''#(triple(a, b, c)) → foldf#(triple(a, b, nil), c) | f'#(triple(a, b, c), A) → f''#(foldf(triple(cons(A, a), nil, c), b)) |
foldf#(x, cons(y, z)) → f#(foldf(x, z), y) |
Problem 2: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
foldf#(x, cons(y, z)) | → | foldf#(x, z) | | f'#(triple(a, b, c), A) | → | foldf#(triple(cons(A, a), nil, c), b) |
f#(t, x) | → | f'#(t, g(x)) | | f'#(triple(a, b, c), B) | → | f#(triple(a, b, c), A) |
f''#(triple(a, b, c)) | → | foldf#(triple(a, b, nil), c) | | f'#(triple(a, b, c), A) | → | f''#(foldf(triple(cons(A, a), nil, c), b)) |
foldf#(x, cons(y, z)) | → | f#(foldf(x, z), y) |
Rewrite Rules
g(A) | → | A | | g(B) | → | A |
g(B) | → | B | | g(C) | → | A |
g(C) | → | B | | g(C) | → | C |
foldf(x, nil) | → | x | | foldf(x, cons(y, z)) | → | f(foldf(x, z), y) |
f(t, x) | → | f'(t, g(x)) | | f'(triple(a, b, c), C) | → | triple(a, b, cons(C, c)) |
f'(triple(a, b, c), B) | → | f(triple(a, b, c), A) | | f'(triple(a, b, c), A) | → | f''(foldf(triple(cons(A, a), nil, c), b)) |
f''(triple(a, b, c)) | → | foldf(triple(a, b, nil), c) |
Original Signature
Termination of terms over the following signature is verified: foldf, f, f', g, f'', A, B, C, triple, nil, cons
Strategy
Polynomial Interpretation
- A: 0
- B: 0
- C: 0
- cons(x,y): y + 1
- f(x,y): x + 1
- f#(x,y): x
- f'(x,y): x + 1
- f'#(x,y): x
- f''(x): x + 1
- f''#(x): x
- foldf(x,y): y + x
- foldf#(x,y): y + x
- g(x): 0
- nil: 0
- triple(x,y,z): z + 2y + 1
Improved Usable rules
f'(triple(a, b, c), A) | → | f''(foldf(triple(cons(A, a), nil, c), b)) | | f''(triple(a, b, c)) | → | foldf(triple(a, b, nil), c) |
f'(triple(a, b, c), B) | → | f(triple(a, b, c), A) | | f'(triple(a, b, c), C) | → | triple(a, b, cons(C, c)) |
foldf(x, nil) | → | x | | foldf(x, cons(y, z)) | → | f(foldf(x, z), y) |
f(t, x) | → | f'(t, g(x)) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
foldf#(x, cons(y, z)) | → | foldf#(x, z) | | foldf#(x, cons(y, z)) | → | f#(foldf(x, z), y) |
Problem 3: DependencyGraph
Dependency Pair Problem
Dependency Pairs
f'#(triple(a, b, c), A) | → | foldf#(triple(cons(A, a), nil, c), b) | | f'#(triple(a, b, c), B) | → | f#(triple(a, b, c), A) |
f#(t, x) | → | f'#(t, g(x)) | | f''#(triple(a, b, c)) | → | foldf#(triple(a, b, nil), c) |
f'#(triple(a, b, c), A) | → | f''#(foldf(triple(cons(A, a), nil, c), b)) |
Rewrite Rules
g(A) | → | A | | g(B) | → | A |
g(B) | → | B | | g(C) | → | A |
g(C) | → | B | | g(C) | → | C |
foldf(x, nil) | → | x | | foldf(x, cons(y, z)) | → | f(foldf(x, z), y) |
f(t, x) | → | f'(t, g(x)) | | f'(triple(a, b, c), C) | → | triple(a, b, cons(C, c)) |
f'(triple(a, b, c), B) | → | f(triple(a, b, c), A) | | f'(triple(a, b, c), A) | → | f''(foldf(triple(cons(A, a), nil, c), b)) |
f''(triple(a, b, c)) | → | foldf(triple(a, b, nil), c) |
Original Signature
Termination of terms over the following signature is verified: f', f, foldf, g, f'', A, B, triple, C, cons, nil
Strategy
The following SCCs where found
f'#(triple(a, b, c), B) → f#(triple(a, b, c), A) | f#(t, x) → f'#(t, g(x)) |
Problem 4: PolynomialLinearRange4iUR
Dependency Pair Problem
Dependency Pairs
f'#(triple(a, b, c), B) | → | f#(triple(a, b, c), A) | | f#(t, x) | → | f'#(t, g(x)) |
Rewrite Rules
g(A) | → | A | | g(B) | → | A |
g(B) | → | B | | g(C) | → | A |
g(C) | → | B | | g(C) | → | C |
foldf(x, nil) | → | x | | foldf(x, cons(y, z)) | → | f(foldf(x, z), y) |
f(t, x) | → | f'(t, g(x)) | | f'(triple(a, b, c), C) | → | triple(a, b, cons(C, c)) |
f'(triple(a, b, c), B) | → | f(triple(a, b, c), A) | | f'(triple(a, b, c), A) | → | f''(foldf(triple(cons(A, a), nil, c), b)) |
f''(triple(a, b, c)) | → | foldf(triple(a, b, nil), c) |
Original Signature
Termination of terms over the following signature is verified: f', f, foldf, g, f'', A, B, triple, C, cons, nil
Strategy
Polynomial Interpretation
- A: 0
- B: 1
- C: 2
- cons(x,y): 0
- f(x,y): 0
- f#(x,y): y + 1
- f'(x,y): 0
- f'#(x,y): y
- f''(x): 0
- foldf(x,y): 0
- g(x): x
- nil: 0
- triple(x,y,z): 2x + 3
Improved Usable rules
g(C) | → | C | | g(A) | → | A |
g(B) | → | B | | g(C) | → | B |
g(C) | → | A | | g(B) | → | A |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
Problem 5: DependencyGraph
Dependency Pair Problem
Dependency Pairs
f'#(triple(a, b, c), B) | → | f#(triple(a, b, c), A) |
Rewrite Rules
g(A) | → | A | | g(B) | → | A |
g(B) | → | B | | g(C) | → | A |
g(C) | → | B | | g(C) | → | C |
foldf(x, nil) | → | x | | foldf(x, cons(y, z)) | → | f(foldf(x, z), y) |
f(t, x) | → | f'(t, g(x)) | | f'(triple(a, b, c), C) | → | triple(a, b, cons(C, c)) |
f'(triple(a, b, c), B) | → | f(triple(a, b, c), A) | | f'(triple(a, b, c), A) | → | f''(foldf(triple(cons(A, a), nil, c), b)) |
f''(triple(a, b, c)) | → | foldf(triple(a, b, nil), c) |
Original Signature
Termination of terms over the following signature is verified: foldf, f, f', g, f'', A, B, C, triple, nil, cons
Strategy
There are no SCCs!