419.69/291.55 WORST_CASE(Omega(n^1), O(n^2)) 419.69/291.57 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 419.69/291.57 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 419.69/291.57 419.69/291.57 419.69/291.57 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 419.69/291.57 419.69/291.57 (0) CpxRelTRS 419.69/291.57 (1) STerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 361 ms] 419.69/291.57 (2) CpxRelTRS 419.69/291.57 (3) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] 419.69/291.57 (4) CpxWeightedTrs 419.69/291.57 (5) CpxWeightedTrsRenamingProof [BOTH BOUNDS(ID, ID), 0 ms] 419.69/291.57 (6) CpxWeightedTrs 419.69/291.57 (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 419.69/291.57 (8) CpxTypedWeightedTrs 419.69/291.57 (9) CompletionProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (10) CpxTypedWeightedCompleteTrs 419.69/291.57 (11) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] 419.69/291.57 (12) CpxTypedWeightedCompleteTrs 419.69/291.57 (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (14) CpxRNTS 419.69/291.57 (15) InliningProof [UPPER BOUND(ID), 1026 ms] 419.69/291.57 (16) CpxRNTS 419.69/291.57 (17) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] 419.69/291.57 (18) CpxRNTS 419.69/291.57 (19) CpxRntsAnalysisOrderProof [BOTH BOUNDS(ID, ID), 0 ms] 419.69/291.57 (20) CpxRNTS 419.69/291.57 (21) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (22) CpxRNTS 419.69/291.57 (23) IntTrsBoundProof [UPPER BOUND(ID), 276 ms] 419.69/291.57 (24) CpxRNTS 419.69/291.57 (25) IntTrsBoundProof [UPPER BOUND(ID), 55 ms] 419.69/291.57 (26) CpxRNTS 419.69/291.57 (27) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (28) CpxRNTS 419.69/291.57 (29) IntTrsBoundProof [UPPER BOUND(ID), 211 ms] 419.69/291.57 (30) CpxRNTS 419.69/291.57 (31) IntTrsBoundProof [UPPER BOUND(ID), 22 ms] 419.69/291.57 (32) CpxRNTS 419.69/291.57 (33) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (34) CpxRNTS 419.69/291.57 (35) IntTrsBoundProof [UPPER BOUND(ID), 2478 ms] 419.69/291.57 (36) CpxRNTS 419.69/291.57 (37) IntTrsBoundProof [UPPER BOUND(ID), 416 ms] 419.69/291.57 (38) CpxRNTS 419.69/291.57 (39) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (40) CpxRNTS 419.69/291.57 (41) IntTrsBoundProof [UPPER BOUND(ID), 805 ms] 419.69/291.57 (42) CpxRNTS 419.69/291.57 (43) IntTrsBoundProof [UPPER BOUND(ID), 83 ms] 419.69/291.57 (44) CpxRNTS 419.69/291.57 (45) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (46) CpxRNTS 419.69/291.57 (47) IntTrsBoundProof [UPPER BOUND(ID), 229 ms] 419.69/291.57 (48) CpxRNTS 419.69/291.57 (49) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] 419.69/291.57 (50) CpxRNTS 419.69/291.57 (51) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (52) CpxRNTS 419.69/291.57 (53) IntTrsBoundProof [UPPER BOUND(ID), 1091 ms] 419.69/291.57 (54) CpxRNTS 419.69/291.57 (55) IntTrsBoundProof [UPPER BOUND(ID), 74 ms] 419.69/291.57 (56) CpxRNTS 419.69/291.57 (57) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (58) CpxRNTS 419.69/291.57 (59) IntTrsBoundProof [UPPER BOUND(ID), 827 ms] 419.69/291.57 (60) CpxRNTS 419.69/291.57 (61) IntTrsBoundProof [UPPER BOUND(ID), 52 ms] 419.69/291.57 (62) CpxRNTS 419.69/291.57 (63) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (64) CpxRNTS 419.69/291.57 (65) IntTrsBoundProof [UPPER BOUND(ID), 4820 ms] 419.69/291.57 (66) CpxRNTS 419.69/291.57 (67) IntTrsBoundProof [UPPER BOUND(ID), 446 ms] 419.69/291.57 (68) CpxRNTS 419.69/291.57 (69) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (70) CpxRNTS 419.69/291.57 (71) IntTrsBoundProof [UPPER BOUND(ID), 5122 ms] 419.69/291.57 (72) CpxRNTS 419.69/291.57 (73) IntTrsBoundProof [UPPER BOUND(ID), 636 ms] 419.69/291.57 (74) CpxRNTS 419.69/291.57 (75) ResultPropagationProof [UPPER BOUND(ID), 0 ms] 419.69/291.57 (76) CpxRNTS 419.69/291.57 (77) IntTrsBoundProof [UPPER BOUND(ID), 1756 ms] 419.69/291.57 (78) CpxRNTS 419.69/291.57 (79) IntTrsBoundProof [UPPER BOUND(ID), 216 ms] 419.69/291.57 (80) CpxRNTS 419.69/291.57 (81) FinalProof [FINISHED, 0 ms] 419.69/291.57 (82) BOUNDS(1, n^2) 419.69/291.57 (83) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 2 ms] 419.69/291.57 (84) TRS for Loop Detection 419.69/291.57 (85) DecreasingLoopProof [LOWER BOUND(ID), 42 ms] 419.69/291.57 (86) BEST 419.69/291.57 (87) proven lower bound 419.69/291.57 (88) LowerBoundPropagationProof [FINISHED, 0 ms] 419.69/291.57 (89) BOUNDS(n^1, INF) 419.69/291.57 (90) TRS for Loop Detection 419.69/291.57 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (0) 419.69/291.57 Obligation: 419.69/291.57 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 419.69/291.57 419.69/291.57 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 *(@x, @y) -> #mult(@x, @y) 419.69/291.57 +(@x, @y) -> #add(@x, @y) 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) 419.69/291.57 matrixMult#1(nil, @m2) -> nil 419.69/291.57 419.69/291.57 The (relative) TRS S consists of the following rules: 419.69/291.57 419.69/291.57 #add(#0, @y) -> @y 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 419.69/291.57 #mult(#0, #0) -> #0 419.69/291.57 #mult(#0, #neg(@y)) -> #0 419.69/291.57 #mult(#0, #pos(@y)) -> #0 419.69/291.57 #mult(#neg(@x), #0) -> #0 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.57 #mult(#pos(@x), #0) -> #0 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.57 #natmult(#0, @y) -> #0 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 419.69/291.57 #pred(#0) -> #neg(#s(#0)) 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 419.69/291.57 #pred(#pos(#s(#0))) -> #0 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 419.69/291.57 #succ(#0) -> #pos(#s(#0)) 419.69/291.57 #succ(#neg(#s(#0))) -> #0 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (1) STerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) 419.69/291.57 proved termination of relative rules 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (2) 419.69/291.57 Obligation: 419.69/291.57 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 419.69/291.57 419.69/291.57 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 *(@x, @y) -> #mult(@x, @y) 419.69/291.57 +(@x, @y) -> #add(@x, @y) 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) 419.69/291.57 matrixMult#1(nil, @m2) -> nil 419.69/291.57 419.69/291.57 The (relative) TRS S consists of the following rules: 419.69/291.57 419.69/291.57 #add(#0, @y) -> @y 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 419.69/291.57 #mult(#0, #0) -> #0 419.69/291.57 #mult(#0, #neg(@y)) -> #0 419.69/291.57 #mult(#0, #pos(@y)) -> #0 419.69/291.57 #mult(#neg(@x), #0) -> #0 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.57 #mult(#pos(@x), #0) -> #0 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.57 #natmult(#0, @y) -> #0 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 419.69/291.57 #pred(#0) -> #neg(#s(#0)) 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 419.69/291.57 #pred(#pos(#s(#0))) -> #0 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 419.69/291.57 #succ(#0) -> #pos(#s(#0)) 419.69/291.57 #succ(#neg(#s(#0))) -> #0 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (3) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) 419.69/291.57 Transformed relative TRS to weighted TRS 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (4) 419.69/291.57 Obligation: 419.69/291.57 The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). 419.69/291.57 419.69/291.57 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 *(@x, @y) -> #mult(@x, @y) [1] 419.69/291.57 +(@x, @y) -> #add(@x, @y) [1] 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc [1] 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil [1] 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil [1] 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) [1] 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] 419.69/291.57 matrixMult#1(nil, @m2) -> nil [1] 419.69/291.57 #add(#0, @y) -> @y [0] 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #mult(#0, #0) -> #0 [0] 419.69/291.57 #mult(#0, #neg(@y)) -> #0 [0] 419.69/291.57 #mult(#0, #pos(@y)) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #0) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #0) -> #0 [0] 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #natmult(#0, @y) -> #0 [0] 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 419.69/291.57 #pred(#0) -> #neg(#s(#0)) [0] 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 419.69/291.57 #pred(#pos(#s(#0))) -> #0 [0] 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 419.69/291.57 #succ(#0) -> #pos(#s(#0)) [0] 419.69/291.57 #succ(#neg(#s(#0))) -> #0 [0] 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (5) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID)) 419.69/291.57 Renamed defined symbols to avoid conflicts with arithmetic symbols: 419.69/291.57 419.69/291.57 * => times 419.69/291.57 + => plus 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (6) 419.69/291.57 Obligation: 419.69/291.57 The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). 419.69/291.57 419.69/291.57 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 times(@x, @y) -> #mult(@x, @y) [1] 419.69/291.57 plus(@x, @y) -> #add(@x, @y) [1] 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc [1] 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil [1] 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil [1] 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] 419.69/291.57 matrixMult#1(nil, @m2) -> nil [1] 419.69/291.57 #add(#0, @y) -> @y [0] 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #mult(#0, #0) -> #0 [0] 419.69/291.57 #mult(#0, #neg(@y)) -> #0 [0] 419.69/291.57 #mult(#0, #pos(@y)) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #0) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #0) -> #0 [0] 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #natmult(#0, @y) -> #0 [0] 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 419.69/291.57 #pred(#0) -> #neg(#s(#0)) [0] 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 419.69/291.57 #pred(#pos(#s(#0))) -> #0 [0] 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 419.69/291.57 #succ(#0) -> #pos(#s(#0)) [0] 419.69/291.57 #succ(#neg(#s(#0))) -> #0 [0] 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 419.69/291.57 Infered types. 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (8) 419.69/291.57 Obligation: 419.69/291.57 Runtime Complexity Weighted TRS with Types. 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 times(@x, @y) -> #mult(@x, @y) [1] 419.69/291.57 plus(@x, @y) -> #add(@x, @y) [1] 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc [1] 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil [1] 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil [1] 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] 419.69/291.57 matrixMult#1(nil, @m2) -> nil [1] 419.69/291.57 #add(#0, @y) -> @y [0] 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #mult(#0, #0) -> #0 [0] 419.69/291.57 #mult(#0, #neg(@y)) -> #0 [0] 419.69/291.57 #mult(#0, #pos(@y)) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #0) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #0) -> #0 [0] 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #natmult(#0, @y) -> #0 [0] 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 419.69/291.57 #pred(#0) -> #neg(#s(#0)) [0] 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 419.69/291.57 #pred(#pos(#s(#0))) -> #0 [0] 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 419.69/291.57 #succ(#0) -> #pos(#s(#0)) [0] 419.69/291.57 #succ(#neg(#s(#0))) -> #0 [0] 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 419.69/291.57 419.69/291.57 The TRS has the following type information: 419.69/291.57 times :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #mult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 plus :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #add :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 computeLine :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 computeLine#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 :: :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 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 419.69/291.57 nil :: :::nil:#0:#s:#neg:#pos 419.69/291.57 lineMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 lineMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 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 419.69/291.57 matrixMult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 matrixMult#1 :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #0 :: :::nil:#0:#s:#neg:#pos 419.69/291.57 #neg :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #s :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #pred :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #pos :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #succ :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 #natmult :: :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos -> :::nil:#0:#s:#neg:#pos 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (9) CompletionProof (UPPER BOUND(ID)) 419.69/291.57 The transformation into a RNTS is sound, since: 419.69/291.57 419.69/291.57 (a) The obligation is a constructor system where every type has a constant constructor, 419.69/291.57 419.69/291.57 (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: 419.69/291.57 419.69/291.57 computeLine_3 419.69/291.57 computeLine#1_3 419.69/291.57 computeLine#2_4 419.69/291.57 matrixMult_2 419.69/291.57 matrixMult#1_2 419.69/291.57 419.69/291.57 (c) The following functions are completely defined: 419.69/291.57 419.69/291.57 times_2 419.69/291.57 lineMult_3 419.69/291.57 lineMult#1_3 419.69/291.57 lineMult#2_4 419.69/291.57 plus_2 419.69/291.57 #add_2 419.69/291.57 #mult_2 419.69/291.57 #natmult_2 419.69/291.57 #pred_1 419.69/291.57 #succ_1 419.69/291.57 419.69/291.57 Due to the following rules being added: 419.69/291.57 419.69/291.57 #add(v0, v1) -> null_#add [0] 419.69/291.57 #mult(v0, v1) -> null_#mult [0] 419.69/291.57 #natmult(v0, v1) -> null_#natmult [0] 419.69/291.57 #pred(v0) -> null_#pred [0] 419.69/291.57 #succ(v0) -> null_#succ [0] 419.69/291.57 lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] 419.69/291.57 lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] 419.69/291.57 419.69/291.57 And the following fresh constants: null_#add, null_#mult, null_#natmult, null_#pred, null_#succ, null_lineMult#1, null_lineMult#2 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (10) 419.69/291.57 Obligation: 419.69/291.57 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 419.69/291.57 419.69/291.57 Runtime Complexity Weighted TRS with Types. 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 times(@x, @y) -> #mult(@x, @y) [1] 419.69/291.57 plus(@x, @y) -> #add(@x, @y) [1] 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc [1] 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) [1] 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil [1] 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil [1] 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(times(@x, @n), @y), lineMult(@n, @xs, @ys)) [1] 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] 419.69/291.57 matrixMult#1(nil, @m2) -> nil [1] 419.69/291.57 #add(#0, @y) -> @y [0] 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) [0] 419.69/291.57 #mult(#0, #0) -> #0 [0] 419.69/291.57 #mult(#0, #neg(@y)) -> #0 [0] 419.69/291.57 #mult(#0, #pos(@y)) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #0) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #0) -> #0 [0] 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #natmult(#0, @y) -> #0 [0] 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) [0] 419.69/291.57 #pred(#0) -> #neg(#s(#0)) [0] 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 419.69/291.57 #pred(#pos(#s(#0))) -> #0 [0] 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 419.69/291.57 #succ(#0) -> #pos(#s(#0)) [0] 419.69/291.57 #succ(#neg(#s(#0))) -> #0 [0] 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 419.69/291.57 #add(v0, v1) -> null_#add [0] 419.69/291.57 #mult(v0, v1) -> null_#mult [0] 419.69/291.57 #natmult(v0, v1) -> null_#natmult [0] 419.69/291.57 #pred(v0) -> null_#pred [0] 419.69/291.57 #succ(v0) -> null_#succ [0] 419.69/291.57 lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] 419.69/291.57 lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] 419.69/291.57 419.69/291.57 The TRS has the following type information: 419.69/291.57 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 419.69/291.57 #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 419.69/291.57 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 419.69/291.57 #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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 :: :: :::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 419.69/291.57 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 419.69/291.57 nil :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 #0 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 null_#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_lineMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_lineMult#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (11) NarrowingProof (BOTH BOUNDS(ID, ID)) 419.69/291.57 Narrowed the inner basic terms of all right-hand sides by a single narrowing step. 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (12) 419.69/291.57 Obligation: 419.69/291.57 Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: 419.69/291.57 419.69/291.57 Runtime Complexity Weighted TRS with Types. 419.69/291.57 The TRS R consists of the following rules: 419.69/291.57 419.69/291.57 times(@x, @y) -> #mult(@x, @y) [1] 419.69/291.57 plus(@x, @y) -> #add(@x, @y) [1] 419.69/291.57 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) [1] 419.69/291.57 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) [1] 419.69/291.57 computeLine#1(nil, @acc, @m) -> @acc [1] 419.69/291.57 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult#1(@l, @acc, @x)) [2] 419.69/291.57 computeLine#2(nil, @acc, @x, @xs) -> nil [1] 419.69/291.57 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) [1] 419.69/291.57 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) [1] 419.69/291.57 lineMult#1(nil, @l2, @n) -> nil [1] 419.69/291.57 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(plus(#mult(@x, @n), @y), lineMult(@n, @xs, @ys)) [2] 419.69/291.57 lineMult#2(nil, @n, @x, @xs) -> ::(times(@x, @n), lineMult(@n, @xs, nil)) [1] 419.69/291.57 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) [1] 419.69/291.57 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) [1] 419.69/291.57 matrixMult#1(nil, @m2) -> nil [1] 419.69/291.57 #add(#0, @y) -> @y [0] 419.69/291.57 #add(#neg(#s(#0)), @y) -> #pred(@y) [0] 419.69/291.57 #add(#neg(#s(#s(#0))), @y) -> #pred(#succ(@y)) [0] 419.69/291.57 #add(#neg(#s(#s(#s(@x')))), @y) -> #pred(#succ(#add(#pos(#s(@x')), @y))) [0] 419.69/291.57 #add(#neg(#s(#s(@x))), @y) -> #pred(null_#add) [0] 419.69/291.57 #add(#pos(#s(#0)), @y) -> #succ(@y) [0] 419.69/291.57 #add(#pos(#s(#s(#0))), @y) -> #succ(#succ(@y)) [0] 419.69/291.57 #add(#pos(#s(#s(#s(@x'')))), @y) -> #succ(#succ(#add(#pos(#s(@x'')), @y))) [0] 419.69/291.57 #add(#pos(#s(#s(@x))), @y) -> #succ(null_#add) [0] 419.69/291.57 #mult(#0, #0) -> #0 [0] 419.69/291.57 #mult(#0, #neg(@y)) -> #0 [0] 419.69/291.57 #mult(#0, #pos(@y)) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #0) -> #0 [0] 419.69/291.57 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #0) -> #0 [0] 419.69/291.57 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) [0] 419.69/291.57 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) [0] 419.69/291.57 #natmult(#0, @y) -> #0 [0] 419.69/291.57 #natmult(#s(#0), @y) -> #add(#pos(@y), #0) [0] 419.69/291.57 #natmult(#s(#s(@x1)), @y) -> #add(#pos(@y), #add(#pos(@y), #natmult(@x1, @y))) [0] 419.69/291.57 #natmult(#s(@x), @y) -> #add(#pos(@y), null_#natmult) [0] 419.69/291.57 #pred(#0) -> #neg(#s(#0)) [0] 419.69/291.57 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) [0] 419.69/291.57 #pred(#pos(#s(#0))) -> #0 [0] 419.69/291.57 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) [0] 419.69/291.57 #succ(#0) -> #pos(#s(#0)) [0] 419.69/291.57 #succ(#neg(#s(#0))) -> #0 [0] 419.69/291.57 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) [0] 419.69/291.57 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) [0] 419.69/291.57 #add(v0, v1) -> null_#add [0] 419.69/291.57 #mult(v0, v1) -> null_#mult [0] 419.69/291.57 #natmult(v0, v1) -> null_#natmult [0] 419.69/291.57 #pred(v0) -> null_#pred [0] 419.69/291.57 #succ(v0) -> null_#succ [0] 419.69/291.57 lineMult#1(v0, v1, v2) -> null_lineMult#1 [0] 419.69/291.57 lineMult#2(v0, v1, v2, v3) -> null_lineMult#2 [0] 419.69/291.57 419.69/291.57 The TRS has the following type information: 419.69/291.57 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 419.69/291.57 #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 419.69/291.57 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 419.69/291.57 #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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 :: :: :::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 419.69/291.57 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 419.69/291.57 nil :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 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 419.69/291.57 #0 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 #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 419.69/291.57 null_#add :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#mult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#natmult :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#pred :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_#succ :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_lineMult#1 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 null_lineMult#2 :: :::nil:#0:#s:#neg:#pos:null_#add:null_#mult:null_#natmult:null_#pred:null_#succ:null_lineMult#1:null_lineMult#2 419.69/291.57 419.69/291.57 Rewrite Strategy: INNERMOST 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) 419.69/291.57 Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. 419.69/291.57 The constant constructors are abstracted as follows: 419.69/291.57 419.69/291.57 nil => 1 419.69/291.57 #0 => 0 419.69/291.57 null_#add => 0 419.69/291.57 null_#mult => 0 419.69/291.57 null_#natmult => 0 419.69/291.57 null_#pred => 0 419.69/291.57 null_#succ => 0 419.69/291.57 null_lineMult#1 => 0 419.69/291.57 null_lineMult#2 => 0 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (14) 419.69/291.57 Obligation: 419.69/291.57 Complexity RNTS consisting of the following rules: 419.69/291.57 419.69/291.57 #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 419.69/291.57 #add(z, z') -{ 0 }-> #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 419.69/291.57 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 419.69/291.57 computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line 419.69/291.57 computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z'' = @m, @acc >= 0, @m >= 0, z = 1, z' = @acc 419.69/291.57 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 419.69/291.57 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 419.69/291.57 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: @acc >= 0, @x >= 0, z = 1, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x 419.69/291.57 lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 419.69/291.57 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 419.69/291.57 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z' = @l2, z'' = @n, z = 1, @l2 >= 0, @n >= 0 419.69/291.57 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 419.69/291.57 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 419.69/291.57 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 419.69/291.57 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 419.69/291.57 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 419.69/291.57 matrixMult#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 419.69/291.57 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 419.69/291.57 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 419.69/291.57 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 419.69/291.57 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (15) InliningProof (UPPER BOUND(ID)) 419.69/291.57 Inlined the following terminating rules on right-hand sides where appropriate: 419.69/291.57 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (16) 419.69/291.57 Obligation: 419.69/291.57 Complexity RNTS consisting of the following rules: 419.69/291.57 419.69/291.57 #add(z, z') -{ 0 }-> @y :|: z' = @y, z = 0, @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0) 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0' 419.69/291.57 #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 419.69/291.57 #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) 419.69/291.57 #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 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) 419.69/291.57 #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')) 419.69/291.57 #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')) 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x) 419.69/291.57 #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) 419.69/291.57 #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') 419.69/291.57 #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') 419.69/291.57 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + @x''), @y))) :|: z = 1 + (1 + (1 + (1 + @x''))), z' = @y, @x'' >= 0, @y >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0) 419.69/291.57 #add(z, z') -{ 0 }-> #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)) 419.69/291.57 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x) 419.69/291.57 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + @x'), @y))) :|: z = 1 + (1 + (1 + (1 + @x'))), z' = @y, @y >= 0, @x' >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 1 + @y, @y >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: @x >= 0, z = 1 + @x, z' = 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 419.69/291.57 #mult(z, z') -{ 0 }-> 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> 0 :|: z' = @y, z = 0, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + @y, #add(1 + @y, #natmult(@x1, @y))) :|: @x1 >= 0, z' = @y, z = 1 + (1 + @x1), @y >= 0 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x)) 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x) 419.69/291.57 computeLine(z, z', z'') -{ 1 }-> computeLine#1(@line, @acc, @m) :|: z'' = @acc, @m >= 0, @acc >= 0, @line >= 0, z' = @m, z = @line 419.69/291.57 computeLine#1(z, z', z'') -{ 1 }-> @acc :|: z'' = @m, @acc >= 0, @m >= 0, z = 1, z' = @acc 419.69/291.57 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 419.69/291.57 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 419.69/291.57 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: @acc >= 0, @x >= 0, z = 1, z1 = @xs, z' = @acc, @xs >= 0, z'' = @x 419.69/291.57 lineMult(z, z', z'') -{ 1 }-> lineMult#1(@l1, @l2, @n) :|: @l1 >= 0, z'' = @l2, @n >= 0, @l2 >= 0, z = @n, z' = @l1 419.69/291.57 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 419.69/291.57 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z' = @l2, z'' = @n, z = 1, @l2 >= 0, @n >= 0 419.69/291.57 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 419.69/291.57 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0 419.69/291.57 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 419.69/291.57 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 419.69/291.57 matrixMult(z, z') -{ 1 }-> matrixMult#1(@m1, @m2) :|: @m1 >= 0, @m2 >= 0, z = @m1, z' = @m2 419.69/291.57 matrixMult#1(z, z') -{ 1 }-> 1 :|: @m2 >= 0, z = 1, z' = @m2 419.69/291.57 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 419.69/291.57 plus(z, z') -{ 1 }-> #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 419.69/291.57 times(z, z') -{ 1 }-> #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0 419.69/291.57 419.69/291.57 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (17) SimplificationProof (BOTH BOUNDS(ID, ID)) 419.69/291.57 Simplified the RNTS by moving equalities from the constraints into the right-hand sides. 419.69/291.57 ---------------------------------------- 419.69/291.57 419.69/291.57 (18) 419.69/291.57 Obligation: 419.69/291.57 Complexity RNTS consisting of the following rules: 419.69/291.57 419.69/291.57 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.57 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.57 #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')) 419.69/291.57 #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')) 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.57 #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) 419.69/291.57 #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') 419.69/291.57 #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') 419.69/291.57 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.57 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.57 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.57 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.57 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.57 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.57 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.57 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.57 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.57 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.57 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.57 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.57 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 419.69/291.57 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.57 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.57 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.57 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.57 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.57 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.57 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (19) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID)) 419.69/291.58 Found the following analysis order by SCC decomposition: 419.69/291.58 419.69/291.58 { #pred } 419.69/291.58 { #succ } 419.69/291.58 { #add } 419.69/291.58 { #natmult } 419.69/291.58 { plus } 419.69/291.58 { #mult } 419.69/291.58 { times } 419.69/291.58 { lineMult, lineMult#2, lineMult#1 } 419.69/291.58 { computeLine, computeLine#1, computeLine#2 } 419.69/291.58 { matrixMult#1, matrixMult } 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (20) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 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} 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (21) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.58 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (22) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 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} 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (23) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.58 419.69/291.58 Computed SIZE bound using CoFloCo for: #pred 419.69/291.58 after applying outer abstraction to obtain an ITS, 419.69/291.58 resulting in: O(n^1) with polynomial bound: 2 + z 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (24) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 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} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: ?, size: O(n^1) [2 + z] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (25) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.58 419.69/291.58 Computed RUNTIME bound using CoFloCo for: #pred 419.69/291.58 after applying outer abstraction to obtain an ITS, 419.69/291.58 resulting in: O(1) with polynomial bound: 0 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (26) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (27) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.58 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (28) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (29) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.58 419.69/291.58 Computed SIZE bound using CoFloCo for: #succ 419.69/291.58 after applying outer abstraction to obtain an ITS, 419.69/291.58 resulting in: O(n^1) with polynomial bound: 2 + z 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (30) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#succ}, {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #succ: runtime: ?, size: O(n^1) [2 + z] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (31) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.58 419.69/291.58 Computed RUNTIME bound using CoFloCo for: #succ 419.69/291.58 after applying outer abstraction to obtain an ITS, 419.69/291.58 resulting in: O(1) with polynomial bound: 0 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (32) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (33) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.58 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (34) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (35) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.58 419.69/291.58 Computed SIZE bound using KoAT for: #add 419.69/291.58 after applying outer abstraction to obtain an ITS, 419.69/291.58 resulting in: O(n^1) with polynomial bound: 2*z + z' 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (36) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#add}, {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #add: runtime: ?, size: O(n^1) [2*z + z'] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (37) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.58 419.69/291.58 Computed RUNTIME bound using CoFloCo for: #add 419.69/291.58 after applying outer abstraction to obtain an ITS, 419.69/291.58 resulting in: O(1) with polynomial bound: 0 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (38) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z' >= 0, z - 4 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.58 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.58 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.58 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.58 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.58 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 419.69/291.58 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.58 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.58 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.58 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.58 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 419.69/291.58 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.58 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.58 plus(z, z') -{ 1 }-> #add(z, z') :|: z >= 0, z' >= 0 419.69/291.58 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.58 419.69/291.58 Function symbols to be analyzed: {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.58 Previous analysis results are: 419.69/291.58 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.58 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.58 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (39) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.58 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.58 ---------------------------------------- 419.69/291.58 419.69/291.58 (40) 419.69/291.58 Obligation: 419.69/291.58 Complexity RNTS consisting of the following rules: 419.69/291.58 419.69/291.58 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.58 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #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 419.69/291.58 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.58 #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 419.69/291.58 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.58 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.58 #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')) 419.69/291.58 #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')) 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.58 #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) 419.69/291.58 #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') 419.69/291.58 #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') 419.69/291.58 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.58 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.58 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.58 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.59 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 419.69/291.59 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.59 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.59 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 419.69/291.59 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.59 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.59 419.69/291.59 Function symbols to be analyzed: {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.59 Previous analysis results are: 419.69/291.59 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (41) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.59 419.69/291.59 Computed SIZE bound using KoAT for: #natmult 419.69/291.59 after applying outer abstraction to obtain an ITS, 419.69/291.59 resulting in: O(n^2) with polynomial bound: 4 + 4*z + 4*z*z' + 4*z' 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (42) 419.69/291.59 Obligation: 419.69/291.59 Complexity RNTS consisting of the following rules: 419.69/291.59 419.69/291.59 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.59 #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')) 419.69/291.59 #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')) 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.59 #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) 419.69/291.59 #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') 419.69/291.59 #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') 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.59 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 419.69/291.59 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.59 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.59 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 419.69/291.59 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.59 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.59 419.69/291.59 Function symbols to be analyzed: {#natmult}, {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.59 Previous analysis results are: 419.69/291.59 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.59 #natmult: runtime: ?, size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (43) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.59 419.69/291.59 Computed RUNTIME bound using CoFloCo for: #natmult 419.69/291.59 after applying outer abstraction to obtain an ITS, 419.69/291.59 resulting in: O(1) with polynomial bound: 0 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (44) 419.69/291.59 Obligation: 419.69/291.59 Complexity RNTS consisting of the following rules: 419.69/291.59 419.69/291.59 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.59 #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')) 419.69/291.59 #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')) 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.59 #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) 419.69/291.59 #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') 419.69/291.59 #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') 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.59 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 419.69/291.59 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.59 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.59 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 419.69/291.59 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.59 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.59 419.69/291.59 Function symbols to be analyzed: {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.59 Previous analysis results are: 419.69/291.59 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.59 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (45) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.59 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (46) 419.69/291.59 Obligation: 419.69/291.59 Complexity RNTS consisting of the following rules: 419.69/291.59 419.69/291.59 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.59 #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')) 419.69/291.59 #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')) 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.59 #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) 419.69/291.59 #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') 419.69/291.59 #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') 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #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 419.69/291.59 #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 419.69/291.59 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.59 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 419.69/291.59 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.59 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.59 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 419.69/291.59 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.59 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.59 419.69/291.59 Function symbols to be analyzed: {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.59 Previous analysis results are: 419.69/291.59 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.59 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (47) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.59 419.69/291.59 Computed SIZE bound using CoFloCo for: plus 419.69/291.59 after applying outer abstraction to obtain an ITS, 419.69/291.59 resulting in: O(n^1) with polynomial bound: 2*z + z' 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (48) 419.69/291.59 Obligation: 419.69/291.59 Complexity RNTS consisting of the following rules: 419.69/291.59 419.69/291.59 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.59 #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')) 419.69/291.59 #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')) 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.59 #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) 419.69/291.59 #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') 419.69/291.59 #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') 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #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 419.69/291.59 #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 419.69/291.59 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.59 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 419.69/291.59 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.59 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.59 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 419.69/291.59 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.59 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.59 419.69/291.59 Function symbols to be analyzed: {plus}, {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.59 Previous analysis results are: 419.69/291.59 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.59 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.59 plus: runtime: ?, size: O(n^1) [2*z + z'] 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (49) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.59 419.69/291.59 Computed RUNTIME bound using CoFloCo for: plus 419.69/291.59 after applying outer abstraction to obtain an ITS, 419.69/291.59 resulting in: O(1) with polynomial bound: 1 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (50) 419.69/291.59 Obligation: 419.69/291.59 Complexity RNTS consisting of the following rules: 419.69/291.59 419.69/291.59 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.59 #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')) 419.69/291.59 #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')) 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.59 #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) 419.69/291.59 #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') 419.69/291.59 #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') 419.69/291.59 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.59 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #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 419.69/291.59 #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 419.69/291.59 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.59 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.59 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.59 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.59 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.59 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.59 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 419.69/291.59 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.59 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.59 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.59 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.59 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 419.69/291.59 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.59 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.59 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.59 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.59 419.69/291.59 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.59 Previous analysis results are: 419.69/291.59 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.59 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.59 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.59 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.59 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (51) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.59 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.59 ---------------------------------------- 419.69/291.59 419.69/291.59 (52) 419.69/291.59 Obligation: 419.69/291.59 Complexity RNTS consisting of the following rules: 419.69/291.59 419.69/291.59 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.59 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.59 #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 419.69/291.59 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.59 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (53) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed SIZE bound using KoAT for: #mult 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (54) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {#mult}, {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: ?, size: O(n^2) [1 + 4*z*z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (55) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: #mult 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(1) with polynomial bound: 0 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (56) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> #mult(z, z') :|: z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (57) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.60 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (58) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (59) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed SIZE bound using KoAT for: times 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^2) with polynomial bound: 1 + 4*z*z' 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (60) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {times}, {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: ?, size: O(n^2) [1 + 4*z*z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (61) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: times 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(1) with polynomial bound: 1 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (62) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 1 }-> 1 + times(z'', z') + lineMult(z', z1, 1) :|: z'' >= 0, z = 1, z' >= 0, z1 >= 0 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (63) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.60 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (64) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (65) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: lineMult 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: lineMult#2 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: lineMult#1 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (66) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {lineMult,lineMult#2,lineMult#1}, {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: ?, size: INF 419.69/291.60 lineMult#2: runtime: ?, size: INF 419.69/291.60 lineMult#1: runtime: ?, size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (67) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: lineMult 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^1) with polynomial bound: 7 + 5*z' 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: lineMult#2 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^1) with polynomial bound: 10 + 5*z1 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: lineMult#1 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^1) with polynomial bound: 6 + 5*z 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (68) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 1 }-> lineMult#1(z', z'', z) :|: z' >= 0, z >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> lineMult#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, z'' >= 0, @xs >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (69) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.60 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (70) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 419.69/291.60 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 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (71) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: computeLine 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: computeLine#1 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: computeLine#2 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (72) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 419.69/291.60 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 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {computeLine,computeLine#1,computeLine#2}, {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 computeLine: runtime: ?, size: INF 419.69/291.60 computeLine#1: runtime: ?, size: INF 419.69/291.60 computeLine#2: runtime: ?, size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (73) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: computeLine 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^1) with polynomial bound: 13 + 2*z + 10*z' 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: computeLine#1 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^1) with polynomial bound: 10 + 2*z + 10*z'' 419.69/291.60 419.69/291.60 Computed RUNTIME bound using CoFloCo for: computeLine#2 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^1) with polynomial bound: 11 + 10*z + 2*z1 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (74) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 1 }-> computeLine#1(z, z'', z') :|: z' >= 0, z'' >= 0, z >= 0 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> computeLine#2(z'', z', @x, @xs) :|: z' >= 0, z'' >= 0, @x >= 0, z = 1 + @x + @xs, @xs >= 0 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 419.69/291.60 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 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 + computeLine(@l, z', 1) + matrixMult(@ls, z') :|: z = 1 + @l + @ls, @ls >= 0, @l >= 0, z' >= 0 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF 419.69/291.60 computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF 419.69/291.60 computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (75) ResultPropagationProof (UPPER BOUND(ID)) 419.69/291.60 Applied inner abstraction using the recently inferred runtime/size bounds where possible. 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (76) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 11 + 2*z + 10*z' }-> s25 :|: s25 >= 0, s25 <= inf3, z' >= 0, z'' >= 0, z >= 0 419.69/291.60 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 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 419.69/291.60 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 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 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 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF 419.69/291.60 computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF 419.69/291.60 computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (77) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: matrixMult#1 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 Computed SIZE bound using CoFloCo for: matrixMult 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: INF with polynomial bound: ? 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (78) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 11 + 2*z + 10*z' }-> s25 :|: s25 >= 0, s25 <= inf3, z' >= 0, z'' >= 0, z >= 0 419.69/291.60 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 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 419.69/291.60 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 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 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 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: {matrixMult#1,matrixMult} 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF 419.69/291.60 computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF 419.69/291.60 computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF 419.69/291.60 matrixMult#1: runtime: ?, size: INF 419.69/291.60 matrixMult: runtime: ?, size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (79) IntTrsBoundProof (UPPER BOUND(ID)) 419.69/291.60 419.69/291.60 Computed RUNTIME bound using KoAT for: matrixMult#1 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^2) with polynomial bound: 1 + 30*z + 20*z*z' + 4*z^2 419.69/291.60 419.69/291.60 Computed RUNTIME bound using KoAT for: matrixMult 419.69/291.60 after applying outer abstraction to obtain an ITS, 419.69/291.60 resulting in: O(n^2) with polynomial bound: 2 + 30*z + 20*z*z' + 4*z^2 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (80) 419.69/291.60 Obligation: 419.69/291.60 Complexity RNTS consisting of the following rules: 419.69/291.60 419.69/291.60 #add(z, z') -{ 0 }-> s :|: s >= 0, s <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s' :|: s' >= 0, s' <= 1 + (1 + (z' - 3)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s'' :|: s'' >= 0, s'' <= 1 + (1 + (1 + (z' - 2))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0 419.69/291.60 #add(z, z') -{ 0 }-> s1 :|: s1 >= 0, s1 <= 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> s2 :|: s2 >= 0, s2 <= 1 + (1 + 0) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0 419.69/291.60 #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 419.69/291.60 #add(z, z') -{ 0 }-> z' :|: z = 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + 0), z' >= 0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0' 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0) 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0 419.69/291.60 #add(z, z') -{ 0 }-> 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0) 419.69/291.60 #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')) 419.69/291.60 #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')) 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0 419.69/291.60 #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) 419.69/291.60 #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') 419.69/291.60 #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') 419.69/291.60 #add(z, z') -{ 0 }-> 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z = 0, z' - 1 >= 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z - 1 >= 0, z' = 0 419.69/291.60 #mult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #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 419.69/291.60 #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 419.69/291.60 #natmult(z, z') -{ 0 }-> s4 :|: s4 >= 0, s4 <= 2 * (1 + z') + 0, z = 1 + 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> s5 :|: s5 >= 0, s5 <= 2 * (1 + z') + 0, z - 1 >= 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z = 0, z' >= 0 419.69/291.60 #natmult(z, z') -{ 0 }-> 0 :|: z >= 0, z' >= 0 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #pred(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #pred(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z = 1 + (1 + 0) 419.69/291.60 #succ(z) -{ 0 }-> 0 :|: z >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + 0) :|: z = 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (z - 3)) :|: z - 3 >= 0 419.69/291.60 #succ(z) -{ 0 }-> 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0 419.69/291.60 computeLine(z, z', z'') -{ 11 + 2*z + 10*z' }-> s25 :|: s25 >= 0, s25 <= inf3, z' >= 0, z'' >= 0, z >= 0 419.69/291.60 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 419.69/291.60 computeLine#1(z, z', z'') -{ 1 }-> z' :|: z' >= 0, z'' >= 0, z = 1 419.69/291.60 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 419.69/291.60 computeLine#2(z, z', z'', z1) -{ 1 }-> 1 :|: z' >= 0, z'' >= 0, z = 1, z1 >= 0 419.69/291.60 lineMult(z, z', z'') -{ 7 + 5*z' }-> s21 :|: s21 >= 0, s21 <= inf', z' >= 0, z >= 0, z'' >= 0 419.69/291.60 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 419.69/291.60 lineMult#1(z, z', z'') -{ 1 }-> 1 :|: z = 1, z' >= 0, z'' >= 0 419.69/291.60 lineMult#1(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 419.69/291.60 lineMult#2(z, z', z'', z1) -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0 419.69/291.60 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 419.69/291.60 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 419.69/291.60 matrixMult(z, z') -{ 1 }-> matrixMult#1(z, z') :|: z >= 0, z' >= 0 419.69/291.60 matrixMult#1(z, z') -{ 1 }-> 1 :|: z' >= 0, z = 1 419.69/291.60 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 419.69/291.60 plus(z, z') -{ 1 }-> s3 :|: s3 >= 0, s3 <= 2 * z + z', z >= 0, z' >= 0 419.69/291.60 times(z, z') -{ 1 }-> s16 :|: s16 >= 0, s16 <= 4 * (z' * z) + 1, z >= 0, z' >= 0 419.69/291.60 419.69/291.60 Function symbols to be analyzed: 419.69/291.60 Previous analysis results are: 419.69/291.60 #pred: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #succ: runtime: O(1) [0], size: O(n^1) [2 + z] 419.69/291.60 #add: runtime: O(1) [0], size: O(n^1) [2*z + z'] 419.69/291.60 #natmult: runtime: O(1) [0], size: O(n^2) [4 + 4*z + 4*z*z' + 4*z'] 419.69/291.60 plus: runtime: O(1) [1], size: O(n^1) [2*z + z'] 419.69/291.60 #mult: runtime: O(1) [0], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 times: runtime: O(1) [1], size: O(n^2) [1 + 4*z*z'] 419.69/291.60 lineMult: runtime: O(n^1) [7 + 5*z'], size: INF 419.69/291.60 lineMult#2: runtime: O(n^1) [10 + 5*z1], size: INF 419.69/291.60 lineMult#1: runtime: O(n^1) [6 + 5*z], size: INF 419.69/291.60 computeLine: runtime: O(n^1) [13 + 2*z + 10*z'], size: INF 419.69/291.60 computeLine#1: runtime: O(n^1) [10 + 2*z + 10*z''], size: INF 419.69/291.60 computeLine#2: runtime: O(n^1) [11 + 10*z + 2*z1], size: INF 419.69/291.60 matrixMult#1: runtime: O(n^2) [1 + 30*z + 20*z*z' + 4*z^2], size: INF 419.69/291.60 matrixMult: runtime: O(n^2) [2 + 30*z + 20*z*z' + 4*z^2], size: INF 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (81) FinalProof (FINISHED) 419.69/291.60 Computed overall runtime complexity 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (82) 419.69/291.60 BOUNDS(1, n^2) 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (83) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) 419.69/291.60 Transformed a relative TRS into a decreasing-loop problem. 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (84) 419.69/291.60 Obligation: 419.69/291.60 Analyzing the following TRS for decreasing loops: 419.69/291.60 419.69/291.60 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 419.69/291.60 419.69/291.60 419.69/291.60 The TRS R consists of the following rules: 419.69/291.60 419.69/291.60 *(@x, @y) -> #mult(@x, @y) 419.69/291.60 +(@x, @y) -> #add(@x, @y) 419.69/291.60 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) 419.69/291.60 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) 419.69/291.60 computeLine#1(nil, @acc, @m) -> @acc 419.69/291.60 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) 419.69/291.60 computeLine#2(nil, @acc, @x, @xs) -> nil 419.69/291.60 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) 419.69/291.60 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) 419.69/291.60 lineMult#1(nil, @l2, @n) -> nil 419.69/291.60 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) 419.69/291.60 lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) 419.69/291.60 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) 419.69/291.60 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) 419.69/291.60 matrixMult#1(nil, @m2) -> nil 419.69/291.60 419.69/291.60 The (relative) TRS S consists of the following rules: 419.69/291.60 419.69/291.60 #add(#0, @y) -> @y 419.69/291.60 #add(#neg(#s(#0)), @y) -> #pred(@y) 419.69/291.60 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 419.69/291.60 #add(#pos(#s(#0)), @y) -> #succ(@y) 419.69/291.60 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 419.69/291.60 #mult(#0, #0) -> #0 419.69/291.60 #mult(#0, #neg(@y)) -> #0 419.69/291.60 #mult(#0, #pos(@y)) -> #0 419.69/291.60 #mult(#neg(@x), #0) -> #0 419.69/291.60 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.60 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.60 #mult(#pos(@x), #0) -> #0 419.69/291.60 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.60 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.60 #natmult(#0, @y) -> #0 419.69/291.60 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 419.69/291.60 #pred(#0) -> #neg(#s(#0)) 419.69/291.60 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 419.69/291.60 #pred(#pos(#s(#0))) -> #0 419.69/291.60 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 419.69/291.60 #succ(#0) -> #pos(#s(#0)) 419.69/291.60 #succ(#neg(#s(#0))) -> #0 419.69/291.60 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 419.69/291.60 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 419.69/291.60 419.69/291.60 Rewrite Strategy: INNERMOST 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (85) DecreasingLoopProof (LOWER BOUND(ID)) 419.69/291.60 The following loop(s) give(s) rise to the lower bound Omega(n^1): 419.69/291.60 419.69/291.60 The rewrite sequence 419.69/291.60 419.69/291.60 matrixMult#1(::(@l, @ls), @m2) ->^+ ::(computeLine(@l, @m2, nil), matrixMult#1(@ls, @m2)) 419.69/291.60 419.69/291.60 gives rise to a decreasing loop by considering the right hand sides subterm at position [1]. 419.69/291.60 419.69/291.60 The pumping substitution is [@ls / ::(@l, @ls)]. 419.69/291.60 419.69/291.60 The result substitution is [ ]. 419.69/291.60 419.69/291.60 419.69/291.60 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (86) 419.69/291.60 Complex Obligation (BEST) 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (87) 419.69/291.60 Obligation: 419.69/291.60 Proved the lower bound n^1 for the following obligation: 419.69/291.60 419.69/291.60 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 419.69/291.60 419.69/291.60 419.69/291.60 The TRS R consists of the following rules: 419.69/291.60 419.69/291.60 *(@x, @y) -> #mult(@x, @y) 419.69/291.60 +(@x, @y) -> #add(@x, @y) 419.69/291.60 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) 419.69/291.60 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) 419.69/291.60 computeLine#1(nil, @acc, @m) -> @acc 419.69/291.60 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) 419.69/291.60 computeLine#2(nil, @acc, @x, @xs) -> nil 419.69/291.60 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) 419.69/291.60 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) 419.69/291.60 lineMult#1(nil, @l2, @n) -> nil 419.69/291.60 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) 419.69/291.60 lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) 419.69/291.60 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) 419.69/291.60 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) 419.69/291.60 matrixMult#1(nil, @m2) -> nil 419.69/291.60 419.69/291.60 The (relative) TRS S consists of the following rules: 419.69/291.60 419.69/291.60 #add(#0, @y) -> @y 419.69/291.60 #add(#neg(#s(#0)), @y) -> #pred(@y) 419.69/291.60 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 419.69/291.60 #add(#pos(#s(#0)), @y) -> #succ(@y) 419.69/291.60 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 419.69/291.60 #mult(#0, #0) -> #0 419.69/291.60 #mult(#0, #neg(@y)) -> #0 419.69/291.60 #mult(#0, #pos(@y)) -> #0 419.69/291.60 #mult(#neg(@x), #0) -> #0 419.69/291.60 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.60 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.60 #mult(#pos(@x), #0) -> #0 419.69/291.60 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.60 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.60 #natmult(#0, @y) -> #0 419.69/291.60 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 419.69/291.60 #pred(#0) -> #neg(#s(#0)) 419.69/291.60 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 419.69/291.60 #pred(#pos(#s(#0))) -> #0 419.69/291.60 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 419.69/291.60 #succ(#0) -> #pos(#s(#0)) 419.69/291.60 #succ(#neg(#s(#0))) -> #0 419.69/291.60 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 419.69/291.60 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 419.69/291.60 419.69/291.60 Rewrite Strategy: INNERMOST 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (88) LowerBoundPropagationProof (FINISHED) 419.69/291.60 Propagated lower bound. 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (89) 419.69/291.60 BOUNDS(n^1, INF) 419.69/291.60 419.69/291.60 ---------------------------------------- 419.69/291.60 419.69/291.60 (90) 419.69/291.60 Obligation: 419.69/291.60 Analyzing the following TRS for decreasing loops: 419.69/291.60 419.69/291.60 The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). 419.69/291.60 419.69/291.60 419.69/291.60 The TRS R consists of the following rules: 419.69/291.60 419.69/291.60 *(@x, @y) -> #mult(@x, @y) 419.69/291.60 +(@x, @y) -> #add(@x, @y) 419.69/291.60 computeLine(@line, @m, @acc) -> computeLine#1(@line, @acc, @m) 419.69/291.60 computeLine#1(::(@x, @xs), @acc, @m) -> computeLine#2(@m, @acc, @x, @xs) 419.69/291.60 computeLine#1(nil, @acc, @m) -> @acc 419.69/291.60 computeLine#2(::(@l, @ls), @acc, @x, @xs) -> computeLine(@xs, @ls, lineMult(@x, @l, @acc)) 419.69/291.60 computeLine#2(nil, @acc, @x, @xs) -> nil 419.69/291.60 lineMult(@n, @l1, @l2) -> lineMult#1(@l1, @l2, @n) 419.69/291.60 lineMult#1(::(@x, @xs), @l2, @n) -> lineMult#2(@l2, @n, @x, @xs) 419.69/291.60 lineMult#1(nil, @l2, @n) -> nil 419.69/291.60 lineMult#2(::(@y, @ys), @n, @x, @xs) -> ::(+(*(@x, @n), @y), lineMult(@n, @xs, @ys)) 419.69/291.60 lineMult#2(nil, @n, @x, @xs) -> ::(*(@x, @n), lineMult(@n, @xs, nil)) 419.69/291.60 matrixMult(@m1, @m2) -> matrixMult#1(@m1, @m2) 419.69/291.60 matrixMult#1(::(@l, @ls), @m2) -> ::(computeLine(@l, @m2, nil), matrixMult(@ls, @m2)) 419.69/291.60 matrixMult#1(nil, @m2) -> nil 419.69/291.60 419.69/291.60 The (relative) TRS S consists of the following rules: 419.69/291.60 419.69/291.60 #add(#0, @y) -> @y 419.69/291.60 #add(#neg(#s(#0)), @y) -> #pred(@y) 419.69/291.60 #add(#neg(#s(#s(@x))), @y) -> #pred(#add(#pos(#s(@x)), @y)) 419.69/291.60 #add(#pos(#s(#0)), @y) -> #succ(@y) 419.69/291.60 #add(#pos(#s(#s(@x))), @y) -> #succ(#add(#pos(#s(@x)), @y)) 419.69/291.60 #mult(#0, #0) -> #0 419.69/291.60 #mult(#0, #neg(@y)) -> #0 419.69/291.60 #mult(#0, #pos(@y)) -> #0 419.69/291.60 #mult(#neg(@x), #0) -> #0 419.69/291.60 #mult(#neg(@x), #neg(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.60 #mult(#neg(@x), #pos(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.60 #mult(#pos(@x), #0) -> #0 419.69/291.60 #mult(#pos(@x), #neg(@y)) -> #neg(#natmult(@x, @y)) 419.69/291.60 #mult(#pos(@x), #pos(@y)) -> #pos(#natmult(@x, @y)) 419.69/291.60 #natmult(#0, @y) -> #0 419.69/291.60 #natmult(#s(@x), @y) -> #add(#pos(@y), #natmult(@x, @y)) 419.69/291.60 #pred(#0) -> #neg(#s(#0)) 419.69/291.60 #pred(#neg(#s(@x))) -> #neg(#s(#s(@x))) 419.69/291.60 #pred(#pos(#s(#0))) -> #0 419.69/291.60 #pred(#pos(#s(#s(@x)))) -> #pos(#s(@x)) 419.69/291.60 #succ(#0) -> #pos(#s(#0)) 419.69/291.60 #succ(#neg(#s(#0))) -> #0 419.69/291.60 #succ(#neg(#s(#s(@x)))) -> #neg(#s(@x)) 419.69/291.60 #succ(#pos(#s(@x))) -> #pos(#s(#s(@x))) 419.69/291.60 419.69/291.60 Rewrite Strategy: INNERMOST 419.93/291.66 EOF