/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 303 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), 0 ms] (12) CpxRNTS (13) InliningProof [UPPER BOUND(ID), 1574 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), 196 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 16 ms] (24) CpxRNTS (25) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (26) CpxRNTS (27) IntTrsBoundProof [UPPER BOUND(ID), 501 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 75 ms] (30) CpxRNTS (31) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (32) CpxRNTS (33) IntTrsBoundProof [UPPER BOUND(ID), 300 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] (36) CpxRNTS (37) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (38) CpxRNTS (39) IntTrsBoundProof [UPPER BOUND(ID), 2707 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 1280 ms] (42) CpxRNTS (43) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (44) CpxRNTS (45) IntTrsBoundProof [UPPER BOUND(ID), 894 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 719 ms] (48) CpxRNTS (49) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) IntTrsBoundProof [UPPER BOUND(ID), 3233 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 803 ms] (54) CpxRNTS (55) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (56) CpxRNTS (57) IntTrsBoundProof [UPPER BOUND(ID), 606 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 0 ms] (60) CpxRNTS (61) FinalProof [FINISHED, 0 ms] (62) BOUNDS(1, n^2) (63) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] (64) TRS for Loop Detection (65) DecreasingLoopProof [LOWER BOUND(ID), 0 ms] (66) BEST (67) proven lower bound (68) LowerBoundPropagationProof [FINISHED, 0 ms] (69) BOUNDS(n^1, INF) (70) TRS for Loop Detection ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) domatch(Cons(x, xs), Nil, n) -> Nil domatch(Nil, Nil, n) -> Cons(n, Nil) prefix(Cons(x, xs), Nil) -> False prefix(Nil, cs) -> True domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) eqNatList(Cons(x, xs), Nil) -> False eqNatList(Nil, Cons(y, ys)) -> False eqNatList(Nil, Nil) -> True notEmpty(Cons(x, xs)) -> True notEmpty(Nil) -> False strmatch(patstr, str) -> domatch(patstr, str, Nil) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True !EQ(S(x), S(y)) -> !EQ(x, y) !EQ(0, S(y)) -> False !EQ(S(x), 0) -> False !EQ(0, 0) -> True domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) eqNatList[Ite](False, y, ys, x, xs) -> False eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) 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^1, n^2). The TRS R consists of the following rules: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) domatch(Cons(x, xs), Nil, n) -> Nil domatch(Nil, Nil, n) -> Cons(n, Nil) prefix(Cons(x, xs), Nil) -> False prefix(Nil, cs) -> True domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) eqNatList(Cons(x, xs), Nil) -> False eqNatList(Nil, Cons(y, ys)) -> False eqNatList(Nil, Nil) -> True notEmpty(Cons(x, xs)) -> True notEmpty(Nil) -> False strmatch(patstr, str) -> domatch(patstr, str, Nil) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True !EQ(S(x), S(y)) -> !EQ(x, y) !EQ(0, S(y)) -> False !EQ(S(x), 0) -> False !EQ(0, 0) -> True domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) eqNatList[Ite](False, y, ys, x, xs) -> False eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) 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^2). The TRS R consists of the following rules: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) [1] domatch(Cons(x, xs), Nil, n) -> Nil [1] domatch(Nil, Nil, n) -> Cons(n, Nil) [1] prefix(Cons(x, xs), Nil) -> False [1] prefix(Nil, cs) -> True [1] domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) [1] eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) [1] eqNatList(Cons(x, xs), Nil) -> False [1] eqNatList(Nil, Cons(y, ys)) -> False [1] eqNatList(Nil, Nil) -> True [1] notEmpty(Cons(x, xs)) -> True [1] notEmpty(Nil) -> False [1] strmatch(patstr, str) -> domatch(patstr, str, Nil) [1] and(False, False) -> False [0] and(True, False) -> False [0] and(False, True) -> False [0] and(True, True) -> True [0] !EQ(S(x), S(y)) -> !EQ(x, y) [0] !EQ(0, S(y)) -> False [0] !EQ(S(x), 0) -> False [0] !EQ(0, 0) -> True [0] domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0] domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0] eqNatList[Ite](False, y, ys, x, xs) -> False [0] eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) [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: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) [1] domatch(Cons(x, xs), Nil, n) -> Nil [1] domatch(Nil, Nil, n) -> Cons(n, Nil) [1] prefix(Cons(x, xs), Nil) -> False [1] prefix(Nil, cs) -> True [1] domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) [1] eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) [1] eqNatList(Cons(x, xs), Nil) -> False [1] eqNatList(Nil, Cons(y, ys)) -> False [1] eqNatList(Nil, Nil) -> True [1] notEmpty(Cons(x, xs)) -> True [1] notEmpty(Nil) -> False [1] strmatch(patstr, str) -> domatch(patstr, str, Nil) [1] and(False, False) -> False [0] and(True, False) -> False [0] and(False, True) -> False [0] and(True, True) -> True [0] !EQ(S(x), S(y)) -> !EQ(x, y) [0] !EQ(0, S(y)) -> False [0] !EQ(S(x), 0) -> False [0] !EQ(0, 0) -> True [0] domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0] domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0] eqNatList[Ite](False, y, ys, x, xs) -> False [0] eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) [0] The TRS has the following type information: prefix :: Cons:Nil:S:0 -> Cons:Nil:S:0 -> False:True Cons :: Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 and :: False:True -> False:True -> False:True !EQ :: Cons:Nil:S:0 -> Cons:Nil:S:0 -> False:True domatch :: Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 Nil :: Cons:Nil:S:0 False :: False:True True :: False:True domatch[Ite] :: False:True -> Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 eqNatList :: Cons:Nil:S:0 -> Cons:Nil:S:0 -> False:True eqNatList[Ite] :: False:True -> Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 -> False:True notEmpty :: Cons:Nil:S:0 -> False:True strmatch :: Cons:Nil:S:0 -> Cons:Nil:S:0 -> Cons:Nil:S:0 S :: Cons:Nil:S:0 -> Cons:Nil:S:0 0 :: Cons:Nil:S:0 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: domatch_3 eqNatList_2 notEmpty_1 strmatch_2 (c) The following functions are completely defined: prefix_2 and_2 !EQ_2 domatch[Ite]_4 eqNatList[Ite]_5 Due to the following rules being added: and(v0, v1) -> null_and [0] !EQ(v0, v1) -> null_!EQ [0] domatch[Ite](v0, v1, v2, v3) -> null_domatch[Ite] [0] eqNatList[Ite](v0, v1, v2, v3, v4) -> null_eqNatList[Ite] [0] prefix(v0, v1) -> null_prefix [0] And the following fresh constants: null_and, null_!EQ, null_domatch[Ite], null_eqNatList[Ite], null_prefix ---------------------------------------- (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: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) [1] domatch(Cons(x, xs), Nil, n) -> Nil [1] domatch(Nil, Nil, n) -> Cons(n, Nil) [1] prefix(Cons(x, xs), Nil) -> False [1] prefix(Nil, cs) -> True [1] domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) [1] eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) [1] eqNatList(Cons(x, xs), Nil) -> False [1] eqNatList(Nil, Cons(y, ys)) -> False [1] eqNatList(Nil, Nil) -> True [1] notEmpty(Cons(x, xs)) -> True [1] notEmpty(Nil) -> False [1] strmatch(patstr, str) -> domatch(patstr, str, Nil) [1] and(False, False) -> False [0] and(True, False) -> False [0] and(False, True) -> False [0] and(True, True) -> True [0] !EQ(S(x), S(y)) -> !EQ(x, y) [0] !EQ(0, S(y)) -> False [0] !EQ(S(x), 0) -> False [0] !EQ(0, 0) -> True [0] domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0] domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0] eqNatList[Ite](False, y, ys, x, xs) -> False [0] eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) [0] and(v0, v1) -> null_and [0] !EQ(v0, v1) -> null_!EQ [0] domatch[Ite](v0, v1, v2, v3) -> null_domatch[Ite] [0] eqNatList[Ite](v0, v1, v2, v3, v4) -> null_eqNatList[Ite] [0] prefix(v0, v1) -> null_prefix [0] The TRS has the following type information: prefix :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix Cons :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix !EQ :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix domatch :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] Nil :: Cons:Nil:S:0:null_domatch[Ite] False :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix True :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix domatch[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] eqNatList :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix notEmpty :: Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix strmatch :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] S :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] 0 :: Cons:Nil:S:0:null_domatch[Ite] null_and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix null_!EQ :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix null_domatch[Ite] :: Cons:Nil:S:0:null_domatch[Ite] null_eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix null_prefix :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix 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: prefix(Cons(S(x''), Cons(x''', xs'')), Cons(S(y'), Cons(x2, xs1))) -> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) [2] prefix(Cons(S(x''), Cons(x3, xs2)), Cons(S(y'), Nil)) -> and(!EQ(x'', y'), False) [2] prefix(Cons(S(x''), Nil), Cons(S(y'), xs)) -> and(!EQ(x'', y'), True) [2] prefix(Cons(S(x''), xs'), Cons(S(y'), xs)) -> and(!EQ(x'', y'), null_prefix) [1] prefix(Cons(0, Cons(x'1, xs''')), Cons(S(y''), Cons(x4, xs3))) -> and(False, and(!EQ(x'1, x4), prefix(xs''', xs3))) [2] prefix(Cons(0, Cons(x5, xs4)), Cons(S(y''), Nil)) -> and(False, False) [2] prefix(Cons(0, Nil), Cons(S(y''), xs)) -> and(False, True) [2] prefix(Cons(0, xs'), Cons(S(y''), xs)) -> and(False, null_prefix) [1] prefix(Cons(S(x1), Cons(x'2, xs'1)), Cons(0, Cons(x6, xs5))) -> and(False, and(!EQ(x'2, x6), prefix(xs'1, xs5))) [2] prefix(Cons(S(x1), Cons(x7, xs6)), Cons(0, Nil)) -> and(False, False) [2] prefix(Cons(S(x1), Nil), Cons(0, xs)) -> and(False, True) [2] prefix(Cons(S(x1), xs'), Cons(0, xs)) -> and(False, null_prefix) [1] prefix(Cons(0, Cons(x'3, xs'2)), Cons(0, Cons(x8, xs7))) -> and(True, and(!EQ(x'3, x8), prefix(xs'2, xs7))) [2] prefix(Cons(0, Cons(x9, xs8)), Cons(0, Nil)) -> and(True, False) [2] prefix(Cons(0, Nil), Cons(0, xs)) -> and(True, True) [2] prefix(Cons(0, xs'), Cons(0, xs)) -> and(True, null_prefix) [1] prefix(Cons(x', Cons(x'4, xs'3)), Cons(x, Cons(x10, xs9))) -> and(null_!EQ, and(!EQ(x'4, x10), prefix(xs'3, xs9))) [2] prefix(Cons(x', Cons(x11, xs10)), Cons(x, Nil)) -> and(null_!EQ, False) [2] prefix(Cons(x', Nil), Cons(x, xs)) -> and(null_!EQ, True) [2] prefix(Cons(x', xs'), Cons(x, xs)) -> and(null_!EQ, null_prefix) [1] domatch(Cons(x, xs), Nil, n) -> Nil [1] domatch(Nil, Nil, n) -> Cons(n, Nil) [1] prefix(Cons(x, xs), Nil) -> False [1] prefix(Nil, cs) -> True [1] domatch(Cons(x'5, xs'4), Cons(x, xs), n) -> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), Cons(x'5, xs'4), Cons(x, xs), n) [2] domatch(Nil, Cons(x, xs), n) -> domatch[Ite](True, Nil, Cons(x, xs), n) [2] domatch(patcs, Cons(x, xs), n) -> domatch[Ite](null_prefix, patcs, Cons(x, xs), n) [1] eqNatList(Cons(S(x12), xs), Cons(S(y1), ys)) -> eqNatList[Ite](!EQ(x12, y1), S(y1), ys, S(x12), xs) [1] eqNatList(Cons(0, xs), Cons(S(y2), ys)) -> eqNatList[Ite](False, S(y2), ys, 0, xs) [1] eqNatList(Cons(S(x13), xs), Cons(0, ys)) -> eqNatList[Ite](False, 0, ys, S(x13), xs) [1] eqNatList(Cons(0, xs), Cons(0, ys)) -> eqNatList[Ite](True, 0, ys, 0, xs) [1] eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](null_!EQ, y, ys, x, xs) [1] eqNatList(Cons(x, xs), Nil) -> False [1] eqNatList(Nil, Cons(y, ys)) -> False [1] eqNatList(Nil, Nil) -> True [1] notEmpty(Cons(x, xs)) -> True [1] notEmpty(Nil) -> False [1] strmatch(patstr, str) -> domatch(patstr, str, Nil) [1] and(False, False) -> False [0] and(True, False) -> False [0] and(False, True) -> False [0] and(True, True) -> True [0] !EQ(S(x), S(y)) -> !EQ(x, y) [0] !EQ(0, S(y)) -> False [0] !EQ(S(x), 0) -> False [0] !EQ(0, 0) -> True [0] domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) [0] domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) [0] eqNatList[Ite](False, y, ys, x, xs) -> False [0] eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) [0] and(v0, v1) -> null_and [0] !EQ(v0, v1) -> null_!EQ [0] domatch[Ite](v0, v1, v2, v3) -> null_domatch[Ite] [0] eqNatList[Ite](v0, v1, v2, v3, v4) -> null_eqNatList[Ite] [0] prefix(v0, v1) -> null_prefix [0] The TRS has the following type information: prefix :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix Cons :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix !EQ :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix domatch :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] Nil :: Cons:Nil:S:0:null_domatch[Ite] False :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix True :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix domatch[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] eqNatList :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix notEmpty :: Cons:Nil:S:0:null_domatch[Ite] -> False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix strmatch :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] S :: Cons:Nil:S:0:null_domatch[Ite] -> Cons:Nil:S:0:null_domatch[Ite] 0 :: Cons:Nil:S:0:null_domatch[Ite] null_and :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix null_!EQ :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix null_domatch[Ite] :: Cons:Nil:S:0:null_domatch[Ite] null_eqNatList[Ite] :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix null_prefix :: False:True:null_and:null_!EQ:null_eqNatList[Ite]:null_prefix 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 => 1 False => 1 True => 2 0 => 0 null_and => 0 null_!EQ => 0 null_domatch[Ite] => 0 null_eqNatList[Ite] => 0 null_prefix => 0 ---------------------------------------- (12) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' = 1 + y, y >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: x >= 0, z = 1 + x, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 !EQ(z, z') -{ 0 }-> !EQ(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, patcs, 1 + x + xs, n) :|: patcs >= 0, xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = patcs domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, n >= 0, z'' = n, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + n + 1 :|: n >= 0, z'' = n, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: patcs >= 0, xs >= 0, n >= 0, z1 = n, z = 1, x >= 0, z' = patcs, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + n + domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: z = 2, patcs >= 0, xs >= 0, n >= 0, z1 = n, x >= 0, z' = patcs, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, ys, 0, xs) :|: xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + 0 + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, ys, 1 + x13, xs) :|: x13 >= 0, xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, xs) :|: xs >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, z = 1 + 0 + xs, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(xs, ys) :|: z = 2, xs >= 0, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: xs >= 0, z = 1, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(2, 2) :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + 1 prefix(z, z') -{ 2 }-> and(2, 1) :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0 prefix(z, z') -{ 1 }-> and(2, 0) :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + xs', xs' >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(1, 2) :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1 prefix(z, z') -{ 2 }-> and(1, 2) :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + 1 prefix(z, z') -{ 2 }-> and(1, 1) :|: x5 >= 0, z' = 1 + (1 + y'') + 1, y'' >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4) prefix(z, z') -{ 2 }-> and(1, 1) :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0 prefix(z, z') -{ 1 }-> and(1, 0) :|: xs >= 0, z = 1 + 0 + xs', xs' >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0 prefix(z, z') -{ 1 }-> and(1, 0) :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + xs', xs' >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(0, 2) :|: xs >= 0, z' = 1 + x + xs, x' >= 0, x >= 0, z = 1 + x' + 1 prefix(z, z') -{ 2 }-> and(0, 1) :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, x >= 0, x11 >= 0, xs10 >= 0, z' = 1 + x + 1 prefix(z, z') -{ 1 }-> and(0, 0) :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs' prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, x'' >= 0, z = 1 + (1 + x'') + 1 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), y' >= 0, x'' >= 0, z' = 1 + (1 + y') + 1, x3 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' = cs, cs >= 0 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 strmatch(z, z') -{ 1 }-> domatch(patstr, str, 1) :|: z' = str, patstr >= 0, str >= 0, z = patstr ---------------------------------------- (13) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' = 1 + y, y >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: x >= 0, z = 1 + x, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 !EQ(z, z') -{ 0 }-> !EQ(x, y) :|: z' = 1 + y, x >= 0, y >= 0, z = 1 + x and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, n) :|: xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, patcs, 1 + x + xs, n) :|: patcs >= 0, xs >= 0, n >= 0, z'' = n, z' = 1 + x + xs, x >= 0, z = patcs domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, n >= 0, z'' = n, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + n + 1 :|: n >= 0, z'' = n, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: patcs >= 0, xs >= 0, n >= 0, z1 = n, z = 1, x >= 0, z' = patcs, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + n + domatch(patcs, xs, 1 + n + (1 + 1 + 1)) :|: z = 2, patcs >= 0, xs >= 0, n >= 0, z1 = n, x >= 0, z' = patcs, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, ys, 0, xs) :|: xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + 0 + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, ys, 1 + x13, xs) :|: x13 >= 0, xs >= 0, ys >= 0, z' = 1 + 0 + ys, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, xs) :|: xs >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, z = 1 + 0 + xs, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(xs, ys) :|: z = 2, xs >= 0, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: xs >= 0, z = 1, ys >= 0, y >= 0, x >= 0, z'' = ys, z' = y, z2 = xs, z1 = x eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, v4 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, z2 = v4, v2 >= 0, v3 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, x'' >= 0, z = 1 + (1 + x'') + 1 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), y' >= 0, x'' >= 0, z' = 1 + (1 + y') + 1, x3 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' = cs, cs >= 0 prefix(z, z') -{ 2 }-> 2 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' = 1 + (1 + y'') + 1, y'' >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + xs', xs' >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' = 1 + (1 + y'') + 1, y'' >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z = 1 + 0 + xs', xs' >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, x1 >= 0, z' = 1 + 0 + xs, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + 0 + xs, z = 1 + 0 + xs', xs' >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, x >= 0, x11 >= 0, xs10 >= 0, z' = 1 + x + 1, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, x >= 0, z = 1 + x' + 1, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(patstr, str, 1) :|: z' = str, patstr >= 0, str >= 0, z = patstr ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 ---------------------------------------- (17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { notEmpty } { !EQ } { and } { eqNatList[Ite], eqNatList } { prefix } { domatch[Ite], domatch } { strmatch } ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {notEmpty}, {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {notEmpty}, {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} ---------------------------------------- (21) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: notEmpty after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {notEmpty}, {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: ?, size: O(1) [2] ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: notEmpty 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: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] ---------------------------------------- (27) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: !EQ after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {!EQ}, {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: ?, size: O(1) [2] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: !EQ 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: !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 !EQ(z, z') -{ 0 }-> !EQ(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(!EQ(x'5, x), prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> eqNatList[Ite](!EQ(x12, y1), 1 + y1, ys, 1 + x12, xs) :|: y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(2, and(!EQ(x'3, x8), prefix(xs'2, xs7))) :|: x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'1, x4), prefix(xs''', xs3))) :|: z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(!EQ(x'2, x6), prefix(xs'1, xs5))) :|: x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(!EQ(x'4, x10), prefix(xs'3, xs9))) :|: z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', y'), and(!EQ(x''', x2), prefix(xs'', xs1))) :|: z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 1 }-> and(!EQ(x'', y'), 0) :|: z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(!EQ(x'', z' - 3), 1) :|: xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(!EQ(z - 3, y'), 2) :|: xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(s2, 1) :|: s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(s3, 2) :|: s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> and(s4, 0) :|: s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (33) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: and after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(s2, 1) :|: s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(s3, 2) :|: s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> and(s4, 0) :|: s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {and}, {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: ?, size: O(1) [2] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: and after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(s2, 1) :|: s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> and(s3, 2) :|: s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> and(s4, 0) :|: s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] ---------------------------------------- (39) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: eqNatList[Ite] after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 Computed SIZE bound using CoFloCo for: eqNatList after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {eqNatList[Ite],eqNatList}, {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: ?, size: O(1) [2] eqNatList: runtime: ?, size: O(1) [2] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: eqNatList[Ite] after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 8 + 10*z'' Computed RUNTIME bound using CoFloCo for: eqNatList after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 11 + 10*z' ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](s, 1 + y1, ys, 1 + x12, xs) :|: s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](2, 0, z' - 1, 0, z - 1) :|: z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 0, z' - 1, 1 + x13, xs) :|: x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ 1 }-> eqNatList[Ite](1, 1 + y2, ys, 0, z - 1) :|: z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ 1 }-> eqNatList[Ite](0, y, ys, x, xs) :|: z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> eqNatList(z2, z'') :|: z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] ---------------------------------------- (45) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: prefix after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 2 ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {prefix}, {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: ?, size: O(1) [2] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: prefix after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 4 + 2*z' ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](and(s9, prefix(xs'4, xs)), 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 2 }-> and(s'', and(s1, prefix(xs'', xs1))) :|: s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 2 }-> and(2, and(s7, prefix(xs'2, xs7))) :|: s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s5, prefix(xs''', xs3))) :|: s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 2 }-> and(1, and(s6, prefix(xs'1, xs5))) :|: s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 2 }-> and(0, and(s8, prefix(xs'3, xs9))) :|: s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] ---------------------------------------- (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: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 6 + 2*xs }-> domatch[Ite](s35, 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 6 + 2*xs1 }-> s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 6 + 2*xs3 }-> s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 6 + 2*xs5 }-> s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 6 + 2*xs7 }-> s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 6 + 2*xs9 }-> s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] ---------------------------------------- (51) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: domatch[Ite] after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 15 + 11*z'' + z''*z1 + 4*z''^2 + 3*z1 Computed SIZE bound using KoAT for: domatch after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 93 + 114*z' + 6*z'*z'' + 48*z'^2 + 13*z'' ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 6 + 2*xs }-> domatch[Ite](s35, 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 6 + 2*xs1 }-> s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 6 + 2*xs3 }-> s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 6 + 2*xs5 }-> s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 6 + 2*xs7 }-> s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 6 + 2*xs9 }-> s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {domatch[Ite],domatch}, {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] domatch[Ite]: runtime: ?, size: O(n^2) [15 + 11*z'' + z''*z1 + 4*z''^2 + 3*z1] domatch: runtime: ?, size: O(n^2) [93 + 114*z' + 6*z'*z'' + 48*z'^2 + 13*z''] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: domatch[Ite] after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 5 + 6*z'' + 2*z''^2 Computed RUNTIME bound using KoAT for: domatch after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 50 + 62*z' + 24*z'^2 ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 6 + 2*xs }-> domatch[Ite](s35, 1 + x'5 + xs'4, 1 + x + xs, z'') :|: s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 2 }-> domatch[Ite](2, 1, 1 + x + xs, z'') :|: xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 1 }-> domatch[Ite](0, z, 1 + x + xs, z'') :|: z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 0 }-> domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 0 }-> 1 + z1 + domatch(z', xs, 1 + z1 + (1 + 1 + 1)) :|: z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 6 + 2*xs1 }-> s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 6 + 2*xs3 }-> s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 6 + 2*xs5 }-> s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 6 + 2*xs7 }-> s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 6 + 2*xs9 }-> s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 1 }-> domatch(z, z', 1) :|: z >= 0, z' >= 0 Function symbols to be analyzed: {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] domatch[Ite]: runtime: O(n^2) [5 + 6*z'' + 2*z''^2], size: O(n^2) [15 + 11*z'' + z''*z1 + 4*z''^2 + 3*z1] domatch: runtime: O(n^2) [50 + 62*z' + 24*z'^2], size: O(n^2) [93 + 114*z' + 6*z'*z'' + 48*z'^2 + 13*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: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 15 + 10*x + 4*x*xs + 2*x^2 + 10*xs + 2*xs^2 }-> s36 :|: s36 >= 0, s36 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 14 + 10*x + 4*x*xs + 2*x^2 + 10*xs + 2*xs^2 }-> s37 :|: s37 >= 0, s37 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 19 + 10*x + 4*x*xs + 2*x^2 + 12*xs + 2*xs^2 }-> s41 :|: s41 >= 0, s41 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 50 + 62*xs + 24*xs^2 }-> s39 :|: s39 >= 0, s39 <= 114 * xs + 48 * (xs * xs) + 6 * ((1 + z1 + (1 + 1 + 1)) * xs) + 13 * (1 + z1 + (1 + 1 + 1)) + 93, z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 50 + 62*xs + 24*xs^2 }-> 1 + z1 + s40 :|: s40 >= 0, s40 <= 114 * xs + 48 * (xs * xs) + 6 * ((1 + z1 + (1 + 1 + 1)) * xs) + 13 * (1 + z1 + (1 + 1 + 1)) + 93, z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 6 + 2*xs1 }-> s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 6 + 2*xs3 }-> s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 6 + 2*xs5 }-> s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 6 + 2*xs7 }-> s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 6 + 2*xs9 }-> s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 51 + 62*z' + 24*z'^2 }-> s38 :|: s38 >= 0, s38 <= 114 * z' + 48 * (z' * z') + 6 * (1 * z') + 13 * 1 + 93, z >= 0, z' >= 0 Function symbols to be analyzed: {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] domatch[Ite]: runtime: O(n^2) [5 + 6*z'' + 2*z''^2], size: O(n^2) [15 + 11*z'' + z''*z1 + 4*z''^2 + 3*z1] domatch: runtime: O(n^2) [50 + 62*z' + 24*z'^2], size: O(n^2) [93 + 114*z' + 6*z'*z'' + 48*z'^2 + 13*z''] ---------------------------------------- (57) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: strmatch after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 15 + 10*x + 4*x*xs + 2*x^2 + 10*xs + 2*xs^2 }-> s36 :|: s36 >= 0, s36 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 14 + 10*x + 4*x*xs + 2*x^2 + 10*xs + 2*xs^2 }-> s37 :|: s37 >= 0, s37 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 19 + 10*x + 4*x*xs + 2*x^2 + 12*xs + 2*xs^2 }-> s41 :|: s41 >= 0, s41 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 50 + 62*xs + 24*xs^2 }-> s39 :|: s39 >= 0, s39 <= 114 * xs + 48 * (xs * xs) + 6 * ((1 + z1 + (1 + 1 + 1)) * xs) + 13 * (1 + z1 + (1 + 1 + 1)) + 93, z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 50 + 62*xs + 24*xs^2 }-> 1 + z1 + s40 :|: s40 >= 0, s40 <= 114 * xs + 48 * (xs * xs) + 6 * ((1 + z1 + (1 + 1 + 1)) * xs) + 13 * (1 + z1 + (1 + 1 + 1)) + 93, z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 6 + 2*xs1 }-> s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 6 + 2*xs3 }-> s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 6 + 2*xs5 }-> s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 6 + 2*xs7 }-> s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 6 + 2*xs9 }-> s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 51 + 62*z' + 24*z'^2 }-> s38 :|: s38 >= 0, s38 <= 114 * z' + 48 * (z' * z') + 6 * (1 * z') + 13 * 1 + 93, z >= 0, z' >= 0 Function symbols to be analyzed: {strmatch} Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] domatch[Ite]: runtime: O(n^2) [5 + 6*z'' + 2*z''^2], size: O(n^2) [15 + 11*z'' + z''*z1 + 4*z''^2 + 3*z1] domatch: runtime: O(n^2) [50 + 62*z' + 24*z'^2], size: O(n^2) [93 + 114*z' + 6*z'*z'' + 48*z'^2 + 13*z''] strmatch: runtime: ?, size: INF ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: strmatch after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 51 + 62*z' + 24*z'^2 ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: !EQ(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 2, z - 1 >= 0, z' - 1 >= 0 !EQ(z, z') -{ 0 }-> 2 :|: z = 0, z' = 0 !EQ(z, z') -{ 0 }-> 1 :|: z' - 1 >= 0, z = 0 !EQ(z, z') -{ 0 }-> 1 :|: z - 1 >= 0, z' = 0 !EQ(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 and(z, z') -{ 0 }-> 2 :|: z = 2, z' = 2 and(z, z') -{ 0 }-> 1 :|: z = 1, z' = 1 and(z, z') -{ 0 }-> 1 :|: z = 2, z' = 1 and(z, z') -{ 0 }-> 1 :|: z' = 2, z = 1 and(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 domatch(z, z', z'') -{ 15 + 10*x + 4*x*xs + 2*x^2 + 10*xs + 2*xs^2 }-> s36 :|: s36 >= 0, s36 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), xs >= 0, z'' >= 0, z' = 1 + x + xs, z = 1, x >= 0 domatch(z, z', z'') -{ 14 + 10*x + 4*x*xs + 2*x^2 + 10*xs + 2*xs^2 }-> s37 :|: s37 >= 0, s37 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), z >= 0, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0 domatch(z, z', z'') -{ 19 + 10*x + 4*x*xs + 2*x^2 + 12*xs + 2*xs^2 }-> s41 :|: s41 >= 0, s41 <= 3 * z'' + 15 + 4 * ((1 + x + xs) * (1 + x + xs)) + 11 * (1 + x + xs) + z'' * (1 + x + xs), s34 >= 0, s34 <= 2, s35 >= 0, s35 <= 2, s9 >= 0, s9 <= 2, xs >= 0, z'' >= 0, z' = 1 + x + xs, x >= 0, z = 1 + x'5 + xs'4, xs'4 >= 0, x'5 >= 0 domatch(z, z', z'') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, z'' >= 0, x >= 0, z' = 1 domatch(z, z', z'') -{ 1 }-> 1 + z'' + 1 :|: z'' >= 0, z = 1, z' = 1 domatch[Ite](z, z', z'', z1) -{ 50 + 62*xs + 24*xs^2 }-> s39 :|: s39 >= 0, s39 <= 114 * xs + 48 * (xs * xs) + 6 * ((1 + z1 + (1 + 1 + 1)) * xs) + 13 * (1 + z1 + (1 + 1 + 1)) + 93, z' >= 0, xs >= 0, z1 >= 0, z = 1, x >= 0, z'' = 1 + x + xs domatch[Ite](z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 domatch[Ite](z, z', z'', z1) -{ 50 + 62*xs + 24*xs^2 }-> 1 + z1 + s40 :|: s40 >= 0, s40 <= 114 * xs + 48 * (xs * xs) + 6 * ((1 + z1 + (1 + 1 + 1)) * xs) + 13 * (1 + z1 + (1 + 1 + 1)) + 93, z = 2, z' >= 0, xs >= 0, z1 >= 0, x >= 0, z'' = 1 + x + xs eqNatList(z, z') -{ 9 + 10*ys }-> s13 :|: s13 >= 0, s13 <= 2, s >= 0, s <= 2, y1 >= 0, xs >= 0, z = 1 + (1 + x12) + xs, ys >= 0, z' = 1 + (1 + y1) + ys, x12 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s14 :|: s14 >= 0, s14 <= 2, z - 1 >= 0, z' = 1 + (1 + y2) + ys, ys >= 0, y2 >= 0 eqNatList(z, z') -{ -1 + 10*z' }-> s15 :|: s15 >= 0, s15 <= 2, x13 >= 0, xs >= 0, z' - 1 >= 0, z = 1 + (1 + x13) + xs eqNatList(z, z') -{ -1 + 10*z' }-> s16 :|: s16 >= 0, s16 <= 2, z - 1 >= 0, z' - 1 >= 0 eqNatList(z, z') -{ 9 + 10*ys }-> s17 :|: s17 >= 0, s17 <= 2, z = 1 + x + xs, xs >= 0, ys >= 0, x >= 0, y >= 0, z' = 1 + y + ys eqNatList(z, z') -{ 1 }-> 2 :|: z = 1, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 eqNatList(z, z') -{ 1 }-> 1 :|: z = 1, ys >= 0, y >= 0, z' = 1 + y + ys eqNatList[Ite](z, z', z'', z1, z2) -{ 11 + 10*z'' }-> s18 :|: s18 >= 0, s18 <= 2, z = 2, z2 >= 0, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 1 :|: z2 >= 0, z = 1, z'' >= 0, z' >= 0, z1 >= 0 eqNatList[Ite](z, z', z'', z1, z2) -{ 0 }-> 0 :|: z >= 0, z2 >= 0, z' >= 0, z'' >= 0, z1 >= 0 notEmpty(z) -{ 1 }-> 2 :|: z = 1 + x + xs, xs >= 0, x >= 0 notEmpty(z) -{ 1 }-> 1 :|: z = 1 prefix(z, z') -{ 2 }-> s10 :|: s10 >= 0, s10 <= 2, s2 >= 0, s2 <= 2, xs2 >= 0, z = 1 + (1 + x'') + (1 + x3 + xs2), z' - 3 >= 0, x'' >= 0, x3 >= 0 prefix(z, z') -{ 2 }-> s11 :|: s11 >= 0, s11 <= 2, s3 >= 0, s3 <= 2, xs >= 0, z' = 1 + (1 + y') + xs, y' >= 0, z - 3 >= 0 prefix(z, z') -{ 1 }-> s12 :|: s12 >= 0, s12 <= 2, s4 >= 0, s4 <= 2, z = 1 + (1 + x'') + xs', xs >= 0, z' = 1 + (1 + y') + xs, xs' >= 0, y' >= 0, x'' >= 0 prefix(z, z') -{ 6 + 2*xs1 }-> s21 :|: s19 >= 0, s19 <= 2, s20 >= 0, s20 <= 2, s21 >= 0, s21 <= 2, s'' >= 0, s'' <= 2, s1 >= 0, s1 <= 2, z = 1 + (1 + x'') + (1 + x''' + xs''), z' = 1 + (1 + y') + (1 + x2 + xs1), xs'' >= 0, y' >= 0, xs1 >= 0, x''' >= 0, x'' >= 0, x2 >= 0 prefix(z, z') -{ 6 + 2*xs3 }-> s24 :|: s22 >= 0, s22 <= 2, s23 >= 0, s23 <= 2, s24 >= 0, s24 <= 2, s5 >= 0, s5 <= 2, z' = 1 + (1 + y'') + (1 + x4 + xs3), x4 >= 0, x'1 >= 0, z = 1 + 0 + (1 + x'1 + xs'''), y'' >= 0, xs''' >= 0, xs3 >= 0 prefix(z, z') -{ 6 + 2*xs5 }-> s27 :|: s25 >= 0, s25 <= 2, s26 >= 0, s26 <= 2, s27 >= 0, s27 <= 2, s6 >= 0, s6 <= 2, x1 >= 0, z' = 1 + 0 + (1 + x6 + xs5), x'2 >= 0, x6 >= 0, z = 1 + (1 + x1) + (1 + x'2 + xs'1), xs5 >= 0, xs'1 >= 0 prefix(z, z') -{ 6 + 2*xs7 }-> s30 :|: s28 >= 0, s28 <= 2, s29 >= 0, s29 <= 2, s30 >= 0, s30 <= 2, s7 >= 0, s7 <= 2, x8 >= 0, x'3 >= 0, z' = 1 + 0 + (1 + x8 + xs7), xs7 >= 0, z = 1 + 0 + (1 + x'3 + xs'2), xs'2 >= 0 prefix(z, z') -{ 6 + 2*xs9 }-> s33 :|: s31 >= 0, s31 <= 2, s32 >= 0, s32 <= 2, s33 >= 0, s33 <= 2, s8 >= 0, s8 <= 2, z = 1 + x' + (1 + x'4 + xs'3), z' = 1 + x + (1 + x10 + xs9), x' >= 0, x >= 0, x'4 >= 0, x10 >= 0, xs9 >= 0, xs'3 >= 0 prefix(z, z') -{ 1 }-> 2 :|: z = 1, z' >= 0 prefix(z, z') -{ 2 }-> 2 :|: z' - 1 >= 0, z = 1 + 0 + 1, 2 = 2 prefix(z, z') -{ 1 }-> 1 :|: z = 1 + x + xs, xs >= 0, x >= 0, z' = 1 prefix(z, z') -{ 2 }-> 1 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z' - 1 >= 0, z - 3 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 2 }-> 1 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, 2 = 2, 1 = 1 prefix(z, z') -{ 1 }-> 1 :|: z' - 1 >= 0, z - 1 >= 0, 2 = 2, 0 = 1 prefix(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 prefix(z, z') -{ 2 }-> 0 :|: x5 >= 0, z' - 3 >= 0, xs4 >= 0, z = 1 + 0 + (1 + x5 + xs4), v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z - 1 >= 0, z' = 1 + (1 + y'') + xs, y'' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs6 >= 0, x1 >= 0, z' = 1 + 0 + 1, z = 1 + (1 + x1) + (1 + x7 + xs6), x7 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z - 3 >= 0, v0 >= 0, v1 >= 0, 1 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, x1 >= 0, z = 1 + (1 + x1) + xs', xs' >= 0, v0 >= 0, v1 >= 0, 1 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + 0 + (1 + x9 + xs8), z' = 1 + 0 + 1, xs8 >= 0, x9 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: z' - 1 >= 0, z = 1 + 0 + 1, v0 >= 0, v1 >= 0, 2 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, v1 >= 0, 2 = v0, 0 = v1 prefix(z, z') -{ 2 }-> 0 :|: z = 1 + x' + (1 + x11 + xs10), x' >= 0, z' - 2 >= 0, x11 >= 0, xs10 >= 0, v0 >= 0, v1 >= 0, 0 = v0, 1 = v1 prefix(z, z') -{ 2 }-> 0 :|: xs >= 0, z' = 1 + x + xs, z - 2 >= 0, x >= 0, v0 >= 0, v1 >= 0, 0 = v0, 2 = v1 prefix(z, z') -{ 1 }-> 0 :|: xs >= 0, z' = 1 + x + xs, x' >= 0, xs' >= 0, x >= 0, z = 1 + x' + xs', v0 >= 0, v1 >= 0, 0 = v0, 0 = v1 strmatch(z, z') -{ 51 + 62*z' + 24*z'^2 }-> s38 :|: s38 >= 0, s38 <= 114 * z' + 48 * (z' * z') + 6 * (1 * z') + 13 * 1 + 93, z >= 0, z' >= 0 Function symbols to be analyzed: Previous analysis results are: notEmpty: runtime: O(1) [1], size: O(1) [2] !EQ: runtime: O(1) [0], size: O(1) [2] and: runtime: O(1) [0], size: O(1) [2] eqNatList[Ite]: runtime: O(n^1) [8 + 10*z''], size: O(1) [2] eqNatList: runtime: O(n^1) [11 + 10*z'], size: O(1) [2] prefix: runtime: O(n^1) [4 + 2*z'], size: O(1) [2] domatch[Ite]: runtime: O(n^2) [5 + 6*z'' + 2*z''^2], size: O(n^2) [15 + 11*z'' + z''*z1 + 4*z''^2 + 3*z1] domatch: runtime: O(n^2) [50 + 62*z' + 24*z'^2], size: O(n^2) [93 + 114*z' + 6*z'*z'' + 48*z'^2 + 13*z''] strmatch: runtime: O(n^2) [51 + 62*z' + 24*z'^2], size: INF ---------------------------------------- (61) FinalProof (FINISHED) Computed overall runtime complexity ---------------------------------------- (62) BOUNDS(1, n^2) ---------------------------------------- (63) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) Transformed a relative TRS into a decreasing-loop problem. ---------------------------------------- (64) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) domatch(Cons(x, xs), Nil, n) -> Nil domatch(Nil, Nil, n) -> Cons(n, Nil) prefix(Cons(x, xs), Nil) -> False prefix(Nil, cs) -> True domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) eqNatList(Cons(x, xs), Nil) -> False eqNatList(Nil, Cons(y, ys)) -> False eqNatList(Nil, Nil) -> True notEmpty(Cons(x, xs)) -> True notEmpty(Nil) -> False strmatch(patstr, str) -> domatch(patstr, str, Nil) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True !EQ(S(x), S(y)) -> !EQ(x, y) !EQ(0, S(y)) -> False !EQ(S(x), 0) -> False !EQ(0, 0) -> True domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) eqNatList[Ite](False, y, ys, x, xs) -> False eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) Rewrite Strategy: INNERMOST ---------------------------------------- (65) DecreasingLoopProof (LOWER BOUND(ID)) The following loop(s) give(s) rise to the lower bound Omega(n^1): The rewrite sequence prefix(Cons(x', xs'), Cons(x, xs)) ->^+ and(!EQ(x', x), prefix(xs', xs)) gives rise to a decreasing loop by considering the right hand sides subterm at position [1]. The pumping substitution is [xs' / Cons(x', xs'), xs / Cons(x, xs)]. The result substitution is [ ]. ---------------------------------------- (66) Complex Obligation (BEST) ---------------------------------------- (67) Obligation: Proved the lower bound n^1 for the following obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) domatch(Cons(x, xs), Nil, n) -> Nil domatch(Nil, Nil, n) -> Cons(n, Nil) prefix(Cons(x, xs), Nil) -> False prefix(Nil, cs) -> True domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) eqNatList(Cons(x, xs), Nil) -> False eqNatList(Nil, Cons(y, ys)) -> False eqNatList(Nil, Nil) -> True notEmpty(Cons(x, xs)) -> True notEmpty(Nil) -> False strmatch(patstr, str) -> domatch(patstr, str, Nil) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True !EQ(S(x), S(y)) -> !EQ(x, y) !EQ(0, S(y)) -> False !EQ(S(x), 0) -> False !EQ(0, 0) -> True domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) eqNatList[Ite](False, y, ys, x, xs) -> False eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) Rewrite Strategy: INNERMOST ---------------------------------------- (68) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (69) BOUNDS(n^1, INF) ---------------------------------------- (70) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: prefix(Cons(x', xs'), Cons(x, xs)) -> and(!EQ(x', x), prefix(xs', xs)) domatch(Cons(x, xs), Nil, n) -> Nil domatch(Nil, Nil, n) -> Cons(n, Nil) prefix(Cons(x, xs), Nil) -> False prefix(Nil, cs) -> True domatch(patcs, Cons(x, xs), n) -> domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n) eqNatList(Cons(x, xs), Cons(y, ys)) -> eqNatList[Ite](!EQ(x, y), y, ys, x, xs) eqNatList(Cons(x, xs), Nil) -> False eqNatList(Nil, Cons(y, ys)) -> False eqNatList(Nil, Nil) -> True notEmpty(Cons(x, xs)) -> True notEmpty(Nil) -> False strmatch(patstr, str) -> domatch(patstr, str, Nil) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True !EQ(S(x), S(y)) -> !EQ(x, y) !EQ(0, S(y)) -> False !EQ(S(x), 0) -> False !EQ(0, 0) -> True domatch[Ite](False, patcs, Cons(x, xs), n) -> domatch(patcs, xs, Cons(n, Cons(Nil, Nil))) domatch[Ite](True, patcs, Cons(x, xs), n) -> Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))) eqNatList[Ite](False, y, ys, x, xs) -> False eqNatList[Ite](True, y, ys, x, xs) -> eqNatList(xs, ys) Rewrite Strategy: INNERMOST