YES(O(1), O(n^2)) 11.05/3.21 YES(O(1), O(n^2)) 11.05/3.26 11.05/3.26 11.05/3.26
11.05/3.26 11.05/3.260 CpxRelTRS11.05/3.26
↳1 CpxRelTrsToCDT (UPPER BOUND (ID))11.05/3.26
↳2 CdtProblem11.05/3.26
↳3 CdtLeafRemovalProof (ComplexityIfPolyImplication)11.05/3.26
↳4 CdtProblem11.05/3.26
↳5 CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^2))))11.05/3.26
↳6 CdtProblem11.05/3.26
↳7 CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^2))))11.05/3.26
↳8 CdtProblem11.05/3.26
↳9 CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^2))))11.05/3.26
↳10 CdtProblem11.05/3.26
↳11 CdtPolyRedPairProof (UPPER BOUND (ADD(O(n^2))))11.05/3.26
↳12 CdtProblem11.05/3.26
↳13 SIsEmptyProof (BOTH BOUNDS(ID, ID))11.05/3.26
↳14 BOUNDS(O(1), O(1))11.05/3.26
mergesort(Cons(x', Cons(x, xs))) → splitmerge(Cons(x', Cons(x, xs)), Nil, Nil) 11.05/3.26
mergesort(Cons(x, Nil)) → Cons(x, Nil) 11.05/3.26
merge(Cons(x', xs'), Cons(x, xs)) → merge[Ite][True][Ite][True][Ite](<=(x', x), Cons(x', xs'), Cons(x, xs)) 11.05/3.26
merge(Cons(x, xs), Nil) → Cons(x, xs) 11.05/3.26
splitmerge(Cons(x, xs), xs1, xs2) → splitmerge(xs, Cons(x, xs2), xs1) 11.05/3.26
splitmerge(Nil, xs1, xs2) → merge(mergesort(xs1), mergesort(xs2)) 11.05/3.26
mergesort(Nil) → Nil 11.05/3.26
merge(Nil, xs2) → xs2 11.05/3.26
notEmpty(Cons(x, xs)) → True 11.05/3.26
notEmpty(Nil) → False 11.05/3.26
goal(xs) → mergesort(xs)
<=(S(x), S(y)) → <=(x, y) 11.05/3.26
<=(0, y) → True 11.05/3.26
<=(S(x), 0) → False
Tuples:
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.26
<=(0, z0) → True 11.05/3.26
<=(S(z0), 0) → False 11.05/3.26
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.26
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.26
mergesort(Nil) → Nil 11.05/3.26
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.26
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.26
merge(Nil, z0) → z0 11.05/3.26
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.26
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.26
notEmpty(Cons(z0, z1)) → True 11.05/3.26
notEmpty(Nil) → False 11.05/3.26
goal(z0) → mergesort(z0)
S tuples:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.26
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.26
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.26
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.26
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1)) 11.05/3.26
GOAL(z0) → c13(MERGESORT(z0))
K tuples:none
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.26
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.26
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.26
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1)) 11.05/3.26
GOAL(z0) → c13(MERGESORT(z0))
mergesort, merge, splitmerge, notEmpty, goal, <=
<=', MERGESORT, MERGE, SPLITMERGE, GOAL
c, c3, c6, c9, c10, c13
GOAL(z0) → c13(MERGESORT(z0))
Tuples:
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.26
<=(0, z0) → True 11.05/3.26
<=(S(z0), 0) → False 11.05/3.26
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.26
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.26
mergesort(Nil) → Nil 11.05/3.26
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.26
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.26
merge(Nil, z0) → z0 11.05/3.26
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.26
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.26
notEmpty(Cons(z0, z1)) → True 11.05/3.26
notEmpty(Nil) → False 11.05/3.26
goal(z0) → mergesort(z0)
S tuples:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.26
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.26
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.26
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.26
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
K tuples:none
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.26
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.26
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.26
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
mergesort, merge, splitmerge, notEmpty, goal, <=
<=', MERGESORT, MERGE, SPLITMERGE
c, c3, c6, c9, c10
We considered the (Usable) Rules:
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2))
And the Tuples:
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False
The order we found is given by the following interpretation:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
POL(0) = [3] 11.05/3.27
POL(<=(x1, x2)) = [3] + [3]x1 + [3]x2 + [3]x22 + [3]x1·x2 + [3]x12 11.05/3.27
POL(<='(x1, x2)) = [1] 11.05/3.27
POL(Cons(x1, x2)) = [2] + x2 11.05/3.27
POL(False) = [3] 11.05/3.27
POL(MERGE(x1, x2)) = x2 11.05/3.27
POL(MERGESORT(x1)) = [2]x12 11.05/3.27
POL(Nil) = 0 11.05/3.27
POL(S(x1)) = 0 11.05/3.27
POL(SPLITMERGE(x1, x2, x3)) = [2]x3 + [2]x32 + [3]x1·x3 + [2]x12 + [3]x1·x2 + [2]x22 11.05/3.27
POL(True) = [3] 11.05/3.27
POL(c(x1)) = x1 11.05/3.27
POL(c10(x1, x2, x3)) = x1 + x2 + x3 11.05/3.27
POL(c3(x1)) = x1 11.05/3.27
POL(c6(x1)) = x1 11.05/3.27
POL(c9(x1)) = x1 11.05/3.27
POL(merge(x1, x2)) = x1 + x2 11.05/3.27
POL(merge[Ite][True][Ite][True][Ite](x1, x2, x3)) = [2] + x3 11.05/3.27
POL(mergesort(x1)) = [2]x1 11.05/3.27
POL(splitmerge(x1, x2, x3)) = [2]x1 + [2]x2 + [2]x3
Tuples:
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False 11.05/3.27
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
notEmpty(Cons(z0, z1)) → True 11.05/3.27
notEmpty(Nil) → False 11.05/3.27
goal(z0) → mergesort(z0)
S tuples:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
K tuples:
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
Defined Rule Symbols:
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2))
mergesort, merge, splitmerge, notEmpty, goal, <=
<=', MERGESORT, MERGE, SPLITMERGE
c, c3, c6, c9, c10
We considered the (Usable) Rules:
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil))
And the Tuples:
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False
The order we found is given by the following interpretation:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
POL(0) = [3] 11.05/3.27
POL(<=(x1, x2)) = [3] + [3]x1 + [3]x2 + [3]x22 + [3]x1·x2 + [3]x12 11.05/3.27
POL(<='(x1, x2)) = 0 11.05/3.27
POL(Cons(x1, x2)) = [1] + x2 11.05/3.27
POL(False) = [3] 11.05/3.27
POL(MERGE(x1, x2)) = 0 11.05/3.27
POL(MERGESORT(x1)) = [1] + [2]x12 11.05/3.27
POL(Nil) = 0 11.05/3.27
POL(S(x1)) = 0 11.05/3.27
POL(SPLITMERGE(x1, x2, x3)) = [2] + x1 + [2]x3 + [2]x32 + [2]x1·x3 + x12 + [2]x1·x2 + [2]x22 11.05/3.27
POL(True) = [3] 11.05/3.27
POL(c(x1)) = x1 11.05/3.27
POL(c10(x1, x2, x3)) = x1 + x2 + x3 11.05/3.27
POL(c3(x1)) = x1 11.05/3.27
POL(c6(x1)) = x1 11.05/3.27
POL(c9(x1)) = x1 11.05/3.27
POL(merge(x1, x2)) = [3] 11.05/3.27
POL(merge[Ite][True][Ite][True][Ite](x1, x2, x3)) = [3] 11.05/3.27
POL(mergesort(x1)) = 0 11.05/3.27
POL(splitmerge(x1, x2, x3)) = [3] + [3]x1 + [3]x2 + [3]x3 + [3]x32 + [3]x2·x3 + [3]x1·x3 + [3]x12 + [3]x1·x2 + [3]x22
Tuples:
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False 11.05/3.27
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
notEmpty(Cons(z0, z1)) → True 11.05/3.27
notEmpty(Nil) → False 11.05/3.27
goal(z0) → mergesort(z0)
S tuples:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
K tuples:
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
Defined Rule Symbols:
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil))
mergesort, merge, splitmerge, notEmpty, goal, <=
<=', MERGESORT, MERGE, SPLITMERGE
c, c3, c6, c9, c10
We considered the (Usable) Rules:
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
And the Tuples:
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False
The order we found is given by the following interpretation:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
POL(0) = [3] 11.05/3.27
POL(<=(x1, x2)) = [3] + [3]x1 + [3]x2 + [3]x22 + [3]x1·x2 + [3]x12 11.05/3.27
POL(<='(x1, x2)) = 0 11.05/3.27
POL(Cons(x1, x2)) = [1] + x2 11.05/3.27
POL(False) = [3] 11.05/3.27
POL(MERGE(x1, x2)) = 0 11.05/3.27
POL(MERGESORT(x1)) = [2]x12 11.05/3.27
POL(Nil) = 0 11.05/3.27
POL(S(x1)) = 0 11.05/3.27
POL(SPLITMERGE(x1, x2, x3)) = [1] + x1 + [2]x3 + [2]x32 + [2]x1·x3 + x12 + [2]x1·x2 + [2]x22 11.05/3.27
POL(True) = [3] 11.05/3.27
POL(c(x1)) = x1 11.05/3.27
POL(c10(x1, x2, x3)) = x1 + x2 + x3 11.05/3.27
POL(c3(x1)) = x1 11.05/3.27
POL(c6(x1)) = x1 11.05/3.27
POL(c9(x1)) = x1 11.05/3.27
POL(merge(x1, x2)) = [3] 11.05/3.27
POL(merge[Ite][True][Ite][True][Ite](x1, x2, x3)) = [3] 11.05/3.27
POL(mergesort(x1)) = 0 11.05/3.27
POL(splitmerge(x1, x2, x3)) = [3] + [3]x1 + [3]x2 + [3]x3 + [3]x32 + [3]x2·x3 + [3]x1·x3 + [3]x12 + [3]x1·x2 + [3]x22
Tuples:
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False 11.05/3.27
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
notEmpty(Cons(z0, z1)) → True 11.05/3.27
notEmpty(Nil) → False 11.05/3.27
goal(z0) → mergesort(z0)
S tuples:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
K tuples:
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2))
Defined Rule Symbols:
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
mergesort, merge, splitmerge, notEmpty, goal, <=
<=', MERGESORT, MERGE, SPLITMERGE
c, c3, c6, c9, c10
We considered the (Usable) Rules:
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2))
And the Tuples:
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False
The order we found is given by the following interpretation:
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
POL(0) = [3] 11.05/3.27
POL(<=(x1, x2)) = [3] + [3]x1 + [3]x2 + [3]x22 + [3]x1·x2 + [3]x12 11.05/3.27
POL(<='(x1, x2)) = 0 11.05/3.27
POL(Cons(x1, x2)) = [1] + x2 11.05/3.27
POL(False) = [3] 11.05/3.27
POL(MERGE(x1, x2)) = 0 11.05/3.27
POL(MERGESORT(x1)) = [3]x12 11.05/3.27
POL(Nil) = 0 11.05/3.27
POL(S(x1)) = 0 11.05/3.27
POL(SPLITMERGE(x1, x2, x3)) = [2]x1 + [3]x3 + [3]x32 + [3]x1·x3 + [2]x12 + [3]x1·x2 + [3]x22 11.05/3.27
POL(True) = [3] 11.05/3.27
POL(c(x1)) = x1 11.05/3.27
POL(c10(x1, x2, x3)) = x1 + x2 + x3 11.05/3.27
POL(c3(x1)) = x1 11.05/3.27
POL(c6(x1)) = x1 11.05/3.27
POL(c9(x1)) = x1 11.05/3.27
POL(merge(x1, x2)) = [3] 11.05/3.27
POL(merge[Ite][True][Ite][True][Ite](x1, x2, x3)) = [3] 11.05/3.27
POL(mergesort(x1)) = 0 11.05/3.27
POL(splitmerge(x1, x2, x3)) = [3] + [3]x1 + [3]x2 + [3]x3 + [3]x32 + [3]x2·x3 + [3]x1·x3 + [3]x12 + [3]x1·x2 + [3]x22
Tuples:
<=(S(z0), S(z1)) → <=(z0, z1) 11.05/3.27
<=(0, z0) → True 11.05/3.27
<=(S(z0), 0) → False 11.05/3.27
mergesort(Cons(z0, Cons(z1, z2))) → splitmerge(Cons(z0, Cons(z1, z2)), Nil, Nil) 11.05/3.27
mergesort(Cons(z0, Nil)) → Cons(z0, Nil) 11.05/3.27
mergesort(Nil) → Nil 11.05/3.27
merge(Cons(z0, z1), Cons(z2, z3)) → merge[Ite][True][Ite][True][Ite](<=(z0, z2), Cons(z0, z1), Cons(z2, z3)) 11.05/3.27
merge(Cons(z0, z1), Nil) → Cons(z0, z1) 11.05/3.27
merge(Nil, z0) → z0 11.05/3.27
splitmerge(Cons(z0, z1), z2, z3) → splitmerge(z1, Cons(z0, z3), z2) 11.05/3.27
splitmerge(Nil, z0, z1) → merge(mergesort(z0), mergesort(z1)) 11.05/3.27
notEmpty(Cons(z0, z1)) → True 11.05/3.27
notEmpty(Nil) → False 11.05/3.27
goal(z0) → mergesort(z0)
S tuples:none
<='(S(z0), S(z1)) → c(<='(z0, z1)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1))
Defined Rule Symbols:
MERGE(Cons(z0, z1), Cons(z2, z3)) → c6(<='(z0, z2)) 11.05/3.27
MERGESORT(Cons(z0, Cons(z1, z2))) → c3(SPLITMERGE(Cons(z0, Cons(z1, z2)), Nil, Nil)) 11.05/3.27
SPLITMERGE(Nil, z0, z1) → c10(MERGE(mergesort(z0), mergesort(z1)), MERGESORT(z0), MERGESORT(z1)) 11.05/3.27
SPLITMERGE(Cons(z0, z1), z2, z3) → c9(SPLITMERGE(z1, Cons(z0, z3), z2))
mergesort, merge, splitmerge, notEmpty, goal, <=
<=', MERGESORT, MERGE, SPLITMERGE
c, c3, c6, c9, c10