WORST_CASE(Omega(n^3),O(n^3)) proof of /export/starexec/sandbox/benchmark/theBenchmark.trs # AProVE Commit ID: c69e44bd14796315568835c1ffa2502984884775 mhark 20210624 unpublished The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, n^3). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 1742 ms] (2) CpxRelTRS (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxWeightedTrs (5) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxTypedWeightedTrs (7) CompletionProof [UPPER BOUND(ID), 0 ms] (8) CpxTypedWeightedCompleteTrs (9) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxTypedWeightedCompleteTrs (11) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 13 ms] (12) CpxRNTS (13) InliningProof [UPPER BOUND(ID), 773 ms] (14) CpxRNTS (15) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CpxRNTS (17) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxRNTS (19) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (20) CpxRNTS (21) IntTrsBoundProof [UPPER BOUND(ID), 89 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 47 ms] (24) CpxRNTS (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (26) CpxRNTS (27) IntTrsBoundProof [UPPER BOUND(ID), 170 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 3 ms] (30) CpxRNTS (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (32) CpxRNTS (33) IntTrsBoundProof [UPPER BOUND(ID), 312 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 115 ms] (36) CpxRNTS (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 178 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 32 ms] (42) CpxRNTS (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 148 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (48) CpxRNTS (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 352 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 54 ms] (54) CpxRNTS (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 128 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 23 ms] (60) CpxRNTS (61) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (62) CpxRNTS (63) IntTrsBoundProof [UPPER BOUND(ID), 51 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 25 ms] (66) CpxRNTS (67) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (68) CpxRNTS (69) IntTrsBoundProof [UPPER BOUND(ID), 375 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 36 ms] (72) CpxRNTS (73) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (74) CpxRNTS (75) IntTrsBoundProof [UPPER BOUND(ID), 1758 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 468 ms] (78) CpxRNTS (79) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (80) CpxRNTS (81) IntTrsBoundProof [UPPER BOUND(ID), 373 ms] (82) CpxRNTS (83) IntTrsBoundProof [UPPER BOUND(ID), 87 ms] (84) CpxRNTS (85) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (86) CpxRNTS (87) IntTrsBoundProof [UPPER BOUND(ID), 298 ms] (88) CpxRNTS (89) IntTrsBoundProof [UPPER BOUND(ID), 22 ms] (90) CpxRNTS (91) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (92) CpxRNTS (93) IntTrsBoundProof [UPPER BOUND(ID), 12.8 s] (94) CpxRNTS (95) IntTrsBoundProof [UPPER BOUND(ID), 1398 ms] (96) CpxRNTS (97) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (98) CpxRNTS (99) IntTrsBoundProof [UPPER BOUND(ID), 398 ms] (100) CpxRNTS (101) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (102) CpxRNTS (103) FinalProof [FINISHED, 0 ms] (104) BOUNDS(1, n^3) (105) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (106) CpxRelTRS (107) SlicingProof [LOWER BOUND(ID), 0 ms] (108) CpxRelTRS (109) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (110) typed CpxTrs (111) OrderProof [LOWER BOUND(ID), 0 ms] (112) typed CpxTrs (113) RewriteLemmaProof [LOWER BOUND(ID), 273 ms] (114) BEST (115) proven lower bound (116) LowerBoundPropagationProof [FINISHED, 0 ms] (117) BOUNDS(n^1, INF) (118) typed CpxTrs (119) RewriteLemmaProof [LOWER BOUND(ID), 76 ms] (120) typed CpxTrs (121) RewriteLemmaProof [LOWER BOUND(ID), 43 ms] (122) typed CpxTrs (123) RewriteLemmaProof [LOWER BOUND(ID), 662 ms] (124) BEST (125) proven lower bound (126) LowerBoundPropagationProof [FINISHED, 0 ms] (127) BOUNDS(n^2, INF) (128) typed CpxTrs (129) RewriteLemmaProof [LOWER BOUND(ID), 550 ms] (130) BEST (131) proven lower bound (132) LowerBoundPropagationProof [FINISHED, 0 ms] (133) BOUNDS(n^3, INF) (134) typed CpxTrs (135) RewriteLemmaProof [LOWER BOUND(ID), 1232 ms] (136) BOUNDS(1, INF) ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, n^3). The TRS R consists of the following rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z1, z2) -> c12 IF(false, z0, z1, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) The (relative) TRS S consists of the following rules: null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Rewrite Strategy: INNERMOST ---------------------------------------- (1) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (2) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, n^3). The TRS R consists of the following rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z1, z2) -> c12 IF(false, z0, z1, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) The (relative) TRS S consists of the following rules: null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Rewrite Strategy: INNERMOST ---------------------------------------- (3) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (4) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^3). The TRS R consists of the following rules: NULL(nil) -> c [1] NULL(add(z0, z1)) -> c1 [1] TAIL(add(z0, z1)) -> c2 [1] TAIL(nil) -> c3 [1] HEAD(add(z0, z1)) -> c4 [1] APP(nil, z0) -> c5 [1] APP(add(z0, z1), z2) -> c6(APP(z1, z2)) [1] REVERSE(nil) -> c7 [1] REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) [1] SHUFFLE(z0) -> c9(SHUFF(z0, nil)) [1] SHUFF(z0, z1) -> c10(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), NULL(z0)) [1] SHUFF(z0, z1) -> c11(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) [1] IF(true, z0, z1, z2) -> c12 [1] IF(false, z0, z1, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) [1] null(nil) -> true [0] null(add(z0, z1)) -> false [0] tail(add(z0, z1)) -> z1 [0] tail(nil) -> nil [0] head(add(z0, z1)) -> z0 [0] app(nil, z0) -> z0 [0] app(add(z0, z1), z2) -> add(z0, app(z1, z2)) [0] reverse(nil) -> nil [0] reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) [0] shuffle(z0) -> shuff(z0, nil) [0] shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) [0] if(true, z0, z1, z2) -> z1 [0] if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (5) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (6) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: NULL(nil) -> c [1] NULL(add(z0, z1)) -> c1 [1] TAIL(add(z0, z1)) -> c2 [1] TAIL(nil) -> c3 [1] HEAD(add(z0, z1)) -> c4 [1] APP(nil, z0) -> c5 [1] APP(add(z0, z1), z2) -> c6(APP(z1, z2)) [1] REVERSE(nil) -> c7 [1] REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) [1] SHUFFLE(z0) -> c9(SHUFF(z0, nil)) [1] SHUFF(z0, z1) -> c10(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), NULL(z0)) [1] SHUFF(z0, z1) -> c11(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) [1] IF(true, z0, z1, z2) -> c12 [1] IF(false, z0, z1, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) [1] null(nil) -> true [0] null(add(z0, z1)) -> false [0] tail(add(z0, z1)) -> z1 [0] tail(nil) -> nil [0] head(add(z0, z1)) -> z0 [0] app(nil, z0) -> z0 [0] app(add(z0, z1), z2) -> add(z0, app(z1, z2)) [0] reverse(nil) -> nil [0] reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) [0] shuffle(z0) -> shuff(z0, nil) [0] shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) [0] if(true, z0, z1, z2) -> z1 [0] if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) [0] The TRS has the following type information: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add Rewrite Strategy: INNERMOST ---------------------------------------- (7) CompletionProof (UPPER BOUND(ID)) The transformation into a RNTS is sound, since: (a) The obligation is a constructor system where every type has a constant constructor, (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: NULL_1 TAIL_1 HEAD_1 APP_2 REVERSE_1 SHUFFLE_1 SHUFF_2 IF_4 (c) The following functions are completely defined: null_1 tail_1 head_1 app_2 reverse_1 shuffle_1 shuff_2 if_4 Due to the following rules being added: null(v0) -> null_null [0] tail(v0) -> nil [0] head(v0) -> const [0] app(v0, v1) -> nil [0] reverse(v0) -> nil [0] shuffle(v0) -> nil [0] shuff(v0, v1) -> nil [0] if(v0, v1, v2, v3) -> nil [0] And the following fresh constants: null_null, const, const1, const2 ---------------------------------------- (8) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: NULL(nil) -> c [1] NULL(add(z0, z1)) -> c1 [1] TAIL(add(z0, z1)) -> c2 [1] TAIL(nil) -> c3 [1] HEAD(add(z0, z1)) -> c4 [1] APP(nil, z0) -> c5 [1] APP(add(z0, z1), z2) -> c6(APP(z1, z2)) [1] REVERSE(nil) -> c7 [1] REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) [1] SHUFFLE(z0) -> c9(SHUFF(z0, nil)) [1] SHUFF(z0, z1) -> c10(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), NULL(z0)) [1] SHUFF(z0, z1) -> c11(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) [1] IF(true, z0, z1, z2) -> c12 [1] IF(false, z0, z1, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) [1] null(nil) -> true [0] null(add(z0, z1)) -> false [0] tail(add(z0, z1)) -> z1 [0] tail(nil) -> nil [0] head(add(z0, z1)) -> z0 [0] app(nil, z0) -> z0 [0] app(add(z0, z1), z2) -> add(z0, app(z1, z2)) [0] reverse(nil) -> nil [0] reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) [0] shuffle(z0) -> shuff(z0, nil) [0] shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) [0] if(true, z0, z1, z2) -> z1 [0] if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) [0] null(v0) -> null_null [0] tail(v0) -> nil [0] head(v0) -> const [0] app(v0, v1) -> nil [0] reverse(v0) -> nil [0] shuffle(v0) -> nil [0] shuff(v0, v1) -> nil [0] if(v0, v1, v2, v3) -> nil [0] The TRS has the following type information: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: const -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false:null_null -> nil:add -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false:null_null app :: nil:add -> nil:add -> nil:add head :: nil:add -> const c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false:null_null c12 :: c12:c13 false :: true:false:null_null c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false:null_null -> nil:add -> nil:add -> nil:add -> nil:add null_null :: true:false:null_null const :: const const1 :: c9 const2 :: c10:c11 Rewrite Strategy: INNERMOST ---------------------------------------- (9) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (10) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: NULL(nil) -> c [1] NULL(add(z0, z1)) -> c1 [1] TAIL(add(z0, z1)) -> c2 [1] TAIL(nil) -> c3 [1] HEAD(add(z0, z1)) -> c4 [1] APP(nil, z0) -> c5 [1] APP(add(z0, z1), z2) -> c6(APP(z1, z2)) [1] REVERSE(nil) -> c7 [1] REVERSE(add(z0, nil)) -> c8(APP(nil, add(z0, nil)), REVERSE(nil)) [1] REVERSE(add(z0, add(z0', z1'))) -> c8(APP(app(reverse(z1'), add(z0', nil)), add(z0, nil)), REVERSE(add(z0', z1'))) [1] REVERSE(add(z0, z1)) -> c8(APP(nil, add(z0, nil)), REVERSE(z1)) [1] SHUFFLE(z0) -> c9(SHUFF(z0, nil)) [1] SHUFF(nil, z1) -> c10(IF(true, nil, z1, app(z1, add(const, nil))), NULL(nil)) [1] SHUFF(add(z0'', z1''), z1) -> c10(IF(false, add(z0'', z1''), z1, app(z1, add(z0'', nil))), NULL(add(z0'', z1''))) [1] SHUFF(add(z0'', z1''), z1) -> c10(IF(false, add(z0'', z1''), z1, app(z1, add(const, nil))), NULL(add(z0'', z1''))) [1] SHUFF(add(z01, z11), z1) -> c10(IF(null_null, add(z01, z11), z1, app(z1, add(z01, nil))), NULL(add(z01, z11))) [1] SHUFF(z0, z1) -> c10(IF(null_null, z0, z1, app(z1, add(const, nil))), NULL(z0)) [1] SHUFF(nil, z1) -> c11(IF(true, nil, z1, app(z1, add(const, nil))), APP(z1, add(const, nil)), HEAD(nil)) [1] SHUFF(add(z02, z12), z1) -> c11(IF(false, add(z02, z12), z1, app(z1, add(z02, nil))), APP(z1, add(z02, nil)), HEAD(add(z02, z12))) [1] SHUFF(add(z02, z12), z1) -> c11(IF(false, add(z02, z12), z1, app(z1, add(z02, nil))), APP(z1, add(const, nil)), HEAD(add(z02, z12))) [1] SHUFF(add(z02, z12), z1) -> c11(IF(false, add(z02, z12), z1, app(z1, add(const, nil))), APP(z1, add(z02, nil)), HEAD(add(z02, z12))) [1] SHUFF(add(z02, z12), z1) -> c11(IF(false, add(z02, z12), z1, app(z1, add(const, nil))), APP(z1, add(const, nil)), HEAD(add(z02, z12))) [1] SHUFF(add(z03, z13), z1) -> c11(IF(null_null, add(z03, z13), z1, app(z1, add(z03, nil))), APP(z1, add(z03, nil)), HEAD(add(z03, z13))) [1] SHUFF(add(z03, z13), z1) -> c11(IF(null_null, add(z03, z13), z1, app(z1, add(z03, nil))), APP(z1, add(const, nil)), HEAD(add(z03, z13))) [1] SHUFF(add(z04, z14), z1) -> c11(IF(null_null, add(z04, z14), z1, app(z1, add(const, nil))), APP(z1, add(z04, nil)), HEAD(add(z04, z14))) [1] SHUFF(z0, z1) -> c11(IF(null_null, z0, z1, app(z1, add(const, nil))), APP(z1, add(const, nil)), HEAD(z0)) [1] IF(true, z0, z1, z2) -> c12 [1] IF(false, add(z05, z15), z1, z2) -> c13(SHUFF(reverse(z15), z2), REVERSE(z15), TAIL(add(z05, z15))) [1] IF(false, add(z05, z15), z1, z2) -> c13(SHUFF(reverse(z15), z2), REVERSE(nil), TAIL(add(z05, z15))) [1] IF(false, nil, z1, z2) -> c13(SHUFF(reverse(nil), z2), REVERSE(nil), TAIL(nil)) [1] IF(false, nil, z1, z2) -> c13(SHUFF(reverse(nil), z2), REVERSE(nil), TAIL(nil)) [1] IF(false, add(z06, z16), z1, z2) -> c13(SHUFF(reverse(nil), z2), REVERSE(z16), TAIL(add(z06, z16))) [1] IF(false, nil, z1, z2) -> c13(SHUFF(reverse(nil), z2), REVERSE(nil), TAIL(nil)) [1] IF(false, z0, z1, z2) -> c13(SHUFF(reverse(nil), z2), REVERSE(nil), TAIL(z0)) [1] null(nil) -> true [0] null(add(z0, z1)) -> false [0] tail(add(z0, z1)) -> z1 [0] tail(nil) -> nil [0] head(add(z0, z1)) -> z0 [0] app(nil, z0) -> z0 [0] app(add(z0, z1), z2) -> add(z0, app(z1, z2)) [0] reverse(nil) -> nil [0] reverse(add(z0, nil)) -> app(nil, add(z0, nil)) [0] reverse(add(z0, add(z07, z17))) -> app(app(reverse(z17), add(z07, nil)), add(z0, nil)) [0] reverse(add(z0, z1)) -> app(nil, add(z0, nil)) [0] shuffle(z0) -> shuff(z0, nil) [0] shuff(nil, z1) -> if(true, nil, z1, app(z1, add(const, nil))) [0] shuff(add(z08, z18), z1) -> if(false, add(z08, z18), z1, app(z1, add(z08, nil))) [0] shuff(add(z08, z18), z1) -> if(false, add(z08, z18), z1, app(z1, add(const, nil))) [0] shuff(add(z09, z19), z1) -> if(null_null, add(z09, z19), z1, app(z1, add(z09, nil))) [0] shuff(z0, z1) -> if(null_null, z0, z1, app(z1, add(const, nil))) [0] if(true, z0, z1, z2) -> z1 [0] if(false, add(z010, z110), z1, z2) -> shuff(reverse(z110), z2) [0] if(false, nil, z1, z2) -> shuff(reverse(nil), z2) [0] if(false, z0, z1, z2) -> shuff(reverse(nil), z2) [0] null(v0) -> null_null [0] tail(v0) -> nil [0] head(v0) -> const [0] app(v0, v1) -> nil [0] reverse(v0) -> nil [0] shuffle(v0) -> nil [0] shuff(v0, v1) -> nil [0] if(v0, v1, v2, v3) -> nil [0] The TRS has the following type information: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: const -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false:null_null -> nil:add -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false:null_null app :: nil:add -> nil:add -> nil:add head :: nil:add -> const c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false:null_null c12 :: c12:c13 false :: true:false:null_null c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false:null_null -> nil:add -> nil:add -> nil:add -> nil:add null_null :: true:false:null_null const :: const const1 :: c9 const2 :: c10:c11 Rewrite Strategy: INNERMOST ---------------------------------------- (11) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: nil => 0 c => 0 c1 => 1 c2 => 0 c3 => 1 c4 => 0 c5 => 0 c7 => 0 true => 2 c12 => 0 false => 1 null_null => 0 const => 0 const1 => 0 const2 => 0 ---------------------------------------- (12) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z0 >= 0, z = 0, z' = z0 APP(z, z') -{ 1 }-> 1 + APP(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z1 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 1 }-> 1 + SHUFF(reverse(z15), z2) + REVERSE(z15) + TAIL(1 + z05 + z15) :|: z15 >= 0, z1 >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 = z2, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 1 }-> 1 + SHUFF(reverse(z15), z2) + REVERSE(0) + TAIL(1 + z05 + z15) :|: z15 >= 0, z1 >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 = z2, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 1 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(z16) + TAIL(1 + z06 + z16) :|: z1 >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 = z2, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 1 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(0) + TAIL(z0) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 1 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(0) + TAIL(0) :|: z1 >= 0, z = 1, z3 = z2, z2 >= 0, z' = 0, z'' = z1 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(0) :|: z0 >= 0, z = 1 + z0 + 0 SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z1, app(z1, 1 + 0 + 0)) + NULL(0) :|: z1 >= 0, z' = z1, z = 0 SHUFF(z, z') -{ 1 }-> 1 + IF(1, 1 + z0'' + z1'', z1, app(z1, 1 + z0'' + 0)) + NULL(1 + z0'' + z1'') :|: z = 1 + z0'' + z1'', z1 >= 0, z' = z1, z0'' >= 0, z1'' >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(1, 1 + z0'' + z1'', z1, app(z1, 1 + 0 + 0)) + NULL(1 + z0'' + z1'') :|: z = 1 + z0'' + z1'', z1 >= 0, z' = z1, z0'' >= 0, z1'' >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(0, z0, z1, app(z1, 1 + 0 + 0)) + NULL(z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(0, 1 + z01 + z11, z1, app(z1, 1 + z01 + 0)) + NULL(1 + z01 + z11) :|: z11 >= 0, z1 >= 0, z01 >= 0, z = 1 + z01 + z11, z' = z1 SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + 0 + 0) + HEAD(0) :|: z1 >= 0, z' = z1, z = 0 SHUFF(z, z') -{ 1 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + z02 + 0)) + APP(z1, 1 + z02 + 0) + HEAD(1 + z02 + z12) :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + z02 + 0)) + APP(z1, 1 + 0 + 0) + HEAD(1 + z02 + z12) :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + z02 + 0) + HEAD(1 + z02 + z12) :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + 0 + 0) + HEAD(1 + z02 + z12) :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(0, z0, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + 0 + 0) + HEAD(z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(0, 1 + z03 + z13, z1, app(z1, 1 + z03 + 0)) + APP(z1, 1 + z03 + 0) + HEAD(1 + z03 + z13) :|: z = 1 + z03 + z13, z1 >= 0, z' = z1, z03 >= 0, z13 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(0, 1 + z03 + z13, z1, app(z1, 1 + z03 + 0)) + APP(z1, 1 + 0 + 0) + HEAD(1 + z03 + z13) :|: z = 1 + z03 + z13, z1 >= 0, z' = z1, z03 >= 0, z13 >= 0 SHUFF(z, z') -{ 1 }-> 1 + IF(0, 1 + z04 + z14, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + z04 + 0) + HEAD(1 + z04 + z14) :|: z04 >= 0, z = 1 + z04 + z14, z1 >= 0, z' = z1, z14 >= 0 SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z0, 0) :|: z = z0, z0 >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 app(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if(z, z', z'', z3) -{ 0 }-> z1 :|: z = 2, z1 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z2) :|: z110 >= 0, z1 >= 0, z = 1, z' = 1 + z010 + z110, z3 = z2, z010 >= 0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z2) :|: z1 >= 0, z = 1, z3 = z2, z2 >= 0, z' = 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z0 >= 0, z = 1 + z0 + 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 shuff(z, z') -{ 0 }-> if(2, 0, z1, app(z1, 1 + 0 + 0)) :|: z1 >= 0, z' = z1, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z1, app(z1, 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z1 >= 0, z' = z1 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z1, app(z1, 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z1 >= 0, z' = z1 shuff(z, z') -{ 0 }-> if(0, z0, z1, app(z1, 1 + 0 + 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z1, app(z1, 1 + z09 + 0)) :|: z = 1 + z09 + z19, z1 >= 0, z19 >= 0, z' = z1, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 shuffle(z) -{ 0 }-> shuff(z0, 0) :|: z = z0, z0 >= 0 shuffle(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (13) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 TAIL(z) -{ 1 }-> 1 :|: z = 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z0 >= 0, z = 0, z' = z0 APP(z, z') -{ 1 }-> 1 + APP(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z1 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z2) + REVERSE(z15) + 0 :|: z15 >= 0, z1 >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 = z2, z2 >= 0, z'' = z1, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z2) + REVERSE(0) + 0 :|: z15 >= 0, z1 >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 = z2, z2 >= 0, z'' = z1, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(z16) + 0 :|: z1 >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 = z2, z2 >= 0, z'' = z1, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(0) + 1 :|: z1 >= 0, z = 1, z3 = z2, z2 >= 0, z' = 0, z'' = z1, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(0) + 1 :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1, z0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z2) + REVERSE(0) + 0 :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1, z1' >= 0, z0' >= 0, z0 = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(0) :|: z0 >= 0, z = 1 + z0 + 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z1, app(z1, 1 + 0 + 0)) + 0 :|: z1 >= 0, z' = z1, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z1, app(z1, 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z1 >= 0, z' = z1, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z1, app(z1, 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z1 >= 0, z' = z1, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z0, z1, app(z1, 1 + 0 + 0)) + 1 :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z1' >= 0, z0' >= 0, z0 = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z0, z1, app(z1, 1 + 0 + 0)) + 0 :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z1, app(z1, 1 + z01 + 0)) + 1 :|: z11 >= 0, z1 >= 0, z01 >= 0, z = 1 + z01 + z11, z' = z1, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + 0 + 0) + HEAD(0) :|: z1 >= 0, z' = z1, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + z02 + 0)) + APP(z1, 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + z02 + 0)) + APP(z1, 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z1 >= 0, z02 >= 0, z' = z1, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z0, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + 0 + 0) + 0 :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z1' >= 0, z0' >= 0, z0 = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z1, app(z1, 1 + z03 + 0)) + APP(z1, 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z1 >= 0, z' = z1, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z1, app(z1, 1 + z03 + 0)) + APP(z1, 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z1 >= 0, z' = z1, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z1, app(z1, 1 + 0 + 0)) + APP(z1, 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z1 >= 0, z' = z1, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z0, 0) :|: z = z0, z0 >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 app(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 if(z, z', z'', z3) -{ 0 }-> z1 :|: z = 2, z1 >= 0, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z2) :|: z110 >= 0, z1 >= 0, z = 1, z' = 1 + z010 + z110, z3 = z2, z010 >= 0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z2) :|: z1 >= 0, z = 1, z3 = z2, z2 >= 0, z' = 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z2) :|: z1 >= 0, z = 1, z0 >= 0, z3 = z2, z' = z0, z2 >= 0, z'' = z1 if(z, z', z'', z3) -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z3 = v3, v2 >= 0, v3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z0 >= 0, z = 1 + z0 + 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 shuff(z, z') -{ 0 }-> if(2, 0, z1, app(z1, 1 + 0 + 0)) :|: z1 >= 0, z' = z1, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z1, app(z1, 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z1 >= 0, z' = z1 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z1, app(z1, 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z1 >= 0, z' = z1 shuff(z, z') -{ 0 }-> if(0, z0, z1, app(z1, 1 + 0 + 0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z1, app(z1, 1 + z09 + 0)) :|: z = 1 + z09 + z19, z1 >= 0, z19 >= 0, z' = z1, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 shuffle(z) -{ 0 }-> shuff(z0, 0) :|: z = z0, z0 >= 0 shuffle(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (15) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + HEAD(0) :|: z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 ---------------------------------------- (17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { HEAD } { tail } { APP } { head } { NULL } { app } { null } { TAIL } { reverse } { shuff, if } { REVERSE } { shuffle } { IF, SHUFF } { SHUFFLE } ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + HEAD(0) :|: z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {HEAD}, {tail}, {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} ---------------------------------------- (19) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + HEAD(0) :|: z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {HEAD}, {tail}, {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} ---------------------------------------- (21) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: HEAD after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + HEAD(0) :|: z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {HEAD}, {tail}, {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: ?, size: O(1) [0] ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: HEAD after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 1 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + HEAD(0) :|: z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] ---------------------------------------- (25) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + s :|: s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] ---------------------------------------- (27) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: tail after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + s :|: s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {tail}, {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: ?, size: O(n^1) [z] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: tail after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + s :|: s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (31) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + s :|: s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (33) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: APP after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + s :|: s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {APP}, {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: ?, size: O(n^1) [z] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: APP after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 1 + z ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 1 }-> 1 + APP(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + z0 + 0) + REVERSE(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(0, 1 + (z - 1) + 0) + REVERSE(0) :|: z - 1 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + s :|: s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z02 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + z03 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + APP(z', 1 + 0 + 0) + 0 :|: z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + APP(z', 1 + z04 + 0) + 0 :|: z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] ---------------------------------------- (37) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] ---------------------------------------- (39) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: head after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {head}, {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: ?, size: O(n^1) [z] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: head after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (43) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (45) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: NULL after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {NULL}, {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: ?, size: O(1) [1] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: NULL after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (49) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (51) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: app after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z + z' ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {app}, {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: ?, size: O(n^1) [z + z'] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: app after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + z0'' + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', app(z', 1 + 0 + 0)) + 1 :|: z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 1 :|: z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + 0 :|: z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', app(z', 1 + z01 + 0)) + 1 :|: z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', app(z', 1 + 0 + 0)) + s2 + s :|: s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s3 + 0 :|: s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + z02 + 0)) + s4 + 0 :|: s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s5 + 0 :|: s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', app(z', 1 + 0 + 0)) + s6 + 0 :|: s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', app(z', 1 + 0 + 0)) + s10 + 0 :|: s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s7 + 0 :|: s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', app(z', 1 + z03 + 0)) + s8 + 0 :|: s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', app(z', 1 + 0 + 0)) + s9 + 0 :|: s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z') :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> app(0, 1 + z0 + 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(0, 1 + (z - 1) + 0) :|: z - 1 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + z08 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', app(z', 1 + 0 + 0)) :|: z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', app(z', 1 + 0 + 0)) :|: z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', app(z', 1 + z09 + 0)) :|: z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (55) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] ---------------------------------------- (57) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: null after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {null}, {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: ?, size: O(1) [2] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: null after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (61) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (63) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: TAIL after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {TAIL}, {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: ?, size: O(1) [1] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: TAIL after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (67) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] ---------------------------------------- (69) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: reverse after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: z ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {reverse}, {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: ?, size: O(n^1) [z] ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: reverse after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(z15) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(z15), z3) + REVERSE(0) + 0 :|: z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(z16) + 0 :|: z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 1 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(reverse(0), z3) + REVERSE(0) + 0 :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 1 }-> 1 + APP(app(reverse(z1'), 1 + z0' + 0), 1 + z0 + 0) + REVERSE(1 + z0' + z1') :|: z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(z110), z3) :|: z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(reverse(0), z3) :|: z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> app(app(reverse(z17), 1 + z07 + 0), 1 + z0 + 0) :|: z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (73) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s43, z3) + REVERSE(z15) + 0 :|: s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s44, z3) + REVERSE(0) + 0 :|: s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s45, z3) + REVERSE(0) + 1 :|: s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s46, z3) + REVERSE(z16) + 0 :|: s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s47, z3) + REVERSE(0) + 0 :|: s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s48, z3) + REVERSE(0) + 1 :|: s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 2 + s35 }-> 1 + s36 + REVERSE(1 + z0' + z1') :|: s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(s40, z3) :|: s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(s41, z3) :|: s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(s42, z3) :|: s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] ---------------------------------------- (75) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: shuff after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: z + z^2 + z' Computed SIZE bound using KoAT for: if after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: z' + z'^2 + z'' + 3*z3 ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s43, z3) + REVERSE(z15) + 0 :|: s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s44, z3) + REVERSE(0) + 0 :|: s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s45, z3) + REVERSE(0) + 1 :|: s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s46, z3) + REVERSE(z16) + 0 :|: s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s47, z3) + REVERSE(0) + 0 :|: s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s48, z3) + REVERSE(0) + 1 :|: s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 2 + s35 }-> 1 + s36 + REVERSE(1 + z0' + z1') :|: s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(s40, z3) :|: s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(s41, z3) :|: s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(s42, z3) :|: s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {shuff,if}, {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: ?, size: O(n^2) [z + z^2 + z'] if: runtime: ?, size: O(n^2) [z' + z'^2 + z'' + 3*z3] ---------------------------------------- (77) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: shuff after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 Computed RUNTIME bound using CoFloCo for: if after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s43, z3) + REVERSE(z15) + 0 :|: s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s44, z3) + REVERSE(0) + 0 :|: s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s45, z3) + REVERSE(0) + 1 :|: s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s46, z3) + REVERSE(z16) + 0 :|: s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s47, z3) + REVERSE(0) + 0 :|: s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s48, z3) + REVERSE(0) + 1 :|: s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 2 + s35 }-> 1 + s36 + REVERSE(1 + z0' + z1') :|: s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(s40, z3) :|: s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> shuff(s41, z3) :|: s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> shuff(s42, z3) :|: s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> if(2, 0, z', s14) :|: s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s15) :|: s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(1, 1 + z08 + z18, z', s16) :|: s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> if(0, z, z', s18) :|: s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> if(0, 1 + z09 + z19, z', s17) :|: s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> shuff(z, 0) :|: z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] ---------------------------------------- (79) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s43, z3) + REVERSE(z15) + 0 :|: s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s44, z3) + REVERSE(0) + 0 :|: s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s45, z3) + REVERSE(0) + 1 :|: s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s46, z3) + REVERSE(z16) + 0 :|: s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s47, z3) + REVERSE(0) + 0 :|: s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s48, z3) + REVERSE(0) + 1 :|: s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 2 + s35 }-> 1 + s36 + REVERSE(1 + z0' + z1') :|: s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] ---------------------------------------- (81) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: REVERSE after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: z + z^2 ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s43, z3) + REVERSE(z15) + 0 :|: s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s44, z3) + REVERSE(0) + 0 :|: s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s45, z3) + REVERSE(0) + 1 :|: s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s46, z3) + REVERSE(z16) + 0 :|: s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s47, z3) + REVERSE(0) + 0 :|: s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s48, z3) + REVERSE(0) + 1 :|: s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 2 + s35 }-> 1 + s36 + REVERSE(1 + z0' + z1') :|: s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {REVERSE}, {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: ?, size: O(n^2) [z + z^2] ---------------------------------------- (83) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: REVERSE after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 2*z + z^2 ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s43, z3) + REVERSE(z15) + 0 :|: s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s44, z3) + REVERSE(0) + 0 :|: s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s45, z3) + REVERSE(0) + 1 :|: s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s46, z3) + REVERSE(z16) + 0 :|: s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s47, z3) + REVERSE(0) + 0 :|: s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 2 }-> 1 + SHUFF(s48, z3) + REVERSE(0) + 1 :|: s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 2 }-> 1 + s'' + REVERSE(0) :|: s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 2 }-> 1 + s1 + REVERSE(z1) :|: s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 2 + s35 }-> 1 + s36 + REVERSE(1 + z0' + z1') :|: s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] ---------------------------------------- (85) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (86) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 3 + 2*z15 + z15^2 }-> 1 + SHUFF(s43, z3) + s61 + 0 :|: s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s44, z3) + s62 + 0 :|: s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s45, z3) + s63 + 1 :|: s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 3 + 2*z16 + z16^2 }-> 1 + SHUFF(s46, z3) + s64 + 0 :|: s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s47, z3) + s65 + 0 :|: s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s48, z3) + s66 + 1 :|: s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] ---------------------------------------- (87) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: shuffle after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: z + z^2 ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 3 + 2*z15 + z15^2 }-> 1 + SHUFF(s43, z3) + s61 + 0 :|: s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s44, z3) + s62 + 0 :|: s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s45, z3) + s63 + 1 :|: s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 3 + 2*z16 + z16^2 }-> 1 + SHUFF(s46, z3) + s64 + 0 :|: s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s47, z3) + s65 + 0 :|: s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s48, z3) + s66 + 1 :|: s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {shuffle}, {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: ?, size: O(n^2) [z + z^2] ---------------------------------------- (89) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: shuffle after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (90) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 3 + 2*z15 + z15^2 }-> 1 + SHUFF(s43, z3) + s61 + 0 :|: s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s44, z3) + s62 + 0 :|: s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s45, z3) + s63 + 1 :|: s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 3 + 2*z16 + z16^2 }-> 1 + SHUFF(s46, z3) + s64 + 0 :|: s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s47, z3) + s65 + 0 :|: s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s48, z3) + s66 + 1 :|: s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] ---------------------------------------- (91) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (92) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 3 + 2*z15 + z15^2 }-> 1 + SHUFF(s43, z3) + s61 + 0 :|: s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s44, z3) + s62 + 0 :|: s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s45, z3) + s63 + 1 :|: s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 3 + 2*z16 + z16^2 }-> 1 + SHUFF(s46, z3) + s64 + 0 :|: s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s47, z3) + s65 + 0 :|: s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s48, z3) + s66 + 1 :|: s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] ---------------------------------------- (93) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: IF after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: SHUFF after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (94) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 3 + 2*z15 + z15^2 }-> 1 + SHUFF(s43, z3) + s61 + 0 :|: s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s44, z3) + s62 + 0 :|: s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s45, z3) + s63 + 1 :|: s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 3 + 2*z16 + z16^2 }-> 1 + SHUFF(s46, z3) + s64 + 0 :|: s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s47, z3) + s65 + 0 :|: s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s48, z3) + s66 + 1 :|: s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {IF,SHUFF}, {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] IF: runtime: ?, size: INF SHUFF: runtime: ?, size: INF ---------------------------------------- (95) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: IF after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 257 + 382*z' + 20*z'*z3 + 278*z'^2 + 122*z'^3 + 22*z3 Computed RUNTIME bound using KoAT for: SHUFF after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 12244 + 27938*z + 460*z*z' + 26834*z^2 + 10126*z^3 + 539*z' ---------------------------------------- (96) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 3 + 2*z15 + z15^2 }-> 1 + SHUFF(s43, z3) + s61 + 0 :|: s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s44, z3) + s62 + 0 :|: s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s45, z3) + s63 + 1 :|: s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 3 + 2*z16 + z16^2 }-> 1 + SHUFF(s46, z3) + s64 + 0 :|: s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s47, z3) + s65 + 0 :|: s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 3 }-> 1 + SHUFF(s48, z3) + s66 + 1 :|: s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 2 }-> 1 + IF(2, 0, z', s19) + 0 :|: s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s20) + 1 :|: s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(1, 1 + z0'' + z1'', z', s21) + 1 :|: s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s23) + 1 :|: s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 2 }-> 1 + IF(0, z, z', s24) + 0 :|: s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 2 }-> 1 + IF(0, 1 + z01 + z11, z', s22) + 1 :|: s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(2, 0, z', s25) + s2 + s :|: s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s26) + s3 + 0 :|: s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s27) + s4 + 0 :|: s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s28) + s5 + 0 :|: s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(1, 1 + z02 + z12, z', s29) + s6 + 0 :|: s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, z, z', s33) + s10 + 0 :|: s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s30) + s7 + 0 :|: s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z03 + z13, z', s31) + s8 + 0 :|: s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 3 + z' }-> 1 + IF(0, 1 + z04 + z14, z', s32) + s9 + 0 :|: s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFFLE(z) -{ 1 }-> 1 + SHUFF(z, 0) :|: z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] IF: runtime: O(n^3) [257 + 382*z' + 20*z'*z3 + 278*z'^2 + 122*z'^3 + 22*z3], size: INF SHUFF: runtime: O(n^3) [12244 + 27938*z + 460*z*z' + 26834*z^2 + 10126*z^3 + 539*z'], size: INF ---------------------------------------- (97) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (98) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 12247 + 27938*s43 + 460*s43*z3 + 26834*s43^2 + 10126*s43^3 + 2*z15 + z15^2 + 539*z3 }-> 1 + s74 + s61 + 0 :|: s74 >= 0, s74 <= inf5, s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s44 + 460*s44*z3 + 26834*s44^2 + 10126*s44^3 + 539*z3 }-> 1 + s75 + s62 + 0 :|: s75 >= 0, s75 <= inf6, s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s45 + 460*s45*z3 + 26834*s45^2 + 10126*s45^3 + 539*z3 }-> 1 + s76 + s63 + 1 :|: s76 >= 0, s76 <= inf7, s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 12247 + 27938*s46 + 460*s46*z3 + 26834*s46^2 + 10126*s46^3 + 2*z16 + z16^2 + 539*z3 }-> 1 + s77 + s64 + 0 :|: s77 >= 0, s77 <= inf8, s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s47 + 460*s47*z3 + 26834*s47^2 + 10126*s47^3 + 539*z3 }-> 1 + s78 + s65 + 0 :|: s78 >= 0, s78 <= inf9, s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s48 + 460*s48*z3 + 26834*s48^2 + 10126*s48^3 + 539*z3 }-> 1 + s79 + s66 + 1 :|: s79 >= 0, s79 <= inf10, s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 259 + 22*s19 }-> 1 + s68 + 0 :|: s68 >= 0, s68 <= inf', s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 1041 + 42*s20 + 20*s20*z0'' + 20*s20*z1'' + 1304*z0'' + 1288*z0''*z1'' + 366*z0''*z1''^2 + 644*z0''^2 + 366*z0''^2*z1'' + 122*z0''^3 + 1304*z1'' + 644*z1''^2 + 122*z1''^3 }-> 1 + s69 + 1 :|: s69 >= 0, s69 <= inf'', s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 1041 + 42*s21 + 20*s21*z0'' + 20*s21*z1'' + 1304*z0'' + 1288*z0''*z1'' + 366*z0''*z1''^2 + 644*z0''^2 + 366*z0''^2*z1'' + 122*z0''^3 + 1304*z1'' + 644*z1''^2 + 122*z1''^3 }-> 1 + s70 + 1 :|: s70 >= 0, s70 <= inf1, s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 1041 + 42*s22 + 20*s22*z01 + 20*s22*z11 + 1304*z01 + 1288*z01*z11 + 366*z01*z11^2 + 644*z01^2 + 366*z01^2*z11 + 122*z01^3 + 1304*z11 + 644*z11^2 + 122*z11^3 }-> 1 + s71 + 1 :|: s71 >= 0, s71 <= inf2, s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 259 + 22*s23 + 20*s23*z + 382*z + 278*z^2 + 122*z^3 }-> 1 + s72 + 1 :|: s72 >= 0, s72 <= inf3, s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 259 + 22*s24 + 20*s24*z + 382*z + 278*z^2 + 122*z^3 }-> 1 + s73 + 0 :|: s73 >= 0, s73 <= inf4, s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 260 + 22*s25 + z' }-> 1 + s80 + s2 + s :|: s80 >= 0, s80 <= inf11, s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 1042 + 42*s26 + 20*s26*z02 + 20*s26*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s81 + s3 + 0 :|: s81 >= 0, s81 <= inf12, s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s27 + 20*s27*z02 + 20*s27*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s82 + s4 + 0 :|: s82 >= 0, s82 <= inf13, s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s28 + 20*s28*z02 + 20*s28*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s83 + s5 + 0 :|: s83 >= 0, s83 <= inf14, s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s29 + 20*s29*z02 + 20*s29*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s84 + s6 + 0 :|: s84 >= 0, s84 <= inf15, s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s30 + 20*s30*z03 + 20*s30*z13 + z' + 1304*z03 + 1288*z03*z13 + 366*z03*z13^2 + 644*z03^2 + 366*z03^2*z13 + 122*z03^3 + 1304*z13 + 644*z13^2 + 122*z13^3 }-> 1 + s85 + s7 + 0 :|: s85 >= 0, s85 <= inf16, s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s31 + 20*s31*z03 + 20*s31*z13 + z' + 1304*z03 + 1288*z03*z13 + 366*z03*z13^2 + 644*z03^2 + 366*z03^2*z13 + 122*z03^3 + 1304*z13 + 644*z13^2 + 122*z13^3 }-> 1 + s86 + s8 + 0 :|: s86 >= 0, s86 <= inf17, s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s32 + 20*s32*z04 + 20*s32*z14 + z' + 1304*z04 + 1288*z04*z14 + 366*z04*z14^2 + 644*z04^2 + 366*z04^2*z14 + 122*z04^3 + 1304*z14 + 644*z14^2 + 122*z14^3 }-> 1 + s87 + s9 + 0 :|: s87 >= 0, s87 <= inf18, s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFF(z, z') -{ 260 + 22*s33 + 20*s33*z + 382*z + 278*z^2 + 122*z^3 + z' }-> 1 + s88 + s10 + 0 :|: s88 >= 0, s88 <= inf19, s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFFLE(z) -{ 12245 + 27938*z + 26834*z^2 + 10126*z^3 }-> 1 + s67 :|: s67 >= 0, s67 <= inf, z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] IF: runtime: O(n^3) [257 + 382*z' + 20*z'*z3 + 278*z'^2 + 122*z'^3 + 22*z3], size: INF SHUFF: runtime: O(n^3) [12244 + 27938*z + 460*z*z' + 26834*z^2 + 10126*z^3 + 539*z'], size: INF ---------------------------------------- (99) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: SHUFFLE after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (100) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 12247 + 27938*s43 + 460*s43*z3 + 26834*s43^2 + 10126*s43^3 + 2*z15 + z15^2 + 539*z3 }-> 1 + s74 + s61 + 0 :|: s74 >= 0, s74 <= inf5, s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s44 + 460*s44*z3 + 26834*s44^2 + 10126*s44^3 + 539*z3 }-> 1 + s75 + s62 + 0 :|: s75 >= 0, s75 <= inf6, s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s45 + 460*s45*z3 + 26834*s45^2 + 10126*s45^3 + 539*z3 }-> 1 + s76 + s63 + 1 :|: s76 >= 0, s76 <= inf7, s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 12247 + 27938*s46 + 460*s46*z3 + 26834*s46^2 + 10126*s46^3 + 2*z16 + z16^2 + 539*z3 }-> 1 + s77 + s64 + 0 :|: s77 >= 0, s77 <= inf8, s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s47 + 460*s47*z3 + 26834*s47^2 + 10126*s47^3 + 539*z3 }-> 1 + s78 + s65 + 0 :|: s78 >= 0, s78 <= inf9, s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s48 + 460*s48*z3 + 26834*s48^2 + 10126*s48^3 + 539*z3 }-> 1 + s79 + s66 + 1 :|: s79 >= 0, s79 <= inf10, s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 259 + 22*s19 }-> 1 + s68 + 0 :|: s68 >= 0, s68 <= inf', s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 1041 + 42*s20 + 20*s20*z0'' + 20*s20*z1'' + 1304*z0'' + 1288*z0''*z1'' + 366*z0''*z1''^2 + 644*z0''^2 + 366*z0''^2*z1'' + 122*z0''^3 + 1304*z1'' + 644*z1''^2 + 122*z1''^3 }-> 1 + s69 + 1 :|: s69 >= 0, s69 <= inf'', s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 1041 + 42*s21 + 20*s21*z0'' + 20*s21*z1'' + 1304*z0'' + 1288*z0''*z1'' + 366*z0''*z1''^2 + 644*z0''^2 + 366*z0''^2*z1'' + 122*z0''^3 + 1304*z1'' + 644*z1''^2 + 122*z1''^3 }-> 1 + s70 + 1 :|: s70 >= 0, s70 <= inf1, s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 1041 + 42*s22 + 20*s22*z01 + 20*s22*z11 + 1304*z01 + 1288*z01*z11 + 366*z01*z11^2 + 644*z01^2 + 366*z01^2*z11 + 122*z01^3 + 1304*z11 + 644*z11^2 + 122*z11^3 }-> 1 + s71 + 1 :|: s71 >= 0, s71 <= inf2, s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 259 + 22*s23 + 20*s23*z + 382*z + 278*z^2 + 122*z^3 }-> 1 + s72 + 1 :|: s72 >= 0, s72 <= inf3, s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 259 + 22*s24 + 20*s24*z + 382*z + 278*z^2 + 122*z^3 }-> 1 + s73 + 0 :|: s73 >= 0, s73 <= inf4, s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 260 + 22*s25 + z' }-> 1 + s80 + s2 + s :|: s80 >= 0, s80 <= inf11, s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 1042 + 42*s26 + 20*s26*z02 + 20*s26*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s81 + s3 + 0 :|: s81 >= 0, s81 <= inf12, s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s27 + 20*s27*z02 + 20*s27*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s82 + s4 + 0 :|: s82 >= 0, s82 <= inf13, s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s28 + 20*s28*z02 + 20*s28*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s83 + s5 + 0 :|: s83 >= 0, s83 <= inf14, s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s29 + 20*s29*z02 + 20*s29*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s84 + s6 + 0 :|: s84 >= 0, s84 <= inf15, s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s30 + 20*s30*z03 + 20*s30*z13 + z' + 1304*z03 + 1288*z03*z13 + 366*z03*z13^2 + 644*z03^2 + 366*z03^2*z13 + 122*z03^3 + 1304*z13 + 644*z13^2 + 122*z13^3 }-> 1 + s85 + s7 + 0 :|: s85 >= 0, s85 <= inf16, s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s31 + 20*s31*z03 + 20*s31*z13 + z' + 1304*z03 + 1288*z03*z13 + 366*z03*z13^2 + 644*z03^2 + 366*z03^2*z13 + 122*z03^3 + 1304*z13 + 644*z13^2 + 122*z13^3 }-> 1 + s86 + s8 + 0 :|: s86 >= 0, s86 <= inf17, s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s32 + 20*s32*z04 + 20*s32*z14 + z' + 1304*z04 + 1288*z04*z14 + 366*z04*z14^2 + 644*z04^2 + 366*z04^2*z14 + 122*z04^3 + 1304*z14 + 644*z14^2 + 122*z14^3 }-> 1 + s87 + s9 + 0 :|: s87 >= 0, s87 <= inf18, s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFF(z, z') -{ 260 + 22*s33 + 20*s33*z + 382*z + 278*z^2 + 122*z^3 + z' }-> 1 + s88 + s10 + 0 :|: s88 >= 0, s88 <= inf19, s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFFLE(z) -{ 12245 + 27938*z + 26834*z^2 + 10126*z^3 }-> 1 + s67 :|: s67 >= 0, s67 <= inf, z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: {SHUFFLE} Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] IF: runtime: O(n^3) [257 + 382*z' + 20*z'*z3 + 278*z'^2 + 122*z'^3 + 22*z3], size: INF SHUFF: runtime: O(n^3) [12244 + 27938*z + 460*z*z' + 26834*z^2 + 10126*z^3 + 539*z'], size: INF SHUFFLE: runtime: ?, size: INF ---------------------------------------- (101) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: SHUFFLE after applying outer abstraction to obtain an ITS, resulting in: O(n^3) with polynomial bound: 12245 + 27938*z + 26834*z^2 + 10126*z^3 ---------------------------------------- (102) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 1 }-> 0 :|: z' >= 0, z = 0 APP(z, z') -{ 2 + z1 }-> 1 + s' :|: s' >= 0, s' <= z1, z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 HEAD(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 IF(z, z', z'', z3) -{ 1 }-> 0 :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 IF(z, z', z'', z3) -{ 12247 + 27938*s43 + 460*s43*z3 + 26834*s43^2 + 10126*s43^3 + 2*z15 + z15^2 + 539*z3 }-> 1 + s74 + s61 + 0 :|: s74 >= 0, s74 <= inf5, s61 >= 0, s61 <= z15 + z15 * z15, s43 >= 0, s43 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s44 + 460*s44*z3 + 26834*s44^2 + 10126*s44^3 + 539*z3 }-> 1 + s75 + s62 + 0 :|: s75 >= 0, s75 <= inf6, s62 >= 0, s62 <= 0 + 0 * 0, s44 >= 0, s44 <= z15, z15 >= 0, z'' >= 0, z = 1, z' = 1 + z05 + z15, z05 >= 0, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z05 + z15 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s45 + 460*s45*z3 + 26834*s45^2 + 10126*s45^3 + 539*z3 }-> 1 + s76 + s63 + 1 :|: s76 >= 0, s76 <= inf7, s63 >= 0, s63 <= 0 + 0 * 0, s45 >= 0, s45 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0, 0 = 0 IF(z, z', z'', z3) -{ 12247 + 27938*s46 + 460*s46*z3 + 26834*s46^2 + 10126*s46^3 + 2*z16 + z16^2 + 539*z3 }-> 1 + s77 + s64 + 0 :|: s77 >= 0, s77 <= inf8, s64 >= 0, s64 <= z16 + z16 * z16, s46 >= 0, s46 <= 0, z'' >= 0, z = 1, z06 >= 0, z16 >= 0, z' = 1 + z06 + z16, z3 >= 0, z1' >= 0, z0 >= 0, 1 + z06 + z16 = 1 + z0 + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s47 + 460*s47*z3 + 26834*s47^2 + 10126*s47^3 + 539*z3 }-> 1 + s78 + s65 + 0 :|: s78 >= 0, s78 <= inf9, s65 >= 0, s65 <= 0 + 0 * 0, s47 >= 0, s47 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z1' >= 0, z0' >= 0, z' = 1 + z0' + z1' IF(z, z', z'', z3) -{ 12247 + 27938*s48 + 460*s48*z3 + 26834*s48^2 + 10126*s48^3 + 539*z3 }-> 1 + s79 + s66 + 1 :|: s79 >= 0, s79 <= inf10, s66 >= 0, s66 <= 0 + 0 * 0, s48 >= 0, s48 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0, z' = 0 NULL(z) -{ 1 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 NULL(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 1 }-> 0 :|: z = 0 REVERSE(z) -{ 3 }-> 1 + s'' + s58 :|: s58 >= 0, s58 <= 0 + 0 * 0, s'' >= 0, s'' <= 0, z - 1 >= 0 REVERSE(z) -{ 3 + 2*z1 + z1^2 }-> 1 + s1 + s60 :|: s60 >= 0, s60 <= z1 + z1 * z1, s1 >= 0, s1 <= 0, z1 >= 0, z0 >= 0, z = 1 + z0 + z1 REVERSE(z) -{ 6 + s35 + 4*z0' + 2*z0'*z1' + z0'^2 + 4*z1' + z1'^2 }-> 1 + s36 + s59 :|: s59 >= 0, s59 <= 1 + z0' + z1' + (1 + z0' + z1') * (1 + z0' + z1'), s34 >= 0, s34 <= z1', s35 >= 0, s35 <= s34 + (1 + z0' + 0), s36 >= 0, s36 <= s35, z = 1 + z0 + (1 + z0' + z1'), z0' >= 0, z1' >= 0, z0 >= 0 SHUFF(z, z') -{ 259 + 22*s19 }-> 1 + s68 + 0 :|: s68 >= 0, s68 <= inf', s19 >= 0, s19 <= z' + (1 + 0 + 0), z' >= 0, z = 0, 0 = 0 SHUFF(z, z') -{ 1041 + 42*s20 + 20*s20*z0'' + 20*s20*z1'' + 1304*z0'' + 1288*z0''*z1'' + 366*z0''*z1''^2 + 644*z0''^2 + 366*z0''^2*z1'' + 122*z0''^3 + 1304*z1'' + 644*z1''^2 + 122*z1''^3 }-> 1 + s69 + 1 :|: s69 >= 0, s69 <= inf'', s20 >= 0, s20 <= z' + (1 + z0'' + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 1041 + 42*s21 + 20*s21*z0'' + 20*s21*z1'' + 1304*z0'' + 1288*z0''*z1'' + 366*z0''*z1''^2 + 644*z0''^2 + 366*z0''^2*z1'' + 122*z0''^3 + 1304*z1'' + 644*z1''^2 + 122*z1''^3 }-> 1 + s70 + 1 :|: s70 >= 0, s70 <= inf1, s21 >= 0, s21 <= z' + (1 + 0 + 0), z = 1 + z0'' + z1'', z' >= 0, z0'' >= 0, z1'' >= 0, z1' >= 0, z0 >= 0, 1 + z0'' + z1'' = 1 + z0 + z1' SHUFF(z, z') -{ 1041 + 42*s22 + 20*s22*z01 + 20*s22*z11 + 1304*z01 + 1288*z01*z11 + 366*z01*z11^2 + 644*z01^2 + 366*z01^2*z11 + 122*z01^3 + 1304*z11 + 644*z11^2 + 122*z11^3 }-> 1 + s71 + 1 :|: s71 >= 0, s71 <= inf2, s22 >= 0, s22 <= z' + (1 + z01 + 0), z11 >= 0, z' >= 0, z01 >= 0, z = 1 + z01 + z11, z1' >= 0, z0 >= 0, 1 + z01 + z11 = 1 + z0 + z1' SHUFF(z, z') -{ 259 + 22*s23 + 20*s23*z + 382*z + 278*z^2 + 122*z^3 }-> 1 + s72 + 1 :|: s72 >= 0, s72 <= inf3, s23 >= 0, s23 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFF(z, z') -{ 259 + 22*s24 + 20*s24*z + 382*z + 278*z^2 + 122*z^3 }-> 1 + s73 + 0 :|: s73 >= 0, s73 <= inf4, s24 >= 0, s24 <= z' + (1 + 0 + 0), z' >= 0, z >= 0, z = 0 SHUFF(z, z') -{ 260 + 22*s25 + z' }-> 1 + s80 + s2 + s :|: s80 >= 0, s80 <= inf11, s25 >= 0, s25 <= z' + (1 + 0 + 0), s2 >= 0, s2 <= z', s >= 0, s <= 0, z' >= 0, z = 0 SHUFF(z, z') -{ 1042 + 42*s26 + 20*s26*z02 + 20*s26*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s81 + s3 + 0 :|: s81 >= 0, s81 <= inf12, s26 >= 0, s26 <= z' + (1 + z02 + 0), s3 >= 0, s3 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s27 + 20*s27*z02 + 20*s27*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s82 + s4 + 0 :|: s82 >= 0, s82 <= inf13, s27 >= 0, s27 <= z' + (1 + z02 + 0), s4 >= 0, s4 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s28 + 20*s28*z02 + 20*s28*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s83 + s5 + 0 :|: s83 >= 0, s83 <= inf14, s28 >= 0, s28 <= z' + (1 + 0 + 0), s5 >= 0, s5 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s29 + 20*s29*z02 + 20*s29*z12 + z' + 1304*z02 + 1288*z02*z12 + 366*z02*z12^2 + 644*z02^2 + 366*z02^2*z12 + 122*z02^3 + 1304*z12 + 644*z12^2 + 122*z12^3 }-> 1 + s84 + s6 + 0 :|: s84 >= 0, s84 <= inf15, s29 >= 0, s29 <= z' + (1 + 0 + 0), s6 >= 0, s6 <= z', z = 1 + z02 + z12, z' >= 0, z02 >= 0, z12 >= 0, z1' >= 0, z0 >= 0, 1 + z02 + z12 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s30 + 20*s30*z03 + 20*s30*z13 + z' + 1304*z03 + 1288*z03*z13 + 366*z03*z13^2 + 644*z03^2 + 366*z03^2*z13 + 122*z03^3 + 1304*z13 + 644*z13^2 + 122*z13^3 }-> 1 + s85 + s7 + 0 :|: s85 >= 0, s85 <= inf16, s30 >= 0, s30 <= z' + (1 + z03 + 0), s7 >= 0, s7 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s31 + 20*s31*z03 + 20*s31*z13 + z' + 1304*z03 + 1288*z03*z13 + 366*z03*z13^2 + 644*z03^2 + 366*z03^2*z13 + 122*z03^3 + 1304*z13 + 644*z13^2 + 122*z13^3 }-> 1 + s86 + s8 + 0 :|: s86 >= 0, s86 <= inf17, s31 >= 0, s31 <= z' + (1 + z03 + 0), s8 >= 0, s8 <= z', z = 1 + z03 + z13, z' >= 0, z03 >= 0, z13 >= 0, z1' >= 0, z0 >= 0, 1 + z03 + z13 = 1 + z0 + z1' SHUFF(z, z') -{ 1042 + 42*s32 + 20*s32*z04 + 20*s32*z14 + z' + 1304*z04 + 1288*z04*z14 + 366*z04*z14^2 + 644*z04^2 + 366*z04^2*z14 + 122*z04^3 + 1304*z14 + 644*z14^2 + 122*z14^3 }-> 1 + s87 + s9 + 0 :|: s87 >= 0, s87 <= inf18, s32 >= 0, s32 <= z' + (1 + 0 + 0), s9 >= 0, s9 <= z', z04 >= 0, z = 1 + z04 + z14, z' >= 0, z14 >= 0, z1' >= 0, z0 >= 0, 1 + z04 + z14 = 1 + z0 + z1' SHUFF(z, z') -{ 260 + 22*s33 + 20*s33*z + 382*z + 278*z^2 + 122*z^3 + z' }-> 1 + s88 + s10 + 0 :|: s88 >= 0, s88 <= inf19, s33 >= 0, s33 <= z' + (1 + 0 + 0), s10 >= 0, s10 <= z', z' >= 0, z >= 0, z1' >= 0, z0' >= 0, z = 1 + z0' + z1' SHUFFLE(z) -{ 12245 + 27938*z + 26834*z^2 + 10126*z^3 }-> 1 + s67 :|: s67 >= 0, s67 <= inf, z >= 0 TAIL(z) -{ 1 }-> 1 :|: z = 0 TAIL(z) -{ 1 }-> 0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 app(z, z') -{ 0 }-> z' :|: z' >= 0, z = 0 app(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 app(z, z') -{ 0 }-> 1 + z0 + s11 :|: s11 >= 0, s11 <= z1 + z', z1 >= 0, z0 >= 0, z = 1 + z0 + z1, z' >= 0 head(z) -{ 0 }-> z0 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 head(z) -{ 0 }-> 0 :|: z >= 0 if(z, z', z'', z3) -{ 0 }-> s55 :|: s55 >= 0, s55 <= s40 + s40 * s40 + z3, s40 >= 0, s40 <= z110, z110 >= 0, z'' >= 0, z = 1, z' = 1 + z010 + z110, z010 >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> s56 :|: s56 >= 0, s56 <= s41 + s41 * s41 + z3, s41 >= 0, s41 <= 0, z'' >= 0, z = 1, z3 >= 0, z' = 0 if(z, z', z'', z3) -{ 0 }-> s57 :|: s57 >= 0, s57 <= s42 + s42 * s42 + z3, s42 >= 0, s42 <= 0, z'' >= 0, z = 1, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> z'' :|: z = 2, z'' >= 0, z' >= 0, z3 >= 0 if(z, z', z'', z3) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z3 >= 0 null(z) -{ 0 }-> 2 :|: z = 0 null(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 null(z) -{ 0 }-> 0 :|: z >= 0 reverse(z) -{ 0 }-> s12 :|: s12 >= 0, s12 <= 0 + (1 + (z - 1) + 0), z - 1 >= 0 reverse(z) -{ 0 }-> s13 :|: s13 >= 0, s13 <= 0 + (1 + z0 + 0), z1 >= 0, z0 >= 0, z = 1 + z0 + z1 reverse(z) -{ 0 }-> s39 :|: s37 >= 0, s37 <= z17, s38 >= 0, s38 <= s37 + (1 + z07 + 0), s39 >= 0, s39 <= s38 + (1 + z0 + 0), z = 1 + z0 + (1 + z07 + z17), z07 >= 0, z17 >= 0, z0 >= 0 reverse(z) -{ 0 }-> 0 :|: z = 0 reverse(z) -{ 0 }-> 0 :|: z >= 0 shuff(z, z') -{ 0 }-> s50 :|: s50 >= 0, s50 <= 3 * s14 + 0 + 0 * 0 + z', s14 >= 0, s14 <= z' + (1 + 0 + 0), z' >= 0, z = 0 shuff(z, z') -{ 0 }-> s51 :|: s51 >= 0, s51 <= 3 * s15 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s15 >= 0, s15 <= z' + (1 + z08 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s52 :|: s52 >= 0, s52 <= 3 * s16 + (1 + z08 + z18) + (1 + z08 + z18) * (1 + z08 + z18) + z', s16 >= 0, s16 <= z' + (1 + 0 + 0), z = 1 + z08 + z18, z08 >= 0, z18 >= 0, z' >= 0 shuff(z, z') -{ 0 }-> s53 :|: s53 >= 0, s53 <= 3 * s17 + (1 + z09 + z19) + (1 + z09 + z19) * (1 + z09 + z19) + z', s17 >= 0, s17 <= z' + (1 + z09 + 0), z = 1 + z09 + z19, z' >= 0, z19 >= 0, z09 >= 0 shuff(z, z') -{ 0 }-> s54 :|: s54 >= 0, s54 <= 3 * s18 + z + z * z + z', s18 >= 0, s18 <= z' + (1 + 0 + 0), z' >= 0, z >= 0 shuff(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 shuffle(z) -{ 0 }-> s49 :|: s49 >= 0, s49 <= z + z * z + 0, z >= 0 shuffle(z) -{ 0 }-> 0 :|: z >= 0 tail(z) -{ 0 }-> z1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 tail(z) -{ 0 }-> 0 :|: z = 0 tail(z) -{ 0 }-> 0 :|: z >= 0 Function symbols to be analyzed: Previous analysis results are: HEAD: runtime: O(1) [1], size: O(1) [0] tail: runtime: O(1) [0], size: O(n^1) [z] APP: runtime: O(n^1) [1 + z], size: O(n^1) [z] head: runtime: O(1) [0], size: O(n^1) [z] NULL: runtime: O(1) [1], size: O(1) [1] app: runtime: O(1) [0], size: O(n^1) [z + z'] null: runtime: O(1) [0], size: O(1) [2] TAIL: runtime: O(1) [1], size: O(1) [1] reverse: runtime: O(1) [0], size: O(n^1) [z] shuff: runtime: O(1) [0], size: O(n^2) [z + z^2 + z'] if: runtime: O(1) [0], size: O(n^2) [z' + z'^2 + z'' + 3*z3] REVERSE: runtime: O(n^2) [1 + 2*z + z^2], size: O(n^2) [z + z^2] shuffle: runtime: O(1) [0], size: O(n^2) [z + z^2] IF: runtime: O(n^3) [257 + 382*z' + 20*z'*z3 + 278*z'^2 + 122*z'^3 + 22*z3], size: INF SHUFF: runtime: O(n^3) [12244 + 27938*z + 460*z*z' + 26834*z^2 + 10126*z^3 + 539*z'], size: INF SHUFFLE: runtime: O(n^3) [12245 + 27938*z + 26834*z^2 + 10126*z^3], size: INF ---------------------------------------- (103) FinalProof (FINISHED) Computed overall runtime complexity ---------------------------------------- (104) BOUNDS(1, n^3) ---------------------------------------- (105) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (106) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, z1, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z1, z2) -> c12 IF(false, z0, z1, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) The (relative) TRS S consists of the following rules: null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Rewrite Strategy: INNERMOST ---------------------------------------- (107) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: IF/2 ---------------------------------------- (108) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) The (relative) TRS S consists of the following rules: null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Rewrite Strategy: INNERMOST ---------------------------------------- (109) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (110) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 ---------------------------------------- (111) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: APP, REVERSE, reverse, SHUFF, app, shuff They will be analysed ascendingly in the following order: APP < REVERSE APP < SHUFF reverse < REVERSE REVERSE < SHUFF reverse < SHUFF app < reverse reverse < shuff app < SHUFF app < shuff ---------------------------------------- (112) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: APP, REVERSE, reverse, SHUFF, app, shuff They will be analysed ascendingly in the following order: APP < REVERSE APP < SHUFF reverse < REVERSE REVERSE < SHUFF reverse < SHUFF app < reverse reverse < shuff app < SHUFF app < shuff ---------------------------------------- (113) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) Induction Base: APP(gen_nil:add12_14(0), gen_nil:add12_14(b)) ->_R^Omega(1) c5 Induction Step: APP(gen_nil:add12_14(+(n16_14, 1)), gen_nil:add12_14(b)) ->_R^Omega(1) c6(APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b))) ->_IH c6(gen_c5:c613_14(c17_14)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (114) Complex Obligation (BEST) ---------------------------------------- (115) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: APP, REVERSE, reverse, SHUFF, app, shuff They will be analysed ascendingly in the following order: APP < REVERSE APP < SHUFF reverse < REVERSE REVERSE < SHUFF reverse < SHUFF app < reverse reverse < shuff app < SHUFF app < shuff ---------------------------------------- (116) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (117) BOUNDS(n^1, INF) ---------------------------------------- (118) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: app, REVERSE, reverse, SHUFF, shuff They will be analysed ascendingly in the following order: reverse < REVERSE REVERSE < SHUFF reverse < SHUFF app < reverse reverse < shuff app < SHUFF app < shuff ---------------------------------------- (119) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) Induction Base: app(gen_nil:add12_14(0), gen_nil:add12_14(b)) ->_R^Omega(0) gen_nil:add12_14(b) Induction Step: app(gen_nil:add12_14(+(n700_14, 1)), gen_nil:add12_14(b)) ->_R^Omega(0) add(hole_head3_14, app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b))) ->_IH add(hole_head3_14, gen_nil:add12_14(+(b, c701_14))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (120) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: reverse, REVERSE, SHUFF, shuff They will be analysed ascendingly in the following order: reverse < REVERSE REVERSE < SHUFF reverse < SHUFF reverse < shuff ---------------------------------------- (121) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: reverse(gen_nil:add12_14(n1833_14)) -> gen_nil:add12_14(n1833_14), rt in Omega(0) Induction Base: reverse(gen_nil:add12_14(0)) ->_R^Omega(0) nil Induction Step: reverse(gen_nil:add12_14(+(n1833_14, 1))) ->_R^Omega(0) app(reverse(gen_nil:add12_14(n1833_14)), add(hole_head3_14, nil)) ->_IH app(gen_nil:add12_14(c1834_14), add(hole_head3_14, nil)) ->_L^Omega(0) gen_nil:add12_14(+(n1833_14, +(0, 1))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (122) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) reverse(gen_nil:add12_14(n1833_14)) -> gen_nil:add12_14(n1833_14), rt in Omega(0) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: REVERSE, SHUFF, shuff They will be analysed ascendingly in the following order: REVERSE < SHUFF ---------------------------------------- (123) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: REVERSE(gen_nil:add12_14(n2211_14)) -> *15_14, rt in Omega(n2211_14 + n2211_14^2) Induction Base: REVERSE(gen_nil:add12_14(0)) Induction Step: REVERSE(gen_nil:add12_14(+(n2211_14, 1))) ->_R^Omega(1) c8(APP(reverse(gen_nil:add12_14(n2211_14)), add(hole_head3_14, nil)), REVERSE(gen_nil:add12_14(n2211_14))) ->_L^Omega(0) c8(APP(gen_nil:add12_14(n2211_14), add(hole_head3_14, nil)), REVERSE(gen_nil:add12_14(n2211_14))) ->_L^Omega(1 + n2211_14) c8(gen_c5:c613_14(n2211_14), REVERSE(gen_nil:add12_14(n2211_14))) ->_IH c8(gen_c5:c613_14(n2211_14), *15_14) We have rt in Omega(n^2) and sz in O(n). Thus, we have irc_R in Omega(n^2). ---------------------------------------- (124) Complex Obligation (BEST) ---------------------------------------- (125) Obligation: Proved the lower bound n^2 for the following obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) reverse(gen_nil:add12_14(n1833_14)) -> gen_nil:add12_14(n1833_14), rt in Omega(0) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: REVERSE, SHUFF, shuff They will be analysed ascendingly in the following order: REVERSE < SHUFF ---------------------------------------- (126) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (127) BOUNDS(n^2, INF) ---------------------------------------- (128) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) reverse(gen_nil:add12_14(n1833_14)) -> gen_nil:add12_14(n1833_14), rt in Omega(0) REVERSE(gen_nil:add12_14(n2211_14)) -> *15_14, rt in Omega(n2211_14 + n2211_14^2) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: SHUFF, shuff ---------------------------------------- (129) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: SHUFF(gen_nil:add12_14(n6537_14), gen_nil:add12_14(b)) -> *15_14, rt in Omega(n6537_14 + n6537_14^2 + n6537_14^3) Induction Base: SHUFF(gen_nil:add12_14(0), gen_nil:add12_14(b)) Induction Step: SHUFF(gen_nil:add12_14(+(n6537_14, 1)), gen_nil:add12_14(b)) ->_R^Omega(1) c10(IF(null(gen_nil:add12_14(+(n6537_14, 1))), gen_nil:add12_14(+(n6537_14, 1)), app(gen_nil:add12_14(b), add(head(gen_nil:add12_14(+(n6537_14, 1))), nil))), NULL(gen_nil:add12_14(+(n6537_14, 1)))) ->_R^Omega(0) c10(IF(false, gen_nil:add12_14(+(1, n6537_14)), app(gen_nil:add12_14(b), add(head(gen_nil:add12_14(+(1, n6537_14))), nil))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_R^Omega(0) c10(IF(false, gen_nil:add12_14(+(1, n6537_14)), app(gen_nil:add12_14(b), add(hole_head3_14, nil))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_L^Omega(0) c10(IF(false, gen_nil:add12_14(+(1, n6537_14)), gen_nil:add12_14(+(b, +(0, 1)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_R^Omega(1) c10(c13(SHUFF(reverse(tail(gen_nil:add12_14(+(1, n6537_14)))), gen_nil:add12_14(+(1, b))), REVERSE(tail(gen_nil:add12_14(+(1, n6537_14)))), TAIL(gen_nil:add12_14(+(1, n6537_14)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_R^Omega(0) c10(c13(SHUFF(reverse(gen_nil:add12_14(n6537_14)), gen_nil:add12_14(+(1, b))), REVERSE(tail(gen_nil:add12_14(+(1, n6537_14)))), TAIL(gen_nil:add12_14(+(1, n6537_14)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_L^Omega(0) c10(c13(SHUFF(gen_nil:add12_14(n6537_14), gen_nil:add12_14(+(1, b))), REVERSE(tail(gen_nil:add12_14(+(1, n6537_14)))), TAIL(gen_nil:add12_14(+(1, n6537_14)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_IH c10(c13(*15_14, REVERSE(tail(gen_nil:add12_14(+(1, n6537_14)))), TAIL(gen_nil:add12_14(+(1, n6537_14)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_R^Omega(0) c10(c13(*15_14, REVERSE(gen_nil:add12_14(n6537_14)), TAIL(gen_nil:add12_14(+(1, n6537_14)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_L^Omega(n6537_14 + n6537_14^2) c10(c13(*15_14, *15_14, TAIL(gen_nil:add12_14(+(1, n6537_14)))), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_R^Omega(1) c10(c13(*15_14, *15_14, c2), NULL(gen_nil:add12_14(+(1, n6537_14)))) ->_R^Omega(1) c10(c13(*15_14, *15_14, c2), c1) We have rt in Omega(n^3) and sz in O(n). Thus, we have irc_R in Omega(n^3). ---------------------------------------- (130) Complex Obligation (BEST) ---------------------------------------- (131) Obligation: Proved the lower bound n^3 for the following obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) reverse(gen_nil:add12_14(n1833_14)) -> gen_nil:add12_14(n1833_14), rt in Omega(0) REVERSE(gen_nil:add12_14(n2211_14)) -> *15_14, rt in Omega(n2211_14 + n2211_14^2) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: SHUFF, shuff ---------------------------------------- (132) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (133) BOUNDS(n^3, INF) ---------------------------------------- (134) Obligation: Innermost TRS: Rules: NULL(nil) -> c NULL(add(z0, z1)) -> c1 TAIL(add(z0, z1)) -> c2 TAIL(nil) -> c3 HEAD(add(z0, z1)) -> c4 APP(nil, z0) -> c5 APP(add(z0, z1), z2) -> c6(APP(z1, z2)) REVERSE(nil) -> c7 REVERSE(add(z0, z1)) -> c8(APP(reverse(z1), add(z0, nil)), REVERSE(z1)) SHUFFLE(z0) -> c9(SHUFF(z0, nil)) SHUFF(z0, z1) -> c10(IF(null(z0), z0, app(z1, add(head(z0), nil))), NULL(z0)) SHUFF(z0, z1) -> c11(IF(null(z0), z0, app(z1, add(head(z0), nil))), APP(z1, add(head(z0), nil)), HEAD(z0)) IF(true, z0, z2) -> c12 IF(false, z0, z2) -> c13(SHUFF(reverse(tail(z0)), z2), REVERSE(tail(z0)), TAIL(z0)) null(nil) -> true null(add(z0, z1)) -> false tail(add(z0, z1)) -> z1 tail(nil) -> nil head(add(z0, z1)) -> z0 app(nil, z0) -> z0 app(add(z0, z1), z2) -> add(z0, app(z1, z2)) reverse(nil) -> nil reverse(add(z0, z1)) -> app(reverse(z1), add(z0, nil)) shuffle(z0) -> shuff(z0, nil) shuff(z0, z1) -> if(null(z0), z0, z1, app(z1, add(head(z0), nil))) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> shuff(reverse(tail(z0)), z2) Types: NULL :: nil:add -> c:c1 nil :: nil:add c :: c:c1 add :: head -> nil:add -> nil:add c1 :: c:c1 TAIL :: nil:add -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:add -> c4 c4 :: c4 APP :: nil:add -> nil:add -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 REVERSE :: nil:add -> c7:c8 c7 :: c7:c8 c8 :: c5:c6 -> c7:c8 -> c7:c8 reverse :: nil:add -> nil:add SHUFFLE :: nil:add -> c9 c9 :: c10:c11 -> c9 SHUFF :: nil:add -> nil:add -> c10:c11 c10 :: c12:c13 -> c:c1 -> c10:c11 IF :: true:false -> nil:add -> nil:add -> c12:c13 null :: nil:add -> true:false app :: nil:add -> nil:add -> nil:add head :: nil:add -> head c11 :: c12:c13 -> c5:c6 -> c4 -> c10:c11 true :: true:false c12 :: c12:c13 false :: true:false c13 :: c10:c11 -> c7:c8 -> c2:c3 -> c12:c13 tail :: nil:add -> nil:add shuffle :: nil:add -> nil:add shuff :: nil:add -> nil:add -> nil:add if :: true:false -> nil:add -> nil:add -> nil:add -> nil:add hole_c:c11_14 :: c:c1 hole_nil:add2_14 :: nil:add hole_head3_14 :: head hole_c2:c34_14 :: c2:c3 hole_c45_14 :: c4 hole_c5:c66_14 :: c5:c6 hole_c7:c87_14 :: c7:c8 hole_c98_14 :: c9 hole_c10:c119_14 :: c10:c11 hole_c12:c1310_14 :: c12:c13 hole_true:false11_14 :: true:false gen_nil:add12_14 :: Nat -> nil:add gen_c5:c613_14 :: Nat -> c5:c6 gen_c7:c814_14 :: Nat -> c7:c8 Lemmas: APP(gen_nil:add12_14(n16_14), gen_nil:add12_14(b)) -> gen_c5:c613_14(n16_14), rt in Omega(1 + n16_14) app(gen_nil:add12_14(n700_14), gen_nil:add12_14(b)) -> gen_nil:add12_14(+(n700_14, b)), rt in Omega(0) reverse(gen_nil:add12_14(n1833_14)) -> gen_nil:add12_14(n1833_14), rt in Omega(0) REVERSE(gen_nil:add12_14(n2211_14)) -> *15_14, rt in Omega(n2211_14 + n2211_14^2) SHUFF(gen_nil:add12_14(n6537_14), gen_nil:add12_14(b)) -> *15_14, rt in Omega(n6537_14 + n6537_14^2 + n6537_14^3) Generator Equations: gen_nil:add12_14(0) <=> nil gen_nil:add12_14(+(x, 1)) <=> add(hole_head3_14, gen_nil:add12_14(x)) gen_c5:c613_14(0) <=> c5 gen_c5:c613_14(+(x, 1)) <=> c6(gen_c5:c613_14(x)) gen_c7:c814_14(0) <=> c7 gen_c7:c814_14(+(x, 1)) <=> c8(c5, gen_c7:c814_14(x)) The following defined symbols remain to be analysed: shuff ---------------------------------------- (135) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: shuff(gen_nil:add12_14(n16398_14), gen_nil:add12_14(b)) -> *15_14, rt in Omega(0) Induction Base: shuff(gen_nil:add12_14(0), gen_nil:add12_14(b)) Induction Step: shuff(gen_nil:add12_14(+(n16398_14, 1)), gen_nil:add12_14(b)) ->_R^Omega(0) if(null(gen_nil:add12_14(+(n16398_14, 1))), gen_nil:add12_14(+(n16398_14, 1)), gen_nil:add12_14(b), app(gen_nil:add12_14(b), add(head(gen_nil:add12_14(+(n16398_14, 1))), nil))) ->_R^Omega(0) if(false, gen_nil:add12_14(+(1, n16398_14)), gen_nil:add12_14(b), app(gen_nil:add12_14(b), add(head(gen_nil:add12_14(+(1, n16398_14))), nil))) ->_R^Omega(0) if(false, gen_nil:add12_14(+(1, n16398_14)), gen_nil:add12_14(b), app(gen_nil:add12_14(b), add(hole_head3_14, nil))) ->_L^Omega(0) if(false, gen_nil:add12_14(+(1, n16398_14)), gen_nil:add12_14(+(0, 1)), gen_nil:add12_14(+(b, +(0, 1)))) ->_R^Omega(0) shuff(reverse(tail(gen_nil:add12_14(+(1, n16398_14)))), gen_nil:add12_14(+(1, b))) ->_R^Omega(0) shuff(reverse(gen_nil:add12_14(n16398_14)), gen_nil:add12_14(+(1, b))) ->_L^Omega(0) shuff(gen_nil:add12_14(n16398_14), gen_nil:add12_14(+(1, b))) ->_IH *15_14 We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (136) BOUNDS(1, INF)