/export/starexec/sandbox/solver/bin/starexec_run_complexity /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox/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), 333 ms] (2) CpxRelTRS (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxWeightedTrs (5) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxWeightedTrs (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxTypedWeightedTrs (9) CompletionProof [UPPER BOUND(ID), 0 ms] (10) CpxTypedWeightedCompleteTrs (11) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (14) CpxRNTS (15) InliningProof [UPPER BOUND(ID), 1500 ms] (16) CpxRNTS (17) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxRNTS (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CpxRNTS (21) ResultPropagationProof [UPPER BOUND(ID), 1 ms] (22) CpxRNTS (23) IntTrsBoundProof [UPPER BOUND(ID), 266 ms] (24) CpxRNTS (25) IntTrsBoundProof [UPPER BOUND(ID), 57 ms] (26) CpxRNTS (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (28) CpxRNTS (29) IntTrsBoundProof [UPPER BOUND(ID), 220 ms] (30) CpxRNTS (31) IntTrsBoundProof [UPPER BOUND(ID), 4 ms] (32) CpxRNTS (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (34) CpxRNTS (35) IntTrsBoundProof [UPPER BOUND(ID), 2104 ms] (36) CpxRNTS (37) IntTrsBoundProof [UPPER BOUND(ID), 316 ms] (38) CpxRNTS (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (40) CpxRNTS (41) IntTrsBoundProof [UPPER BOUND(ID), 644 ms] (42) CpxRNTS (43) IntTrsBoundProof [UPPER BOUND(ID), 95 ms] (44) CpxRNTS (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (46) CpxRNTS (47) IntTrsBoundProof [UPPER BOUND(ID), 187 ms] (48) CpxRNTS (49) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] (50) CpxRNTS (51) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (52) CpxRNTS (53) IntTrsBoundProof [UPPER BOUND(ID), 872 ms] (54) CpxRNTS (55) IntTrsBoundProof [UPPER BOUND(ID), 65 ms] (56) CpxRNTS (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (58) CpxRNTS (59) IntTrsBoundProof [UPPER BOUND(ID), 616 ms] (60) CpxRNTS (61) IntTrsBoundProof [UPPER BOUND(ID), 62 ms] (62) CpxRNTS (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (64) CpxRNTS (65) IntTrsBoundProof [UPPER BOUND(ID), 3838 ms] (66) CpxRNTS (67) IntTrsBoundProof [UPPER BOUND(ID), 477 ms] (68) CpxRNTS (69) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (70) CpxRNTS (71) IntTrsBoundProof [UPPER BOUND(ID), 4043 ms] (72) CpxRNTS (73) IntTrsBoundProof [UPPER BOUND(ID), 535 ms] (74) CpxRNTS (75) ResultPropagationProof [UPPER BOUND(ID), 0 ms] (76) CpxRNTS (77) IntTrsBoundProof [UPPER BOUND(ID), 1285 ms] (78) CpxRNTS (79) IntTrsBoundProof [UPPER BOUND(ID), 196 ms] (80) CpxRNTS (81) FinalProof [FINISHED, 0 ms] (82) BOUNDS(1, n^2) (83) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CpxRelTRS (85) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (86) typed CpxTrs (87) OrderProof [LOWER BOUND(ID), 0 ms] (88) typed CpxTrs (89) RewriteLemmaProof [LOWER BOUND(ID), 17.1 s] (90) BEST (91) proven lower bound (92) LowerBoundPropagationProof [FINISHED, 0 ms] (93) BOUNDS(n^1, INF) (94) typed CpxTrs (95) RewriteLemmaProof [LOWER BOUND(ID), 16.0 s] (96) typed CpxTrs (97) RewriteLemmaProof [LOWER BOUND(ID), 16.1 s] (98) typed CpxTrs (99) RewriteLemmaProof [LOWER BOUND(ID), 1621 ms] (100) typed CpxTrs ---------------------------------------- (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: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 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: *(@x, @y) -> #mult(@x, @y) +(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 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: *(@x, @y) -> #mult(@x, @y) [1] +(@x, @y) -> #add(@x, @y) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (5) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) Renamed defined symbols to avoid conflicts with arithmetic symbols: * => times + => plus ---------------------------------------- (6) 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: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (8) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] The TRS has the following type information: times :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos plus :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos Rewrite Strategy: INNERMOST ---------------------------------------- (9) 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: computeLine_3 computeLine#1_3 computeLine#2_4 matrixMult_2 matrixMult#1_2 (c) The following functions are completely defined: times_2 lineMult_3 lineMult#1_3 lineMult#2_4 plus_2 #add_2 #mult_2 #natmult_2 #pred_1 #succ_1 Due to the following rules being added: #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] And the following fresh constants: null_#add, null_#mult, null_#natmult, null_#pred, null_#succ, null_lineMult#1, null_lineMult#2 ---------------------------------------- (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: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] computeLine#2(nil, @acc, @x, @xs) -> nil [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] The TRS has the following type information: times :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 plus :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 computeLine :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 computeLine#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 :: :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 computeLine#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 nil :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 lineMult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 lineMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 lineMult#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 matrixMult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 matrixMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #0 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #neg :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #s :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #pos :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_lineMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_lineMult#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 Rewrite Strategy: INNERMOST ---------------------------------------- (11) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (12) 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: times(@x, @y) -> #mult(@x, @y) [1] plus(@x, @y) -> #add(@x, @y) [1] computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] computeLine#1(nil, @acc, @m) -> @acc [1] computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) [2] computeLine#2(nil, @acc, @x, @xs) -> nil [1] lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] lineMult#1(nil, @l2, @n) -> nil [1] lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(#mult(@x, @n), @y), lineMult(@n, @xs, @ys)) [2] lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] matrixMult#1(nil, @m2) -> nil [1] #add(#0, @y) -> @y [0] #add(#neg(#s(#0)), @y) -> #pred(@y) [0] #add(#neg(#s(#s(#0))), @y) -> #pred(#succ(@y)) [0] #add(#neg(#s(#s(#s(@x')))), @y) -> #pred(#succ(#add(#pos(#s(@x')), @y))) [0] #add(#neg(#s(#s(@x))), @y) -> #pred(null_#add) [0] #add(#pos(#s(#0)), @y) -> #succ(@y) [0] #add(#pos(#s(#s(#0))), @y) -> #succ(#succ(@y)) [0] #add(#pos(#s(#s(#s(@x'')))), @y) -> #succ(#succ(#add(#pos(#s(@x'')), @y))) [0] #add(#pos(#s(#s(@x))), @y) -> #succ(null_#add) [0] #mult(#0, #0) -> #0 [0] #mult(#0, #neg(@y)) -> #0 [0] #mult(#0, #pos(@y)) -> #0 [0] #mult(#neg(@x), #0) -> #0 [0] #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #0) -> #0 [0] #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] #natmult(#0, @y) -> #0 [0] #natmult(#s(#0), @y) -> #add(#pos(@y), #0) [0] #natmult(#s(#s(@x1)), @y) -> #add(#pos(@y), #add(#pos(@y), #natmult(@x1, @y))) [0] #natmult(#s(@x), @y) -> #add(#pos(@y), null_#natmult) [0] #pred(#0) -> #neg(#s(#0)) [0] #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] #pred(#pos(#s(#0))) -> #0 [0] #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] #succ(#0) -> #pos(#s(#0)) [0] #succ(#neg(#s(#0))) -> #0 [0] #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] #add(v0, v1) -> null_#add [0] #mult(v0, v1) -> null_#mult [0] #natmult(v0, v1) -> null_#natmult [0] #pred(v0) -> null_#pred [0] #succ(v0) -> null_#succ [0] lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] The TRS has the following type information: times :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 plus :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 computeLine :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 computeLine#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 :: :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 computeLine#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 nil :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 lineMult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 lineMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 lineMult#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 matrixMult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 matrixMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #0 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #neg :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #s :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #pos :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 #natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 -> :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_lineMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 null_lineMult#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 Rewrite Strategy: INNERMOST ---------------------------------------- (13) 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 #0 => 0 null_#add => 0 null_#mult => 0 null_#natmult => 0 null_#pred => 0 null_#succ => 0 null_lineMult#1 => 0 null_lineMult#2 => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 #add(z, z') -{ 0 }-> #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 #add(z, z') -{ 0 }-> #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z'' = @m, @acc >= 0, @m >= 0, z = 1, z' = @acc computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(@m, @acc, @x, @xs) :|: z'' = @m, @acc >= 0, @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @acc, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: @acc >= 0, @x >= 0, z = 1, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(@l2, @n, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, z'' = @n, @l2 >= 0, @n >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z' = @l2, z'' = @n, z = 1, @l2 >= 0, @n >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(@x, @n) + lineMult(@n, @xs, 1) :|: z' = @n, @x >= 0, z = 1, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(@x, @n), @y) + lineMult(@n, @xs, @ys) :|: z = 1 + @y + @ys, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, @m2, 1) + matrixMult(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 ---------------------------------------- (15) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 ---------------------------------------- (16) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0 #add(z, z') -{ 0 }-> 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), v0 >= 0, 1 + (1 + @x) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), 1 + (1 + @x) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), v0 >= 0, 1 + (1 + (1 + @x)) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x) #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z'' = @m, @acc >= 0, @m >= 0, z = 1, z' = @acc computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(@m, @acc, @x, @xs) :|: z'' = @m, @acc >= 0, @m >= 0, @x >= 0, z = 1 + @x + @xs, z' = @acc, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @acc >= 0, @x >= 0, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: @acc >= 0, @x >= 0, z = 1, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(@l2, @n, @x, @xs) :|: z' = @l2, @x >= 0, z = 1 + @x + @xs, z'' = @n, @l2 >= 0, @n >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z' = @l2, z'' = @n, z = 1, @l2 >= 0, @n >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(@x, @n) + lineMult(@n, @xs, 1) :|: z' = @n, @x >= 0, z = 1, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(@x, @n), @y) + lineMult(@n, @xs, @ys) :|: z = 1 + @y + @ys, z' = @n, @x >= 0, @n >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, @m2, 1) + matrixMult(@ls, @m2) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, @m2 >= 0, z' = @m2 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 ---------------------------------------- (17) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 ---------------------------------------- (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) Found the following analysis order by SCC decomposition: { #pred } { #succ } { #add } { #natmult } { plus } { #mult } { times } { lineMult, lineMult#2, lineMult#1 } { computeLine, computeLine#1, computeLine#2 } { matrixMult#1, matrixMult } ---------------------------------------- (20) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} ---------------------------------------- (21) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (22) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} ---------------------------------------- (23) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (24) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#pred}, {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (25) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #pred after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (26) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (27) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (28) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (29) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2 + z ---------------------------------------- (30) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: ?, size: O(n^1) [2 + z] ---------------------------------------- (31) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #succ after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (32) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (33) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (34) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] ---------------------------------------- (35) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #add after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (36) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (37) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #add after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (38) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (39) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (40) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] ---------------------------------------- (41) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #natmult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 4 + 4*z + 4*z*z' + 4*z' ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: ?, size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (43) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #natmult after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (45) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] ---------------------------------------- (47) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 2*z + z' ---------------------------------------- (48) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: ?, size: O(n^1) [2*z + z'] ---------------------------------------- (49) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: plus after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (51) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (52) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] ---------------------------------------- (53) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: #mult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' ---------------------------------------- (54) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: ?, size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (55) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: #mult after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 0 ---------------------------------------- (56) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + plus(#mult(z'', z'), @y) + lineMult(z', z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (57) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (58) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s18 + lineMult(z', z1, @ys) :|: s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (59) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using KoAT for: times after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' ---------------------------------------- (60) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s18 + lineMult(z', z1, @ys) :|: s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: ?, size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (61) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: times after applying outer abstraction to obtain an ITS, resulting in: O(1) with polynomial bound: 1 ---------------------------------------- (62) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s18 + lineMult(z', z1, @ys) :|: s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (63) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (64) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s18 + lineMult(z', z1, @ys) :|: s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + s19 + lineMult(z', z1, 1) :|: s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] ---------------------------------------- (65) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: lineMult after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: lineMult#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: lineMult#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (66) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s18 + lineMult(z', z1, @ys) :|: s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + s19 + lineMult(z', z1, 1) :|: s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: ?, size: INF lineMult#2: runtime: ?, size: INF lineMult#1: runtime: ?, size: INF ---------------------------------------- (67) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: lineMult after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 7 + 5*z' Computed RUNTIME bound using CoFloCo for: lineMult#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 10 + 5*z1 Computed RUNTIME bound using CoFloCo for: lineMult#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 6 + 5*z ---------------------------------------- (68) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 2 }-> computeLine(z1, @ls, lineMult#1(@l, z', z'')) :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 3 }-> 1 + s18 + lineMult(z', z1, @ys) :|: s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 2 }-> 1 + s19 + lineMult(z', z1, 1) :|: s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF ---------------------------------------- (69) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (70) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 8 + 5*@l }-> computeLine(z1, @ls, s20) :|: s20 >= 0, s20 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s22 :|: s22 >= 0, s22 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s18 + s23 :|: s23 >= 0, s23 <= inf1, s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s19 + s24 :|: s24 >= 0, s24 <= inf2, s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF ---------------------------------------- (71) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: computeLine after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: computeLine#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: computeLine#2 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (72) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 8 + 5*@l }-> computeLine(z1, @ls, s20) :|: s20 >= 0, s20 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s22 :|: s22 >= 0, s22 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s18 + s23 :|: s23 >= 0, s23 <= inf1, s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s19 + s24 :|: s24 >= 0, s24 <= inf2, s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: ?, size: INF computeLine#1: runtime: ?, size: INF computeLine#2: runtime: ?, size: INF ---------------------------------------- (73) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using CoFloCo for: computeLine after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 13 + 2*z + 10*z' Computed RUNTIME bound using CoFloCo for: computeLine#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 10 + 2*z + 10*z'' Computed RUNTIME bound using CoFloCo for: computeLine#2 after applying outer abstraction to obtain an ITS, resulting in: O(n^1) with polynomial bound: 11 + 10*z + 2*z1 ---------------------------------------- (74) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#2(z, z', z'', z1) -{ 8 + 5*@l }-> computeLine(z1, @ls, s20) :|: s20 >= 0, s20 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s22 :|: s22 >= 0, s22 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s18 + s23 :|: s23 >= 0, s23 <= inf1, s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s19 + s24 :|: s24 >= 0, s24 <= inf2, s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF ---------------------------------------- (75) ResultPropagationProof (UPPER BOUND(ID)) Applied inner abstraction using the recently inferred runtime/size bounds where possible. ---------------------------------------- (76) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 11 + 2*z + 10*z' }-> s25 :|: s25 >= 0, s25 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 12 + 2*@xs + 10*z'' }-> s26 :|: s26 >= 0, s26 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#2(z, z', z'', z1) -{ 21 + 5*@l + 10*@ls + 2*z1 }-> s27 :|: s27 >= 0, s27 <= inf5, s20 >= 0, s20 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s22 :|: s22 >= 0, s22 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s18 + s23 :|: s23 >= 0, s23 <= inf1, s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s19 + s24 :|: s24 >= 0, s24 <= inf2, s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 14 + 2*@l + 10*z' }-> 1 + s28 + matrixMult(@ls, z') :|: s28 >= 0, s28 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF ---------------------------------------- (77) IntTrsBoundProof (UPPER BOUND(ID)) Computed SIZE bound using CoFloCo for: matrixMult#1 after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? Computed SIZE bound using CoFloCo for: matrixMult after applying outer abstraction to obtain an ITS, resulting in: INF with polynomial bound: ? ---------------------------------------- (78) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 11 + 2*z + 10*z' }-> s25 :|: s25 >= 0, s25 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 12 + 2*@xs + 10*z'' }-> s26 :|: s26 >= 0, s26 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#2(z, z', z'', z1) -{ 21 + 5*@l + 10*@ls + 2*z1 }-> s27 :|: s27 >= 0, s27 <= inf5, s20 >= 0, s20 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s22 :|: s22 >= 0, s22 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s18 + s23 :|: s23 >= 0, s23 <= inf1, s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s19 + s24 :|: s24 >= 0, s24 <= inf2, s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 14 + 2*@l + 10*z' }-> 1 + s28 + matrixMult(@ls, z') :|: s28 >= 0, s28 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: {matrixMult#1,matrixMult} Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF matrixMult#1: runtime: ?, size: INF matrixMult: runtime: ?, size: INF ---------------------------------------- (79) IntTrsBoundProof (UPPER BOUND(ID)) Computed RUNTIME bound using KoAT for: matrixMult#1 after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 1 + 30*z + 20*z*z' + 4*z^2 Computed RUNTIME bound using KoAT for: matrixMult after applying outer abstraction to obtain an ITS, resulting in: O(n^2) with polynomial bound: 2 + 30*z + 20*z*z' + 4*z^2 ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> s11 :|: s9 >= 0, s9 <= 2 * (1 + (1 + (z - 4))) + z', s10 >= 0, s10 <= s9 + 2, s11 >= 0, s11 <= s10 + 2, z' >= 0, z - 4 >= 0 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> s8 :|: s6 >= 0, s6 <= 2 * (1 + (1 + (z - 4))) + z', s7 >= 0, s7 <= s6 + 2, s8 >= 0, s8 <= s7 + 2, z - 4 >= 0, z' >= 0 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x')) #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x) #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x') #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #mult(z, z') -{ 0 }-> 1 + s12 :|: s12 >= 0, s12 <= 4 * (z' - 1) + 4 * ((z' - 1) * (z - 1)) + 4 * (z - 1) + 4, z - 1 >= 0, z' - 1 >= 0 #natmult(z, z') -{ 0 }-> s15 :|: s13 >= 0, s13 <= 4 * z' + 4 * (z' * (z - 2)) + 4 * (z - 2) + 4, s14 >= 0, s14 <= 2 * (1 + z') + s13, s15 >= 0, s15 <= 2 * (1 + z') + s14, z - 2 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #pred(z) -{ 0 }-> 0 :|: z >= 0 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) #succ(z) -{ 0 }-> 0 :|: z >= 0 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 computeLine(z, z', z'') -{ 11 + 2*z + 10*z' }-> s25 :|: s25 >= 0, s25 <= inf3, z' >= 0, z'' >= 0, z >= 0 computeLine#1(z, z', z'') -{ 12 + 2*@xs + 10*z'' }-> s26 :|: s26 >= 0, s26 <= inf4, z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 computeLine#2(z, z', z'', z1) -{ 21 + 5*@l + 10*@ls + 2*z1 }-> s27 :|: s27 >= 0, s27 <= inf5, s20 >= 0, s20 <= inf, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0, z'' >= 0, z1 >= 0 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 11 + 5*@xs }-> s22 :|: s22 >= 0, s22 <= inf'', @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 lineMult#2(z, z', z'', z1) -{ 10 + 5*z1 }-> 1 + s18 + s23 :|: s23 >= 0, s23 <= inf1, s17 >= 0, s17 <= 4 * (z' * z'') + 1, s18 >= 0, s18 <= 2 * s17 + @y, z = 1 + @y + @ys, z'' >= 0, z' >= 0, z1 >= 0, @y >= 0, @ys >= 0 lineMult#2(z, z', z'', z1) -{ 9 + 5*z1 }-> 1 + s19 + s24 :|: s24 >= 0, s24 <= inf2, s19 >= 0, s19 <= 4 * (z' * z'') + 1, z'' >= 0, z = 1, z' >= 0, z1 >= 0 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 matrixMult#1(z, z') -{ 14 + 2*@l + 10*z' }-> 1 + s28 + matrixMult(@ls, z') :|: s28 >= 0, s28 <= inf6, z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 Function symbols to be analyzed: Previous analysis results are: #pred: runtime: O(1) [0], size: O(n^1) [2 + z] #succ: runtime: O(1) [0], size: O(n^1) [2 + z] #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] lineMult: runtime: O(n^1) [7 + 5*z'], size: INF lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF matrixMult#1: runtime: O(n^2) [1 + 30*z + 20*z*z' + 4*z^2], size: INF matrixMult: runtime: O(n^2) [2 + 30*z + 20*z*z' + 4*z^2], size: INF ---------------------------------------- (81) FinalProof (FINISHED) Computed overall runtime complexity ---------------------------------------- (82) BOUNDS(1, n^2) ---------------------------------------- (83) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (84) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil The (relative) TRS S consists of the following rules: #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Rewrite Strategy: INNERMOST ---------------------------------------- (85) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (86) Obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos ---------------------------------------- (87) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: #add, computeLine, computeLine#1, lineMult, lineMult#1, matrixMult, matrixMult#1, #natmult They will be analysed ascendingly in the following order: #add < #natmult computeLine = computeLine#1 computeLine < matrixMult#1 lineMult < computeLine#1 lineMult = lineMult#1 matrixMult = matrixMult#1 ---------------------------------------- (88) Obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos Generator Equations: gen_:::nil:#0:#s:#neg:#pos2_3(0) <=> nil gen_:::nil:#0:#s:#neg:#pos2_3(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(x)) The following defined symbols remain to be analysed: #add, computeLine, computeLine#1, lineMult, lineMult#1, matrixMult, matrixMult#1, #natmult They will be analysed ascendingly in the following order: #add < #natmult computeLine = computeLine#1 computeLine < matrixMult#1 lineMult < computeLine#1 lineMult = lineMult#1 matrixMult = matrixMult#1 ---------------------------------------- (89) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) -> *3_3, rt in Omega(n112_3) Induction Base: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) Induction Step: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, +(n112_3, 1))), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) ->_R^Omega(1) lineMult#2(gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c), nil, gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3))) ->_R^Omega(1) ::(*'(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(c), gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3)), nil)) ->_R^Omega(1) ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(c), gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3)), nil)) ->_R^Omega(1) ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3)), nil, gen_:::nil:#0:#s:#neg:#pos2_3(c))) ->_IH ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), *3_3) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (90) Complex Obligation (BEST) ---------------------------------------- (91) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos Generator Equations: gen_:::nil:#0:#s:#neg:#pos2_3(0) <=> nil gen_:::nil:#0:#s:#neg:#pos2_3(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(x)) The following defined symbols remain to be analysed: lineMult#1, computeLine, computeLine#1, lineMult, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: computeLine = computeLine#1 computeLine < matrixMult#1 lineMult < computeLine#1 lineMult = lineMult#1 matrixMult = matrixMult#1 ---------------------------------------- (92) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (93) BOUNDS(n^1, INF) ---------------------------------------- (94) Obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos Lemmas: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) -> *3_3, rt in Omega(n112_3) Generator Equations: gen_:::nil:#0:#s:#neg:#pos2_3(0) <=> nil gen_:::nil:#0:#s:#neg:#pos2_3(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(x)) The following defined symbols remain to be analysed: lineMult, computeLine, computeLine#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: computeLine = computeLine#1 computeLine < matrixMult#1 lineMult < computeLine#1 lineMult = lineMult#1 matrixMult = matrixMult#1 ---------------------------------------- (95) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3), gen_:::nil:#0:#s:#neg:#pos2_3(0)) -> *3_3, rt in Omega(n4468534_3) Induction Base: lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(0)) Induction Step: lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(+(n4468534_3, 1)), gen_:::nil:#0:#s:#neg:#pos2_3(0)) ->_R^Omega(1) lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(n4468534_3, 1)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(a)) ->_R^Omega(1) lineMult#2(gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(a), nil, gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3)) ->_R^Omega(1) ::(*'(nil, gen_:::nil:#0:#s:#neg:#pos2_3(a)), lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3), nil)) ->_R^Omega(1) ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(a)), lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3), nil)) ->_IH ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(a)), *3_3) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (96) Obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos Lemmas: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n112_3)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) -> *3_3, rt in Omega(n112_3) lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3), gen_:::nil:#0:#s:#neg:#pos2_3(0)) -> *3_3, rt in Omega(n4468534_3) Generator Equations: gen_:::nil:#0:#s:#neg:#pos2_3(0) <=> nil gen_:::nil:#0:#s:#neg:#pos2_3(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(x)) The following defined symbols remain to be analysed: lineMult#1, computeLine, computeLine#1, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: computeLine = computeLine#1 computeLine < matrixMult#1 lineMult < computeLine#1 lineMult = lineMult#1 matrixMult = matrixMult#1 ---------------------------------------- (97) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) -> *3_3, rt in Omega(n8943742_3) Induction Base: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, 0)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) Induction Step: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, +(n8943742_3, 1))), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) ->_R^Omega(1) lineMult#2(gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c), nil, gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3))) ->_R^Omega(1) ::(*'(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(c), gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3)), nil)) ->_R^Omega(1) ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(c), gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3)), nil)) ->_R^Omega(1) ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3)), nil, gen_:::nil:#0:#s:#neg:#pos2_3(c))) ->_IH ::(#mult(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c)), *3_3) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (98) Obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos Lemmas: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) -> *3_3, rt in Omega(n8943742_3) lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3), gen_:::nil:#0:#s:#neg:#pos2_3(0)) -> *3_3, rt in Omega(n4468534_3) Generator Equations: gen_:::nil:#0:#s:#neg:#pos2_3(0) <=> nil gen_:::nil:#0:#s:#neg:#pos2_3(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(x)) The following defined symbols remain to be analysed: computeLine#1, computeLine, matrixMult, matrixMult#1 They will be analysed ascendingly in the following order: computeLine = computeLine#1 computeLine < matrixMult#1 matrixMult = matrixMult#1 ---------------------------------------- (99) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: matrixMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), gen_:::nil:#0:#s:#neg:#pos2_3(b)) -> gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), rt in Omega(1 + n13505007_3) Induction Base: matrixMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(b)) ->_R^Omega(1) nil Induction Step: matrixMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(n13505007_3, 1)), gen_:::nil:#0:#s:#neg:#pos2_3(b)) ->_R^Omega(1) ::(computeLine(nil, gen_:::nil:#0:#s:#neg:#pos2_3(b), nil), matrixMult(gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), gen_:::nil:#0:#s:#neg:#pos2_3(b))) ->_R^Omega(1) ::(computeLine#1(nil, nil, gen_:::nil:#0:#s:#neg:#pos2_3(b)), matrixMult(gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), gen_:::nil:#0:#s:#neg:#pos2_3(b))) ->_R^Omega(1) ::(nil, matrixMult(gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), gen_:::nil:#0:#s:#neg:#pos2_3(b))) ->_R^Omega(1) ::(nil, matrixMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), gen_:::nil:#0:#s:#neg:#pos2_3(b))) ->_IH ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(c13505008_3)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (100) Obligation: Innermost TRS: Rules: *'(@x, @y) -> #mult(@x, @y) +'(@x, @y) -> #add(@x, @y) computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) computeLine#1(nil, @acc, @m) -> @acc computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) computeLine#2(nil, @acc, @x, @xs) -> nil lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) lineMult#1(nil, @l2, @n) -> nil lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+'(*'(@x, @n), @y), lineMult(@n, @xs, @ys)) lineMult#2(nil, @n, @x, @xs) -> ::(*'(@x, @n), lineMult(@n, @xs, nil)) matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) matrixMult#1(nil, @m2) -> nil #add(#0, @y) -> @y #add(#neg(#s(#0)), @y) -> #pred(@y) #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) #add(#pos(#s(#0)), @y) -> #succ(@y) #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) #mult(#0, #0) -> #0 #mult(#0, #neg(@y)) -> #0 #mult(#0, #pos(@y)) -> #0 #mult(#neg(@x), #0) -> #0 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #0) -> #0 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) #natmult(#0, @y) -> #0 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) #pred(#0) -> #neg(#s(#0)) #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) #pred(#pos(#s(#0))) -> #0 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) #succ(#0) -> #pos(#s(#0)) #succ(#neg(#s(#0))) -> #0 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) Types: *' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos +' :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos computeLine#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos nil :: :::nil:#0:#s:#neg:#pos lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos lineMult#2 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #0 :: :::nil:#0:#s:#neg:#pos #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos hole_:::nil:#0:#s:#neg:#pos1_3 :: :::nil:#0:#s:#neg:#pos gen_:::nil:#0:#s:#neg:#pos2_3 :: Nat -> :::nil:#0:#s:#neg:#pos Lemmas: lineMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(+(1, n8943742_3)), gen_:::nil:#0:#s:#neg:#pos2_3(0), gen_:::nil:#0:#s:#neg:#pos2_3(c)) -> *3_3, rt in Omega(n8943742_3) lineMult(gen_:::nil:#0:#s:#neg:#pos2_3(a), gen_:::nil:#0:#s:#neg:#pos2_3(n4468534_3), gen_:::nil:#0:#s:#neg:#pos2_3(0)) -> *3_3, rt in Omega(n4468534_3) matrixMult#1(gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), gen_:::nil:#0:#s:#neg:#pos2_3(b)) -> gen_:::nil:#0:#s:#neg:#pos2_3(n13505007_3), rt in Omega(1 + n13505007_3) Generator Equations: gen_:::nil:#0:#s:#neg:#pos2_3(0) <=> nil gen_:::nil:#0:#s:#neg:#pos2_3(+(x, 1)) <=> ::(nil, gen_:::nil:#0:#s:#neg:#pos2_3(x)) The following defined symbols remain to be analysed: matrixMult They will be analysed ascendingly in the following order: matrixMult = matrixMult#1