368.14/291.61 WORST_CASE(Omega(n^1), O(n^2)) 368.14/291.62 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 368.14/291.62 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 368.14/291.62 368.14/291.62 368.14/291.62 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 368.14/291.62 368.14/291.62 (0) CpxRelTRS 368.14/291.62 (1) STerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 195 ms] 368.14/291.62 (2) CpxRelTRS 368.14/291.62 (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] 368.14/291.62 (4) CpxWeightedTrs 368.14/291.62 (5) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 368.14/291.62 (6) CpxTypedWeightedTrs 368.14/291.62 (7) CompletionProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (8) CpxTypedWeightedCompleteTrs 368.14/291.62 (9) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] 368.14/291.62 (10) CpxTypedWeightedCompleteTrs 368.14/291.62 (11) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (12) CpxRNTS 368.14/291.62 (13) InliningProof [UPPER BOUND(ID), 723 ms] 368.14/291.62 (14) CpxRNTS 368.14/291.62 (15) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] 368.14/291.62 (16) CpxRNTS 368.14/291.62 (17) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 1 ms] 368.14/291.62 (18) CpxRNTS 368.14/291.62 (19) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (20) CpxRNTS 368.14/291.62 (21) IntTrsBoundProof [UPPER BOUND(ID), 979 ms] 368.14/291.62 (22) CpxRNTS 368.14/291.62 (23) IntTrsBoundProof [UPPER BOUND(ID), 269 ms] 368.14/291.62 (24) CpxRNTS 368.14/291.62 (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (26) CpxRNTS 368.14/291.62 (27) IntTrsBoundProof [UPPER BOUND(ID), 604 ms] 368.14/291.62 (28) CpxRNTS 368.14/291.62 (29) IntTrsBoundProof [UPPER BOUND(ID), 150 ms] 368.14/291.62 (30) CpxRNTS 368.14/291.62 (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (32) CpxRNTS 368.14/291.62 (33) IntTrsBoundProof [UPPER BOUND(ID), 189 ms] 368.14/291.62 (34) CpxRNTS 368.14/291.62 (35) IntTrsBoundProof [UPPER BOUND(ID), 13 ms] 368.14/291.62 (36) CpxRNTS 368.14/291.62 (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (38) CpxRNTS 368.14/291.62 (39) IntTrsBoundProof [UPPER BOUND(ID), 699 ms] 368.14/291.62 (40) CpxRNTS 368.14/291.62 (41) IntTrsBoundProof [UPPER BOUND(ID), 93 ms] 368.14/291.62 (42) CpxRNTS 368.14/291.62 (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (44) CpxRNTS 368.14/291.62 (45) IntTrsBoundProof [UPPER BOUND(ID), 1674 ms] 368.14/291.62 (46) CpxRNTS 368.14/291.62 (47) IntTrsBoundProof [UPPER BOUND(ID), 517 ms] 368.14/291.62 (48) CpxRNTS 368.14/291.62 (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (50) CpxRNTS 368.14/291.62 (51) IntTrsBoundProof [UPPER BOUND(ID), 259 ms] 368.14/291.62 (52) CpxRNTS 368.14/291.62 (53) IntTrsBoundProof [UPPER BOUND(ID), 125 ms] 368.14/291.62 (54) CpxRNTS 368.14/291.62 (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (56) CpxRNTS 368.14/291.62 (57) IntTrsBoundProof [UPPER BOUND(ID), 268 ms] 368.14/291.62 (58) CpxRNTS 368.14/291.62 (59) IntTrsBoundProof [UPPER BOUND(ID), 124 ms] 368.14/291.62 (60) CpxRNTS 368.14/291.62 (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (62) CpxRNTS 368.14/291.62 (63) IntTrsBoundProof [UPPER BOUND(ID), 135 ms] 368.14/291.62 (64) CpxRNTS 368.14/291.62 (65) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (66) CpxRNTS 368.14/291.62 (67) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (68) CpxRNTS 368.14/291.62 (69) IntTrsBoundProof [UPPER BOUND(ID), 135 ms] 368.14/291.62 (70) CpxRNTS 368.14/291.62 (71) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (72) CpxRNTS 368.14/291.62 (73) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (74) CpxRNTS 368.14/291.62 (75) IntTrsBoundProof [UPPER BOUND(ID), 168 ms] 368.14/291.62 (76) CpxRNTS 368.14/291.62 (77) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] 368.14/291.62 (78) CpxRNTS 368.14/291.63 (79) FinalProof [FINISHED, 0 ms] 368.14/291.63 (80) BOUNDS(1, n^2) 368.14/291.63 (81) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] 368.14/291.63 (82) TRS for Loop Detection 368.14/291.63 (83) DecreasingLoopProof [LOWER BOUND(ID), 22 ms] 368.14/291.63 (84) BEST 368.14/291.63 (85) proven lower bound 368.14/291.63 (86) LowerBoundPropagationProof [FINISHED, 0 ms] 368.14/291.63 (87) BOUNDS(n^1, INF) 368.14/291.63 (88) TRS for Loop Detection 368.14/291.63 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (0) 368.14/291.63 Obligation: 368.14/291.63 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 368.14/291.63 368.14/291.63 368.14/291.63 The TRS R consists of the following rules: 368.14/291.63 368.14/291.63 #less(@x, @y) -> #cklt(#compare(@x, @y)) 368.14/291.63 append(@l1, @l2) -> append#1(@l1, @l2) 368.14/291.63 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 368.14/291.63 append#1(nil, @l2) -> @l2 368.14/291.63 flatten(@t) -> flatten#1(@t) 368.14/291.63 flatten#1(leaf) -> nil 368.14/291.63 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) 368.14/291.63 flattensort(@t) -> insertionsort(flatten(@t)) 368.14/291.63 insert(@x, @l) -> insert#1(@l, @x) 368.14/291.63 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) 368.14/291.63 insert#1(nil, @x) -> ::(@x, nil) 368.14/291.63 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) 368.14/291.63 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) 368.14/291.63 insertionsort(@l) -> insertionsort#1(@l) 368.14/291.63 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) 368.14/291.63 insertionsort#1(nil) -> nil 368.14/291.63 368.14/291.63 The (relative) TRS S consists of the following rules: 368.14/291.63 368.14/291.63 #cklt(#EQ) -> #false 368.14/291.63 #cklt(#GT) -> #false 368.14/291.63 #cklt(#LT) -> #true 368.14/291.63 #compare(#0, #0) -> #EQ 368.14/291.63 #compare(#0, #neg(@y)) -> #GT 368.14/291.63 #compare(#0, #pos(@y)) -> #LT 368.14/291.63 #compare(#0, #s(@y)) -> #LT 368.14/291.63 #compare(#neg(@x), #0) -> #LT 368.14/291.63 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 368.14/291.63 #compare(#neg(@x), #pos(@y)) -> #LT 368.14/291.63 #compare(#pos(@x), #0) -> #GT 368.14/291.63 #compare(#pos(@x), #neg(@y)) -> #GT 368.14/291.63 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 368.14/291.63 #compare(#s(@x), #0) -> #GT 368.14/291.63 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 368.14/291.63 368.14/291.63 Rewrite Strategy: INNERMOST 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (1) STerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) 368.14/291.63 proved termination of relative rules 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (2) 368.14/291.63 Obligation: 368.14/291.63 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 368.14/291.63 368.14/291.63 368.14/291.63 The TRS R consists of the following rules: 368.14/291.63 368.14/291.63 #less(@x, @y) -> #cklt(#compare(@x, @y)) 368.14/291.63 append(@l1, @l2) -> append#1(@l1, @l2) 368.14/291.63 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 368.14/291.63 append#1(nil, @l2) -> @l2 368.14/291.63 flatten(@t) -> flatten#1(@t) 368.14/291.63 flatten#1(leaf) -> nil 368.14/291.63 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) 368.14/291.63 flattensort(@t) -> insertionsort(flatten(@t)) 368.14/291.63 insert(@x, @l) -> insert#1(@l, @x) 368.14/291.63 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) 368.14/291.63 insert#1(nil, @x) -> ::(@x, nil) 368.14/291.63 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) 368.14/291.63 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) 368.14/291.63 insertionsort(@l) -> insertionsort#1(@l) 368.14/291.63 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) 368.14/291.63 insertionsort#1(nil) -> nil 368.14/291.63 368.14/291.63 The (relative) TRS S consists of the following rules: 368.14/291.63 368.14/291.63 #cklt(#EQ) -> #false 368.14/291.63 #cklt(#GT) -> #false 368.14/291.63 #cklt(#LT) -> #true 368.14/291.63 #compare(#0, #0) -> #EQ 368.14/291.63 #compare(#0, #neg(@y)) -> #GT 368.14/291.63 #compare(#0, #pos(@y)) -> #LT 368.14/291.63 #compare(#0, #s(@y)) -> #LT 368.14/291.63 #compare(#neg(@x), #0) -> #LT 368.14/291.63 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 368.14/291.63 #compare(#neg(@x), #pos(@y)) -> #LT 368.14/291.63 #compare(#pos(@x), #0) -> #GT 368.14/291.63 #compare(#pos(@x), #neg(@y)) -> #GT 368.14/291.63 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 368.14/291.63 #compare(#s(@x), #0) -> #GT 368.14/291.63 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 368.14/291.63 368.14/291.63 Rewrite Strategy: INNERMOST 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (3) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) 368.14/291.63 Transformed relative TRS to weighted TRS 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (4) 368.14/291.63 Obligation: 368.14/291.63 The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). 368.14/291.63 368.14/291.63 368.14/291.63 The TRS R consists of the following rules: 368.14/291.63 368.14/291.63 #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] 368.14/291.63 append(@l1, @l2) -> append#1(@l1, @l2) [1] 368.14/291.63 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) [1] 368.14/291.63 append#1(nil, @l2) -> @l2 [1] 368.14/291.63 flatten(@t) -> flatten#1(@t) [1] 368.14/291.63 flatten#1(leaf) -> nil [1] 368.14/291.63 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) [1] 368.14/291.63 flattensort(@t) -> insertionsort(flatten(@t)) [1] 368.14/291.63 insert(@x, @l) -> insert#1(@l, @x) [1] 368.14/291.63 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) [1] 368.14/291.63 insert#1(nil, @x) -> ::(@x, nil) [1] 368.14/291.63 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) [1] 368.14/291.63 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) [1] 368.14/291.63 insertionsort(@l) -> insertionsort#1(@l) [1] 368.14/291.63 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) [1] 368.14/291.63 insertionsort#1(nil) -> nil [1] 368.14/291.63 #cklt(#EQ) -> #false [0] 368.14/291.63 #cklt(#GT) -> #false [0] 368.14/291.63 #cklt(#LT) -> #true [0] 368.14/291.63 #compare(#0, #0) -> #EQ [0] 368.14/291.63 #compare(#0, #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#0, #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#0, #s(@y)) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #0) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 368.14/291.63 #compare(#neg(@x), #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#pos(@x), #0) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 368.14/291.63 #compare(#s(@x), #0) -> #GT [0] 368.14/291.63 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 368.14/291.63 368.14/291.63 Rewrite Strategy: INNERMOST 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (5) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 368.14/291.63 Infered types. 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (6) 368.14/291.63 Obligation: 368.14/291.63 Runtime Complexity Weighted TRS with Types. 368.14/291.63 The TRS R consists of the following rules: 368.14/291.63 368.14/291.63 #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] 368.14/291.63 append(@l1, @l2) -> append#1(@l1, @l2) [1] 368.14/291.63 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) [1] 368.14/291.63 append#1(nil, @l2) -> @l2 [1] 368.14/291.63 flatten(@t) -> flatten#1(@t) [1] 368.14/291.63 flatten#1(leaf) -> nil [1] 368.14/291.63 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) [1] 368.14/291.63 flattensort(@t) -> insertionsort(flatten(@t)) [1] 368.14/291.63 insert(@x, @l) -> insert#1(@l, @x) [1] 368.14/291.63 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) [1] 368.14/291.63 insert#1(nil, @x) -> ::(@x, nil) [1] 368.14/291.63 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) [1] 368.14/291.63 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) [1] 368.14/291.63 insertionsort(@l) -> insertionsort#1(@l) [1] 368.14/291.63 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) [1] 368.14/291.63 insertionsort#1(nil) -> nil [1] 368.14/291.63 #cklt(#EQ) -> #false [0] 368.14/291.63 #cklt(#GT) -> #false [0] 368.14/291.63 #cklt(#LT) -> #true [0] 368.14/291.63 #compare(#0, #0) -> #EQ [0] 368.14/291.63 #compare(#0, #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#0, #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#0, #s(@y)) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #0) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 368.14/291.63 #compare(#neg(@x), #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#pos(@x), #0) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 368.14/291.63 #compare(#s(@x), #0) -> #GT [0] 368.14/291.63 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 368.14/291.63 368.14/291.63 The TRS has the following type information: 368.14/291.63 #less :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true 368.14/291.63 #cklt :: #EQ:#GT:#LT -> #false:#true 368.14/291.63 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT 368.14/291.63 append :: :::nil -> :::nil -> :::nil 368.14/291.63 append#1 :: :::nil -> :::nil -> :::nil 368.14/291.63 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 nil :: :::nil 368.14/291.63 flatten :: leaf:node -> :::nil 368.14/291.63 flatten#1 :: leaf:node -> :::nil 368.14/291.63 leaf :: leaf:node 368.14/291.63 node :: :::nil -> leaf:node -> leaf:node -> leaf:node 368.14/291.63 flattensort :: leaf:node -> :::nil 368.14/291.63 insertionsort :: :::nil -> :::nil 368.14/291.63 insert :: #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 insert#1 :: :::nil -> #0:#neg:#pos:#s -> :::nil 368.14/291.63 insert#2 :: #false:#true -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 #false :: #false:#true 368.14/291.63 #true :: #false:#true 368.14/291.63 insertionsort#1 :: :::nil -> :::nil 368.14/291.63 #EQ :: #EQ:#GT:#LT 368.14/291.63 #GT :: #EQ:#GT:#LT 368.14/291.63 #LT :: #EQ:#GT:#LT 368.14/291.63 #0 :: #0:#neg:#pos:#s 368.14/291.63 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 368.14/291.63 Rewrite Strategy: INNERMOST 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (7) CompletionProof (UPPER BOUND(ID)) 368.14/291.63 The transformation into a RNTS is sound, since: 368.14/291.63 368.14/291.63 (a) The obligation is a constructor system where every type has a constant constructor, 368.14/291.63 368.14/291.63 (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: 368.14/291.63 368.14/291.63 flattensort_1 368.14/291.63 368.14/291.63 (c) The following functions are completely defined: 368.14/291.63 368.14/291.63 flatten_1 368.14/291.63 append_2 368.14/291.63 insertionsort_1 368.14/291.63 #less_2 368.14/291.63 flatten#1_1 368.14/291.63 append#1_2 368.14/291.63 insertionsort#1_1 368.14/291.63 insert_2 368.14/291.63 insert#1_2 368.14/291.63 insert#2_4 368.14/291.63 #cklt_1 368.14/291.63 #compare_2 368.14/291.63 368.14/291.63 Due to the following rules being added: 368.14/291.63 368.14/291.63 #cklt(v0) -> null_#cklt [0] 368.14/291.63 #compare(v0, v1) -> null_#compare [0] 368.14/291.63 insert#2(v0, v1, v2, v3) -> nil [0] 368.14/291.63 368.14/291.63 And the following fresh constants: null_#cklt, null_#compare 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (8) 368.14/291.63 Obligation: 368.14/291.63 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 368.14/291.63 368.14/291.63 Runtime Complexity Weighted TRS with Types. 368.14/291.63 The TRS R consists of the following rules: 368.14/291.63 368.14/291.63 #less(@x, @y) -> #cklt(#compare(@x, @y)) [1] 368.14/291.63 append(@l1, @l2) -> append#1(@l1, @l2) [1] 368.14/291.63 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) [1] 368.14/291.63 append#1(nil, @l2) -> @l2 [1] 368.14/291.63 flatten(@t) -> flatten#1(@t) [1] 368.14/291.63 flatten#1(leaf) -> nil [1] 368.14/291.63 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) [1] 368.14/291.63 flattensort(@t) -> insertionsort(flatten(@t)) [1] 368.14/291.63 insert(@x, @l) -> insert#1(@l, @x) [1] 368.14/291.63 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) [1] 368.14/291.63 insert#1(nil, @x) -> ::(@x, nil) [1] 368.14/291.63 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) [1] 368.14/291.63 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) [1] 368.14/291.63 insertionsort(@l) -> insertionsort#1(@l) [1] 368.14/291.63 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) [1] 368.14/291.63 insertionsort#1(nil) -> nil [1] 368.14/291.63 #cklt(#EQ) -> #false [0] 368.14/291.63 #cklt(#GT) -> #false [0] 368.14/291.63 #cklt(#LT) -> #true [0] 368.14/291.63 #compare(#0, #0) -> #EQ [0] 368.14/291.63 #compare(#0, #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#0, #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#0, #s(@y)) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #0) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 368.14/291.63 #compare(#neg(@x), #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#pos(@x), #0) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 368.14/291.63 #compare(#s(@x), #0) -> #GT [0] 368.14/291.63 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 368.14/291.63 #cklt(v0) -> null_#cklt [0] 368.14/291.63 #compare(v0, v1) -> null_#compare [0] 368.14/291.63 insert#2(v0, v1, v2, v3) -> nil [0] 368.14/291.63 368.14/291.63 The TRS has the following type information: 368.14/291.63 #less :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true:null_#cklt 368.14/291.63 #cklt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#cklt 368.14/291.63 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT:null_#compare 368.14/291.63 append :: :::nil -> :::nil -> :::nil 368.14/291.63 append#1 :: :::nil -> :::nil -> :::nil 368.14/291.63 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 nil :: :::nil 368.14/291.63 flatten :: leaf:node -> :::nil 368.14/291.63 flatten#1 :: leaf:node -> :::nil 368.14/291.63 leaf :: leaf:node 368.14/291.63 node :: :::nil -> leaf:node -> leaf:node -> leaf:node 368.14/291.63 flattensort :: leaf:node -> :::nil 368.14/291.63 insertionsort :: :::nil -> :::nil 368.14/291.63 insert :: #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 insert#1 :: :::nil -> #0:#neg:#pos:#s -> :::nil 368.14/291.63 insert#2 :: #false:#true:null_#cklt -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 #false :: #false:#true:null_#cklt 368.14/291.63 #true :: #false:#true:null_#cklt 368.14/291.63 insertionsort#1 :: :::nil -> :::nil 368.14/291.63 #EQ :: #EQ:#GT:#LT:null_#compare 368.14/291.63 #GT :: #EQ:#GT:#LT:null_#compare 368.14/291.63 #LT :: #EQ:#GT:#LT:null_#compare 368.14/291.63 #0 :: #0:#neg:#pos:#s 368.14/291.63 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 null_#cklt :: #false:#true:null_#cklt 368.14/291.63 null_#compare :: #EQ:#GT:#LT:null_#compare 368.14/291.63 368.14/291.63 Rewrite Strategy: INNERMOST 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (9) NarrowingProof (BOTH BOUNDS(ID, ID)) 368.14/291.63 Narrowed the inner basic terms of all right-hand sides by a single narrowing step. 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (10) 368.14/291.63 Obligation: 368.14/291.63 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 368.14/291.63 368.14/291.63 Runtime Complexity Weighted TRS with Types. 368.14/291.63 The TRS R consists of the following rules: 368.14/291.63 368.14/291.63 #less(#0, #0) -> #cklt(#EQ) [1] 368.14/291.63 #less(#0, #neg(@y')) -> #cklt(#GT) [1] 368.14/291.63 #less(#0, #pos(@y'')) -> #cklt(#LT) [1] 368.14/291.63 #less(#0, #s(@y1)) -> #cklt(#LT) [1] 368.14/291.63 #less(#neg(@x'), #0) -> #cklt(#LT) [1] 368.14/291.63 #less(#neg(@x''), #neg(@y2)) -> #cklt(#compare(@y2, @x'')) [1] 368.14/291.63 #less(#neg(@x1), #pos(@y3)) -> #cklt(#LT) [1] 368.14/291.63 #less(#pos(@x2), #0) -> #cklt(#GT) [1] 368.14/291.63 #less(#pos(@x3), #neg(@y4)) -> #cklt(#GT) [1] 368.14/291.63 #less(#pos(@x4), #pos(@y5)) -> #cklt(#compare(@x4, @y5)) [1] 368.14/291.63 #less(#s(@x5), #0) -> #cklt(#GT) [1] 368.14/291.63 #less(#s(@x6), #s(@y6)) -> #cklt(#compare(@x6, @y6)) [1] 368.14/291.63 #less(@x, @y) -> #cklt(null_#compare) [1] 368.14/291.63 append(@l1, @l2) -> append#1(@l1, @l2) [1] 368.14/291.63 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) [1] 368.14/291.63 append#1(nil, @l2) -> @l2 [1] 368.14/291.63 flatten(@t) -> flatten#1(@t) [1] 368.14/291.63 flatten#1(leaf) -> nil [1] 368.14/291.63 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten#1(@t1), flatten#1(@t2))) [3] 368.14/291.63 flattensort(@t) -> insertionsort(flatten#1(@t)) [2] 368.14/291.63 insert(@x, @l) -> insert#1(@l, @x) [1] 368.14/291.63 insert#1(::(@y, @ys), @x) -> insert#2(#cklt(#compare(@y, @x)), @x, @y, @ys) [2] 368.14/291.63 insert#1(nil, @x) -> ::(@x, nil) [1] 368.14/291.63 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) [1] 368.14/291.63 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) [1] 368.14/291.63 insertionsort(@l) -> insertionsort#1(@l) [1] 368.14/291.63 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort#1(@xs)) [2] 368.14/291.63 insertionsort#1(nil) -> nil [1] 368.14/291.63 #cklt(#EQ) -> #false [0] 368.14/291.63 #cklt(#GT) -> #false [0] 368.14/291.63 #cklt(#LT) -> #true [0] 368.14/291.63 #compare(#0, #0) -> #EQ [0] 368.14/291.63 #compare(#0, #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#0, #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#0, #s(@y)) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #0) -> #LT [0] 368.14/291.63 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) [0] 368.14/291.63 #compare(#neg(@x), #pos(@y)) -> #LT [0] 368.14/291.63 #compare(#pos(@x), #0) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #neg(@y)) -> #GT [0] 368.14/291.63 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) [0] 368.14/291.63 #compare(#s(@x), #0) -> #GT [0] 368.14/291.63 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) [0] 368.14/291.63 #cklt(v0) -> null_#cklt [0] 368.14/291.63 #compare(v0, v1) -> null_#compare [0] 368.14/291.63 insert#2(v0, v1, v2, v3) -> nil [0] 368.14/291.63 368.14/291.63 The TRS has the following type information: 368.14/291.63 #less :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #false:#true:null_#cklt 368.14/291.63 #cklt :: #EQ:#GT:#LT:null_#compare -> #false:#true:null_#cklt 368.14/291.63 #compare :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> #EQ:#GT:#LT:null_#compare 368.14/291.63 append :: :::nil -> :::nil -> :::nil 368.14/291.63 append#1 :: :::nil -> :::nil -> :::nil 368.14/291.63 :: :: #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 nil :: :::nil 368.14/291.63 flatten :: leaf:node -> :::nil 368.14/291.63 flatten#1 :: leaf:node -> :::nil 368.14/291.63 leaf :: leaf:node 368.14/291.63 node :: :::nil -> leaf:node -> leaf:node -> leaf:node 368.14/291.63 flattensort :: leaf:node -> :::nil 368.14/291.63 insertionsort :: :::nil -> :::nil 368.14/291.63 insert :: #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 insert#1 :: :::nil -> #0:#neg:#pos:#s -> :::nil 368.14/291.63 insert#2 :: #false:#true:null_#cklt -> #0:#neg:#pos:#s -> #0:#neg:#pos:#s -> :::nil -> :::nil 368.14/291.63 #false :: #false:#true:null_#cklt 368.14/291.63 #true :: #false:#true:null_#cklt 368.14/291.63 insertionsort#1 :: :::nil -> :::nil 368.14/291.63 #EQ :: #EQ:#GT:#LT:null_#compare 368.14/291.63 #GT :: #EQ:#GT:#LT:null_#compare 368.14/291.63 #LT :: #EQ:#GT:#LT:null_#compare 368.14/291.63 #0 :: #0:#neg:#pos:#s 368.14/291.63 #neg :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 #pos :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 #s :: #0:#neg:#pos:#s -> #0:#neg:#pos:#s 368.14/291.63 null_#cklt :: #false:#true:null_#cklt 368.14/291.63 null_#compare :: #EQ:#GT:#LT:null_#compare 368.14/291.63 368.14/291.63 Rewrite Strategy: INNERMOST 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (11) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) 368.14/291.63 Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. 368.14/291.63 The constant constructors are abstracted as follows: 368.14/291.63 368.14/291.63 nil => 0 368.14/291.63 leaf => 0 368.14/291.63 #false => 1 368.14/291.63 #true => 2 368.14/291.63 #EQ => 1 368.14/291.63 #GT => 2 368.14/291.63 #LT => 3 368.14/291.63 #0 => 0 368.14/291.63 null_#cklt => 0 368.14/291.63 null_#compare => 0 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (12) 368.14/291.63 Obligation: 368.14/291.63 Complexity RNTS consisting of the following rules: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(3) :|: z' = 1 + @y'', @y'' >= 0, z = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(3) :|: z' = 1 + @y1, @y1 >= 0, z = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(3) :|: z = 1 + @x', @x' >= 0, z' = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(3) :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(2) :|: @y' >= 0, z' = 1 + @y', z = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(2) :|: @x2 >= 0, z = 1 + @x2, z' = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(2) :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(2) :|: z = 1 + @x5, @x5 >= 0, z' = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(1) :|: z = 0, z' = 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(0) :|: z = @x, @x >= 0, z' = @y, @y >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0 368.14/291.63 append(z, z') -{ 1 }-> append#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1 368.14/291.63 append#1(z, z') -{ 1 }-> @l2 :|: z' = @l2, @l2 >= 0, z = 0 368.14/291.63 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, @l2) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0 368.14/291.63 flatten(z) -{ 1 }-> flatten#1(@t) :|: z = @t, @t >= 0 368.14/291.63 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.63 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 flattensort(z) -{ 2 }-> insertionsort(flatten#1(@t)) :|: z = @t, @t >= 0 368.14/291.63 insert(z, z') -{ 1 }-> insert#1(@l, @x) :|: z = @x, @l >= 0, @x >= 0, z' = @l 368.14/291.63 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, @x)), @x, @y, @ys) :|: z = 1 + @y + @ys, @x >= 0, @y >= 0, z' = @x, @ys >= 0 368.14/291.63 insert#1(z, z') -{ 1 }-> 1 + @x + 0 :|: @x >= 0, z = 0, z' = @x 368.14/291.63 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + @x + (1 + @y + @ys) :|: @x >= 0, z = 1, z1 = @ys, @y >= 0, z' = @x, @ys >= 0, z'' = @y 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + @y + insert(@x, @ys) :|: z = 2, @x >= 0, z1 = @ys, @y >= 0, z' = @x, @ys >= 0, z'' = @y 368.14/291.63 insertionsort(z) -{ 1 }-> insertionsort#1(@l) :|: z = @l, @l >= 0 368.14/291.63 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.63 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (13) InliningProof (UPPER BOUND(ID)) 368.14/291.63 Inlined the following terminating rules on right-hand sides where appropriate: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (14) 368.14/291.63 Obligation: 368.14/291.63 Complexity RNTS consisting of the following rules: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' = 1 + @y'', @y'' >= 0, z = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' = 1 + @y1, @y1 >= 0, z = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z = 1 + @x', @x' >= 0, z' = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: @y' >= 0, z' = 1 + @y', z = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: @x2 >= 0, z = 1 + @x2, z' = 0, 2 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: @x2 >= 0, z = 1 + @x2, z' = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z = 1 + @x5, @x5 >= 0, z' = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: @y' >= 0, z' = 1 + @y', z = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' = 1 + @y'', @y'' >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' = 1 + @y1, @y1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 1 + @x', @x' >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: @x2 >= 0, z = 1 + @x2, z' = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 1 + @x5, @x5 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = @x, @x >= 0, z' = @y, @y >= 0, v0 >= 0, 0 = v0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0 368.14/291.63 append(z, z') -{ 1 }-> append#1(@l1, @l2) :|: @l1 >= 0, z' = @l2, @l2 >= 0, z = @l1 368.14/291.63 append#1(z, z') -{ 1 }-> @l2 :|: z' = @l2, @l2 >= 0, z = 0 368.14/291.63 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, @l2) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, @l2 >= 0, @xs >= 0 368.14/291.63 flatten(z) -{ 1 }-> flatten#1(@t) :|: z = @t, @t >= 0 368.14/291.63 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.63 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 flattensort(z) -{ 2 }-> insertionsort(flatten#1(@t)) :|: z = @t, @t >= 0 368.14/291.63 insert(z, z') -{ 1 }-> insert#1(@l, @x) :|: z = @x, @l >= 0, @x >= 0, z' = @l 368.14/291.63 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, @x)), @x, @y, @ys) :|: z = 1 + @y + @ys, @x >= 0, @y >= 0, z' = @x, @ys >= 0 368.14/291.63 insert#1(z, z') -{ 1 }-> 1 + @x + 0 :|: @x >= 0, z = 0, z' = @x 368.14/291.63 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + @x + (1 + @y + @ys) :|: @x >= 0, z = 1, z1 = @ys, @y >= 0, z' = @x, @ys >= 0, z'' = @y 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + @y + insert(@x, @ys) :|: z = 2, @x >= 0, z1 = @ys, @y >= 0, z' = @x, @ys >= 0, z'' = @y 368.14/291.63 insertionsort(z) -{ 1 }-> insertionsort#1(@l) :|: z = @l, @l >= 0 368.14/291.63 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.63 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (15) SimplificationProof (BOTH BOUNDS(ID, ID)) 368.14/291.63 Simplified the RNTS by moving equalities from the constraints into the right-hand sides. 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (16) 368.14/291.63 Obligation: 368.14/291.63 Complexity RNTS consisting of the following rules: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.63 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.63 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.63 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.63 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.63 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.63 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.63 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, z')), z', @y, @ys) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.63 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.63 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.63 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) 368.14/291.63 Found the following analysis order by SCC decomposition: 368.14/291.63 368.14/291.63 { #compare } 368.14/291.63 { append#1, append } 368.14/291.63 { #cklt } 368.14/291.63 { #less } 368.14/291.63 { insert#2, insert, insert#1 } 368.14/291.63 { flatten#1 } 368.14/291.63 { insertionsort#1 } 368.14/291.63 { flatten } 368.14/291.63 { insertionsort } 368.14/291.63 { flattensort } 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (18) 368.14/291.63 Obligation: 368.14/291.63 Complexity RNTS consisting of the following rules: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.63 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.63 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.63 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.63 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.63 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.63 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.63 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, z')), z', @y, @ys) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.63 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.63 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.63 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 368.14/291.63 Function symbols to be analyzed: {#compare}, {append#1,append}, {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (19) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.63 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (20) 368.14/291.63 Obligation: 368.14/291.63 Complexity RNTS consisting of the following rules: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.63 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.63 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.63 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.63 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.63 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.63 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.63 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, z')), z', @y, @ys) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.63 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.63 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.63 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 368.14/291.63 Function symbols to be analyzed: {#compare}, {append#1,append}, {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (21) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.63 368.14/291.63 Computed SIZE bound using CoFloCo for: #compare 368.14/291.63 after applying outer abstraction to obtain an ITS, 368.14/291.63 resulting in: O(1) with polynomial bound: 3 368.14/291.63 368.14/291.63 ---------------------------------------- 368.14/291.63 368.14/291.63 (22) 368.14/291.63 Obligation: 368.14/291.63 Complexity RNTS consisting of the following rules: 368.14/291.63 368.14/291.63 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.63 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.63 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.63 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.63 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.63 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.63 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.63 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.63 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.63 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.63 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.63 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.63 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.63 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, z')), z', @y, @ys) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.63 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.63 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#compare}, {append#1,append}, {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: ?, size: O(1) [3] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (23) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: #compare 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(1) with polynomial bound: 0 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (24) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(#compare(@y, z')), z', @y, @ys) :|: z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {append#1,append}, {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (25) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (26) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s'') :|: s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s1) :|: s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(s2), z', @y, @ys) :|: s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {append#1,append}, {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (27) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: append#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: z + z' 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: append 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: z + z' 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (28) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s'') :|: s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s1) :|: s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(s2), z', @y, @ys) :|: s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {append#1,append}, {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: ?, size: O(n^1) [z + z'] 368.14/291.64 append: runtime: ?, size: O(n^1) [z + z'] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (29) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: append#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 3 + 2*z 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: append 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 4 + 2*z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (30) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s'') :|: s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s1) :|: s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 1 }-> append#1(z, z') :|: z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 1 }-> 1 + @x + append(@xs, z') :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(s2), z', @y, @ys) :|: s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (31) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (32) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s'') :|: s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s1) :|: s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(s2), z', @y, @ys) :|: s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (33) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: #cklt 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(1) with polynomial bound: 2 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (34) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s'') :|: s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s1) :|: s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(s2), z', @y, @ys) :|: s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#cklt}, {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: ?, size: O(1) [2] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (35) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: #cklt 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(1) with polynomial bound: 0 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (36) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s'') :|: s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> #cklt(s1) :|: s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(#cklt(s2), z', @y, @ys) :|: s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (37) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (38) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(s7, z', @y, @ys) :|: s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (39) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: #less 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(1) with polynomial bound: 2 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (40) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(s7, z', @y, @ys) :|: s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {#less}, {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: ?, size: O(1) [2] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (41) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: #less 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(1) with polynomial bound: 1 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (42) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(s7, z', @y, @ys) :|: s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (43) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (44) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(s7, z', @y, @ys) :|: s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (45) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: insert#2 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 2 + z' + z'' + z1 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: insert 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 1 + z + z' 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: insert#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 1 + z + z' 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (46) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(s7, z', @y, @ys) :|: s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insert#2,insert,insert#1}, {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: ?, size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: ?, size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: ?, size: O(n^1) [1 + z + z'] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (47) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: insert#2 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 3 + 4*z1 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: insert 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 2 + 4*z' 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: insert#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 1 + 4*z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (48) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 1 }-> insert#1(z', z) :|: z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 2 }-> insert#2(s7, z', @y, @ys) :|: s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z'' + insert(z', z1) :|: z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (49) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (50) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (51) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: flatten#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 1 + z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (52) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flatten#1}, {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: ?, size: O(n^1) [1 + z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (53) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: flatten#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^2) with polynomial bound: 1 + 12*z + 2*z^2 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (54) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 1 }-> flatten#1(z) :|: z >= 0 368.14/291.64 flatten#1(z) -{ 3 }-> append(@l, append(flatten#1(@t1), flatten#1(@t2))) :|: @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 2 }-> insertionsort(flatten#1(z)) :|: z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (55) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (56) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (57) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: insertionsort#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (58) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insertionsort#1}, {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: ?, size: O(n^1) [z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (59) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using CoFloCo for: insertionsort#1 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^2) with polynomial bound: 1 + 4*z^2 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (60) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 1 }-> insertionsort#1(z) :|: z >= 0 368.14/291.64 insertionsort#1(z) -{ 2 }-> insert(@x, insertionsort#1(@xs)) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (61) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (62) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (63) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: flatten 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 1 + z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (64) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flatten}, {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 flatten: runtime: ?, size: O(n^1) [1 + z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (65) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using KoAT for: flatten 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^2) with polynomial bound: 2 + 12*z + 2*z^2 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (66) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (67) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (68) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (69) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: insertionsort 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (70) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {insertionsort}, {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort: runtime: ?, size: O(n^1) [z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (71) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed RUNTIME bound using KoAT for: insertionsort 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^2) with polynomial bound: 2 + 4*z^2 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (72) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 3 + 12*z + 2*z^2 }-> insertionsort(s16) :|: s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort: runtime: O(n^2) [2 + 4*z^2], size: O(n^1) [z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (73) ResultPropagationProof (UPPER BOUND(ID)) 368.14/291.64 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (74) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.64 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.64 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.64 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.64 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.64 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.64 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.64 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 flattensort(z) -{ 5 + 4*s16^2 + 12*z + 2*z^2 }-> s20 :|: s20 >= 0, s20 <= s16, s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.64 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.64 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.64 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.64 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.64 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.64 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.64 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.64 368.14/291.64 Function symbols to be analyzed: {flattensort} 368.14/291.64 Previous analysis results are: 368.14/291.64 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.64 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.64 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.64 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.64 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.64 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.64 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.64 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.64 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.64 insertionsort: runtime: O(n^2) [2 + 4*z^2], size: O(n^1) [z] 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (75) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.64 368.14/291.64 Computed SIZE bound using CoFloCo for: flattensort 368.14/291.64 after applying outer abstraction to obtain an ITS, 368.14/291.64 resulting in: O(n^1) with polynomial bound: 1 + z 368.14/291.64 368.14/291.64 ---------------------------------------- 368.14/291.64 368.14/291.64 (76) 368.14/291.64 Obligation: 368.14/291.64 Complexity RNTS consisting of the following rules: 368.14/291.64 368.14/291.64 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.64 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.64 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.64 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.64 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.64 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.65 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.65 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.65 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.65 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.65 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.65 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.65 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.65 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.65 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.65 flattensort(z) -{ 5 + 4*s16^2 + 12*z + 2*z^2 }-> s20 :|: s20 >= 0, s20 <= s16, s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.65 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.65 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.65 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.65 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.65 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.65 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.65 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.65 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.65 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.65 368.14/291.65 Function symbols to be analyzed: {flattensort} 368.14/291.65 Previous analysis results are: 368.14/291.65 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.65 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.65 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.65 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.65 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.65 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.65 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.65 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.65 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.65 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.65 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.65 insertionsort: runtime: O(n^2) [2 + 4*z^2], size: O(n^1) [z] 368.14/291.65 flattensort: runtime: ?, size: O(n^1) [1 + z] 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (77) IntTrsBoundProof (UPPER BOUND(ID)) 368.14/291.65 368.14/291.65 Computed RUNTIME bound using KoAT for: flattensort 368.14/291.65 after applying outer abstraction to obtain an ITS, 368.14/291.65 resulting in: O(n^2) with polynomial bound: 9 + 20*z + 6*z^2 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (78) 368.14/291.65 Obligation: 368.14/291.65 Complexity RNTS consisting of the following rules: 368.14/291.65 368.14/291.65 #cklt(z) -{ 0 }-> 2 :|: z = 3 368.14/291.65 #cklt(z) -{ 0 }-> 1 :|: z = 1 368.14/291.65 #cklt(z) -{ 0 }-> 1 :|: z = 2 368.14/291.65 #cklt(z) -{ 0 }-> 0 :|: z >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> s :|: s >= 0, s <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 3, z - 1 >= 0, z' - 1 >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> 3 :|: z = 0, z' - 1 >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' = 0 368.14/291.65 #compare(z, z') -{ 0 }-> 3 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> 2 :|: z = 0, z' - 1 >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' = 0 368.14/291.65 #compare(z, z') -{ 0 }-> 2 :|: z - 1 >= 0, z' - 1 >= 0 368.14/291.65 #compare(z, z') -{ 0 }-> 1 :|: z = 0, z' = 0 368.14/291.65 #compare(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 368.14/291.65 #less(z, z') -{ 1 }-> s5 :|: s5 >= 0, s5 <= 2, s'' >= 0, s'' <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.65 #less(z, z') -{ 1 }-> s6 :|: s6 >= 0, s6 <= 2, s1 >= 0, s1 <= 3, z' - 1 >= 0, z - 1 >= 0 368.14/291.65 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z = 0, 3 = 3 368.14/291.65 #less(z, z') -{ 1 }-> 2 :|: z - 1 >= 0, z' = 0, 3 = 3 368.14/291.65 #less(z, z') -{ 1 }-> 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z = 0, z' = 0, 1 = 1 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z = 0, 2 = 2 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 1 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' = 0, 2 = 2 368.14/291.65 #less(z, z') -{ 1 }-> 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0 368.14/291.65 #less(z, z') -{ 1 }-> 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0 368.14/291.65 append(z, z') -{ 4 + 2*z }-> s3 :|: s3 >= 0, s3 <= z + z', z >= 0, z' >= 0 368.14/291.65 append#1(z, z') -{ 1 }-> z' :|: z' >= 0, z = 0 368.14/291.65 append#1(z, z') -{ 5 + 2*@xs }-> 1 + @x + s4 :|: s4 >= 0, s4 <= @xs + z', @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0 368.14/291.65 flatten(z) -{ 2 + 12*z + 2*z^2 }-> s11 :|: s11 >= 0, s11 <= z + 1, z >= 0 368.14/291.65 flatten#1(z) -{ 13 + 2*@l + 12*@t1 + 2*@t1^2 + 12*@t2 + 2*@t2^2 + 2*s12 }-> s15 :|: s12 >= 0, s12 <= @t1 + 1, s13 >= 0, s13 <= @t2 + 1, s14 >= 0, s14 <= s12 + s13, s15 >= 0, s15 <= @l + s14, @l >= 0, @t1 >= 0, @t2 >= 0, z = 1 + @l + @t1 + @t2 368.14/291.65 flatten#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.65 flattensort(z) -{ 5 + 4*s16^2 + 12*z + 2*z^2 }-> s20 :|: s20 >= 0, s20 <= s16, s16 >= 0, s16 <= z + 1, z >= 0 368.14/291.65 insert(z, z') -{ 2 + 4*z' }-> s8 :|: s8 >= 0, s8 <= z' + z + 1, z' >= 0, z >= 0 368.14/291.65 insert#1(z, z') -{ 5 + 4*@ys }-> s10 :|: s10 >= 0, s10 <= z' + @y + @ys + 2, s7 >= 0, s7 <= 2, s2 >= 0, s2 <= 3, z = 1 + @y + @ys, z' >= 0, @y >= 0, @ys >= 0 368.14/291.65 insert#1(z, z') -{ 1 }-> 1 + z' + 0 :|: z' >= 0, z = 0 368.14/291.65 insert#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.65 insert#2(z, z', z'', z1) -{ 1 }-> 1 + z' + (1 + z'' + z1) :|: z' >= 0, z = 1, z'' >= 0, z1 >= 0 368.14/291.65 insert#2(z, z', z'', z1) -{ 3 + 4*z1 }-> 1 + z'' + s9 :|: s9 >= 0, s9 <= z' + z1 + 1, z = 2, z' >= 0, z'' >= 0, z1 >= 0 368.14/291.65 insertionsort(z) -{ 2 + 4*z^2 }-> s17 :|: s17 >= 0, s17 <= z, z >= 0 368.14/291.65 insertionsort#1(z) -{ 5 + 4*@xs^2 + 4*s18 }-> s19 :|: s18 >= 0, s18 <= @xs, s19 >= 0, s19 <= @x + s18 + 1, @x >= 0, z = 1 + @x + @xs, @xs >= 0 368.14/291.65 insertionsort#1(z) -{ 1 }-> 0 :|: z = 0 368.14/291.65 368.14/291.65 Function symbols to be analyzed: 368.14/291.65 Previous analysis results are: 368.14/291.65 #compare: runtime: O(1) [0], size: O(1) [3] 368.14/291.65 append#1: runtime: O(n^1) [3 + 2*z], size: O(n^1) [z + z'] 368.14/291.65 append: runtime: O(n^1) [4 + 2*z], size: O(n^1) [z + z'] 368.14/291.65 #cklt: runtime: O(1) [0], size: O(1) [2] 368.14/291.65 #less: runtime: O(1) [1], size: O(1) [2] 368.14/291.65 insert#2: runtime: O(n^1) [3 + 4*z1], size: O(n^1) [2 + z' + z'' + z1] 368.14/291.65 insert: runtime: O(n^1) [2 + 4*z'], size: O(n^1) [1 + z + z'] 368.14/291.65 insert#1: runtime: O(n^1) [1 + 4*z], size: O(n^1) [1 + z + z'] 368.14/291.65 flatten#1: runtime: O(n^2) [1 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.65 insertionsort#1: runtime: O(n^2) [1 + 4*z^2], size: O(n^1) [z] 368.14/291.65 flatten: runtime: O(n^2) [2 + 12*z + 2*z^2], size: O(n^1) [1 + z] 368.14/291.65 insertionsort: runtime: O(n^2) [2 + 4*z^2], size: O(n^1) [z] 368.14/291.65 flattensort: runtime: O(n^2) [9 + 20*z + 6*z^2], size: O(n^1) [1 + z] 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (79) FinalProof (FINISHED) 368.14/291.65 Computed overall runtime complexity 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (80) 368.14/291.65 BOUNDS(1, n^2) 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (81) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) 368.14/291.65 Transformed a relative TRS into a decreasing-loop problem. 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (82) 368.14/291.65 Obligation: 368.14/291.65 Analyzing the following TRS for decreasing loops: 368.14/291.65 368.14/291.65 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 368.14/291.65 368.14/291.65 368.14/291.65 The TRS R consists of the following rules: 368.14/291.65 368.14/291.65 #less(@x, @y) -> #cklt(#compare(@x, @y)) 368.14/291.65 append(@l1, @l2) -> append#1(@l1, @l2) 368.14/291.65 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 368.14/291.65 append#1(nil, @l2) -> @l2 368.14/291.65 flatten(@t) -> flatten#1(@t) 368.14/291.65 flatten#1(leaf) -> nil 368.14/291.65 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) 368.14/291.65 flattensort(@t) -> insertionsort(flatten(@t)) 368.14/291.65 insert(@x, @l) -> insert#1(@l, @x) 368.14/291.65 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) 368.14/291.65 insert#1(nil, @x) -> ::(@x, nil) 368.14/291.65 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) 368.14/291.65 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) 368.14/291.65 insertionsort(@l) -> insertionsort#1(@l) 368.14/291.65 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) 368.14/291.65 insertionsort#1(nil) -> nil 368.14/291.65 368.14/291.65 The (relative) TRS S consists of the following rules: 368.14/291.65 368.14/291.65 #cklt(#EQ) -> #false 368.14/291.65 #cklt(#GT) -> #false 368.14/291.65 #cklt(#LT) -> #true 368.14/291.65 #compare(#0, #0) -> #EQ 368.14/291.65 #compare(#0, #neg(@y)) -> #GT 368.14/291.65 #compare(#0, #pos(@y)) -> #LT 368.14/291.65 #compare(#0, #s(@y)) -> #LT 368.14/291.65 #compare(#neg(@x), #0) -> #LT 368.14/291.65 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 368.14/291.65 #compare(#neg(@x), #pos(@y)) -> #LT 368.14/291.65 #compare(#pos(@x), #0) -> #GT 368.14/291.65 #compare(#pos(@x), #neg(@y)) -> #GT 368.14/291.65 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 368.14/291.65 #compare(#s(@x), #0) -> #GT 368.14/291.65 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 368.14/291.65 368.14/291.65 Rewrite Strategy: INNERMOST 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (83) DecreasingLoopProof (LOWER BOUND(ID)) 368.14/291.65 The following loop(s) give(s) rise to the lower bound Omega(n^1): 368.14/291.65 368.14/291.65 The rewrite sequence 368.14/291.65 368.14/291.65 insertionsort(::(@x1_0, @xs2_0)) ->^+ insert(@x1_0, insertionsort(@xs2_0)) 368.14/291.65 368.14/291.65 gives rise to a decreasing loop by considering the right hand sides subterm at position [1]. 368.14/291.65 368.14/291.65 The pumping substitution is [@xs2_0 / ::(@x1_0, @xs2_0)]. 368.14/291.65 368.14/291.65 The result substitution is [ ]. 368.14/291.65 368.14/291.65 368.14/291.65 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (84) 368.14/291.65 Complex Obligation (BEST) 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (85) 368.14/291.65 Obligation: 368.14/291.65 Proved the lower bound n^1 for the following obligation: 368.14/291.65 368.14/291.65 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 368.14/291.65 368.14/291.65 368.14/291.65 The TRS R consists of the following rules: 368.14/291.65 368.14/291.65 #less(@x, @y) -> #cklt(#compare(@x, @y)) 368.14/291.65 append(@l1, @l2) -> append#1(@l1, @l2) 368.14/291.65 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 368.14/291.65 append#1(nil, @l2) -> @l2 368.14/291.65 flatten(@t) -> flatten#1(@t) 368.14/291.65 flatten#1(leaf) -> nil 368.14/291.65 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) 368.14/291.65 flattensort(@t) -> insertionsort(flatten(@t)) 368.14/291.65 insert(@x, @l) -> insert#1(@l, @x) 368.14/291.65 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) 368.14/291.65 insert#1(nil, @x) -> ::(@x, nil) 368.14/291.65 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) 368.14/291.65 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) 368.14/291.65 insertionsort(@l) -> insertionsort#1(@l) 368.14/291.65 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) 368.14/291.65 insertionsort#1(nil) -> nil 368.14/291.65 368.14/291.65 The (relative) TRS S consists of the following rules: 368.14/291.65 368.14/291.65 #cklt(#EQ) -> #false 368.14/291.65 #cklt(#GT) -> #false 368.14/291.65 #cklt(#LT) -> #true 368.14/291.65 #compare(#0, #0) -> #EQ 368.14/291.65 #compare(#0, #neg(@y)) -> #GT 368.14/291.65 #compare(#0, #pos(@y)) -> #LT 368.14/291.65 #compare(#0, #s(@y)) -> #LT 368.14/291.65 #compare(#neg(@x), #0) -> #LT 368.14/291.65 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 368.14/291.65 #compare(#neg(@x), #pos(@y)) -> #LT 368.14/291.65 #compare(#pos(@x), #0) -> #GT 368.14/291.65 #compare(#pos(@x), #neg(@y)) -> #GT 368.14/291.65 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 368.14/291.65 #compare(#s(@x), #0) -> #GT 368.14/291.65 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 368.14/291.65 368.14/291.65 Rewrite Strategy: INNERMOST 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (86) LowerBoundPropagationProof (FINISHED) 368.14/291.65 Propagated lower bound. 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (87) 368.14/291.65 BOUNDS(n^1, INF) 368.14/291.65 368.14/291.65 ---------------------------------------- 368.14/291.65 368.14/291.65 (88) 368.14/291.65 Obligation: 368.14/291.65 Analyzing the following TRS for decreasing loops: 368.14/291.65 368.14/291.65 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 368.14/291.65 368.14/291.65 368.14/291.65 The TRS R consists of the following rules: 368.14/291.65 368.14/291.65 #less(@x, @y) -> #cklt(#compare(@x, @y)) 368.14/291.65 append(@l1, @l2) -> append#1(@l1, @l2) 368.14/291.65 append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) 368.14/291.65 append#1(nil, @l2) -> @l2 368.14/291.65 flatten(@t) -> flatten#1(@t) 368.14/291.65 flatten#1(leaf) -> nil 368.14/291.65 flatten#1(node(@l, @t1, @t2)) -> append(@l, append(flatten(@t1), flatten(@t2))) 368.14/291.65 flattensort(@t) -> insertionsort(flatten(@t)) 368.14/291.65 insert(@x, @l) -> insert#1(@l, @x) 368.14/291.65 insert#1(::(@y, @ys), @x) -> insert#2(#less(@y, @x), @x, @y, @ys) 368.14/291.65 insert#1(nil, @x) -> ::(@x, nil) 368.14/291.65 insert#2(#false, @x, @y, @ys) -> ::(@x, ::(@y, @ys)) 368.14/291.65 insert#2(#true, @x, @y, @ys) -> ::(@y, insert(@x, @ys)) 368.14/291.65 insertionsort(@l) -> insertionsort#1(@l) 368.14/291.65 insertionsort#1(::(@x, @xs)) -> insert(@x, insertionsort(@xs)) 368.14/291.65 insertionsort#1(nil) -> nil 368.14/291.65 368.14/291.65 The (relative) TRS S consists of the following rules: 368.14/291.65 368.14/291.65 #cklt(#EQ) -> #false 368.14/291.65 #cklt(#GT) -> #false 368.14/291.65 #cklt(#LT) -> #true 368.14/291.65 #compare(#0, #0) -> #EQ 368.14/291.65 #compare(#0, #neg(@y)) -> #GT 368.14/291.65 #compare(#0, #pos(@y)) -> #LT 368.14/291.65 #compare(#0, #s(@y)) -> #LT 368.14/291.65 #compare(#neg(@x), #0) -> #LT 368.14/291.65 #compare(#neg(@x), #neg(@y)) -> #compare(@y, @x) 368.14/291.65 #compare(#neg(@x), #pos(@y)) -> #LT 368.14/291.65 #compare(#pos(@x), #0) -> #GT 368.14/291.65 #compare(#pos(@x), #neg(@y)) -> #GT 368.14/291.65 #compare(#pos(@x), #pos(@y)) -> #compare(@x, @y) 368.14/291.65 #compare(#s(@x), #0) -> #GT 368.14/291.65 #compare(#s(@x), #s(@y)) -> #compare(@x, @y) 368.14/291.65 368.14/291.65 Rewrite Strategy: INNERMOST 368.29/291.69 EOF