(0) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
#abs(#0) → #0
#abs(#neg(@x)) → #pos(@x)
#abs(#pos(@x)) → #pos(@x)
#abs(#s(@x)) → #pos(#s(@x))
#greater(@x, @y) → #ckgt(#compare(@x, @y))
append(@l, @ys) → append#1(@l, @ys)
append#1(::(@x, @xs), @ys) → ::(@x, append(@xs, @ys))
append#1(nil, @ys) → @ys
appendD(@l, @ys) → appendD#1(@l, @ys)
appendD#1(::(@x, @xs), @ys) → ::(@x, appendD(@xs, @ys))
appendD#1(nil, @ys) → @ys
quicksort(@l) → quicksort#1(@l)
quicksort#1(::(@z, @zs)) → quicksort#2(split(@z, @zs), @z)
quicksort#1(nil) → nil
quicksort#2(tuple#2(@xs, @ys), @z) → append(quicksort(@xs), ::(@z, quicksort(@ys)))
quicksortD(@l) → quicksortD#1(@l)
quicksortD#1(::(@z, @zs)) → quicksortD#2(splitD(@z, @zs), @z)
quicksortD#1(nil) → nil
quicksortD#2(tuple#2(@xs, @ys), @z) → appendD(quicksortD(@xs), ::(@z, quicksortD(@ys)))
split(@pivot, @l) → split#1(@l, @pivot)
split#1(::(@x, @xs), @pivot) → split#2(split(@pivot, @xs), @pivot, @x)
split#1(nil, @pivot) → tuple#2(nil, nil)
split#2(tuple#2(@ls, @rs), @pivot, @x) → split#3(#greater(@x, @pivot), @ls, @rs, @x)
split#3(#false, @ls, @rs, @x) → tuple#2(::(@x, @ls), @rs)
split#3(#true, @ls, @rs, @x) → tuple#2(@ls, ::(@x, @rs))
splitD(@pivot, @l) → splitD#1(@l, @pivot)
splitD#1(::(@x, @xs), @pivot) → splitD#2(splitD(@pivot, @xs), @pivot, @x)
splitD#1(nil, @pivot) → tuple#2(nil, nil)
splitD#2(tuple#2(@ls, @rs), @pivot, @x) → splitD#3(#greater(@x, @pivot), @ls, @rs, @x)
splitD#3(#false, @ls, @rs, @x) → tuple#2(::(@x, @ls), @rs)
splitD#3(#true, @ls, @rs, @x) → tuple#2(@ls, ::(@x, @rs))
testList(@x) → ::(#abs(#0), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#s(#s(#0))))))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#0))))))))), ::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#s(#0)))))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#0)))))))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))))))))))
testQuicksort(@x) → quicksort(testList(#unit))
testQuicksort2(@x) → quicksort(testList(#unit))
The (relative) TRS S consists of the following rules:
#ckgt(#EQ) → #false
#ckgt(#GT) → #true
#ckgt(#LT) → #false
#compare(#0, #0) → #EQ
#compare(#0, #neg(@y)) → #GT
#compare(#0, #pos(@y)) → #LT
#compare(#0, #s(@y)) → #LT
#compare(#neg(@x), #0) → #LT
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x)
#compare(#neg(@x), #pos(@y)) → #LT
#compare(#pos(@x), #0) → #GT
#compare(#pos(@x), #neg(@y)) → #GT
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y)
#compare(#s(@x), #0) → #GT
#compare(#s(@x), #s(@y)) → #compare(@x, @y)
Rewrite Strategy: INNERMOST
(1) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(2) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
#abs(#0) → #0
#abs(#neg(@x)) → #pos(@x)
#abs(#pos(@x)) → #pos(@x)
#abs(#s(@x)) → #pos(#s(@x))
#greater(@x, @y) → #ckgt(#compare(@x, @y))
append(@l, @ys) → append#1(@l, @ys)
append#1(::(@x, @xs), @ys) → ::(@x, append(@xs, @ys))
append#1(nil, @ys) → @ys
appendD(@l, @ys) → appendD#1(@l, @ys)
appendD#1(::(@x, @xs), @ys) → ::(@x, appendD(@xs, @ys))
appendD#1(nil, @ys) → @ys
quicksort(@l) → quicksort#1(@l)
quicksort#1(::(@z, @zs)) → quicksort#2(split(@z, @zs), @z)
quicksort#1(nil) → nil
quicksort#2(tuple#2(@xs, @ys), @z) → append(quicksort(@xs), ::(@z, quicksort(@ys)))
quicksortD(@l) → quicksortD#1(@l)
quicksortD#1(::(@z, @zs)) → quicksortD#2(splitD(@z, @zs), @z)
quicksortD#1(nil) → nil
quicksortD#2(tuple#2(@xs, @ys), @z) → appendD(quicksortD(@xs), ::(@z, quicksortD(@ys)))
split(@pivot, @l) → split#1(@l, @pivot)
split#1(::(@x, @xs), @pivot) → split#2(split(@pivot, @xs), @pivot, @x)
split#1(nil, @pivot) → tuple#2(nil, nil)
split#2(tuple#2(@ls, @rs), @pivot, @x) → split#3(#greater(@x, @pivot), @ls, @rs, @x)
split#3(#false, @ls, @rs, @x) → tuple#2(::(@x, @ls), @rs)
split#3(#true, @ls, @rs, @x) → tuple#2(@ls, ::(@x, @rs))
splitD(@pivot, @l) → splitD#1(@l, @pivot)
splitD#1(::(@x, @xs), @pivot) → splitD#2(splitD(@pivot, @xs), @pivot, @x)
splitD#1(nil, @pivot) → tuple#2(nil, nil)
splitD#2(tuple#2(@ls, @rs), @pivot, @x) → splitD#3(#greater(@x, @pivot), @ls, @rs, @x)
splitD#3(#false, @ls, @rs, @x) → tuple#2(::(@x, @ls), @rs)
splitD#3(#true, @ls, @rs, @x) → tuple#2(@ls, ::(@x, @rs))
testList(@x) → ::(#abs(#0), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#s(#s(#0))))))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#0))))))))), ::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#s(#0)))))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#0)))))))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))))))))))
testQuicksort(@x) → quicksort(testList(#unit))
testQuicksort2(@x) → quicksort(testList(#unit))
The (relative) TRS S consists of the following rules:
#ckgt(#EQ) → #false
#ckgt(#GT) → #true
#ckgt(#LT) → #false
#compare(#0, #0) → #EQ
#compare(#0, #neg(@y)) → #GT
#compare(#0, #pos(@y)) → #LT
#compare(#0, #s(@y)) → #LT
#compare(#neg(@x), #0) → #LT
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x)
#compare(#neg(@x), #pos(@y)) → #LT
#compare(#pos(@x), #0) → #GT
#compare(#pos(@x), #neg(@y)) → #GT
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y)
#compare(#s(@x), #0) → #GT
#compare(#s(@x), #s(@y)) → #compare(@x, @y)
Rewrite Strategy: INNERMOST
(3) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(4) Obligation:
Innermost TRS:
Rules:
#abs(#0) → #0
#abs(#neg(@x)) → #pos(@x)
#abs(#pos(@x)) → #pos(@x)
#abs(#s(@x)) → #pos(#s(@x))
#greater(@x, @y) → #ckgt(#compare(@x, @y))
append(@l, @ys) → append#1(@l, @ys)
append#1(::(@x, @xs), @ys) → ::(@x, append(@xs, @ys))
append#1(nil, @ys) → @ys
appendD(@l, @ys) → appendD#1(@l, @ys)
appendD#1(::(@x, @xs), @ys) → ::(@x, appendD(@xs, @ys))
appendD#1(nil, @ys) → @ys
quicksort(@l) → quicksort#1(@l)
quicksort#1(::(@z, @zs)) → quicksort#2(split(@z, @zs), @z)
quicksort#1(nil) → nil
quicksort#2(tuple#2(@xs, @ys), @z) → append(quicksort(@xs), ::(@z, quicksort(@ys)))
quicksortD(@l) → quicksortD#1(@l)
quicksortD#1(::(@z, @zs)) → quicksortD#2(splitD(@z, @zs), @z)
quicksortD#1(nil) → nil
quicksortD#2(tuple#2(@xs, @ys), @z) → appendD(quicksortD(@xs), ::(@z, quicksortD(@ys)))
split(@pivot, @l) → split#1(@l, @pivot)
split#1(::(@x, @xs), @pivot) → split#2(split(@pivot, @xs), @pivot, @x)
split#1(nil, @pivot) → tuple#2(nil, nil)
split#2(tuple#2(@ls, @rs), @pivot, @x) → split#3(#greater(@x, @pivot), @ls, @rs, @x)
split#3(#false, @ls, @rs, @x) → tuple#2(::(@x, @ls), @rs)
split#3(#true, @ls, @rs, @x) → tuple#2(@ls, ::(@x, @rs))
splitD(@pivot, @l) → splitD#1(@l, @pivot)
splitD#1(::(@x, @xs), @pivot) → splitD#2(splitD(@pivot, @xs), @pivot, @x)
splitD#1(nil, @pivot) → tuple#2(nil, nil)
splitD#2(tuple#2(@ls, @rs), @pivot, @x) → splitD#3(#greater(@x, @pivot), @ls, @rs, @x)
splitD#3(#false, @ls, @rs, @x) → tuple#2(::(@x, @ls), @rs)
splitD#3(#true, @ls, @rs, @x) → tuple#2(@ls, ::(@x, @rs))
testList(@x) → ::(#abs(#0), ::(#abs(#pos(#s(#s(#s(#s(#0)))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#0))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#s(#s(#0))))))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#0))))))))), ::(#abs(#pos(#s(#0))), ::(#abs(#pos(#s(#s(#0)))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#s(#s(#0)))))))))), ::(#abs(#pos(#s(#s(#s(#s(#s(#s(#0)))))))), ::(#abs(#pos(#s(#s(#s(#0))))), nil))))))))))
testQuicksort(@x) → quicksort(testList(#unit))
testQuicksort2(@x) → quicksort(testList(#unit))
#ckgt(#EQ) → #false
#ckgt(#GT) → #true
#ckgt(#LT) → #false
#compare(#0, #0) → #EQ
#compare(#0, #neg(@y)) → #GT
#compare(#0, #pos(@y)) → #LT
#compare(#0, #s(@y)) → #LT
#compare(#neg(@x), #0) → #LT
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x)
#compare(#neg(@x), #pos(@y)) → #LT
#compare(#pos(@x), #0) → #GT
#compare(#pos(@x), #neg(@y)) → #GT
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y)
#compare(#s(@x), #0) → #GT
#compare(#s(@x), #s(@y)) → #compare(@x, @y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
(5) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
#compare,
append,
append#1,
appendD,
appendD#1,
quicksort,
quicksort#1,
split,
quicksortD,
quicksortD#1,
splitD,
split#1,
splitD#1They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
split < quicksort#1
split = split#1
quicksortD = quicksortD#1
splitD < quicksortD#1
splitD = splitD#1
(6) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
#compare, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, splitD, split#1, splitD#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
split < quicksort#1
split = split#1
quicksortD = quicksortD#1
splitD < quicksortD#1
splitD = splitD#1
(7) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
#compare(
gen_#0:#neg:#pos:#s9_4(
n12_4),
gen_#0:#neg:#pos:#s9_4(
n12_4)) →
#EQ, rt ∈ Ω(0)
Induction Base:
#compare(gen_#0:#neg:#pos:#s9_4(0), gen_#0:#neg:#pos:#s9_4(0)) →RΩ(0)
#EQ
Induction Step:
#compare(gen_#0:#neg:#pos:#s9_4(+(n12_4, 1)), gen_#0:#neg:#pos:#s9_4(+(n12_4, 1))) →RΩ(0)
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) →IH
#EQ
We have rt ∈ Ω(1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n0).
(8) Complex Obligation (BEST)
(9) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
splitD#1, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, splitD, split#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
split < quicksort#1
split = split#1
quicksortD = quicksortD#1
splitD < quicksortD#1
splitD = splitD#1
(10) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
splitD#1(
gen_:::nil10_4(
n319019_4),
gen_#0:#neg:#pos:#s9_4(
0)) →
tuple#2(
gen_:::nil10_4(
n319019_4),
gen_:::nil10_4(
0)), rt ∈ Ω(1 + n319019
4)
Induction Base:
splitD#1(gen_:::nil10_4(0), gen_#0:#neg:#pos:#s9_4(0)) →RΩ(1)
tuple#2(nil, nil)
Induction Step:
splitD#1(gen_:::nil10_4(+(n319019_4, 1)), gen_#0:#neg:#pos:#s9_4(0)) →RΩ(1)
splitD#2(splitD(gen_#0:#neg:#pos:#s9_4(0), gen_:::nil10_4(n319019_4)), gen_#0:#neg:#pos:#s9_4(0), #0) →RΩ(1)
splitD#2(splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)), gen_#0:#neg:#pos:#s9_4(0), #0) →IH
splitD#2(tuple#2(gen_:::nil10_4(c319020_4), gen_:::nil10_4(0)), gen_#0:#neg:#pos:#s9_4(0), #0) →RΩ(1)
splitD#3(#greater(#0, gen_#0:#neg:#pos:#s9_4(0)), gen_:::nil10_4(n319019_4), gen_:::nil10_4(0), #0) →RΩ(1)
splitD#3(#ckgt(#compare(#0, gen_#0:#neg:#pos:#s9_4(0))), gen_:::nil10_4(n319019_4), gen_:::nil10_4(0), #0) →LΩ(0)
splitD#3(#ckgt(#EQ), gen_:::nil10_4(n319019_4), gen_:::nil10_4(0), #0) →RΩ(0)
splitD#3(#false, gen_:::nil10_4(n319019_4), gen_:::nil10_4(0), #0) →RΩ(1)
tuple#2(::(#0, gen_:::nil10_4(n319019_4)), gen_:::nil10_4(0))
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(11) Complex Obligation (BEST)
(12) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
splitD, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, split#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
split < quicksort#1
split = split#1
quicksortD = quicksortD#1
splitD < quicksortD#1
splitD = splitD#1
(13) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol splitD.
(14) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
split#1, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
split < quicksort#1
split = split#1
quicksortD = quicksortD#1
(15) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
split#1(
gen_:::nil10_4(
n321180_4),
gen_#0:#neg:#pos:#s9_4(
0)) →
tuple#2(
gen_:::nil10_4(
n321180_4),
gen_:::nil10_4(
0)), rt ∈ Ω(1 + n321180
4)
Induction Base:
split#1(gen_:::nil10_4(0), gen_#0:#neg:#pos:#s9_4(0)) →RΩ(1)
tuple#2(nil, nil)
Induction Step:
split#1(gen_:::nil10_4(+(n321180_4, 1)), gen_#0:#neg:#pos:#s9_4(0)) →RΩ(1)
split#2(split(gen_#0:#neg:#pos:#s9_4(0), gen_:::nil10_4(n321180_4)), gen_#0:#neg:#pos:#s9_4(0), #0) →RΩ(1)
split#2(split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)), gen_#0:#neg:#pos:#s9_4(0), #0) →IH
split#2(tuple#2(gen_:::nil10_4(c321181_4), gen_:::nil10_4(0)), gen_#0:#neg:#pos:#s9_4(0), #0) →RΩ(1)
split#3(#greater(#0, gen_#0:#neg:#pos:#s9_4(0)), gen_:::nil10_4(n321180_4), gen_:::nil10_4(0), #0) →RΩ(1)
split#3(#ckgt(#compare(#0, gen_#0:#neg:#pos:#s9_4(0))), gen_:::nil10_4(n321180_4), gen_:::nil10_4(0), #0) →LΩ(0)
split#3(#ckgt(#EQ), gen_:::nil10_4(n321180_4), gen_:::nil10_4(0), #0) →RΩ(0)
split#3(#false, gen_:::nil10_4(n321180_4), gen_:::nil10_4(0), #0) →RΩ(1)
tuple#2(::(#0, gen_:::nil10_4(n321180_4)), gen_:::nil10_4(0))
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(16) Complex Obligation (BEST)
(17) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
split, append, append#1, appendD, appendD#1, quicksort, quicksort#1, quicksortD, quicksortD#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
split < quicksort#1
split = split#1
quicksortD = quicksortD#1
(18) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol split.
(19) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
appendD#1, append, append#1, appendD, quicksort, quicksort#1, quicksortD, quicksortD#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
quicksortD = quicksortD#1
(20) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
appendD#1(
gen_:::nil10_4(
n323364_4),
gen_:::nil10_4(
b)) →
gen_:::nil10_4(
+(
n323364_4,
b)), rt ∈ Ω(1 + n323364
4)
Induction Base:
appendD#1(gen_:::nil10_4(0), gen_:::nil10_4(b)) →RΩ(1)
gen_:::nil10_4(b)
Induction Step:
appendD#1(gen_:::nil10_4(+(n323364_4, 1)), gen_:::nil10_4(b)) →RΩ(1)
::(#0, appendD(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b))) →RΩ(1)
::(#0, appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b))) →IH
::(#0, gen_:::nil10_4(+(b, c323365_4)))
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(21) Complex Obligation (BEST)
(22) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
appendD, append, append#1, quicksort, quicksort#1, quicksortD, quicksortD#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
appendD = appendD#1
appendD < quicksortD#1
quicksort = quicksort#1
quicksortD = quicksortD#1
(23) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol appendD.
(24) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
quicksortD#1, append, append#1, quicksort, quicksort#1, quicksortD
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
quicksort = quicksort#1
quicksortD = quicksortD#1
(25) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
quicksortD#1(
gen_:::nil10_4(
n325091_4)) →
gen_:::nil10_4(
n325091_4), rt ∈ Ω(1 + n325091
4 + n325091
42)
Induction Base:
quicksortD#1(gen_:::nil10_4(0)) →RΩ(1)
nil
Induction Step:
quicksortD#1(gen_:::nil10_4(+(n325091_4, 1))) →RΩ(1)
quicksortD#2(splitD(#0, gen_:::nil10_4(n325091_4)), #0) →RΩ(1)
quicksortD#2(splitD#1(gen_:::nil10_4(n325091_4), #0), #0) →LΩ(1 + n3250914)
quicksortD#2(tuple#2(gen_:::nil10_4(n325091_4), gen_:::nil10_4(0)), #0) →RΩ(1)
appendD(quicksortD(gen_:::nil10_4(n325091_4)), ::(#0, quicksortD(gen_:::nil10_4(0)))) →RΩ(1)
appendD(quicksortD#1(gen_:::nil10_4(n325091_4)), ::(#0, quicksortD(gen_:::nil10_4(0)))) →IH
appendD(gen_:::nil10_4(c325092_4), ::(#0, quicksortD(gen_:::nil10_4(0)))) →RΩ(1)
appendD(gen_:::nil10_4(n325091_4), ::(#0, quicksortD#1(gen_:::nil10_4(0)))) →RΩ(1)
appendD(gen_:::nil10_4(n325091_4), ::(#0, nil)) →RΩ(1)
appendD#1(gen_:::nil10_4(n325091_4), ::(#0, nil)) →LΩ(1 + n3250914)
gen_:::nil10_4(+(n325091_4, +(0, 1)))
We have rt ∈ Ω(n2) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n2).
(26) Complex Obligation (BEST)
(27) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
quicksortD, append, append#1, quicksort, quicksort#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
quicksort = quicksort#1
quicksortD = quicksortD#1
(28) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol quicksortD.
(29) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
append#1, append, quicksort, quicksort#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
quicksort = quicksort#1
(30) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
append#1(
gen_:::nil10_4(
n326438_4),
gen_:::nil10_4(
b)) →
gen_:::nil10_4(
+(
n326438_4,
b)), rt ∈ Ω(1 + n326438
4)
Induction Base:
append#1(gen_:::nil10_4(0), gen_:::nil10_4(b)) →RΩ(1)
gen_:::nil10_4(b)
Induction Step:
append#1(gen_:::nil10_4(+(n326438_4, 1)), gen_:::nil10_4(b)) →RΩ(1)
::(#0, append(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b))) →RΩ(1)
::(#0, append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b))) →IH
::(#0, gen_:::nil10_4(+(b, c326439_4)))
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(31) Complex Obligation (BEST)
(32) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n326438_4, b)), rt ∈ Ω(1 + n3264384)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
append, quicksort, quicksort#1
They will be analysed ascendingly in the following order:
append = append#1
append < quicksort#1
quicksort = quicksort#1
(33) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol append.
(34) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n326438_4, b)), rt ∈ Ω(1 + n3264384)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
quicksort#1, quicksort
They will be analysed ascendingly in the following order:
quicksort = quicksort#1
(35) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
quicksort#1(
gen_:::nil10_4(
n328209_4)) →
gen_:::nil10_4(
n328209_4), rt ∈ Ω(1 + n328209
4 + n328209
42)
Induction Base:
quicksort#1(gen_:::nil10_4(0)) →RΩ(1)
nil
Induction Step:
quicksort#1(gen_:::nil10_4(+(n328209_4, 1))) →RΩ(1)
quicksort#2(split(#0, gen_:::nil10_4(n328209_4)), #0) →RΩ(1)
quicksort#2(split#1(gen_:::nil10_4(n328209_4), #0), #0) →LΩ(1 + n3282094)
quicksort#2(tuple#2(gen_:::nil10_4(n328209_4), gen_:::nil10_4(0)), #0) →RΩ(1)
append(quicksort(gen_:::nil10_4(n328209_4)), ::(#0, quicksort(gen_:::nil10_4(0)))) →RΩ(1)
append(quicksort#1(gen_:::nil10_4(n328209_4)), ::(#0, quicksort(gen_:::nil10_4(0)))) →IH
append(gen_:::nil10_4(c328210_4), ::(#0, quicksort(gen_:::nil10_4(0)))) →RΩ(1)
append(gen_:::nil10_4(n328209_4), ::(#0, quicksort#1(gen_:::nil10_4(0)))) →RΩ(1)
append(gen_:::nil10_4(n328209_4), ::(#0, nil)) →RΩ(1)
append#1(gen_:::nil10_4(n328209_4), ::(#0, nil)) →LΩ(1 + n3282094)
gen_:::nil10_4(+(n328209_4, +(0, 1)))
We have rt ∈ Ω(n2) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n2).
(36) Complex Obligation (BEST)
(37) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n326438_4, b)), rt ∈ Ω(1 + n3264384)
quicksort#1(gen_:::nil10_4(n328209_4)) → gen_:::nil10_4(n328209_4), rt ∈ Ω(1 + n3282094 + n32820942)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
The following defined symbols remain to be analysed:
quicksort
They will be analysed ascendingly in the following order:
quicksort = quicksort#1
(38) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol quicksort.
(39) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n326438_4, b)), rt ∈ Ω(1 + n3264384)
quicksort#1(gen_:::nil10_4(n328209_4)) → gen_:::nil10_4(n328209_4), rt ∈ Ω(1 + n3282094 + n32820942)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(40) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n2) was proven with the following lemma:
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
(41) BOUNDS(n^2, INF)
(42) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n326438_4, b)), rt ∈ Ω(1 + n3264384)
quicksort#1(gen_:::nil10_4(n328209_4)) → gen_:::nil10_4(n328209_4), rt ∈ Ω(1 + n3282094 + n32820942)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(43) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n2) was proven with the following lemma:
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
(44) BOUNDS(n^2, INF)
(45) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
append#1(gen_:::nil10_4(n326438_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n326438_4, b)), rt ∈ Ω(1 + n3264384)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(46) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n2) was proven with the following lemma:
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
(47) BOUNDS(n^2, INF)
(48) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(49) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n2) was proven with the following lemma:
quicksortD#1(gen_:::nil10_4(n325091_4)) → gen_:::nil10_4(n325091_4), rt ∈ Ω(1 + n3250914 + n32509142)
(50) BOUNDS(n^2, INF)
(51) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
appendD#1(gen_:::nil10_4(n323364_4), gen_:::nil10_4(b)) → gen_:::nil10_4(+(n323364_4, b)), rt ∈ Ω(1 + n3233644)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(52) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
(53) BOUNDS(n^1, INF)
(54) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
split#1(gen_:::nil10_4(n321180_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n321180_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3211804)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(55) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
(56) BOUNDS(n^1, INF)
(57) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(58) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
splitD#1(gen_:::nil10_4(n319019_4), gen_#0:#neg:#pos:#s9_4(0)) → tuple#2(gen_:::nil10_4(n319019_4), gen_:::nil10_4(0)), rt ∈ Ω(1 + n3190194)
(59) BOUNDS(n^1, INF)
(60) Obligation:
Innermost TRS:
Rules:
#abs(
#0) →
#0#abs(
#neg(
@x)) →
#pos(
@x)
#abs(
#pos(
@x)) →
#pos(
@x)
#abs(
#s(
@x)) →
#pos(
#s(
@x))
#greater(
@x,
@y) →
#ckgt(
#compare(
@x,
@y))
append(
@l,
@ys) →
append#1(
@l,
@ys)
append#1(
::(
@x,
@xs),
@ys) →
::(
@x,
append(
@xs,
@ys))
append#1(
nil,
@ys) →
@ysappendD(
@l,
@ys) →
appendD#1(
@l,
@ys)
appendD#1(
::(
@x,
@xs),
@ys) →
::(
@x,
appendD(
@xs,
@ys))
appendD#1(
nil,
@ys) →
@ysquicksort(
@l) →
quicksort#1(
@l)
quicksort#1(
::(
@z,
@zs)) →
quicksort#2(
split(
@z,
@zs),
@z)
quicksort#1(
nil) →
nilquicksort#2(
tuple#2(
@xs,
@ys),
@z) →
append(
quicksort(
@xs),
::(
@z,
quicksort(
@ys)))
quicksortD(
@l) →
quicksortD#1(
@l)
quicksortD#1(
::(
@z,
@zs)) →
quicksortD#2(
splitD(
@z,
@zs),
@z)
quicksortD#1(
nil) →
nilquicksortD#2(
tuple#2(
@xs,
@ys),
@z) →
appendD(
quicksortD(
@xs),
::(
@z,
quicksortD(
@ys)))
split(
@pivot,
@l) →
split#1(
@l,
@pivot)
split#1(
::(
@x,
@xs),
@pivot) →
split#2(
split(
@pivot,
@xs),
@pivot,
@x)
split#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
split#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
split#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
split#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
split#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
splitD(
@pivot,
@l) →
splitD#1(
@l,
@pivot)
splitD#1(
::(
@x,
@xs),
@pivot) →
splitD#2(
splitD(
@pivot,
@xs),
@pivot,
@x)
splitD#1(
nil,
@pivot) →
tuple#2(
nil,
nil)
splitD#2(
tuple#2(
@ls,
@rs),
@pivot,
@x) →
splitD#3(
#greater(
@x,
@pivot),
@ls,
@rs,
@x)
splitD#3(
#false,
@ls,
@rs,
@x) →
tuple#2(
::(
@x,
@ls),
@rs)
splitD#3(
#true,
@ls,
@rs,
@x) →
tuple#2(
@ls,
::(
@x,
@rs))
testList(
@x) →
::(
#abs(
#0),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#0)))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#0))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0))))))))),
::(
#abs(
#pos(
#s(
#0))),
::(
#abs(
#pos(
#s(
#s(
#0)))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#s(
#s(
#s(
#0)))))))),
::(
#abs(
#pos(
#s(
#s(
#s(
#0))))),
nil))))))))))
testQuicksort(
@x) →
quicksort(
testList(
#unit))
testQuicksort2(
@x) →
quicksort(
testList(
#unit))
#ckgt(
#EQ) →
#false#ckgt(
#GT) →
#true#ckgt(
#LT) →
#false#compare(
#0,
#0) →
#EQ#compare(
#0,
#neg(
@y)) →
#GT#compare(
#0,
#pos(
@y)) →
#LT#compare(
#0,
#s(
@y)) →
#LT#compare(
#neg(
@x),
#0) →
#LT#compare(
#neg(
@x),
#neg(
@y)) →
#compare(
@y,
@x)
#compare(
#neg(
@x),
#pos(
@y)) →
#LT#compare(
#pos(
@x),
#0) →
#GT#compare(
#pos(
@x),
#neg(
@y)) →
#GT#compare(
#pos(
@x),
#pos(
@y)) →
#compare(
@x,
@y)
#compare(
#s(
@x),
#0) →
#GT#compare(
#s(
@x),
#s(
@y)) →
#compare(
@x,
@y)
Types:
#abs :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#0 :: #0:#neg:#pos:#s
#neg :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#pos :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#s :: #0:#neg:#pos:#s → #0:#neg:#pos:#s
#greater :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s → #0:#neg:#pos:#s → #EQ:#GT:#LT
append :: :::nil → :::nil → :::nil
append#1 :: :::nil → :::nil → :::nil
:: :: #0:#neg:#pos:#s → :::nil → :::nil
nil :: :::nil
appendD :: :::nil → :::nil → :::nil
appendD#1 :: :::nil → :::nil → :::nil
quicksort :: :::nil → :::nil
quicksort#1 :: :::nil → :::nil
quicksort#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
split :: #0:#neg:#pos:#s → :::nil → tuple#2
tuple#2 :: :::nil → :::nil → tuple#2
quicksortD :: :::nil → :::nil
quicksortD#1 :: :::nil → :::nil
quicksortD#2 :: tuple#2 → #0:#neg:#pos:#s → :::nil
splitD :: #0:#neg:#pos:#s → :::nil → tuple#2
split#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
split#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
split#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
#false :: #false:#true
#true :: #false:#true
splitD#1 :: :::nil → #0:#neg:#pos:#s → tuple#2
splitD#2 :: tuple#2 → #0:#neg:#pos:#s → #0:#neg:#pos:#s → tuple#2
splitD#3 :: #false:#true → :::nil → :::nil → #0:#neg:#pos:#s → tuple#2
testList :: #unit → :::nil
testQuicksort :: a → :::nil
#unit :: #unit
testQuicksort2 :: b → :::nil
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s
hole_#false:#true2_4 :: #false:#true
hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT
hole_:::nil4_4 :: :::nil
hole_tuple#25_4 :: tuple#2
hole_#unit6_4 :: #unit
hole_a7_4 :: a
hole_b8_4 :: b
gen_#0:#neg:#pos:#s9_4 :: Nat → #0:#neg:#pos:#s
gen_:::nil10_4 :: Nat → :::nil
Lemmas:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
Generator Equations:
gen_#0:#neg:#pos:#s9_4(0) ⇔ #0
gen_#0:#neg:#pos:#s9_4(+(x, 1)) ⇔ #neg(gen_#0:#neg:#pos:#s9_4(x))
gen_:::nil10_4(0) ⇔ nil
gen_:::nil10_4(+(x, 1)) ⇔ ::(#0, gen_:::nil10_4(x))
No more defined symbols left to analyse.
(61) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(1) was proven with the following lemma:
#compare(gen_#0:#neg:#pos:#s9_4(n12_4), gen_#0:#neg:#pos:#s9_4(n12_4)) → #EQ, rt ∈ Ω(0)
(62) BOUNDS(1, INF)