0 QTRS
↳1 DependencyPairsProof (⇔, 0 ms)
↳2 QDP
↳3 DependencyGraphProof (⇔, 0 ms)
↳4 AND
↳5 QDP
↳6 QDPSizeChangeProof (⇔, 0 ms)
↳7 YES
↳8 QDP
↳9 QDPSizeChangeProof (⇔, 0 ms)
↳10 YES
↳11 QDP
↳12 MNOCProof (⇔, 0 ms)
↳13 QDP
↳14 UsableRulesProof (⇔, 0 ms)
↳15 QDP
↳16 QReductionProof (⇔, 1 ms)
↳17 QDP
↳18 QDPOrderProof (⇔, 0 ms)
↳19 QDP
↳20 QDPSizeChangeProof (⇔, 0 ms)
↳21 YES
↳22 QDP
↳23 NonLoopProof (⇔, 248 ms)
↳24 NO
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
LEQ(s(x), s(y)) → LEQ(x, y)
SPLIT(cons(x, cons(y, xs))) → SPLIT1(x, y, split(xs))
SPLIT(cons(x, cons(y, xs))) → SPLIT(xs)
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
MERGE(cons(x, xs), cons(y, ys)) → LEQ(x, y)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT(xs) → SPLIT(xs)
MERGESORT1(app(xs, ys)) → MERGE(mergesort(xs), mergesort(ys))
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
SPLIT(cons(x, cons(y, xs))) → SPLIT(xs)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
From the DPs we obtained the following set of size-change graphs:
LEQ(s(x), s(y)) → LEQ(x, y)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
From the DPs we obtained the following set of size-change graphs:
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
split(nil)
split(cons(x0, nil))
split(cons(x0, cons(x1, x2)))
split1(x0, x1, app(x2, x3))
merge([], x0)
merge(x0, [])
merge(cons(x0, x1), cons(x2, x3))
ifmerge(tt, x0, x1, x2, x3)
ifmerge(ff, x0, x1, x2, x3)
mergesort(x0)
mergesort1(app(x0, x1))
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IFMERGE(ff, x, y, xs, ys) → MERGE(cons(x, xs), ys)
POL(0) = 0
POL(IFMERGE(x1, x2, x3, x4, x5)) = 1 + x5
POL(MERGE(x1, x2)) = x2
POL(cons(x1, x2)) = 1 + x2
POL(ff) = 0
POL(leq(x1, x2)) = 0
POL(s(x1)) = 0
POL(tt) = 0
MERGE(cons(x, xs), cons(y, ys)) → IFMERGE(leq(x, y), x, y, xs, ys)
IFMERGE(tt, x, y, xs, ys) → MERGE(xs, cons(y, ys))
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
leq(0, x0)
leq(s(x0), 0)
leq(s(x0), s(x1))
From the DPs we obtained the following set of size-change graphs:
MERGESORT1(app(xs, ys)) → MERGESORT(xs)
MERGESORT(xs) → MERGESORT1(split(xs))
MERGESORT1(app(xs, ys)) → MERGESORT(ys)
leq(0, x) → tt
leq(s(x), 0) → ff
leq(s(x), s(y)) → leq(x, y)
split(nil) → app(nil, nil)
split(cons(x, nil)) → app(cons(x, nil), nil)
split(cons(x, cons(y, xs))) → split1(x, y, split(xs))
split1(x, y, app(xs, ys)) → app(cons(x, xs), cons(y, ys))
merge([], xs) → xs
merge(xs, []) → xs
merge(cons(x, xs), cons(y, ys)) → ifmerge(leq(x, y), x, y, xs, ys)
ifmerge(tt, x, y, xs, ys) → cons(x, merge(xs, cons(y, ys)))
ifmerge(ff, x, y, xs, ys) → cons(y, merge(cons(x, xs), ys))
mergesort(xs) → mergesort1(split(xs))
mergesort1(app(xs, ys)) → merge(mergesort(xs), mergesort(ys))