0 QTRS
↳1 DependencyPairsProof (⇔)
↳2 QDP
↳3 DependencyGraphProof (⇔)
↳4 AND
↳5 QDP
↳6 QDPSizeChangeProof (⇔)
↳7 TRUE
↳8 QDP
↳9 QDPSizeChangeProof (⇔)
↳10 TRUE
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 TRUE
↳14 QDP
↳15 QDPSizeChangeProof (⇔)
↳16 TRUE
↳17 QDP
↳18 QDPSizeChangeProof (⇔)
↳19 TRUE
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
LE(s(X), s(Y)) → LE(X, Y)
APP(cons(N, L), Y) → APP(L, Y)
LOW(N, cons(M, L)) → IFLOW(le(M, N), N, cons(M, L))
LOW(N, cons(M, L)) → LE(M, N)
IFLOW(true, N, cons(M, L)) → LOW(N, L)
IFLOW(false, N, cons(M, L)) → LOW(N, L)
HIGH(N, cons(M, L)) → IFHIGH(le(M, N), N, cons(M, L))
HIGH(N, cons(M, L)) → LE(M, N)
IFHIGH(true, N, cons(M, L)) → HIGH(N, L)
IFHIGH(false, N, cons(M, L)) → HIGH(N, L)
QUICKSORT(cons(N, L)) → APP(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
QUICKSORT(cons(N, L)) → QUICKSORT(low(N, L))
QUICKSORT(cons(N, L)) → LOW(N, L)
QUICKSORT(cons(N, L)) → QUICKSORT(high(N, L))
QUICKSORT(cons(N, L)) → HIGH(N, L)
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
APP(cons(N, L), Y) → APP(L, Y)
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
Order:Homeomorphic Embedding Order
AFS:
cons(x1, x2) = cons(x2)
From the DPs we obtained the following set of size-change graphs:
We oriented the following set of usable rules [AAECC05,FROCOS05].
none
LE(s(X), s(Y)) → LE(X, Y)
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
Order:Homeomorphic Embedding Order
AFS:
s(x1) = s(x1)
From the DPs we obtained the following set of size-change graphs:
We oriented the following set of usable rules [AAECC05,FROCOS05].
none
HIGH(N, cons(M, L)) → IFHIGH(le(M, N), N, cons(M, L))
IFHIGH(true, N, cons(M, L)) → HIGH(N, L)
IFHIGH(false, N, cons(M, L)) → HIGH(N, L)
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
Order:Homeomorphic Embedding Order
AFS:
true = true
false = false
cons(x1, x2) = cons(x2)
From the DPs we obtained the following set of size-change graphs:
We oriented the following set of usable rules [AAECC05,FROCOS05].
none
LOW(N, cons(M, L)) → IFLOW(le(M, N), N, cons(M, L))
IFLOW(true, N, cons(M, L)) → LOW(N, L)
IFLOW(false, N, cons(M, L)) → LOW(N, L)
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
Order:Homeomorphic Embedding Order
AFS:
true = true
false = false
cons(x1, x2) = cons(x2)
From the DPs we obtained the following set of size-change graphs:
We oriented the following set of usable rules [AAECC05,FROCOS05].
none
QUICKSORT(cons(N, L)) → QUICKSORT(high(N, L))
QUICKSORT(cons(N, L)) → QUICKSORT(low(N, L))
le(0, Y) → true
le(s(X), 0) → false
le(s(X), s(Y)) → le(X, Y)
app(nil, Y) → Y
app(cons(N, L), Y) → cons(N, app(L, Y))
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
iflow(false, N, cons(M, L)) → low(N, L)
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))
quicksort(nil) → nil
quicksort(cons(N, L)) → app(quicksort(low(N, L)), cons(N, quicksort(high(N, L))))
Order:Combined order from the following AFS and order.
high(x1, x2) = x2
nil = nil
cons(x1, x2) = cons(x2)
ifhigh(x1, x2, x3) = x3
le(x1, x2) = le
true = true
low(x1, x2) = x2
iflow(x1, x2, x3) = x3
false = false
0 = 0
s(x1) = s
Recursive path order with status [RPO].
Quasi-Precedence:
nil > [cons1, le, s]
true > [cons1, le, s]
false > [cons1, le, s]
0 > [cons1, le, s]
nil: multiset
cons1: multiset
le: multiset
true: multiset
false: multiset
0: multiset
s: multiset
AFS:
high(x1, x2) = x2
nil = nil
cons(x1, x2) = cons(x2)
ifhigh(x1, x2, x3) = x3
le(x1, x2) = le
true = true
low(x1, x2) = x2
iflow(x1, x2, x3) = x3
false = false
0 = 0
s(x1) = s
From the DPs we obtained the following set of size-change graphs:
We oriented the following set of usable rules [AAECC05,FROCOS05].
high(N, nil) → nil
high(N, cons(M, L)) → ifhigh(le(M, N), N, cons(M, L))
ifhigh(true, N, cons(M, L)) → high(N, L)
low(N, nil) → nil
low(N, cons(M, L)) → iflow(le(M, N), N, cons(M, L))
iflow(false, N, cons(M, L)) → low(N, L)
iflow(true, N, cons(M, L)) → cons(M, low(N, L))
ifhigh(false, N, cons(M, L)) → cons(M, high(N, L))