222.91/58.11 WORST_CASE(Omega(n^2), O(n^2)) 222.91/58.12 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 222.91/58.12 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 222.91/58.12 222.91/58.12 222.91/58.12 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^2, n^2). 222.91/58.12 222.91/58.12 (0) CpxRelTRS 222.91/58.12 (1) STerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 182 ms] 222.91/58.12 (2) CpxRelTRS 222.91/58.12 (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] 222.91/58.12 (4) CpxWeightedTrs 222.91/58.12 (5) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 222.91/58.12 (6) CpxTypedWeightedTrs 222.91/58.12 (7) CompletionProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (8) CpxTypedWeightedCompleteTrs 222.91/58.12 (9) NarrowingProof [BOTH BOUNDS(ID, ID), 5 ms] 222.91/58.12 (10) CpxTypedWeightedCompleteTrs 222.91/58.12 (11) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (12) CpxRNTS 222.91/58.12 (13) InliningProof [UPPER BOUND(ID), 729 ms] 222.91/58.12 (14) CpxRNTS 222.91/58.12 (15) SimplificationProof [BOTH BOUNDS(ID, ID), 10 ms] 222.91/58.12 (16) CpxRNTS 222.91/58.12 (17) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 3 ms] 222.91/58.12 (18) CpxRNTS 222.91/58.12 (19) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (20) CpxRNTS 222.91/58.12 (21) IntTrsBoundProof [UPPER BOUND(ID), 756 ms] 222.91/58.12 (22) CpxRNTS 222.91/58.12 (23) IntTrsBoundProof [UPPER BOUND(ID), 134 ms] 222.91/58.12 (24) CpxRNTS 222.91/58.12 (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (26) CpxRNTS 222.91/58.12 (27) IntTrsBoundProof [UPPER BOUND(ID), 422 ms] 222.91/58.12 (28) CpxRNTS 222.91/58.12 (29) IntTrsBoundProof [UPPER BOUND(ID), 95 ms] 222.91/58.12 (30) CpxRNTS 222.91/58.12 (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (32) CpxRNTS 222.91/58.12 (33) IntTrsBoundProof [UPPER BOUND(ID), 431 ms] 222.91/58.12 (34) CpxRNTS 222.91/58.12 (35) IntTrsBoundProof [UPPER BOUND(ID), 35 ms] 222.91/58.12 (36) CpxRNTS 222.91/58.12 (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (38) CpxRNTS 222.91/58.12 (39) IntTrsBoundProof [UPPER BOUND(ID), 1176 ms] 222.91/58.12 (40) CpxRNTS 222.91/58.12 (41) IntTrsBoundProof [UPPER BOUND(ID), 266 ms] 222.91/58.12 (42) CpxRNTS 222.91/58.12 (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (44) CpxRNTS 222.91/58.12 (45) IntTrsBoundProof [UPPER BOUND(ID), 129 ms] 222.91/58.12 (46) CpxRNTS 222.91/58.12 (47) IntTrsBoundProof [UPPER BOUND(ID), 53 ms] 222.91/58.12 (48) CpxRNTS 222.91/58.12 (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (50) CpxRNTS 222.91/58.12 (51) IntTrsBoundProof [UPPER BOUND(ID), 672 ms] 222.91/58.12 (52) CpxRNTS 222.91/58.12 (53) IntTrsBoundProof [UPPER BOUND(ID), 117 ms] 222.91/58.12 (54) CpxRNTS 222.91/58.12 (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (56) CpxRNTS 222.91/58.12 (57) IntTrsBoundProof [UPPER BOUND(ID), 169 ms] 222.91/58.12 (58) CpxRNTS 222.91/58.12 (59) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] 222.91/58.12 (60) CpxRNTS 222.91/58.12 (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (62) CpxRNTS 222.91/58.12 (63) IntTrsBoundProof [UPPER BOUND(ID), 261 ms] 222.91/58.12 (64) CpxRNTS 222.91/58.12 (65) IntTrsBoundProof [UPPER BOUND(ID), 44 ms] 222.91/58.12 (66) CpxRNTS 222.91/58.12 (67) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (68) CpxRNTS 222.91/58.12 (69) IntTrsBoundProof [UPPER BOUND(ID), 300 ms] 222.91/58.12 (70) CpxRNTS 222.91/58.12 (71) IntTrsBoundProof [UPPER BOUND(ID), 75 ms] 222.91/58.12 (72) CpxRNTS 222.91/58.12 (73) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (74) CpxRNTS 222.91/58.12 (75) IntTrsBoundProof [UPPER BOUND(ID), 618 ms] 222.91/58.12 (76) CpxRNTS 222.91/58.12 (77) IntTrsBoundProof [UPPER BOUND(ID), 128 ms] 222.91/58.12 (78) CpxRNTS 222.91/58.12 (79) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (80) CpxRNTS 222.91/58.12 (81) IntTrsBoundProof [UPPER BOUND(ID), 411 ms] 222.91/58.12 (82) CpxRNTS 222.91/58.12 (83) IntTrsBoundProof [UPPER BOUND(ID), 43 ms] 222.91/58.12 (84) CpxRNTS 222.91/58.12 (85) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (86) CpxRNTS 222.91/58.12 (87) IntTrsBoundProof [UPPER BOUND(ID), 338 ms] 222.91/58.12 (88) CpxRNTS 222.91/58.12 (89) IntTrsBoundProof [UPPER BOUND(ID), 134 ms] 222.91/58.12 (90) CpxRNTS 222.91/58.12 (91) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (92) CpxRNTS 222.91/58.12 (93) IntTrsBoundProof [UPPER BOUND(ID), 389 ms] 222.91/58.12 (94) CpxRNTS 222.91/58.12 (95) IntTrsBoundProof [UPPER BOUND(ID), 134 ms] 222.91/58.12 (96) CpxRNTS 222.91/58.12 (97) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (98) CpxRNTS 222.91/58.12 (99) IntTrsBoundProof [UPPER BOUND(ID), 127 ms] 222.91/58.12 (100) CpxRNTS 222.91/58.12 (101) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] 222.91/58.12 (102) CpxRNTS 222.91/58.12 (103) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (104) CpxRNTS 222.91/58.12 (105) IntTrsBoundProof [UPPER BOUND(ID), 891 ms] 222.91/58.12 (106) CpxRNTS 222.91/58.12 (107) IntTrsBoundProof [UPPER BOUND(ID), 309 ms] 222.91/58.12 (108) CpxRNTS 222.91/58.12 (109) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (110) CpxRNTS 222.91/58.12 (111) IntTrsBoundProof [UPPER BOUND(ID), 1169 ms] 222.91/58.12 (112) CpxRNTS 222.91/58.12 (113) IntTrsBoundProof [UPPER BOUND(ID), 889 ms] 222.91/58.12 (114) CpxRNTS 222.91/58.12 (115) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (116) CpxRNTS 222.91/58.12 (117) IntTrsBoundProof [UPPER BOUND(ID), 147 ms] 222.91/58.12 (118) CpxRNTS 222.91/58.12 (119) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] 222.91/58.12 (120) CpxRNTS 222.91/58.12 (121) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (122) CpxRNTS 222.91/58.12 (123) IntTrsBoundProof [UPPER BOUND(ID), 76 ms] 222.91/58.12 (124) CpxRNTS 222.91/58.12 (125) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] 222.91/58.12 (126) CpxRNTS 222.91/58.12 (127) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (128) CpxRNTS 222.91/58.12 (129) IntTrsBoundProof [UPPER BOUND(ID), 97 ms] 222.91/58.12 (130) CpxRNTS 222.91/58.12 (131) IntTrsBoundProof [UPPER BOUND(ID), 2 ms] 222.91/58.12 (132) CpxRNTS 222.91/58.12 (133) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (134) CpxRNTS 222.91/58.12 (135) IntTrsBoundProof [UPPER BOUND(ID), 160 ms] 222.91/58.12 (136) CpxRNTS 222.91/58.12 (137) IntTrsBoundProof [UPPER BOUND(ID), 65 ms] 222.91/58.12 (138) CpxRNTS 222.91/58.12 (139) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 222.91/58.12 (140) CpxRNTS 222.91/58.12 (141) IntTrsBoundProof [UPPER BOUND(ID), 140 ms] 222.91/58.12 (142) CpxRNTS 222.91/58.12 (143) IntTrsBoundProof [UPPER BOUND(ID), 5 ms] 222.91/58.12 (144) CpxRNTS 222.91/58.12 (145) FinalProof [FINISHED, 0 ms] 222.91/58.12 (146) BOUNDS(1, n^2) 222.91/58.12 (147) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] 222.91/58.12 (148) CpxRelTRS 222.91/58.12 (149) SlicingProof [LOWER BOUND(ID), 0 ms] 222.91/58.12 (150) CpxRelTRS 222.91/58.12 (151) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 222.91/58.12 (152) typed CpxTrs 222.91/58.12 (153) OrderProof [LOWER BOUND(ID), 5 ms] 222.91/58.12 (154) typed CpxTrs 222.91/58.12 (155) RewriteLemmaProof [LOWER BOUND(ID), 2007 ms] 222.91/58.12 (156) typed CpxTrs 222.91/58.12 (157) RewriteLemmaProof [LOWER BOUND(ID), 115 ms] 222.91/58.12 (158) BEST 222.91/58.12 (159) proven lower bound 222.91/58.12 (160) LowerBoundPropagationProof [FINISHED, 0 ms] 222.91/58.12 (161) BOUNDS(n^1, INF) 222.91/58.12 (162) typed CpxTrs 222.91/58.12 (163) RewriteLemmaProof [LOWER BOUND(ID), 147 ms] 222.91/58.12 (164) typed CpxTrs 222.91/58.12 (165) RewriteLemmaProof [LOWER BOUND(ID), 33 ms] 222.91/58.12 (166) typed CpxTrs 222.91/58.12 (167) RewriteLemmaProof [LOWER BOUND(ID), 83 ms] 222.91/58.12 (168) BEST 222.91/58.12 (169) proven lower bound 222.91/58.12 (170) LowerBoundPropagationProof [FINISHED, 0 ms] 222.91/58.12 (171) BOUNDS(n^2, INF) 222.91/58.12 (172) typed CpxTrs 222.91/58.12 (173) RewriteLemmaProof [LOWER BOUND(ID), 48 ms] 222.91/58.12 (174) typed CpxTrs 222.91/58.12 (175) RewriteLemmaProof [LOWER BOUND(ID), 74 ms] 222.91/58.12 (176) typed CpxTrs 222.91/58.12 222.91/58.12 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (0) 222.91/58.12 Obligation: 222.91/58.12 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^2, n^2). 222.91/58.12 222.91/58.12 222.91/58.12 The TRS R consists of the following rules: 222.91/58.12 222.91/58.12 #abs(#0) -> #0 222.91/58.12 #abs(#neg(@x)) -> #pos(@x) 222.91/58.12 #abs(#pos(@x)) -> #pos(@x) 222.91/58.12 #abs(#s(@x)) -> #pos(#s(@x)) 222.91/58.12 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 222.91/58.12 append(@l, @ys) -> append#1(@l, @ys) 222.91/58.12 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 222.91/58.12 append#1(nil, @ys) -> @ys 222.91/58.12 appendD(@l, @ys) -> appendD#1(@l, @ys) 222.91/58.12 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 222.91/58.12 appendD#1(nil, @ys) -> @ys 222.91/58.12 quicksort(@l) -> quicksort#1(@l) 222.91/58.12 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 222.91/58.12 quicksort#1(nil) -> nil 222.91/58.12 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 222.91/58.12 quicksortD(@l) -> quicksortD#1(@l) 222.91/58.12 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 222.91/58.12 quicksortD#1(nil) -> nil 222.91/58.12 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 222.91/58.12 split(@pivot, @l) -> split#1(@l, @pivot) 222.91/58.12 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 222.91/58.12 split#1(nil, @pivot) -> tuple#2(nil, nil) 222.91/58.12 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 222.91/58.12 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 222.91/58.12 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 222.91/58.12 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 222.91/58.12 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 222.91/58.12 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 222.91/58.12 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 222.91/58.12 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 222.91/58.12 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 222.91/58.12 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)))))))))) 222.91/58.12 testQuicksort(@x) -> quicksort(testList(#unit)) 222.91/58.12 testQuicksort2(@x) -> quicksort(testList(#unit)) 222.91/58.12 222.91/58.12 The (relative) TRS S consists of the following rules: 222.91/58.12 222.91/58.12 #ckgt(#EQ) -> #false 222.91/58.12 #ckgt(#GT) -> #true 222.91/58.12 #ckgt(#LT) -> #false 222.91/58.12 #compare(#0, #0) -> #EQ 222.91/58.12 #compare(#0, #neg(@y)) -> #GT 222.91/58.12 #compare(#0, #pos(@y)) -> #LT 222.91/58.12 #compare(#0, #s(@y)) -> #LT 222.91/58.12 #compare(#neg(@x), #0) -> #LT 222.91/58.12 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 222.91/58.12 #compare(#neg(@x), #pos(@y)) -> #LT 222.91/58.12 #compare(#pos(@x), #0) -> #GT 222.91/58.12 #compare(#pos(@x), #neg(@y)) -> #GT 222.91/58.12 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 222.91/58.12 #compare(#s(@x), #0) -> #GT 222.91/58.12 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 222.91/58.12 222.91/58.12 Rewrite Strategy: INNERMOST 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (1) STerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) 222.91/58.12 proved termination of relative rules 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (2) 222.91/58.12 Obligation: 222.91/58.12 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^2, n^2). 222.91/58.12 222.91/58.12 222.91/58.12 The TRS R consists of the following rules: 222.91/58.12 222.91/58.12 #abs(#0) -> #0 222.91/58.12 #abs(#neg(@x)) -> #pos(@x) 222.91/58.12 #abs(#pos(@x)) -> #pos(@x) 222.91/58.12 #abs(#s(@x)) -> #pos(#s(@x)) 222.91/58.12 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 222.91/58.12 append(@l, @ys) -> append#1(@l, @ys) 222.91/58.12 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 222.91/58.12 append#1(nil, @ys) -> @ys 222.91/58.12 appendD(@l, @ys) -> appendD#1(@l, @ys) 222.91/58.12 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 222.91/58.12 appendD#1(nil, @ys) -> @ys 222.91/58.12 quicksort(@l) -> quicksort#1(@l) 222.91/58.12 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 222.91/58.12 quicksort#1(nil) -> nil 222.91/58.12 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 222.91/58.12 quicksortD(@l) -> quicksortD#1(@l) 222.91/58.12 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 222.91/58.12 quicksortD#1(nil) -> nil 222.91/58.12 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 222.91/58.12 split(@pivot, @l) -> split#1(@l, @pivot) 222.91/58.12 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 222.91/58.12 split#1(nil, @pivot) -> tuple#2(nil, nil) 222.91/58.12 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 222.91/58.12 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 222.91/58.12 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 222.91/58.12 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 222.91/58.12 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 222.91/58.12 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 222.91/58.12 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 222.91/58.12 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 222.91/58.12 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 222.91/58.12 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)))))))))) 222.91/58.12 testQuicksort(@x) -> quicksort(testList(#unit)) 222.91/58.12 testQuicksort2(@x) -> quicksort(testList(#unit)) 222.91/58.12 222.91/58.12 The (relative) TRS S consists of the following rules: 222.91/58.12 222.91/58.12 #ckgt(#EQ) -> #false 222.91/58.12 #ckgt(#GT) -> #true 222.91/58.12 #ckgt(#LT) -> #false 222.91/58.12 #compare(#0, #0) -> #EQ 222.91/58.12 #compare(#0, #neg(@y)) -> #GT 222.91/58.12 #compare(#0, #pos(@y)) -> #LT 222.91/58.12 #compare(#0, #s(@y)) -> #LT 222.91/58.12 #compare(#neg(@x), #0) -> #LT 222.91/58.12 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 222.91/58.12 #compare(#neg(@x), #pos(@y)) -> #LT 222.91/58.12 #compare(#pos(@x), #0) -> #GT 222.91/58.12 #compare(#pos(@x), #neg(@y)) -> #GT 222.91/58.12 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 222.91/58.12 #compare(#s(@x), #0) -> #GT 222.91/58.12 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 222.91/58.12 222.91/58.12 Rewrite Strategy: INNERMOST 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (3) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) 222.91/58.12 Transformed relative TRS to weighted TRS 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (4) 222.91/58.12 Obligation: 222.91/58.12 The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). 222.91/58.12 222.91/58.12 222.91/58.12 The TRS R consists of the following rules: 222.91/58.12 222.91/58.12 #abs(#0) -> #0 [1] 222.91/58.12 #abs(#neg(@x)) -> #pos(@x) [1] 222.91/58.12 #abs(#pos(@x)) -> #pos(@x) [1] 222.91/58.12 #abs(#s(@x)) -> #pos(#s(@x)) [1] 222.91/58.12 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] 222.91/58.12 append(@l, @ys) -> append#1(@l, @ys) [1] 222.91/58.12 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) [1] 222.91/58.12 append#1(nil, @ys) -> @ys [1] 222.91/58.12 appendD(@l, @ys) -> appendD#1(@l, @ys) [1] 222.91/58.12 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) [1] 222.91/58.12 appendD#1(nil, @ys) -> @ys [1] 222.91/58.12 quicksort(@l) -> quicksort#1(@l) [1] 222.91/58.12 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) [1] 222.91/58.12 quicksort#1(nil) -> nil [1] 222.91/58.12 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) [1] 222.91/58.12 quicksortD(@l) -> quicksortD#1(@l) [1] 222.91/58.12 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) [1] 222.91/58.12 quicksortD#1(nil) -> nil [1] 222.91/58.12 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) [1] 222.91/58.12 split(@pivot, @l) -> split#1(@l, @pivot) [1] 222.91/58.12 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) [1] 222.91/58.12 split#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.12 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) [1] 222.91/58.12 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.12 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.12 splitD(@pivot, @l) -> splitD#1(@l, @pivot) [1] 222.91/58.12 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) [1] 222.91/58.12 splitD#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.12 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) [1] 222.91/58.12 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.12 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.12 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)))))))))) [1] 222.91/58.12 testQuicksort(@x) -> quicksort(testList(#unit)) [1] 222.91/58.12 testQuicksort2(@x) -> quicksort(testList(#unit)) [1] 222.91/58.12 #ckgt(#EQ) -> #false [0] 222.91/58.12 #ckgt(#GT) -> #true [0] 222.91/58.12 #ckgt(#LT) -> #false [0] 222.91/58.12 #compare(#0, #0) -> #EQ [0] 222.91/58.12 #compare(#0, #neg(@y)) -> #GT [0] 222.91/58.12 #compare(#0, #pos(@y)) -> #LT [0] 222.91/58.12 #compare(#0, #s(@y)) -> #LT [0] 222.91/58.12 #compare(#neg(@x), #0) -> #LT [0] 222.91/58.12 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 222.91/58.12 #compare(#neg(@x), #pos(@y)) -> #LT [0] 222.91/58.12 #compare(#pos(@x), #0) -> #GT [0] 222.91/58.12 #compare(#pos(@x), #neg(@y)) -> #GT [0] 222.91/58.12 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 222.91/58.12 #compare(#s(@x), #0) -> #GT [0] 222.91/58.12 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 222.91/58.12 222.91/58.12 Rewrite Strategy: INNERMOST 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (5) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 222.91/58.12 Infered types. 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (6) 222.91/58.12 Obligation: 222.91/58.12 Runtime Complexity Weighted TRS with Types. 222.91/58.12 The TRS R consists of the following rules: 222.91/58.12 222.91/58.12 #abs(#0) -> #0 [1] 222.91/58.12 #abs(#neg(@x)) -> #pos(@x) [1] 222.91/58.12 #abs(#pos(@x)) -> #pos(@x) [1] 222.91/58.12 #abs(#s(@x)) -> #pos(#s(@x)) [1] 222.91/58.12 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] 222.91/58.12 append(@l, @ys) -> append#1(@l, @ys) [1] 222.91/58.12 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) [1] 222.91/58.12 append#1(nil, @ys) -> @ys [1] 222.91/58.12 appendD(@l, @ys) -> appendD#1(@l, @ys) [1] 222.91/58.12 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) [1] 222.91/58.12 appendD#1(nil, @ys) -> @ys [1] 222.91/58.12 quicksort(@l) -> quicksort#1(@l) [1] 222.91/58.12 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) [1] 222.91/58.12 quicksort#1(nil) -> nil [1] 222.91/58.12 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) [1] 222.91/58.12 quicksortD(@l) -> quicksortD#1(@l) [1] 222.91/58.12 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) [1] 222.91/58.12 quicksortD#1(nil) -> nil [1] 222.91/58.12 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) [1] 222.91/58.12 split(@pivot, @l) -> split#1(@l, @pivot) [1] 222.91/58.12 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) [1] 222.91/58.12 split#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.12 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) [1] 222.91/58.12 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.12 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.12 splitD(@pivot, @l) -> splitD#1(@l, @pivot) [1] 222.91/58.12 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) [1] 222.91/58.12 splitD#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.12 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) [1] 222.91/58.12 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.12 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.12 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)))))))))) [1] 222.91/58.12 testQuicksort(@x) -> quicksort(testList(#unit)) [1] 222.91/58.12 testQuicksort2(@x) -> quicksort(testList(#unit)) [1] 222.91/58.12 #ckgt(#EQ) -> #false [0] 222.91/58.12 #ckgt(#GT) -> #true [0] 222.91/58.12 #ckgt(#LT) -> #false [0] 222.91/58.12 #compare(#0, #0) -> #EQ [0] 222.91/58.12 #compare(#0, #neg(@y)) -> #GT [0] 222.91/58.12 #compare(#0, #pos(@y)) -> #LT [0] 222.91/58.12 #compare(#0, #s(@y)) -> #LT [0] 222.91/58.12 #compare(#neg(@x), #0) -> #LT [0] 222.91/58.12 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 222.91/58.12 #compare(#neg(@x), #pos(@y)) -> #LT [0] 222.91/58.12 #compare(#pos(@x), #0) -> #GT [0] 222.91/58.12 #compare(#pos(@x), #neg(@y)) -> #GT [0] 222.91/58.12 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 222.91/58.12 #compare(#s(@x), #0) -> #GT [0] 222.91/58.12 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 222.91/58.12 222.91/58.12 The TRS has the following type information: 222.91/58.12 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.12 #0 :: #0:#neg:#pos:#s 222.91/58.12 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.12 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.12 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.12 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 222.91/58.12 #ckgt :: #EQ:#GT:#LT -> #false:#true 222.91/58.12 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 222.91/58.12 append :: :::nil -> :::nil -> :::nil 222.91/58.12 append#1 :: :::nil -> :::nil -> :::nil 222.91/58.12 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 222.91/58.12 nil :: :::nil 222.91/58.12 appendD :: :::nil -> :::nil -> :::nil 222.91/58.12 appendD#1 :: :::nil -> :::nil -> :::nil 222.91/58.12 quicksort :: :::nil -> :::nil 222.91/58.12 quicksort#1 :: :::nil -> :::nil 222.91/58.12 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 222.91/58.12 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 222.91/58.12 tuple#2 :: :::nil -> :::nil -> tuple#2 222.91/58.12 quicksortD :: :::nil -> :::nil 222.91/58.12 quicksortD#1 :: :::nil -> :::nil 222.91/58.12 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 222.91/58.12 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 222.91/58.12 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 222.91/58.12 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 222.91/58.12 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 222.91/58.12 #false :: #false:#true 222.91/58.12 #true :: #false:#true 222.91/58.12 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 222.91/58.12 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 222.91/58.12 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 222.91/58.12 testList :: #unit -> :::nil 222.91/58.12 testQuicksort :: a -> :::nil 222.91/58.12 #unit :: #unit 222.91/58.12 testQuicksort2 :: b -> :::nil 222.91/58.12 #EQ :: #EQ:#GT:#LT 222.91/58.12 #GT :: #EQ:#GT:#LT 222.91/58.12 #LT :: #EQ:#GT:#LT 222.91/58.12 222.91/58.12 Rewrite Strategy: INNERMOST 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (7) CompletionProof (UPPER BOUND(ID)) 222.91/58.12 The transformation into a RNTS is sound, since: 222.91/58.12 222.91/58.12 (a) The obligation is a constructor system where every type has a constant constructor, 222.91/58.12 222.91/58.12 (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: 222.91/58.12 222.91/58.12 testQuicksort_1 222.91/58.12 testQuicksort2_1 222.91/58.12 222.91/58.12 (c) The following functions are completely defined: 222.91/58.12 222.91/58.12 testList_1 222.91/58.12 quicksort_1 222.91/58.12 splitD_2 222.91/58.12 quicksortD_1 222.91/58.12 #greater_2 222.91/58.12 split_2 222.91/58.12 split#1_2 222.91/58.12 #abs_1 222.91/58.12 quicksortD#1_1 222.91/58.12 splitD#1_2 222.91/58.12 split#2_3 222.91/58.12 quicksort#1_1 222.91/58.12 quicksortD#2_2 222.91/58.12 appendD_2 222.91/58.12 quicksort#2_2 222.91/58.12 splitD#2_3 222.91/58.12 appendD#1_2 222.91/58.12 split#3_4 222.91/58.12 append_2 222.91/58.12 splitD#3_4 222.91/58.12 append#1_2 222.91/58.12 #ckgt_1 222.91/58.12 #compare_2 222.91/58.12 222.91/58.12 Due to the following rules being added: 222.91/58.12 222.91/58.12 #ckgt(v0) -> null_#ckgt [0] 222.91/58.12 #compare(v0, v1) -> null_#compare [0] 222.91/58.12 split#2(v0, v1, v2) -> const [0] 222.91/58.12 quicksortD#2(v0, v1) -> nil [0] 222.91/58.12 quicksort#2(v0, v1) -> nil [0] 222.91/58.12 splitD#2(v0, v1, v2) -> const [0] 222.91/58.12 split#3(v0, v1, v2, v3) -> const [0] 222.91/58.12 splitD#3(v0, v1, v2, v3) -> const [0] 222.91/58.12 222.91/58.12 And the following fresh constants: null_#ckgt, null_#compare, const, const1, const2 222.91/58.12 222.91/58.12 ---------------------------------------- 222.91/58.12 222.91/58.12 (8) 222.91/58.12 Obligation: 222.91/58.12 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 222.91/58.12 222.91/58.12 Runtime Complexity Weighted TRS with Types. 222.91/58.12 The TRS R consists of the following rules: 222.91/58.12 222.91/58.12 #abs(#0) -> #0 [1] 222.91/58.12 #abs(#neg(@x)) -> #pos(@x) [1] 222.91/58.12 #abs(#pos(@x)) -> #pos(@x) [1] 222.91/58.12 #abs(#s(@x)) -> #pos(#s(@x)) [1] 222.91/58.12 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) [1] 222.91/58.12 append(@l, @ys) -> append#1(@l, @ys) [1] 222.91/58.12 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) [1] 222.91/58.12 append#1(nil, @ys) -> @ys [1] 222.91/58.12 appendD(@l, @ys) -> appendD#1(@l, @ys) [1] 222.91/58.12 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) [1] 222.91/58.12 appendD#1(nil, @ys) -> @ys [1] 222.91/58.12 quicksort(@l) -> quicksort#1(@l) [1] 222.91/58.12 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) [1] 222.91/58.12 quicksort#1(nil) -> nil [1] 222.91/58.12 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) [1] 222.91/58.12 quicksortD(@l) -> quicksortD#1(@l) [1] 222.91/58.12 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) [1] 222.91/58.12 quicksortD#1(nil) -> nil [1] 222.91/58.12 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) [1] 222.91/58.12 split(@pivot, @l) -> split#1(@l, @pivot) [1] 222.91/58.12 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) [1] 222.91/58.12 split#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.12 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) [1] 222.91/58.12 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.12 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.12 splitD(@pivot, @l) -> splitD#1(@l, @pivot) [1] 222.91/58.12 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) [1] 222.91/58.12 splitD#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.12 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) [1] 222.91/58.12 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.12 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.12 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)))))))))) [1] 222.91/58.12 testQuicksort(@x) -> quicksort(testList(#unit)) [1] 222.91/58.12 testQuicksort2(@x) -> quicksort(testList(#unit)) [1] 222.91/58.12 #ckgt(#EQ) -> #false [0] 222.91/58.12 #ckgt(#GT) -> #true [0] 222.91/58.12 #ckgt(#LT) -> #false [0] 222.91/58.12 #compare(#0, #0) -> #EQ [0] 222.91/58.12 #compare(#0, #neg(@y)) -> #GT [0] 222.91/58.12 #compare(#0, #pos(@y)) -> #LT [0] 222.91/58.12 #compare(#0, #s(@y)) -> #LT [0] 222.91/58.12 #compare(#neg(@x), #0) -> #LT [0] 222.91/58.12 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 222.91/58.14 #compare(#neg(@x), #pos(@y)) -> #LT [0] 222.91/58.14 #compare(#pos(@x), #0) -> #GT [0] 222.91/58.14 #compare(#pos(@x), #neg(@y)) -> #GT [0] 222.91/58.14 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 222.91/58.14 #compare(#s(@x), #0) -> #GT [0] 222.91/58.14 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 222.91/58.14 #ckgt(v0) -> null_#ckgt [0] 222.91/58.14 #compare(v0, v1) -> null_#compare [0] 222.91/58.14 split#2(v0, v1, v2) -> const [0] 222.91/58.14 quicksortD#2(v0, v1) -> nil [0] 222.91/58.14 quicksort#2(v0, v1) -> nil [0] 222.91/58.14 splitD#2(v0, v1, v2) -> const [0] 222.91/58.14 split#3(v0, v1, v2, v3) -> const [0] 222.91/58.14 splitD#3(v0, v1, v2, v3) -> const [0] 222.91/58.14 222.91/58.14 The TRS has the following type information: 222.91/58.14 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #0 :: #0:#neg:#pos:#s 222.91/58.14 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true:null_#ckgt 222.91/58.14 #ckgt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#ckgt 222.91/58.14 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT:null_#compare 222.91/58.14 append :: :::nil -> :::nil -> :::nil 222.91/58.14 append#1 :: :::nil -> :::nil -> :::nil 222.91/58.14 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 222.91/58.14 nil :: :::nil 222.91/58.14 appendD :: :::nil -> :::nil -> :::nil 222.91/58.14 appendD#1 :: :::nil -> :::nil -> :::nil 222.91/58.14 quicksort :: :::nil -> :::nil 222.91/58.14 quicksort#1 :: :::nil -> :::nil 222.91/58.14 quicksort#2 :: tuple#2:const -> #0:#neg:#pos:#s -> :::nil 222.91/58.14 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2:const 222.91/58.14 tuple#2 :: :::nil -> :::nil -> tuple#2:const 222.91/58.14 quicksortD :: :::nil -> :::nil 222.91/58.14 quicksortD#1 :: :::nil -> :::nil 222.91/58.14 quicksortD#2 :: tuple#2:const -> #0:#neg:#pos:#s -> :::nil 222.91/58.14 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2:const 222.91/58.14 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2:const 222.91/58.14 split#2 :: tuple#2:const -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2:const 222.91/58.14 split#3 :: #false:#true:null_#ckgt -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2:const 222.91/58.14 #false :: #false:#true:null_#ckgt 222.91/58.14 #true :: #false:#true:null_#ckgt 222.91/58.14 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2:const 222.91/58.14 splitD#2 :: tuple#2:const -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2:const 222.91/58.14 splitD#3 :: #false:#true:null_#ckgt -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2:const 222.91/58.14 testList :: #unit -> :::nil 222.91/58.14 testQuicksort :: a -> :::nil 222.91/58.14 #unit :: #unit 222.91/58.14 testQuicksort2 :: b -> :::nil 222.91/58.14 #EQ :: #EQ:#GT:#LT:null_#compare 222.91/58.14 #GT :: #EQ:#GT:#LT:null_#compare 222.91/58.14 #LT :: #EQ:#GT:#LT:null_#compare 222.91/58.14 null_#ckgt :: #false:#true:null_#ckgt 222.91/58.14 null_#compare :: #EQ:#GT:#LT:null_#compare 222.91/58.14 const :: tuple#2:const 222.91/58.14 const1 :: a 222.91/58.14 const2 :: b 222.91/58.14 222.91/58.14 Rewrite Strategy: INNERMOST 222.91/58.14 ---------------------------------------- 222.91/58.14 222.91/58.14 (9) NarrowingProof (BOTH BOUNDS(ID, ID)) 222.91/58.14 Narrowed the inner basic terms of all right-hand sides by a single narrowing step. 222.91/58.14 ---------------------------------------- 222.91/58.14 222.91/58.14 (10) 222.91/58.14 Obligation: 222.91/58.14 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 222.91/58.14 222.91/58.14 Runtime Complexity Weighted TRS with Types. 222.91/58.14 The TRS R consists of the following rules: 222.91/58.14 222.91/58.14 #abs(#0) -> #0 [1] 222.91/58.14 #abs(#neg(@x)) -> #pos(@x) [1] 222.91/58.14 #abs(#pos(@x)) -> #pos(@x) [1] 222.91/58.14 #abs(#s(@x)) -> #pos(#s(@x)) [1] 222.91/58.14 #greater(#0, #0) -> #ckgt(#EQ) [1] 222.91/58.14 #greater(#0, #neg(@y')) -> #ckgt(#GT) [1] 222.91/58.14 #greater(#0, #pos(@y'')) -> #ckgt(#LT) [1] 222.91/58.14 #greater(#0, #s(@y1)) -> #ckgt(#LT) [1] 222.91/58.14 #greater(#neg(@x'), #0) -> #ckgt(#LT) [1] 222.91/58.14 #greater(#neg(@x''), #neg(@y2)) -> #ckgt(#compare(@y2, @x'')) [1] 222.91/58.14 #greater(#neg(@x1), #pos(@y3)) -> #ckgt(#LT) [1] 222.91/58.14 #greater(#pos(@x2), #0) -> #ckgt(#GT) [1] 222.91/58.14 #greater(#pos(@x3), #neg(@y4)) -> #ckgt(#GT) [1] 222.91/58.14 #greater(#pos(@x4), #pos(@y5)) -> #ckgt(#compare(@x4, @y5)) [1] 222.91/58.14 #greater(#s(@x5), #0) -> #ckgt(#GT) [1] 222.91/58.14 #greater(#s(@x6), #s(@y6)) -> #ckgt(#compare(@x6, @y6)) [1] 222.91/58.14 #greater(@x, @y) -> #ckgt(null_#compare) [1] 222.91/58.14 append(@l, @ys) -> append#1(@l, @ys) [1] 222.91/58.14 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) [1] 222.91/58.14 append#1(nil, @ys) -> @ys [1] 222.91/58.14 appendD(@l, @ys) -> appendD#1(@l, @ys) [1] 222.91/58.14 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) [1] 222.91/58.14 appendD#1(nil, @ys) -> @ys [1] 222.91/58.14 quicksort(@l) -> quicksort#1(@l) [1] 222.91/58.14 quicksort#1(::(@z, @zs)) -> quicksort#2(split#1(@zs, @z), @z) [2] 222.91/58.14 quicksort#1(nil) -> nil [1] 222.91/58.14 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort#1(@xs), ::(@z, quicksort#1(@ys))) [3] 222.91/58.14 quicksortD(@l) -> quicksortD#1(@l) [1] 222.91/58.14 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD#1(@zs, @z), @z) [2] 222.91/58.14 quicksortD#1(nil) -> nil [1] 222.91/58.14 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD#1(@xs), ::(@z, quicksortD#1(@ys))) [3] 222.91/58.14 split(@pivot, @l) -> split#1(@l, @pivot) [1] 222.91/58.14 split#1(::(@x, @xs), @pivot) -> split#2(split#1(@xs, @pivot), @pivot, @x) [2] 222.91/58.14 split#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.14 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#ckgt(#compare(@x, @pivot)), @ls, @rs, @x) [2] 222.91/58.14 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.14 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.14 splitD(@pivot, @l) -> splitD#1(@l, @pivot) [1] 222.91/58.14 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD#1(@xs, @pivot), @pivot, @x) [2] 222.91/58.14 splitD#1(nil, @pivot) -> tuple#2(nil, nil) [1] 222.91/58.14 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#ckgt(#compare(@x, @pivot)), @ls, @rs, @x) [2] 222.91/58.14 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) [1] 222.91/58.14 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) [1] 222.91/58.14 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)))))))))) [1] 222.91/58.14 testQuicksort(@x) -> quicksort(::(#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))))))))))) [2] 222.91/58.14 testQuicksort2(@x) -> quicksort(::(#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))))))))))) [2] 222.91/58.14 #ckgt(#EQ) -> #false [0] 222.91/58.14 #ckgt(#GT) -> #true [0] 222.91/58.14 #ckgt(#LT) -> #false [0] 222.91/58.14 #compare(#0, #0) -> #EQ [0] 222.91/58.14 #compare(#0, #neg(@y)) -> #GT [0] 222.91/58.14 #compare(#0, #pos(@y)) -> #LT [0] 222.91/58.14 #compare(#0, #s(@y)) -> #LT [0] 222.91/58.14 #compare(#neg(@x), #0) -> #LT [0] 222.91/58.14 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 222.91/58.14 #compare(#neg(@x), #pos(@y)) -> #LT [0] 222.91/58.14 #compare(#pos(@x), #0) -> #GT [0] 222.91/58.14 #compare(#pos(@x), #neg(@y)) -> #GT [0] 222.91/58.14 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 222.91/58.14 #compare(#s(@x), #0) -> #GT [0] 222.91/58.14 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 222.91/58.14 #ckgt(v0) -> null_#ckgt [0] 222.91/58.14 #compare(v0, v1) -> null_#compare [0] 222.91/58.14 split#2(v0, v1, v2) -> const [0] 222.91/58.14 quicksortD#2(v0, v1) -> nil [0] 222.91/58.14 quicksort#2(v0, v1) -> nil [0] 222.91/58.14 splitD#2(v0, v1, v2) -> const [0] 222.91/58.14 split#3(v0, v1, v2, v3) -> const [0] 222.91/58.14 splitD#3(v0, v1, v2, v3) -> const [0] 222.91/58.14 222.91/58.14 The TRS has the following type information: 222.91/58.14 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #0 :: #0:#neg:#pos:#s 222.91/58.14 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 222.91/58.14 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true:null_#ckgt 222.91/58.14 #ckgt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#ckgt 222.91/58.14 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT:null_#compare 222.91/58.14 append :: :::nil -> :::nil -> :::nil 222.91/58.14 append#1 :: :::nil -> :::nil -> :::nil 222.91/58.14 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 222.91/58.14 nil :: :::nil 222.91/58.14 appendD :: :::nil -> :::nil -> :::nil 222.91/58.14 appendD#1 :: :::nil -> :::nil -> :::nil 222.91/58.14 quicksort :: :::nil -> :::nil 222.91/58.14 quicksort#1 :: :::nil -> :::nil 222.91/58.14 quicksort#2 :: tuple#2:const -> #0:#neg:#pos:#s -> :::nil 223.22/58.17 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2:const 223.22/58.17 tuple#2 :: :::nil -> :::nil -> tuple#2:const 223.22/58.17 quicksortD :: :::nil -> :::nil 223.22/58.17 quicksortD#1 :: :::nil -> :::nil 223.22/58.17 quicksortD#2 :: tuple#2:const -> #0:#neg:#pos:#s -> :::nil 223.22/58.17 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2:const 223.22/58.17 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2:const 223.22/58.17 split#2 :: tuple#2:const -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2:const 223.22/58.17 split#3 :: #false:#true:null_#ckgt -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2:const 223.22/58.17 #false :: #false:#true:null_#ckgt 223.22/58.17 #true :: #false:#true:null_#ckgt 223.22/58.17 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2:const 223.22/58.17 splitD#2 :: tuple#2:const -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2:const 223.22/58.17 splitD#3 :: #false:#true:null_#ckgt -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2:const 223.22/58.17 testList :: #unit -> :::nil 223.22/58.17 testQuicksort :: a -> :::nil 223.22/58.17 #unit :: #unit 223.22/58.17 testQuicksort2 :: b -> :::nil 223.22/58.17 #EQ :: #EQ:#GT:#LT:null_#compare 223.22/58.17 #GT :: #EQ:#GT:#LT:null_#compare 223.22/58.17 #LT :: #EQ:#GT:#LT:null_#compare 223.22/58.17 null_#ckgt :: #false:#true:null_#ckgt 223.22/58.17 null_#compare :: #EQ:#GT:#LT:null_#compare 223.22/58.17 const :: tuple#2:const 223.22/58.17 const1 :: a 223.22/58.17 const2 :: b 223.22/58.17 223.22/58.17 Rewrite Strategy: INNERMOST 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (11) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) 223.22/58.17 Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. 223.22/58.17 The constant constructors are abstracted as follows: 223.22/58.17 223.22/58.17 #0 => 0 223.22/58.17 nil => 0 223.22/58.17 #false => 1 223.22/58.17 #true => 2 223.22/58.17 #unit => 0 223.22/58.17 #EQ => 1 223.22/58.17 #GT => 2 223.22/58.17 #LT => 3 223.22/58.17 null_#ckgt => 0 223.22/58.17 null_#compare => 0 223.22/58.17 const => 0 223.22/58.17 const1 => 0 223.22/58.17 const2 => 0 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (12) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(3) :|: z' = 1 + @y'', @y'' >= 0, z = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(3) :|: z' = 1 + @y1, @y1 >= 0, z = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(3) :|: z = 1 + @x', @x' >= 0, z' = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(3) :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(2) :|: @y' >= 0, z' = 1 + @y', z = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(2) :|: @x2 >= 0, z = 1 + @x2, z' = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(2) :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(2) :|: z = 1 + @x5, @x5 >= 0, z' = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(1) :|: z = 0, z' = 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(0) :|: z = @x, @x >= 0, z' = @y, @y >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(@l, @ys) :|: z = @l, @l >= 0, z' = @ys, @ys >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> @ys :|: z' = @ys, z = 0, @ys >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, @ys) :|: z' = @ys, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @ys >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(@l, @ys) :|: z = @l, @l >= 0, z' = @ys, @ys >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> @ys :|: z' = @ys, z = 0, @ys >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, @ys) :|: z' = @ys, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @ys >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(@l) :|: z = @l, @l >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + @z + quicksort#1(@ys)) :|: z' = @z, z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, @z >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(@l) :|: z = @l, @l >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + @z + quicksortD#1(@ys)) :|: z' = @z, z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, @z >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 223.22/58.17 split(z, z') -{ 1 }-> split#1(@l, @pivot) :|: @l >= 0, z = @pivot, z' = @l, @pivot >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, @pivot), @pivot, @x) :|: @x >= 0, z = 1 + @x + @xs, z' = @pivot, @xs >= 0, @pivot >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' = @pivot, @pivot >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(@x, @pivot)), @ls, @rs, @x) :|: @ls >= 0, z = 1 + @ls + @rs, @x >= 0, z' = @pivot, @pivot >= 0, z'' = @x, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + @ls + (1 + @x + @rs) :|: z = 2, z1 = @x, @ls >= 0, @x >= 0, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @ls) + @rs :|: z1 = @x, @ls >= 0, @x >= 0, z = 1, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(@l, @pivot) :|: @l >= 0, z = @pivot, z' = @l, @pivot >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, @pivot), @pivot, @x) :|: @x >= 0, z = 1 + @x + @xs, z' = @pivot, @xs >= 0, @pivot >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' = @pivot, @pivot >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(@x, @pivot)), @ls, @rs, @x) :|: @ls >= 0, z = 1 + @ls + @rs, @x >= 0, z' = @pivot, @pivot >= 0, z'' = @x, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + @ls + (1 + @x + @rs) :|: z = 2, z1 = @x, @ls >= 0, @x >= 0, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @ls) + @rs :|: z1 = @x, @ls >= 0, @x >= 0, z = 1, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z = @x, @x >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z = @x, @x >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z = @x, @x >= 0 223.22/58.17 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (13) InliningProof (UPPER BOUND(ID)) 223.22/58.17 Inlined the following terminating rules on right-hand sides where appropriate: 223.22/58.17 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + @ls + (1 + @x + @rs) :|: z = 2, z1 = @x, @ls >= 0, @x >= 0, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @ls) + @rs :|: z1 = @x, @ls >= 0, @x >= 0, z = 1, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + @ls + (1 + @x + @rs) :|: z = 2, z1 = @x, @ls >= 0, @x >= 0, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @ls) + @rs :|: z1 = @x, @ls >= 0, @x >= 0, z = 1, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (14) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + @x :|: @x >= 0, z = 1 + @x 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + @x 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: @y' >= 0, z' = 1 + @y', z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: @x2 >= 0, z = 1 + @x2, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z = 1 + @x5, @x5 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' = 1 + @y'', @y'' >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' = 1 + @y1, @y1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 1 + @x', @x' >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: @y' >= 0, z' = 1 + @y', z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' = 1 + @y'', @y'' >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' = 1 + @y1, @y1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 1 + @x', @x' >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: @x2 >= 0, z = 1 + @x2, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 1 + @x5, @x5 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = @x, @x >= 0, z' = @y, @y >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(@l, @ys) :|: z = @l, @l >= 0, z' = @ys, @ys >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> @ys :|: z' = @ys, z = 0, @ys >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, @ys) :|: z' = @ys, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @ys >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(@l, @ys) :|: z = @l, @l >= 0, z' = @ys, @ys >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> @ys :|: z' = @ys, z = 0, @ys >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, @ys) :|: z' = @ys, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @ys >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(@l) :|: z = @l, @l >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + @z + quicksort#1(@ys)) :|: z' = @z, z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, @z >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(@l) :|: z = @l, @l >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + @z + quicksortD#1(@ys)) :|: z' = @z, z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, @z >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 223.22/58.17 split(z, z') -{ 1 }-> split#1(@l, @pivot) :|: @l >= 0, z = @pivot, z' = @l, @pivot >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, @pivot), @pivot, @x) :|: @x >= 0, z = 1 + @x + @xs, z' = @pivot, @xs >= 0, @pivot >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' = @pivot, @pivot >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(@x, @pivot)), @ls, @rs, @x) :|: @ls >= 0, z = 1 + @ls + @rs, @x >= 0, z' = @pivot, @pivot >= 0, z'' = @x, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + @ls + (1 + @x + @rs) :|: z = 2, z1 = @x, @ls >= 0, @x >= 0, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @ls) + @rs :|: z1 = @x, @ls >= 0, @x >= 0, z = 1, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(@l, @pivot) :|: @l >= 0, z = @pivot, z' = @l, @pivot >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, @pivot), @pivot, @x) :|: @x >= 0, z = 1 + @x + @xs, z' = @pivot, @xs >= 0, @pivot >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' = @pivot, @pivot >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(@x, @pivot)), @ls, @rs, @x) :|: @ls >= 0, z = 1 + @ls + @rs, @x >= 0, z' = @pivot, @pivot >= 0, z'' = @x, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + @ls + (1 + @x + @rs) :|: z = 2, z1 = @x, @ls >= 0, @x >= 0, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + @x + @ls) + @rs :|: z1 = @x, @ls >= 0, @x >= 0, z = 1, z' = @ls, @rs >= 0, z'' = @rs 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z = @x, @x >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z = @x, @x >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z = @x, @x >= 0 223.22/58.17 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (15) SimplificationProof (BOTH BOUNDS(ID, ID)) 223.22/58.17 Simplified the RNTS by moving equalities from the constraints into the right-hand sides. 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (16) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) 223.22/58.17 Found the following analysis order by SCC decomposition: 223.22/58.17 223.22/58.17 { appendD, appendD#1 } 223.22/58.17 { split#3 } 223.22/58.17 { splitD#3 } 223.22/58.17 { #compare } 223.22/58.17 { #ckgt } 223.22/58.17 { append#1, append } 223.22/58.17 { #abs } 223.22/58.17 { split#2 } 223.22/58.17 { splitD#2 } 223.22/58.17 { #greater } 223.22/58.17 { testList } 223.22/58.17 { split#1 } 223.22/58.17 { splitD#1 } 223.22/58.17 { split } 223.22/58.17 { quicksort#1, quicksort#2 } 223.22/58.17 { quicksortD#2, quicksortD#1 } 223.22/58.17 { splitD } 223.22/58.17 { quicksort } 223.22/58.17 { quicksortD } 223.22/58.17 { testQuicksort2 } 223.22/58.17 { testQuicksort } 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (18) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 Function symbols to be analyzed: {appendD,appendD#1}, {split#3}, {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (19) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.17 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (20) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 Function symbols to be analyzed: {appendD,appendD#1}, {split#3}, {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (21) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.17 223.22/58.17 Computed SIZE bound using CoFloCo for: appendD 223.22/58.17 after applying outer abstraction to obtain an ITS, 223.22/58.17 resulting in: O(n^1) with polynomial bound: z + z' 223.22/58.17 223.22/58.17 Computed SIZE bound using CoFloCo for: appendD#1 223.22/58.17 after applying outer abstraction to obtain an ITS, 223.22/58.17 resulting in: O(n^1) with polynomial bound: z + z' 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (22) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 Function symbols to be analyzed: {appendD,appendD#1}, {split#3}, {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.17 Previous analysis results are: 223.22/58.17 appendD: runtime: ?, size: O(n^1) [z + z'] 223.22/58.17 appendD#1: runtime: ?, size: O(n^1) [z + z'] 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (23) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.17 223.22/58.17 Computed RUNTIME bound using CoFloCo for: appendD 223.22/58.17 after applying outer abstraction to obtain an ITS, 223.22/58.17 resulting in: O(n^1) with polynomial bound: 2 + 2*z 223.22/58.17 223.22/58.17 Computed RUNTIME bound using CoFloCo for: appendD#1 223.22/58.17 after applying outer abstraction to obtain an ITS, 223.22/58.17 resulting in: O(n^1) with polynomial bound: 1 + 2*z 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (24) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 1 }-> appendD#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> 1 + @x + appendD(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 Function symbols to be analyzed: {split#3}, {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.17 Previous analysis results are: 223.22/58.17 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.17 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (25) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.17 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (26) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 Function symbols to be analyzed: {split#3}, {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.17 Previous analysis results are: 223.22/58.17 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.17 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (27) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.17 223.22/58.17 Computed SIZE bound using CoFloCo for: split#3 223.22/58.17 after applying outer abstraction to obtain an ITS, 223.22/58.17 resulting in: O(n^1) with polynomial bound: 2 + z' + z'' + z1 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (28) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.17 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.17 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.17 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.17 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.17 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.17 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.17 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.17 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.17 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.17 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.17 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.17 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.17 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.17 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.17 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.17 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.17 223.22/58.17 Function symbols to be analyzed: {split#3}, {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.17 Previous analysis results are: 223.22/58.17 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.17 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.17 split#3: runtime: ?, size: O(n^1) [2 + z' + z'' + z1] 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (29) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.17 223.22/58.17 Computed RUNTIME bound using CoFloCo for: split#3 223.22/58.17 after applying outer abstraction to obtain an ITS, 223.22/58.17 resulting in: O(1) with polynomial bound: 1 223.22/58.17 223.22/58.17 ---------------------------------------- 223.22/58.17 223.22/58.17 (30) 223.22/58.17 Obligation: 223.22/58.17 Complexity RNTS consisting of the following rules: 223.22/58.17 223.22/58.17 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.17 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.17 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.17 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.18 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.18 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.18 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.18 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 223.22/58.18 Function symbols to be analyzed: {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.18 Previous analysis results are: 223.22/58.18 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.18 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (31) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.18 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (32) 223.22/58.18 Obligation: 223.22/58.18 Complexity RNTS consisting of the following rules: 223.22/58.18 223.22/58.18 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.18 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.18 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.18 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.18 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.18 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 223.22/58.18 Function symbols to be analyzed: {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.18 Previous analysis results are: 223.22/58.18 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.18 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (33) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.18 223.22/58.18 Computed SIZE bound using CoFloCo for: splitD#3 223.22/58.18 after applying outer abstraction to obtain an ITS, 223.22/58.18 resulting in: O(n^1) with polynomial bound: 2 + z' + z'' + z1 223.22/58.18 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (34) 223.22/58.18 Obligation: 223.22/58.18 Complexity RNTS consisting of the following rules: 223.22/58.18 223.22/58.18 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.18 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.18 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.18 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.18 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.18 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 223.22/58.18 Function symbols to be analyzed: {splitD#3}, {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.18 Previous analysis results are: 223.22/58.18 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.18 splitD#3: runtime: ?, size: O(n^1) [2 + z' + z'' + z1] 223.22/58.18 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (35) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.18 223.22/58.18 Computed RUNTIME bound using CoFloCo for: splitD#3 223.22/58.18 after applying outer abstraction to obtain an ITS, 223.22/58.18 resulting in: O(1) with polynomial bound: 1 223.22/58.18 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (36) 223.22/58.18 Obligation: 223.22/58.18 Complexity RNTS consisting of the following rules: 223.22/58.18 223.22/58.18 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.18 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.18 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.18 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.18 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.18 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.18 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.18 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.18 223.22/58.18 Function symbols to be analyzed: {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.18 Previous analysis results are: 223.22/58.18 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.18 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.18 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.18 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (37) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.18 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.18 ---------------------------------------- 223.22/58.18 223.22/58.18 (38) 223.22/58.18 Obligation: 223.22/58.18 Complexity RNTS consisting of the following rules: 223.22/58.18 223.22/58.18 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.18 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.18 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.18 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.18 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.18 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.18 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.18 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.18 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.18 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.18 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.18 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.18 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.18 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.18 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.18 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.18 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.18 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.18 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (39) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.19 223.22/58.19 Computed SIZE bound using CoFloCo for: #compare 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(1) with polynomial bound: 3 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (40) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {#compare}, {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: ?, size: O(1) [3] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (41) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.19 223.22/58.19 Computed RUNTIME bound using CoFloCo for: #compare 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(1) with polynomial bound: 0 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (42) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(#compare(z'', z')), @ls, @rs, z'') :|: @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (43) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.19 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (44) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(s2) :|: s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(s3) :|: s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(s4), @ls, @rs, z'') :|: s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(s5), @ls, @rs, z'') :|: s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (45) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.19 223.22/58.19 Computed SIZE bound using CoFloCo for: #ckgt 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(1) with polynomial bound: 2 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (46) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(s2) :|: s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(s3) :|: s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(s4), @ls, @rs, z'') :|: s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(s5), @ls, @rs, z'') :|: s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {#ckgt}, {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 #ckgt: runtime: ?, size: O(1) [2] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (47) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.19 223.22/58.19 Computed RUNTIME bound using CoFloCo for: #ckgt 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(1) with polynomial bound: 0 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (48) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(s2) :|: s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> #ckgt(s3) :|: s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 2 }-> split#3(#ckgt(s4), @ls, @rs, z'') :|: s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 2 }-> splitD#3(#ckgt(s5), @ls, @rs, z'') :|: s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (49) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.19 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (50) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (51) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.19 223.22/58.19 Computed SIZE bound using CoFloCo for: append#1 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(n^1) with polynomial bound: z + z' 223.22/58.19 223.22/58.19 Computed SIZE bound using CoFloCo for: append 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(n^1) with polynomial bound: z + z' 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (52) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {append#1,append}, {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.22/58.19 append#1: runtime: ?, size: O(n^1) [z + z'] 223.22/58.19 append: runtime: ?, size: O(n^1) [z + z'] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (53) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.19 223.22/58.19 Computed RUNTIME bound using CoFloCo for: append#1 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(n^1) with polynomial bound: 3 + 2*z 223.22/58.19 223.22/58.19 Computed RUNTIME bound using CoFloCo for: append 223.22/58.19 after applying outer abstraction to obtain an ITS, 223.22/58.19 resulting in: O(n^1) with polynomial bound: 4 + 2*z 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (54) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.19 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.19 223.22/58.19 Function symbols to be analyzed: {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.19 Previous analysis results are: 223.22/58.19 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.19 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.19 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.22/58.19 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.22/58.19 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (55) ResultPropagationProof (UPPER BOUND(ID)) 223.22/58.19 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.22/58.19 ---------------------------------------- 223.22/58.19 223.22/58.19 (56) 223.22/58.19 Obligation: 223.22/58.19 Complexity RNTS consisting of the following rules: 223.22/58.19 223.22/58.19 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.19 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.19 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.19 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.19 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.19 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.19 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.19 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.19 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.19 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.19 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.19 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.19 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.19 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.19 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.19 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.19 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.19 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.19 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.19 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.22/58.19 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.19 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.20 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.22/58.20 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.20 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.22/58.20 223.22/58.20 Function symbols to be analyzed: {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.22/58.20 Previous analysis results are: 223.22/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.22/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.22/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.22/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.22/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.22/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.22/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.22/58.20 223.22/58.20 ---------------------------------------- 223.22/58.20 223.22/58.20 (57) IntTrsBoundProof (UPPER BOUND(ID)) 223.22/58.20 223.22/58.20 Computed SIZE bound using CoFloCo for: #abs 223.22/58.20 after applying outer abstraction to obtain an ITS, 223.22/58.20 resulting in: O(n^1) with polynomial bound: 1 + z 223.22/58.20 223.22/58.20 ---------------------------------------- 223.22/58.20 223.22/58.20 (58) 223.22/58.20 Obligation: 223.22/58.20 Complexity RNTS consisting of the following rules: 223.22/58.20 223.22/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.22/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.22/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.22/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.22/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.22/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.22/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.22/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.22/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.22/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.22/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.22/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.22/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.22/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.22/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.22/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.22/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.22/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.22/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.22/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.22/58.20 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.20 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.20 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.22/58.20 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.22/58.20 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.20 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.22/58.20 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.20 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.20 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.20 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.20 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.22/58.20 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.22/58.20 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.22/58.20 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.22/58.20 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.22/58.20 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.22/58.20 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.22/58.20 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.22/58.20 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.22/58.20 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.22/58.20 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.22/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.22/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.22/58.20 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.39/58.20 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.39/58.20 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.39/58.20 223.39/58.20 Function symbols to be analyzed: {#abs}, {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.20 Previous analysis results are: 223.39/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 #abs: runtime: ?, size: O(n^1) [1 + z] 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (59) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.20 223.39/58.20 Computed RUNTIME bound using CoFloCo for: #abs 223.39/58.20 after applying outer abstraction to obtain an ITS, 223.39/58.20 resulting in: O(1) with polynomial bound: 1 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (60) 223.39/58.20 Obligation: 223.39/58.20 Complexity RNTS consisting of the following rules: 223.39/58.20 223.39/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.20 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.20 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 testList(z) -{ 1 }-> 1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0))))))))) :|: z >= 0 223.39/58.20 testQuicksort(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.39/58.20 testQuicksort2(z) -{ 2 }-> quicksort(1 + #abs(0) + (1 + #abs(1 + (1 + (1 + (1 + (1 + 0))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + (1 + #abs(1 + (1 + 0)) + (1 + #abs(1 + (1 + (1 + 0))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + (1 + #abs(1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + (1 + #abs(1 + (1 + (1 + (1 + 0)))) + 0)))))))))) :|: z >= 0 223.39/58.20 223.39/58.20 Function symbols to be analyzed: {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.20 Previous analysis results are: 223.39/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (61) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.20 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (62) 223.39/58.20 Obligation: 223.39/58.20 Complexity RNTS consisting of the following rules: 223.39/58.20 223.39/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.20 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.20 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 223.39/58.20 Function symbols to be analyzed: {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.20 Previous analysis results are: 223.39/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (63) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.20 223.39/58.20 Computed SIZE bound using CoFloCo for: split#2 223.39/58.20 after applying outer abstraction to obtain an ITS, 223.39/58.20 resulting in: O(n^1) with polynomial bound: 1 + z + z'' 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (64) 223.39/58.20 Obligation: 223.39/58.20 Complexity RNTS consisting of the following rules: 223.39/58.20 223.39/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.20 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.20 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 223.39/58.20 Function symbols to be analyzed: {split#2}, {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.20 Previous analysis results are: 223.39/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.20 split#2: runtime: ?, size: O(n^1) [1 + z + z''] 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (65) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.20 223.39/58.20 Computed RUNTIME bound using CoFloCo for: split#2 223.39/58.20 after applying outer abstraction to obtain an ITS, 223.39/58.20 resulting in: O(1) with polynomial bound: 3 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (66) 223.39/58.20 Obligation: 223.39/58.20 Complexity RNTS consisting of the following rules: 223.39/58.20 223.39/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.20 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.20 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 223.39/58.20 Function symbols to be analyzed: {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.20 Previous analysis results are: 223.39/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.20 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (67) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.20 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (68) 223.39/58.20 Obligation: 223.39/58.20 Complexity RNTS consisting of the following rules: 223.39/58.20 223.39/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.20 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.20 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.20 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.20 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.20 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.20 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.20 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.20 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.20 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.20 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.20 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.20 223.39/58.20 Function symbols to be analyzed: {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.20 Previous analysis results are: 223.39/58.20 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.20 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.20 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.20 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.20 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.20 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (69) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.20 223.39/58.20 Computed SIZE bound using CoFloCo for: splitD#2 223.39/58.20 after applying outer abstraction to obtain an ITS, 223.39/58.20 resulting in: O(n^1) with polynomial bound: 1 + z + z'' 223.39/58.20 223.39/58.20 ---------------------------------------- 223.39/58.20 223.39/58.20 (70) 223.39/58.20 Obligation: 223.39/58.20 Complexity RNTS consisting of the following rules: 223.39/58.20 223.39/58.20 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.20 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.20 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.20 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.20 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.20 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.20 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.20 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.20 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {splitD#2}, {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: ?, size: O(n^1) [1 + z + z''] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (71) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed RUNTIME bound using CoFloCo for: splitD#2 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(1) with polynomial bound: 3 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (72) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (73) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.21 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (74) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (75) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed SIZE bound using CoFloCo for: #greater 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(1) with polynomial bound: 2 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (76) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {#greater}, {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: ?, size: O(1) [2] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (77) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed RUNTIME bound using CoFloCo for: #greater 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(1) with polynomial bound: 1 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (78) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (79) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.21 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (80) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (81) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed SIZE bound using CoFloCo for: testList 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(1) with polynomial bound: 74 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (82) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {testList}, {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: ?, size: O(1) [74] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (83) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed RUNTIME bound using CoFloCo for: testList 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(1) with polynomial bound: 11 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (84) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (85) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.21 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (86) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (87) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed SIZE bound using CoFloCo for: split#1 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: 1 + z 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (88) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {split#1}, {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: ?, size: O(n^1) [1 + z] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (89) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed RUNTIME bound using CoFloCo for: split#1 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: 1 + 5*z 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (90) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 2 }-> quicksort#2(split#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 1 }-> split#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 2 }-> split#2(split#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (91) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.21 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (92) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (93) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed SIZE bound using CoFloCo for: splitD#1 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: 1 + z 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (94) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {splitD#1}, {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 splitD#1: runtime: ?, size: O(n^1) [1 + z] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (95) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed RUNTIME bound using CoFloCo for: splitD#1 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: 1 + 5*z 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (96) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 2 }-> quicksortD#2(splitD#1(@zs, @z), @z) :|: z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 1 }-> splitD#1(z', z) :|: z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 2 }-> splitD#2(splitD#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (97) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.21 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (98) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (99) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed SIZE bound using CoFloCo for: split 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: 1 + z' 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (100) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {split}, {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 split: runtime: ?, size: O(n^1) [1 + z'] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (101) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed RUNTIME bound using CoFloCo for: split 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: 2 + 5*z' 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (102) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (103) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.21 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (104) 223.39/58.21 Obligation: 223.39/58.21 Complexity RNTS consisting of the following rules: 223.39/58.21 223.39/58.21 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.21 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.21 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.21 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.21 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.21 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.21 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.21 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.21 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.21 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.21 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.21 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.21 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.21 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.21 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.21 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.21 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.21 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.21 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.21 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.21 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.21 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.21 223.39/58.21 Function symbols to be analyzed: {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.21 Previous analysis results are: 223.39/58.21 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.21 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.21 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.21 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.21 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.21 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.21 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.21 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.21 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.21 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.21 223.39/58.21 ---------------------------------------- 223.39/58.21 223.39/58.21 (105) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.21 223.39/58.21 Computed SIZE bound using CoFloCo for: quicksort#1 223.39/58.21 after applying outer abstraction to obtain an ITS, 223.39/58.21 resulting in: O(n^1) with polynomial bound: z 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: quicksort#2 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: z + z' 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (106) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.22 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.22 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksort#1,quicksort#2}, {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: ?, size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: ?, size: O(n^1) [z + z'] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (107) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed RUNTIME bound using CoFloCo for: quicksort#1 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^2) with polynomial bound: 5 + 48*z + 35*z^2 223.39/58.22 223.39/58.22 Computed RUNTIME bound using KoAT for: quicksort#2 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^2) with polynomial bound: 17 + 98*z + 70*z^2 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (108) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 1 }-> quicksort#1(z) :|: z >= 0 223.39/58.22 quicksort#1(z) -{ 3 + 5*@zs }-> quicksort#2(s44, @z) :|: s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 3 }-> append(quicksort#1(@xs), 1 + z' + quicksort#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.22 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (109) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.22 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (110) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.22 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (111) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: quicksortD#2 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: 1 + 3*z + 3*z' 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: quicksortD#1 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: 1 + 3*z 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (112) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.22 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksortD#2,quicksortD#1}, {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: ?, size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: ?, size: O(n^1) [1 + 3*z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (113) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed RUNTIME bound using KoAT for: quicksortD#2 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^2) with polynomial bound: 11 + 55*z + 44*z^2 223.39/58.22 223.39/58.22 Computed RUNTIME bound using KoAT for: quicksortD#1 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^2) with polynomial bound: 114 + 148*z + 44*z^2 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (114) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 1 }-> quicksortD#1(z) :|: z >= 0 223.39/58.22 quicksortD#1(z) -{ 3 + 5*@zs }-> quicksortD#2(s48, @z) :|: s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 3 }-> appendD(quicksortD#1(@xs), 1 + z' + quicksortD#1(@ys)) :|: z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (115) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.22 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (116) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (117) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: splitD 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: 1 + z' 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (118) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {splitD}, {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: ?, size: O(n^1) [1 + z'] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (119) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed RUNTIME bound using CoFloCo for: splitD 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: 2 + 5*z' 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (120) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (121) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.22 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (122) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (123) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: quicksort 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: z 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (124) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksort}, {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: ?, size: O(n^1) [z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (125) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed RUNTIME bound using KoAT for: quicksort 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^2) with polynomial bound: 6 + 48*z + 35*z^2 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (126) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 12 }-> quicksort(1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0)))))))))) :|: s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 12 }-> quicksort(1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0)))))))))) :|: s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (127) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.22 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (128) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (129) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: quicksortD 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^1) with polynomial bound: 1 + 3*z 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (130) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {quicksortD}, {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksortD: runtime: ?, size: O(n^1) [1 + 3*z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (131) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed RUNTIME bound using KoAT for: quicksortD 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(n^2) with polynomial bound: 115 + 148*z + 44*z^2 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (132) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (133) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.22 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (134) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (135) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed SIZE bound using CoFloCo for: testQuicksort2 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(1) with polynomial bound: 74 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (136) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.22 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.22 223.39/58.22 Function symbols to be analyzed: {testQuicksort2}, {testQuicksort} 223.39/58.22 Previous analysis results are: 223.39/58.22 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.22 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.22 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.22 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.22 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.22 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.22 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.22 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.22 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.22 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.22 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.22 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.22 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.22 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.22 testQuicksort2: runtime: ?, size: O(1) [74] 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (137) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.22 223.39/58.22 Computed RUNTIME bound using CoFloCo for: testQuicksort2 223.39/58.22 after applying outer abstraction to obtain an ITS, 223.39/58.22 resulting in: O(1) with polynomial bound: 195230 223.39/58.22 223.39/58.22 ---------------------------------------- 223.39/58.22 223.39/58.22 (138) 223.39/58.22 Obligation: 223.39/58.22 Complexity RNTS consisting of the following rules: 223.39/58.22 223.39/58.22 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.22 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.22 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.22 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.22 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.22 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.22 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.22 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.22 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.22 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.22 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.22 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.22 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.22 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.22 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.22 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.22 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.22 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.22 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.22 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.22 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 223.39/58.23 Function symbols to be analyzed: {testQuicksort} 223.39/58.23 Previous analysis results are: 223.39/58.23 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.23 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.23 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.23 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.23 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.23 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.23 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.23 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 testQuicksort2: runtime: O(1) [195230], size: O(1) [74] 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (139) ResultPropagationProof (UPPER BOUND(ID)) 223.39/58.23 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (140) 223.39/58.23 Obligation: 223.39/58.23 Complexity RNTS consisting of the following rules: 223.39/58.23 223.39/58.23 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.23 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.23 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.23 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.23 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.23 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.23 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.23 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.23 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.23 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.23 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.23 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.23 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.23 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.23 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.23 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.23 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 223.39/58.23 Function symbols to be analyzed: {testQuicksort} 223.39/58.23 Previous analysis results are: 223.39/58.23 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.23 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.23 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.23 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.23 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.23 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.23 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.23 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 testQuicksort2: runtime: O(1) [195230], size: O(1) [74] 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (141) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.23 223.39/58.23 Computed SIZE bound using CoFloCo for: testQuicksort 223.39/58.23 after applying outer abstraction to obtain an ITS, 223.39/58.23 resulting in: O(1) with polynomial bound: 74 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (142) 223.39/58.23 Obligation: 223.39/58.23 Complexity RNTS consisting of the following rules: 223.39/58.23 223.39/58.23 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.23 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.23 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.23 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.23 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.23 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.23 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.23 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.23 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.23 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.23 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.23 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.23 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.23 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.23 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.23 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.23 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 223.39/58.23 Function symbols to be analyzed: {testQuicksort} 223.39/58.23 Previous analysis results are: 223.39/58.23 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.23 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.23 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.23 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.23 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.23 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.23 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.23 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 testQuicksort2: runtime: O(1) [195230], size: O(1) [74] 223.39/58.23 testQuicksort: runtime: ?, size: O(1) [74] 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (143) IntTrsBoundProof (UPPER BOUND(ID)) 223.39/58.23 223.39/58.23 Computed RUNTIME bound using CoFloCo for: testQuicksort 223.39/58.23 after applying outer abstraction to obtain an ITS, 223.39/58.23 resulting in: O(1) with polynomial bound: 195230 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (144) 223.39/58.23 Obligation: 223.39/58.23 Complexity RNTS consisting of the following rules: 223.39/58.23 223.39/58.23 #abs(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 #abs(z) -{ 1 }-> 1 + (z - 1) :|: z - 1 >= 0 223.39/58.23 #abs(z) -{ 1 }-> 1 + (1 + (z - 1)) :|: z - 1 >= 0 223.39/58.23 #ckgt(z) -{ 0 }-> 2 :|: z = 2 223.39/58.23 #ckgt(z) -{ 0 }-> 1 :|: z = 1 223.39/58.23 #ckgt(z) -{ 0 }-> 1 :|: z = 3 223.39/58.23 #ckgt(z) -{ 0 }-> 0 :|: z >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 3, z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 223.39/58.23 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 223.39/58.23 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s2 >= 0, s2 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> s7 :|: s7 >= 0, s7 <= 2, s3 >= 0, s3 <= 3, z' - 1 >= 0, z - 1 >= 0 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 223.39/58.23 #greater(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 223.39/58.23 append(z, z') -{ 4 + 2*z }-> s12 :|: s12 >= 0, s12 <= z + z', z >= 0, z' >= 0 223.39/58.23 append#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.23 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s13 :|: s13 >= 0, s13 <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 appendD(z, z') -{ 2 + 2*z }-> s :|: s >= 0, s <= z + z', z >= 0, z' >= 0 223.39/58.23 appendD#1(z, z') -{ 1 }-> z' :|: z = 0, z' >= 0 223.39/58.23 appendD#1(z, z') -{ 3 + 2*@xs }-> 1 + @x + s' :|: s' >= 0, s' <= @xs + z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 quicksort(z) -{ 6 + 48*z + 35*z^2 }-> s52 :|: s52 >= 0, s52 <= z, z >= 0 223.39/58.23 quicksort#1(z) -{ 20 + 5*@zs + 98*s44 + 70*s44^2 }-> s53 :|: s53 >= 0, s53 <= s44 + @z, s44 >= 0, s44 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.23 quicksort#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 quicksort#2(z, z') -{ 17 + 48*@xs + 35*@xs^2 + 48*@ys + 35*@ys^2 + 2*s54 }-> s56 :|: s54 >= 0, s54 <= @xs, s55 >= 0, s55 <= @ys, s56 >= 0, s56 <= s54 + (1 + z' + s55), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.23 quicksort#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 quicksortD(z) -{ 115 + 148*z + 44*z^2 }-> s57 :|: s57 >= 0, s57 <= 3 * z + 1, z >= 0 223.39/58.23 quicksortD#1(z) -{ 14 + 5*@zs + 55*s48 + 44*s48^2 }-> s58 :|: s58 >= 0, s58 <= 3 * @z + 1 + 3 * s48, s48 >= 0, s48 <= @zs + 1, z = 1 + @z + @zs, @zs >= 0, @z >= 0 223.39/58.23 quicksortD#1(z) -{ 1 }-> 0 :|: z = 0 223.39/58.23 quicksortD#2(z, z') -{ 233 + 148*@xs + 44*@xs^2 + 148*@ys + 44*@ys^2 + 2*s59 }-> s61 :|: s59 >= 0, s59 <= 3 * @xs + 1, s60 >= 0, s60 <= 3 * @ys + 1, s61 >= 0, s61 <= s59 + (1 + z' + s60), z = 1 + @xs + @ys, @xs >= 0, @ys >= 0, z' >= 0 223.39/58.23 quicksortD#2(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 223.39/58.23 split(z, z') -{ 2 + 5*z' }-> s45 :|: s45 >= 0, s45 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 split#1(z, z') -{ 6 + 5*@xs }-> s47 :|: s46 >= 0, s46 <= @xs + 1, s47 >= 0, s47 <= s46 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 split#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 split#2(z, z', z'') -{ 3 }-> s9 :|: s8 >= 0, s8 <= 2, s9 >= 0, s9 <= @ls + @rs + z'' + 2, s4 >= 0, s4 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 split#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 split#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 splitD(z, z') -{ 2 + 5*z' }-> s49 :|: s49 >= 0, s49 <= z' + 1, z' >= 0, z >= 0 223.39/58.23 splitD#1(z, z') -{ 6 + 5*@xs }-> s51 :|: s50 >= 0, s50 <= @xs + 1, s51 >= 0, s51 <= s50 + @x + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0 223.39/58.23 splitD#1(z, z') -{ 1 }-> 1 + 0 + 0 :|: z' >= 0, z = 0 223.39/58.23 splitD#2(z, z', z'') -{ 3 }-> s11 :|: s10 >= 0, s10 <= 2, s11 >= 0, s11 <= @ls + @rs + z'' + 2, s5 >= 0, s5 <= 3, @ls >= 0, z = 1 + @ls + @rs, z'' >= 0, z' >= 0, @rs >= 0 223.39/58.23 splitD#2(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z1 + z'') :|: z = 2, z' >= 0, z1 >= 0, z'' >= 0 223.39/58.23 splitD#3(z, z', z'', z1) -{ 1 }-> 1 + (1 + z1 + z') + z'' :|: z' >= 0, z1 >= 0, z = 1, z'' >= 0 223.39/58.23 testList(z) -{ 11 }-> 1 + s14 + (1 + s15 + (1 + s16 + (1 + s17 + (1 + s18 + (1 + s19 + (1 + s20 + (1 + s21 + (1 + s22 + (1 + s23 + 0))))))))) :|: s14 >= 0, s14 <= 0 + 1, s15 >= 0, s15 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s16 >= 0, s16 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s17 >= 0, s17 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s18 >= 0, s18 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s19 >= 0, s19 <= 1 + (1 + 0) + 1, s20 >= 0, s20 <= 1 + (1 + (1 + 0)) + 1, s21 >= 0, s21 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s22 >= 0, s22 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s23 >= 0, s23 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort(z) -{ 3998 + 748*s24 + 70*s24*s25 + 70*s24*s26 + 70*s24*s27 + 70*s24*s28 + 70*s24*s29 + 70*s24*s30 + 70*s24*s31 + 70*s24*s32 + 70*s24*s33 + 35*s24^2 + 748*s25 + 70*s25*s26 + 70*s25*s27 + 70*s25*s28 + 70*s25*s29 + 70*s25*s30 + 70*s25*s31 + 70*s25*s32 + 70*s25*s33 + 35*s25^2 + 748*s26 + 70*s26*s27 + 70*s26*s28 + 70*s26*s29 + 70*s26*s30 + 70*s26*s31 + 70*s26*s32 + 70*s26*s33 + 35*s26^2 + 748*s27 + 70*s27*s28 + 70*s27*s29 + 70*s27*s30 + 70*s27*s31 + 70*s27*s32 + 70*s27*s33 + 35*s27^2 + 748*s28 + 70*s28*s29 + 70*s28*s30 + 70*s28*s31 + 70*s28*s32 + 70*s28*s33 + 35*s28^2 + 748*s29 + 70*s29*s30 + 70*s29*s31 + 70*s29*s32 + 70*s29*s33 + 35*s29^2 + 748*s30 + 70*s30*s31 + 70*s30*s32 + 70*s30*s33 + 35*s30^2 + 748*s31 + 70*s31*s32 + 70*s31*s33 + 35*s31^2 + 748*s32 + 70*s32*s33 + 35*s32^2 + 748*s33 + 35*s33^2 }-> s62 :|: s62 >= 0, s62 <= 1 + s24 + (1 + s25 + (1 + s26 + (1 + s27 + (1 + s28 + (1 + s29 + (1 + s30 + (1 + s31 + (1 + s32 + (1 + s33 + 0))))))))), s24 >= 0, s24 <= 0 + 1, s25 >= 0, s25 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s26 >= 0, s26 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s27 >= 0, s27 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s28 >= 0, s28 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s29 >= 0, s29 <= 1 + (1 + 0) + 1, s30 >= 0, s30 <= 1 + (1 + (1 + 0)) + 1, s31 >= 0, s31 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s32 >= 0, s32 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s33 >= 0, s33 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 testQuicksort2(z) -{ 3998 + 748*s34 + 70*s34*s35 + 70*s34*s36 + 70*s34*s37 + 70*s34*s38 + 70*s34*s39 + 70*s34*s40 + 70*s34*s41 + 70*s34*s42 + 70*s34*s43 + 35*s34^2 + 748*s35 + 70*s35*s36 + 70*s35*s37 + 70*s35*s38 + 70*s35*s39 + 70*s35*s40 + 70*s35*s41 + 70*s35*s42 + 70*s35*s43 + 35*s35^2 + 748*s36 + 70*s36*s37 + 70*s36*s38 + 70*s36*s39 + 70*s36*s40 + 70*s36*s41 + 70*s36*s42 + 70*s36*s43 + 35*s36^2 + 748*s37 + 70*s37*s38 + 70*s37*s39 + 70*s37*s40 + 70*s37*s41 + 70*s37*s42 + 70*s37*s43 + 35*s37^2 + 748*s38 + 70*s38*s39 + 70*s38*s40 + 70*s38*s41 + 70*s38*s42 + 70*s38*s43 + 35*s38^2 + 748*s39 + 70*s39*s40 + 70*s39*s41 + 70*s39*s42 + 70*s39*s43 + 35*s39^2 + 748*s40 + 70*s40*s41 + 70*s40*s42 + 70*s40*s43 + 35*s40^2 + 748*s41 + 70*s41*s42 + 70*s41*s43 + 35*s41^2 + 748*s42 + 70*s42*s43 + 35*s42^2 + 748*s43 + 35*s43^2 }-> s63 :|: s63 >= 0, s63 <= 1 + s34 + (1 + s35 + (1 + s36 + (1 + s37 + (1 + s38 + (1 + s39 + (1 + s40 + (1 + s41 + (1 + s42 + (1 + s43 + 0))))))))), s34 >= 0, s34 <= 0 + 1, s35 >= 0, s35 <= 1 + (1 + (1 + (1 + (1 + 0)))) + 1, s36 >= 0, s36 <= 1 + (1 + (1 + (1 + (1 + (1 + 0))))) + 1, s37 >= 0, s37 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))))) + 1, s38 >= 0, s38 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0))))))) + 1, s39 >= 0, s39 <= 1 + (1 + 0) + 1, s40 >= 0, s40 <= 1 + (1 + (1 + 0)) + 1, s41 >= 0, s41 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))))) + 1, s42 >= 0, s42 <= 1 + (1 + (1 + (1 + (1 + (1 + (1 + 0)))))) + 1, s43 >= 0, s43 <= 1 + (1 + (1 + (1 + 0))) + 1, z >= 0 223.39/58.23 223.39/58.23 Function symbols to be analyzed: 223.39/58.23 Previous analysis results are: 223.39/58.23 appendD: runtime: O(n^1) [2 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 appendD#1: runtime: O(n^1) [1 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 split#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 splitD#3: runtime: O(1) [1], size: O(n^1) [2 + z' + z'' + z1] 223.39/58.23 #compare: runtime: O(1) [0], size: O(1) [3] 223.39/58.23 #ckgt: runtime: O(1) [0], size: O(1) [2] 223.39/58.23 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 223.39/58.23 #abs: runtime: O(1) [1], size: O(n^1) [1 + z] 223.39/58.23 split#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 splitD#2: runtime: O(1) [3], size: O(n^1) [1 + z + z''] 223.39/58.23 #greater: runtime: O(1) [1], size: O(1) [2] 223.39/58.23 testList: runtime: O(1) [11], size: O(1) [74] 223.39/58.23 split#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 splitD#1: runtime: O(n^1) [1 + 5*z], size: O(n^1) [1 + z] 223.39/58.23 split: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort#1: runtime: O(n^2) [5 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksort#2: runtime: O(n^2) [17 + 98*z + 70*z^2], size: O(n^1) [z + z'] 223.39/58.23 quicksortD#2: runtime: O(n^2) [11 + 55*z + 44*z^2], size: O(n^1) [1 + 3*z + 3*z'] 223.39/58.23 quicksortD#1: runtime: O(n^2) [114 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 splitD: runtime: O(n^1) [2 + 5*z'], size: O(n^1) [1 + z'] 223.39/58.23 quicksort: runtime: O(n^2) [6 + 48*z + 35*z^2], size: O(n^1) [z] 223.39/58.23 quicksortD: runtime: O(n^2) [115 + 148*z + 44*z^2], size: O(n^1) [1 + 3*z] 223.39/58.23 testQuicksort2: runtime: O(1) [195230], size: O(1) [74] 223.39/58.23 testQuicksort: runtime: O(1) [195230], size: O(1) [74] 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (145) FinalProof (FINISHED) 223.39/58.23 Computed overall runtime complexity 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (146) 223.39/58.23 BOUNDS(1, n^2) 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (147) RenamingProof (BOTH BOUNDS(ID, ID)) 223.39/58.23 Renamed function symbols to avoid clashes with predefined symbol. 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (148) 223.39/58.23 Obligation: 223.39/58.23 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^2, INF). 223.39/58.23 223.39/58.23 223.39/58.23 The TRS R consists of the following rules: 223.39/58.23 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 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)))))))))) 223.39/58.23 testQuicksort(@x) -> quicksort(testList(#unit)) 223.39/58.23 testQuicksort2(@x) -> quicksort(testList(#unit)) 223.39/58.23 223.39/58.23 The (relative) TRS S consists of the following rules: 223.39/58.23 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Rewrite Strategy: INNERMOST 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (149) SlicingProof (LOWER BOUND(ID)) 223.39/58.23 Sliced the following arguments: 223.39/58.23 testList/0 223.39/58.23 testQuicksort/0 223.39/58.23 testQuicksort2/0 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (150) 223.39/58.23 Obligation: 223.39/58.23 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^2, INF). 223.39/58.23 223.39/58.23 223.39/58.23 The TRS R consists of the following rules: 223.39/58.23 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 223.39/58.23 The (relative) TRS S consists of the following rules: 223.39/58.23 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Rewrite Strategy: INNERMOST 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (151) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 223.39/58.23 Infered types. 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (152) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (153) OrderProof (LOWER BOUND(ID)) 223.39/58.23 Heuristically decided to analyse the following defined symbols: 223.39/58.23 #compare, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, splitD, split#1, splitD#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 split < quicksort#1 223.39/58.23 split = split#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 splitD < quicksortD#1 223.39/58.23 splitD = splitD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (154) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 #compare, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, splitD, split#1, splitD#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 split < quicksort#1 223.39/58.23 split = split#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 splitD < quicksortD#1 223.39/58.23 splitD = splitD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (155) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(0), gen_#0:#neg:#pos:#s6_4(0)) ->_R^Omega(0) 223.39/58.23 #EQ 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(+(n9_4, 1)), gen_#0:#neg:#pos:#s6_4(+(n9_4, 1))) ->_R^Omega(0) 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) ->_IH 223.39/58.23 #EQ 223.39/58.23 223.39/58.23 We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (156) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 splitD#1, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, splitD, split#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 split < quicksort#1 223.39/58.23 split = split#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 splitD < quicksortD#1 223.39/58.23 splitD = splitD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (157) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 splitD#1(gen_:::nil7_4(0), gen_#0:#neg:#pos:#s6_4(0)) ->_R^Omega(1) 223.39/58.23 tuple#2(nil, nil) 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 splitD#1(gen_:::nil7_4(+(n318812_4, 1)), gen_#0:#neg:#pos:#s6_4(0)) ->_R^Omega(1) 223.39/58.23 splitD#2(splitD(gen_#0:#neg:#pos:#s6_4(0), gen_:::nil7_4(n318812_4)), gen_#0:#neg:#pos:#s6_4(0), #0) ->_R^Omega(1) 223.39/58.23 splitD#2(splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)), gen_#0:#neg:#pos:#s6_4(0), #0) ->_IH 223.39/58.23 splitD#2(tuple#2(gen_:::nil7_4(c318813_4), gen_:::nil7_4(0)), gen_#0:#neg:#pos:#s6_4(0), #0) ->_R^Omega(1) 223.39/58.23 splitD#3(#greater(#0, gen_#0:#neg:#pos:#s6_4(0)), gen_:::nil7_4(n318812_4), gen_:::nil7_4(0), #0) ->_R^Omega(1) 223.39/58.23 splitD#3(#ckgt(#compare(#0, gen_#0:#neg:#pos:#s6_4(0))), gen_:::nil7_4(n318812_4), gen_:::nil7_4(0), #0) ->_L^Omega(0) 223.39/58.23 splitD#3(#ckgt(#EQ), gen_:::nil7_4(n318812_4), gen_:::nil7_4(0), #0) ->_R^Omega(0) 223.39/58.23 splitD#3(#false, gen_:::nil7_4(n318812_4), gen_:::nil7_4(0), #0) ->_R^Omega(1) 223.39/58.23 tuple#2(::(#0, gen_:::nil7_4(n318812_4)), gen_:::nil7_4(0)) 223.39/58.23 223.39/58.23 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (158) 223.39/58.23 Complex Obligation (BEST) 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (159) 223.39/58.23 Obligation: 223.39/58.23 Proved the lower bound n^1 for the following obligation: 223.39/58.23 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 splitD#1, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, splitD, split#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 split < quicksort#1 223.39/58.23 split = split#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 splitD < quicksortD#1 223.39/58.23 splitD = splitD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (160) LowerBoundPropagationProof (FINISHED) 223.39/58.23 Propagated lower bound. 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (161) 223.39/58.23 BOUNDS(n^1, INF) 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (162) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 splitD, append, append#1, appendD, appendD#1, quicksort, quicksort#1, split, quicksortD, quicksortD#1, split#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 split < quicksort#1 223.39/58.23 split = split#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 splitD < quicksortD#1 223.39/58.23 splitD = splitD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (163) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 split#1(gen_:::nil7_4(0), gen_#0:#neg:#pos:#s6_4(0)) ->_R^Omega(1) 223.39/58.23 tuple#2(nil, nil) 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 split#1(gen_:::nil7_4(+(n320997_4, 1)), gen_#0:#neg:#pos:#s6_4(0)) ->_R^Omega(1) 223.39/58.23 split#2(split(gen_#0:#neg:#pos:#s6_4(0), gen_:::nil7_4(n320997_4)), gen_#0:#neg:#pos:#s6_4(0), #0) ->_R^Omega(1) 223.39/58.23 split#2(split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)), gen_#0:#neg:#pos:#s6_4(0), #0) ->_IH 223.39/58.23 split#2(tuple#2(gen_:::nil7_4(c320998_4), gen_:::nil7_4(0)), gen_#0:#neg:#pos:#s6_4(0), #0) ->_R^Omega(1) 223.39/58.23 split#3(#greater(#0, gen_#0:#neg:#pos:#s6_4(0)), gen_:::nil7_4(n320997_4), gen_:::nil7_4(0), #0) ->_R^Omega(1) 223.39/58.23 split#3(#ckgt(#compare(#0, gen_#0:#neg:#pos:#s6_4(0))), gen_:::nil7_4(n320997_4), gen_:::nil7_4(0), #0) ->_L^Omega(0) 223.39/58.23 split#3(#ckgt(#EQ), gen_:::nil7_4(n320997_4), gen_:::nil7_4(0), #0) ->_R^Omega(0) 223.39/58.23 split#3(#false, gen_:::nil7_4(n320997_4), gen_:::nil7_4(0), #0) ->_R^Omega(1) 223.39/58.23 tuple#2(::(#0, gen_:::nil7_4(n320997_4)), gen_:::nil7_4(0)) 223.39/58.23 223.39/58.23 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (164) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 split, append, append#1, appendD, appendD#1, quicksort, quicksort#1, quicksortD, quicksortD#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 split < quicksort#1 223.39/58.23 split = split#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (165) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n323205_4, b)), rt in Omega(1 + n323205_4) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 appendD#1(gen_:::nil7_4(0), gen_:::nil7_4(b)) ->_R^Omega(1) 223.39/58.23 gen_:::nil7_4(b) 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 appendD#1(gen_:::nil7_4(+(n323205_4, 1)), gen_:::nil7_4(b)) ->_R^Omega(1) 223.39/58.23 ::(#0, appendD(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b))) ->_R^Omega(1) 223.39/58.23 ::(#0, appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b))) ->_IH 223.39/58.23 ::(#0, gen_:::nil7_4(+(b, c323206_4))) 223.39/58.23 223.39/58.23 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (166) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.23 appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n323205_4, b)), rt in Omega(1 + n323205_4) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 appendD, append, append#1, quicksort, quicksort#1, quicksortD, quicksortD#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 appendD = appendD#1 223.39/58.23 appendD < quicksortD#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (167) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 quicksortD#1(gen_:::nil7_4(n324930_4)) -> gen_:::nil7_4(n324930_4), rt in Omega(1 + n324930_4 + n324930_4^2) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 quicksortD#1(gen_:::nil7_4(0)) ->_R^Omega(1) 223.39/58.23 nil 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 quicksortD#1(gen_:::nil7_4(+(n324930_4, 1))) ->_R^Omega(1) 223.39/58.23 quicksortD#2(splitD(#0, gen_:::nil7_4(n324930_4)), #0) ->_R^Omega(1) 223.39/58.23 quicksortD#2(splitD#1(gen_:::nil7_4(n324930_4), #0), #0) ->_L^Omega(1 + n324930_4) 223.39/58.23 quicksortD#2(tuple#2(gen_:::nil7_4(n324930_4), gen_:::nil7_4(0)), #0) ->_R^Omega(1) 223.39/58.23 appendD(quicksortD(gen_:::nil7_4(n324930_4)), ::(#0, quicksortD(gen_:::nil7_4(0)))) ->_R^Omega(1) 223.39/58.23 appendD(quicksortD#1(gen_:::nil7_4(n324930_4)), ::(#0, quicksortD(gen_:::nil7_4(0)))) ->_IH 223.39/58.23 appendD(gen_:::nil7_4(c324931_4), ::(#0, quicksortD(gen_:::nil7_4(0)))) ->_R^Omega(1) 223.39/58.23 appendD(gen_:::nil7_4(n324930_4), ::(#0, quicksortD#1(gen_:::nil7_4(0)))) ->_R^Omega(1) 223.39/58.23 appendD(gen_:::nil7_4(n324930_4), ::(#0, nil)) ->_R^Omega(1) 223.39/58.23 appendD#1(gen_:::nil7_4(n324930_4), ::(#0, nil)) ->_L^Omega(1 + n324930_4) 223.39/58.23 gen_:::nil7_4(+(n324930_4, +(0, 1))) 223.39/58.23 223.39/58.23 We have rt in Omega(n^2) and sz in O(n). Thus, we have irc_R in Omega(n^2). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (168) 223.39/58.23 Complex Obligation (BEST) 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (169) 223.39/58.23 Obligation: 223.39/58.23 Proved the lower bound n^2 for the following obligation: 223.39/58.23 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.23 appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n323205_4, b)), rt in Omega(1 + n323205_4) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 quicksortD#1, append, append#1, quicksort, quicksort#1, quicksortD 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (170) LowerBoundPropagationProof (FINISHED) 223.39/58.23 Propagated lower bound. 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (171) 223.39/58.23 BOUNDS(n^2, INF) 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (172) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.23 appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n323205_4, b)), rt in Omega(1 + n323205_4) 223.39/58.23 quicksortD#1(gen_:::nil7_4(n324930_4)) -> gen_:::nil7_4(n324930_4), rt in Omega(1 + n324930_4 + n324930_4^2) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 quicksortD, append, append#1, quicksort, quicksort#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 quicksortD = quicksortD#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (173) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 append#1(gen_:::nil7_4(n326285_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n326285_4, b)), rt in Omega(1 + n326285_4) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 append#1(gen_:::nil7_4(0), gen_:::nil7_4(b)) ->_R^Omega(1) 223.39/58.23 gen_:::nil7_4(b) 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 append#1(gen_:::nil7_4(+(n326285_4, 1)), gen_:::nil7_4(b)) ->_R^Omega(1) 223.39/58.23 ::(#0, append(gen_:::nil7_4(n326285_4), gen_:::nil7_4(b))) ->_R^Omega(1) 223.39/58.23 ::(#0, append#1(gen_:::nil7_4(n326285_4), gen_:::nil7_4(b))) ->_IH 223.39/58.23 ::(#0, gen_:::nil7_4(+(b, c326286_4))) 223.39/58.23 223.39/58.23 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (174) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.23 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.23 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.23 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.23 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.23 testList -> ::(#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)))))))))) 223.39/58.23 testQuicksort -> quicksort(testList) 223.39/58.23 testQuicksort2 -> quicksort(testList) 223.39/58.23 #ckgt(#EQ) -> #false 223.39/58.23 #ckgt(#GT) -> #true 223.39/58.23 #ckgt(#LT) -> #false 223.39/58.23 #compare(#0, #0) -> #EQ 223.39/58.23 #compare(#0, #neg(@y)) -> #GT 223.39/58.23 #compare(#0, #pos(@y)) -> #LT 223.39/58.23 #compare(#0, #s(@y)) -> #LT 223.39/58.23 #compare(#neg(@x), #0) -> #LT 223.39/58.23 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.23 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.23 #compare(#pos(@x), #0) -> #GT 223.39/58.23 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.23 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.23 #compare(#s(@x), #0) -> #GT 223.39/58.23 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.23 223.39/58.23 Types: 223.39/58.23 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #0 :: #0:#neg:#pos:#s 223.39/58.23 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.23 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.23 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.23 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.23 append :: :::nil -> :::nil -> :::nil 223.39/58.23 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.23 nil :: :::nil 223.39/58.23 appendD :: :::nil -> :::nil -> :::nil 223.39/58.23 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.23 quicksort :: :::nil -> :::nil 223.39/58.23 quicksort#1 :: :::nil -> :::nil 223.39/58.23 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.23 quicksortD :: :::nil -> :::nil 223.39/58.23 quicksortD#1 :: :::nil -> :::nil 223.39/58.23 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.23 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.23 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 #false :: #false:#true 223.39/58.23 #true :: #false:#true 223.39/58.23 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.23 testList :: :::nil 223.39/58.23 testQuicksort :: :::nil 223.39/58.23 testQuicksort2 :: :::nil 223.39/58.23 #EQ :: #EQ:#GT:#LT 223.39/58.23 #GT :: #EQ:#GT:#LT 223.39/58.23 #LT :: #EQ:#GT:#LT 223.39/58.23 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.23 hole_#false:#true2_4 :: #false:#true 223.39/58.23 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.23 hole_:::nil4_4 :: :::nil 223.39/58.23 hole_tuple#25_4 :: tuple#2 223.39/58.23 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.23 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.23 223.39/58.23 223.39/58.23 Lemmas: 223.39/58.23 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.23 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.23 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.23 appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n323205_4, b)), rt in Omega(1 + n323205_4) 223.39/58.23 quicksortD#1(gen_:::nil7_4(n324930_4)) -> gen_:::nil7_4(n324930_4), rt in Omega(1 + n324930_4 + n324930_4^2) 223.39/58.23 append#1(gen_:::nil7_4(n326285_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n326285_4, b)), rt in Omega(1 + n326285_4) 223.39/58.23 223.39/58.23 223.39/58.23 Generator Equations: 223.39/58.23 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.23 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.23 gen_:::nil7_4(0) <=> nil 223.39/58.23 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.23 223.39/58.23 223.39/58.23 The following defined symbols remain to be analysed: 223.39/58.23 append, quicksort, quicksort#1 223.39/58.23 223.39/58.23 They will be analysed ascendingly in the following order: 223.39/58.23 append = append#1 223.39/58.23 append < quicksort#1 223.39/58.23 quicksort = quicksort#1 223.39/58.23 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (175) RewriteLemmaProof (LOWER BOUND(ID)) 223.39/58.23 Proved the following rewrite lemma: 223.39/58.23 quicksort#1(gen_:::nil7_4(n328054_4)) -> gen_:::nil7_4(n328054_4), rt in Omega(1 + n328054_4 + n328054_4^2) 223.39/58.23 223.39/58.23 Induction Base: 223.39/58.23 quicksort#1(gen_:::nil7_4(0)) ->_R^Omega(1) 223.39/58.23 nil 223.39/58.23 223.39/58.23 Induction Step: 223.39/58.23 quicksort#1(gen_:::nil7_4(+(n328054_4, 1))) ->_R^Omega(1) 223.39/58.23 quicksort#2(split(#0, gen_:::nil7_4(n328054_4)), #0) ->_R^Omega(1) 223.39/58.23 quicksort#2(split#1(gen_:::nil7_4(n328054_4), #0), #0) ->_L^Omega(1 + n328054_4) 223.39/58.23 quicksort#2(tuple#2(gen_:::nil7_4(n328054_4), gen_:::nil7_4(0)), #0) ->_R^Omega(1) 223.39/58.23 append(quicksort(gen_:::nil7_4(n328054_4)), ::(#0, quicksort(gen_:::nil7_4(0)))) ->_R^Omega(1) 223.39/58.23 append(quicksort#1(gen_:::nil7_4(n328054_4)), ::(#0, quicksort(gen_:::nil7_4(0)))) ->_IH 223.39/58.23 append(gen_:::nil7_4(c328055_4), ::(#0, quicksort(gen_:::nil7_4(0)))) ->_R^Omega(1) 223.39/58.23 append(gen_:::nil7_4(n328054_4), ::(#0, quicksort#1(gen_:::nil7_4(0)))) ->_R^Omega(1) 223.39/58.23 append(gen_:::nil7_4(n328054_4), ::(#0, nil)) ->_R^Omega(1) 223.39/58.23 append#1(gen_:::nil7_4(n328054_4), ::(#0, nil)) ->_L^Omega(1 + n328054_4) 223.39/58.23 gen_:::nil7_4(+(n328054_4, +(0, 1))) 223.39/58.23 223.39/58.23 We have rt in Omega(n^2) and sz in O(n). Thus, we have irc_R in Omega(n^2). 223.39/58.23 ---------------------------------------- 223.39/58.23 223.39/58.23 (176) 223.39/58.23 Obligation: 223.39/58.23 Innermost TRS: 223.39/58.23 Rules: 223.39/58.23 #abs(#0) -> #0 223.39/58.23 #abs(#neg(@x)) -> #pos(@x) 223.39/58.23 #abs(#pos(@x)) -> #pos(@x) 223.39/58.23 #abs(#s(@x)) -> #pos(#s(@x)) 223.39/58.23 #greater(@x, @y) -> #ckgt(#compare(@x, @y)) 223.39/58.23 append(@l, @ys) -> append#1(@l, @ys) 223.39/58.23 append#1(::(@x, @xs), @ys) -> ::(@x, append(@xs, @ys)) 223.39/58.23 append#1(nil, @ys) -> @ys 223.39/58.23 appendD(@l, @ys) -> appendD#1(@l, @ys) 223.39/58.23 appendD#1(::(@x, @xs), @ys) -> ::(@x, appendD(@xs, @ys)) 223.39/58.23 appendD#1(nil, @ys) -> @ys 223.39/58.23 quicksort(@l) -> quicksort#1(@l) 223.39/58.23 quicksort#1(::(@z, @zs)) -> quicksort#2(split(@z, @zs), @z) 223.39/58.23 quicksort#1(nil) -> nil 223.39/58.23 quicksort#2(tuple#2(@xs, @ys), @z) -> append(quicksort(@xs), ::(@z, quicksort(@ys))) 223.39/58.23 quicksortD(@l) -> quicksortD#1(@l) 223.39/58.23 quicksortD#1(::(@z, @zs)) -> quicksortD#2(splitD(@z, @zs), @z) 223.39/58.23 quicksortD#1(nil) -> nil 223.39/58.23 quicksortD#2(tuple#2(@xs, @ys), @z) -> appendD(quicksortD(@xs), ::(@z, quicksortD(@ys))) 223.39/58.23 split(@pivot, @l) -> split#1(@l, @pivot) 223.39/58.23 split#1(::(@x, @xs), @pivot) -> split#2(split(@pivot, @xs), @pivot, @x) 223.39/58.23 split#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.23 split#2(tuple#2(@ls, @rs), @pivot, @x) -> split#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.24 split#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.24 split#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.24 splitD(@pivot, @l) -> splitD#1(@l, @pivot) 223.39/58.24 splitD#1(::(@x, @xs), @pivot) -> splitD#2(splitD(@pivot, @xs), @pivot, @x) 223.39/58.24 splitD#1(nil, @pivot) -> tuple#2(nil, nil) 223.39/58.24 splitD#2(tuple#2(@ls, @rs), @pivot, @x) -> splitD#3(#greater(@x, @pivot), @ls, @rs, @x) 223.39/58.24 splitD#3(#false, @ls, @rs, @x) -> tuple#2(::(@x, @ls), @rs) 223.39/58.24 splitD#3(#true, @ls, @rs, @x) -> tuple#2(@ls, ::(@x, @rs)) 223.39/58.24 testList -> ::(#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)))))))))) 223.39/58.24 testQuicksort -> quicksort(testList) 223.39/58.24 testQuicksort2 -> quicksort(testList) 223.39/58.24 #ckgt(#EQ) -> #false 223.39/58.24 #ckgt(#GT) -> #true 223.39/58.24 #ckgt(#LT) -> #false 223.39/58.24 #compare(#0, #0) -> #EQ 223.39/58.24 #compare(#0, #neg(@y)) -> #GT 223.39/58.24 #compare(#0, #pos(@y)) -> #LT 223.39/58.24 #compare(#0, #s(@y)) -> #LT 223.39/58.24 #compare(#neg(@x), #0) -> #LT 223.39/58.24 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 223.39/58.24 #compare(#neg(@x), #pos(@y)) -> #LT 223.39/58.24 #compare(#pos(@x), #0) -> #GT 223.39/58.24 #compare(#pos(@x), #neg(@y)) -> #GT 223.39/58.24 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 223.39/58.24 #compare(#s(@x), #0) -> #GT 223.39/58.24 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 223.39/58.24 223.39/58.24 Types: 223.39/58.24 #abs :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.24 #0 :: #0:#neg:#pos:#s 223.39/58.24 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.24 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.24 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 223.39/58.24 #greater :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 223.39/58.24 #ckgt :: #EQ:#GT:#LT -> #false:#true 223.39/58.24 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 223.39/58.24 append :: :::nil -> :::nil -> :::nil 223.39/58.24 append#1 :: :::nil -> :::nil -> :::nil 223.39/58.24 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 223.39/58.24 nil :: :::nil 223.39/58.24 appendD :: :::nil -> :::nil -> :::nil 223.39/58.24 appendD#1 :: :::nil -> :::nil -> :::nil 223.39/58.24 quicksort :: :::nil -> :::nil 223.39/58.24 quicksort#1 :: :::nil -> :::nil 223.39/58.24 quicksort#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.24 split :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.24 tuple#2 :: :::nil -> :::nil -> tuple#2 223.39/58.24 quicksortD :: :::nil -> :::nil 223.39/58.24 quicksortD#1 :: :::nil -> :::nil 223.39/58.24 quicksortD#2 :: tuple#2 -> #0:#neg:#pos:#s -> :::nil 223.39/58.24 splitD :: #0:#neg:#pos:#s -> :::nil -> tuple#2 223.39/58.24 split#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.24 split#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.24 split#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.24 #false :: #false:#true 223.39/58.24 #true :: #false:#true 223.39/58.24 splitD#1 :: :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.24 splitD#2 :: tuple#2 -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> tuple#2 223.39/58.24 splitD#3 :: #false:#true -> :::nil -> :::nil -> #0:#neg:#pos:#s -> tuple#2 223.39/58.24 testList :: :::nil 223.39/58.24 testQuicksort :: :::nil 223.39/58.24 testQuicksort2 :: :::nil 223.39/58.24 #EQ :: #EQ:#GT:#LT 223.39/58.24 #GT :: #EQ:#GT:#LT 223.39/58.24 #LT :: #EQ:#GT:#LT 223.39/58.24 hole_#0:#neg:#pos:#s1_4 :: #0:#neg:#pos:#s 223.39/58.24 hole_#false:#true2_4 :: #false:#true 223.39/58.24 hole_#EQ:#GT:#LT3_4 :: #EQ:#GT:#LT 223.39/58.24 hole_:::nil4_4 :: :::nil 223.39/58.24 hole_tuple#25_4 :: tuple#2 223.39/58.24 gen_#0:#neg:#pos:#s6_4 :: Nat -> #0:#neg:#pos:#s 223.39/58.24 gen_:::nil7_4 :: Nat -> :::nil 223.39/58.24 223.39/58.24 223.39/58.24 Lemmas: 223.39/58.24 #compare(gen_#0:#neg:#pos:#s6_4(n9_4), gen_#0:#neg:#pos:#s6_4(n9_4)) -> #EQ, rt in Omega(0) 223.39/58.24 splitD#1(gen_:::nil7_4(n318812_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n318812_4), gen_:::nil7_4(0)), rt in Omega(1 + n318812_4) 223.39/58.24 split#1(gen_:::nil7_4(n320997_4), gen_#0:#neg:#pos:#s6_4(0)) -> tuple#2(gen_:::nil7_4(n320997_4), gen_:::nil7_4(0)), rt in Omega(1 + n320997_4) 223.39/58.24 appendD#1(gen_:::nil7_4(n323205_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n323205_4, b)), rt in Omega(1 + n323205_4) 223.39/58.24 quicksortD#1(gen_:::nil7_4(n324930_4)) -> gen_:::nil7_4(n324930_4), rt in Omega(1 + n324930_4 + n324930_4^2) 223.39/58.24 append#1(gen_:::nil7_4(n326285_4), gen_:::nil7_4(b)) -> gen_:::nil7_4(+(n326285_4, b)), rt in Omega(1 + n326285_4) 223.39/58.24 quicksort#1(gen_:::nil7_4(n328054_4)) -> gen_:::nil7_4(n328054_4), rt in Omega(1 + n328054_4 + n328054_4^2) 223.39/58.24 223.39/58.24 223.39/58.24 Generator Equations: 223.39/58.24 gen_#0:#neg:#pos:#s6_4(0) <=> #0 223.39/58.24 gen_#0:#neg:#pos:#s6_4(+(x, 1)) <=> #neg(gen_#0:#neg:#pos:#s6_4(x)) 223.39/58.24 gen_:::nil7_4(0) <=> nil 223.39/58.24 gen_:::nil7_4(+(x, 1)) <=> ::(#0, gen_:::nil7_4(x)) 223.39/58.24 223.39/58.24 223.39/58.24 The following defined symbols remain to be analysed: 223.39/58.24 quicksort 223.39/58.24 223.39/58.24 They will be analysed ascendingly in the following order: 223.39/58.24 quicksort = quicksort#1 223.50/58.29 EOF