YES
The TRS could be proven terminating. The proof took 862 ms.
Problem 1 was processed with processor DependencyGraph (307ms). | Problem 2 was processed with processor PolynomialLinearRange4 (46ms). | Problem 3 was processed with processor PolynomialLinearRange4 (72ms). | Problem 4 was processed with processor PolynomialLinearRange4 (15ms). | Problem 5 was processed with processor PolynomialLinearRange4 (283ms). | | Problem 6 was processed with processor DependencyGraph (1ms).
U91#(pair(ys, zs), xs, x) | → | qsort#(zs) | qsort#(cons(x, xs)) | → | split#(x, xs) | |
app#(cons(x, xs), ys) | → | app#(xs, ys) | U71#(pairs(xs, zs), ys, y, x) | → | le#(x, y) | |
U61#(pairs(xs, zs), ys, y, x) | → | le#(x, y) | qsort#(cons(x, xs)) | → | U91#(split(x, xs), xs, x) | |
U91#(pair(ys, zs), xs, x) | → | app#(qsort(ys), cons(x, qsort(zs))) | U91#(pair(ys, zs), xs, x) | → | qsort#(ys) | |
U72#(false, ys, y, x, zs, xs) | → | T(zs) | split#(x, cons(y, ys)) | → | split#(x, ys) | |
U62#(true, ys, y, x, zs, xs) | → | T(y) | U61#(pairs(xs, zs), ys, y, x) | → | U62#(le(x, y), ys, y, x, zs, xs) | |
U62#(true, ys, y, x, zs, xs) | → | T(xs) | U61#(pairs(xs, zs), ys, y, x) | → | T(x) | |
U71#(pairs(xs, zs), ys, y, x) | → | T(y) | U71#(pairs(xs, zs), ys, y, x) | → | U72#(le(x, y), ys, y, x, zs, xs) | |
U61#(pairs(xs, zs), ys, y, x) | → | T(y) | U72#(false, ys, y, x, zs, xs) | → | T(xs) | |
U91#(pair(ys, zs), xs, x) | → | T(x) | U62#(true, ys, y, x, zs, xs) | → | T(zs) | |
split#(x, cons(y, ys)) | → | U61#(split(x, ys), ys, y, x) | U72#(false, ys, y, x, zs, xs) | → | T(y) | |
split#(x, cons(y, ys)) | → | U71#(split(x, ys), ys, y, x) | le#(s(x), s(y)) | → | le#(x, y) | |
U71#(pairs(xs, zs), ys, y, x) | → | T(x) |
le(0, x) | → | true | le(s(x), 0) | → | false | |
le(s(x), s(y)) | → | le(x, y) | app(nil, x) | → | x | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | split(x, nil) | → | pair(nil, nil) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | |
U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
Termination of terms over the following signature is verified: app, 0, le, s, pairs, pair, true, false, split, qsort, nil, cons
Context-sensitive strategy:
μ(T) = μ(false) = μ(true) = μ(0) = μ(nil) = ∅
μ(U91#) = μ(U62#) = μ(U62) = μ(qsort#) = μ(U61) = μ(U91) = μ(U72#) = μ(qsort) = μ(U61#) = μ(U71) = μ(U72) = μ(U71#) = μ(s) = {1}
μ(pair) = μ(split#) = μ(le#) = μ(cons) = μ(app) = μ(app#) = μ(pairs) = μ(le) = μ(split) = {1, 2}
qsort#(cons(x, xs)) → U91#(split(x, xs), xs, x) | U91#(pair(ys, zs), xs, x) → qsort#(zs) |
U91#(pair(ys, zs), xs, x) → qsort#(ys) |
le#(s(x), s(y)) → le#(x, y) |
app#(cons(x, xs), ys) → app#(xs, ys) |
split#(x, cons(y, ys)) → split#(x, ys) |
split#(x, cons(y, ys)) | → | split#(x, ys) |
le(0, x) | → | true | le(s(x), 0) | → | false | |
le(s(x), s(y)) | → | le(x, y) | app(nil, x) | → | x | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | split(x, nil) | → | pair(nil, nil) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | |
U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
Termination of terms over the following signature is verified: app, 0, le, s, pairs, pair, true, false, split, qsort, nil, cons
Context-sensitive strategy:
μ(T) = μ(false) = μ(true) = μ(0) = μ(nil) = ∅
μ(U91#) = μ(U62#) = μ(U62) = μ(U61) = μ(qsort#) = μ(U72#) = μ(U91) = μ(qsort) = μ(U61#) = μ(U71) = μ(U72) = μ(U71#) = μ(s) = {1}
μ(pair) = μ(split#) = μ(le#) = μ(cons) = μ(app) = μ(app#) = μ(pairs) = μ(le) = μ(split) = {1, 2}
There are no usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
split#(x, cons(y, ys)) | → | split#(x, ys) |
app#(cons(x, xs), ys) | → | app#(xs, ys) |
le(0, x) | → | true | le(s(x), 0) | → | false | |
le(s(x), s(y)) | → | le(x, y) | app(nil, x) | → | x | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | split(x, nil) | → | pair(nil, nil) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | |
U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
Termination of terms over the following signature is verified: app, 0, le, s, pairs, pair, true, false, split, qsort, nil, cons
Context-sensitive strategy:
μ(T) = μ(false) = μ(true) = μ(0) = μ(nil) = ∅
μ(U91#) = μ(U62#) = μ(U62) = μ(U61) = μ(qsort#) = μ(U72#) = μ(U91) = μ(qsort) = μ(U61#) = μ(U71) = μ(U72) = μ(U71#) = μ(s) = {1}
μ(pair) = μ(split#) = μ(le#) = μ(cons) = μ(app) = μ(app#) = μ(pairs) = μ(le) = μ(split) = {1, 2}
There are no usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
app#(cons(x, xs), ys) | → | app#(xs, ys) |
le#(s(x), s(y)) | → | le#(x, y) |
le(0, x) | → | true | le(s(x), 0) | → | false | |
le(s(x), s(y)) | → | le(x, y) | app(nil, x) | → | x | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | split(x, nil) | → | pair(nil, nil) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | |
U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
Termination of terms over the following signature is verified: app, 0, le, s, pairs, pair, true, false, split, qsort, nil, cons
Context-sensitive strategy:
μ(T) = μ(false) = μ(true) = μ(0) = μ(nil) = ∅
μ(U91#) = μ(U62#) = μ(U62) = μ(U61) = μ(qsort#) = μ(U72#) = μ(U91) = μ(qsort) = μ(U61#) = μ(U71) = μ(U72) = μ(U71#) = μ(s) = {1}
μ(pair) = μ(split#) = μ(le#) = μ(cons) = μ(app) = μ(app#) = μ(pairs) = μ(le) = μ(split) = {1, 2}
There are no usable rules
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
le#(s(x), s(y)) | → | le#(x, y) |
qsort#(cons(x, xs)) | → | U91#(split(x, xs), xs, x) | U91#(pair(ys, zs), xs, x) | → | qsort#(zs) | |
U91#(pair(ys, zs), xs, x) | → | qsort#(ys) |
le(0, x) | → | true | le(s(x), 0) | → | false | |
le(s(x), s(y)) | → | le(x, y) | app(nil, x) | → | x | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | split(x, nil) | → | pair(nil, nil) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | |
U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
Termination of terms over the following signature is verified: app, 0, le, s, pairs, pair, true, false, split, qsort, nil, cons
Context-sensitive strategy:
μ(T) = μ(false) = μ(true) = μ(0) = μ(nil) = ∅
μ(U91#) = μ(U62#) = μ(U62) = μ(U61) = μ(qsort#) = μ(U72#) = μ(U91) = μ(qsort) = μ(U61#) = μ(U71) = μ(U72) = μ(U71#) = μ(s) = {1}
μ(pair) = μ(split#) = μ(le#) = μ(cons) = μ(app) = μ(app#) = μ(pairs) = μ(le) = μ(split) = {1, 2}
le(s(x), s(y)) | → | le(x, y) | U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | app(nil, x) | → | x | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | le(0, x) | → | true | |
le(s(x), 0) | → | false | U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | |
split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
split(x, nil) | → | pair(nil, nil) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
The following dependency pairs are strictly oriented by an ordering on the given polynomial interpretation, thus they are removed:
qsort#(cons(x, xs)) | → | U91#(split(x, xs), xs, x) |
U91#(pair(ys, zs), xs, x) | → | qsort#(zs) | U91#(pair(ys, zs), xs, x) | → | qsort#(ys) |
le(0, x) | → | true | le(s(x), 0) | → | false | |
le(s(x), s(y)) | → | le(x, y) | app(nil, x) | → | x | |
app(cons(x, xs), ys) | → | cons(x, app(xs, ys)) | split(x, nil) | → | pair(nil, nil) | |
split(x, cons(y, ys)) | → | U61(split(x, ys), ys, y, x) | U61(pairs(xs, zs), ys, y, x) | → | U62(le(x, y), ys, y, x, zs, xs) | |
U62(true, ys, y, x, zs, xs) | → | pair(xs, cons(y, zs)) | split(x, cons(y, ys)) | → | U71(split(x, ys), ys, y, x) | |
U71(pairs(xs, zs), ys, y, x) | → | U72(le(x, y), ys, y, x, zs, xs) | U72(false, ys, y, x, zs, xs) | → | pair(cons(y, xs), zs) | |
qsort(nil) | → | nil | qsort(cons(x, xs)) | → | U91(split(x, xs), xs, x) | |
U91(pair(ys, zs), xs, x) | → | app(qsort(ys), cons(x, qsort(zs))) |
Termination of terms over the following signature is verified: app, 0, pairs, s, le, pair, false, true, qsort, split, cons, nil
Context-sensitive strategy:
μ(T) = μ(false) = μ(true) = μ(0) = μ(nil) = ∅
μ(U91#) = μ(U62#) = μ(U62) = μ(qsort#) = μ(U61) = μ(U91) = μ(U72#) = μ(qsort) = μ(U61#) = μ(U71) = μ(U72) = μ(U71#) = μ(s) = {1}
μ(pair) = μ(split#) = μ(le#) = μ(cons) = μ(app) = μ(app#) = μ(pairs) = μ(le) = μ(split) = {1, 2}