/export/starexec/sandbox/solver/bin/starexec_run_complexity /export/starexec/sandbox/benchmark/theBenchmark.koat /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox/benchmark/theBenchmark.koat # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(n^1, nat(1 + Arg_0) + max(3, -1 + 2 * Arg_0) + max(7, 1 + 3 * Arg_0) + max(3, 3 + Arg_0 * max(7, 1 + 3 * Arg_0)) + max(4, 2 * Arg_0) + nat(Arg_0)). (0) CpxIntTrs (1) Koat2 Proof [FINISHED, 2933 ms] (2) BOUNDS(1, nat(1 + Arg_0) + max(3, -1 + 2 * Arg_0) + max(7, 1 + 3 * Arg_0) + max(3, 3 + Arg_0 * max(7, 1 + 3 * Arg_0)) + max(4, 2 * Arg_0) + nat(Arg_0)) (3) Loat Proof [FINISHED, 1000 ms] (4) BOUNDS(n^1, INF) ---------------------------------------- (0) Obligation: Complexity Int TRS consisting of the following rules: start(A, B, C, D, E, F, G, H, I, J) -> Com_1(stop(A, B, C, D, E, F, G, H, 1, J)) :|: 1 >= A && B >= C && B <= C && D >= E && D <= E && F >= A && F <= A && G >= H && G <= H && I >= J && I <= J start(A, B, C, D, E, F, G, H, I, J) -> Com_1(lbl31(A, K, C, D, E, F, G, H, 1, J)) :|: A >= 2 && B >= C && B <= C && D >= E && D <= E && F >= A && F <= A && G >= H && G <= H && I >= J && I <= J lbl43(A, B, C, D, E, F, G, H, I, J) -> Com_1(lbl43(A, B, C, D, E, F, G - 1, H, I, J)) :|: G >= 0 && I >= G + 2 && G + 1 >= 0 && A >= I + 1 && F >= A && F <= A lbl43(A, B, C, D, E, F, G, H, I, J) -> Com_1(lbl13(A, B, C, I, E, F, G, H, 1 + I, J)) :|: I >= G + 2 && G + 1 >= 0 && A >= I + 1 && F >= A && F <= A lbl31(A, B, C, D, E, F, G, H, I, J) -> Com_1(lbl43(A, B, C, D, E, F, I - 2, H, I, J)) :|: I >= 1 && A >= I + 1 && F >= A && F <= A lbl31(A, B, C, D, E, F, G, H, I, J) -> Com_1(lbl13(A, B, C, I, E, F, I - 1, H, 1 + I, J)) :|: I >= 1 && A >= I + 1 && F >= A && F <= A lbl13(A, B, C, D, E, F, G, H, I, J) -> Com_1(stop(A, B, C, D, E, F, G, H, I, J)) :|: G + A >= 2 && G + 1 >= 0 && A >= 2 + G && F >= A && F <= A && I >= A && I <= A && D + 1 >= A && D + 1 <= A lbl13(A, B, C, D, E, F, G, H, I, J) -> Com_1(lbl31(A, K, C, D, E, F, G, H, I, J)) :|: A >= D + 2 && G + D >= 1 && G + 1 >= 0 && A >= D + 1 && D >= G + 1 && F >= A && F <= A && I >= D + 1 && I <= D + 1 start0(A, B, C, D, E, F, G, H, I, J) -> Com_1(start(A, C, C, E, E, A, H, H, J, J)) :|: TRUE The start-symbols are:[start0_10] ---------------------------------------- (1) Koat2 Proof (FINISHED) YES( ?, 3+max([0, Arg_0*max([7, 1+3*Arg_0])])+max([4, 2*Arg_0])+max([0, Arg_0])+max([0, 1+Arg_0])+max([3, -1+2*Arg_0])+max([7, 1+3*Arg_0]) {O(n^2)}) Initial Complexity Problem: Start: start0 Program_Vars: Arg_0, Arg_1, Arg_2, Arg_3, Arg_4, Arg_5, Arg_6, Arg_7, Arg_8, Arg_9 Temp_Vars: K Locations: lbl13, lbl31, lbl43, start, start0, stop Transitions: 7: lbl13->lbl31 6: lbl13->stop 5: lbl31->lbl13 4: lbl31->lbl43 3: lbl43->lbl13 2: lbl43->lbl43 1: start->lbl31 0: start->stop 8: start0->start Timebounds: Overall timebound: 3+max([0, Arg_0*max([7, 1+3*Arg_0])])+max([4, 2*Arg_0])+max([0, Arg_0])+max([0, 1+Arg_0])+max([3, -1+2*Arg_0])+max([7, 1+3*Arg_0]) {O(n^2)} 6: lbl13->stop: 1 {O(1)} 7: lbl13->lbl31: max([3, -1+2*Arg_0]) {O(n)} 4: lbl31->lbl43: max([0, 1+Arg_0]) {O(n)} 5: lbl31->lbl13: max([3, -1+2*Arg_0]) {O(n)} 2: lbl43->lbl43: max([0, Arg_0*max([7, 1+3*Arg_0])])+max([7, 1+3*Arg_0]) {O(n^2)} 3: lbl43->lbl13: max([0, Arg_0]) {O(n)} 0: start->stop: 1 {O(1)} 1: start->lbl31: 1 {O(1)} 8: start0->start: 1 {O(1)} Costbounds: Overall costbound: 3+max([0, Arg_0*max([7, 1+3*Arg_0])])+max([4, 2*Arg_0])+max([0, Arg_0])+max([0, 1+Arg_0])+max([3, -1+2*Arg_0])+max([7, 1+3*Arg_0]) {O(n^2)} 6: lbl13->stop: 1 {O(1)} 7: lbl13->lbl31: max([3, -1+2*Arg_0]) {O(n)} 4: lbl31->lbl43: max([0, 1+Arg_0]) {O(n)} 5: lbl31->lbl13: max([3, -1+2*Arg_0]) {O(n)} 2: lbl43->lbl43: max([0, Arg_0*max([7, 1+3*Arg_0])])+max([7, 1+3*Arg_0]) {O(n^2)} 3: lbl43->lbl13: max([0, Arg_0]) {O(n)} 0: start->stop: 1 {O(1)} 1: start->lbl31: 1 {O(1)} 8: start0->start: 1 {O(1)} Sizebounds: `Lower: 6: lbl13->stop, Arg_0: 2 {O(1)} 6: lbl13->stop, Arg_2: Arg_2 {O(n)} 6: lbl13->stop, Arg_3: 1 {O(1)} 6: lbl13->stop, Arg_4: Arg_4 {O(n)} 6: lbl13->stop, Arg_5: 2 {O(1)} 6: lbl13->stop, Arg_6: -1 {O(1)} 6: lbl13->stop, Arg_7: Arg_7 {O(n)} 6: lbl13->stop, Arg_8: 2 {O(1)} 6: lbl13->stop, Arg_9: Arg_9 {O(n)} 7: lbl13->lbl31, Arg_0: 3 {O(1)} 7: lbl13->lbl31, Arg_2: Arg_2 {O(n)} 7: lbl13->lbl31, Arg_3: 1 {O(1)} 7: lbl13->lbl31, Arg_4: Arg_4 {O(n)} 7: lbl13->lbl31, Arg_5: 3 {O(1)} 7: lbl13->lbl31, Arg_6: -1 {O(1)} 7: lbl13->lbl31, Arg_7: Arg_7 {O(n)} 7: lbl13->lbl31, Arg_8: 2 {O(1)} 7: lbl13->lbl31, Arg_9: Arg_9 {O(n)} 4: lbl31->lbl43, Arg_0: 2 {O(1)} 4: lbl31->lbl43, Arg_2: Arg_2 {O(n)} 4: lbl31->lbl43, Arg_3: min([1, Arg_4]) {O(n)} 4: lbl31->lbl43, Arg_4: Arg_4 {O(n)} 4: lbl31->lbl43, Arg_5: 2 {O(1)} 4: lbl31->lbl43, Arg_6: -1 {O(1)} 4: lbl31->lbl43, Arg_7: Arg_7 {O(n)} 4: lbl31->lbl43, Arg_8: 1 {O(1)} 4: lbl31->lbl43, Arg_9: Arg_9 {O(n)} 5: lbl31->lbl13, Arg_0: 2 {O(1)} 5: lbl31->lbl13, Arg_2: Arg_2 {O(n)} 5: lbl31->lbl13, Arg_3: 1 {O(1)} 5: lbl31->lbl13, Arg_4: Arg_4 {O(n)} 5: lbl31->lbl13, Arg_5: 2 {O(1)} 5: lbl31->lbl13, Arg_6: 0 {O(1)} 5: lbl31->lbl13, Arg_7: Arg_7 {O(n)} 5: lbl31->lbl13, Arg_8: 2 {O(1)} 5: lbl31->lbl13, Arg_9: Arg_9 {O(n)} 2: lbl43->lbl43, Arg_0: 3 {O(1)} 2: lbl43->lbl43, Arg_2: Arg_2 {O(n)} 2: lbl43->lbl43, Arg_3: min([1, Arg_4]) {O(n)} 2: lbl43->lbl43, Arg_4: Arg_4 {O(n)} 2: lbl43->lbl43, Arg_5: 3 {O(1)} 2: lbl43->lbl43, Arg_6: -1 {O(1)} 2: lbl43->lbl43, Arg_7: Arg_7 {O(n)} 2: lbl43->lbl43, Arg_8: 2 {O(1)} 2: lbl43->lbl43, Arg_9: Arg_9 {O(n)} 3: lbl43->lbl13, Arg_0: 2 {O(1)} 3: lbl43->lbl13, Arg_2: Arg_2 {O(n)} 3: lbl43->lbl13, Arg_3: 1 {O(1)} 3: lbl43->lbl13, Arg_4: Arg_4 {O(n)} 3: lbl43->lbl13, Arg_5: 2 {O(1)} 3: lbl43->lbl13, Arg_6: -1 {O(1)} 3: lbl43->lbl13, Arg_7: Arg_7 {O(n)} 3: lbl43->lbl13, Arg_8: 2 {O(1)} 3: lbl43->lbl13, Arg_9: Arg_9 {O(n)} 0: start->stop, Arg_0: Arg_0 {O(n)} 0: start->stop, Arg_1: Arg_2 {O(n)} 0: start->stop, Arg_2: Arg_2 {O(n)} 0: start->stop, Arg_3: Arg_4 {O(n)} 0: start->stop, Arg_4: Arg_4 {O(n)} 0: start->stop, Arg_5: Arg_0 {O(n)} 0: start->stop, Arg_6: Arg_7 {O(n)} 0: start->stop, Arg_7: Arg_7 {O(n)} 0: start->stop, Arg_8: 1 {O(1)} 0: start->stop, Arg_9: Arg_9 {O(n)} 1: start->lbl31, Arg_0: 2 {O(1)} 1: start->lbl31, Arg_2: Arg_2 {O(n)} 1: start->lbl31, Arg_3: Arg_4 {O(n)} 1: start->lbl31, Arg_4: Arg_4 {O(n)} 1: start->lbl31, Arg_5: 2 {O(1)} 1: start->lbl31, Arg_6: Arg_7 {O(n)} 1: start->lbl31, Arg_7: Arg_7 {O(n)} 1: start->lbl31, Arg_8: 1 {O(1)} 1: start->lbl31, Arg_9: Arg_9 {O(n)} 8: start0->start, Arg_0: Arg_0 {O(n)} 8: start0->start, Arg_1: Arg_2 {O(n)} 8: start0->start, Arg_2: Arg_2 {O(n)} 8: start0->start, Arg_3: Arg_4 {O(n)} 8: start0->start, Arg_4: Arg_4 {O(n)} 8: start0->start, Arg_5: Arg_0 {O(n)} 8: start0->start, Arg_6: Arg_7 {O(n)} 8: start0->start, Arg_7: Arg_7 {O(n)} 8: start0->start, Arg_8: Arg_9 {O(n)} 8: start0->start, Arg_9: Arg_9 {O(n)} `Upper: 6: lbl13->stop, Arg_0: Arg_0 {O(n)} 6: lbl13->stop, Arg_2: Arg_2 {O(n)} 6: lbl13->stop, Arg_3: max([1, 1+max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 6: lbl13->stop, Arg_4: Arg_4 {O(n)} 6: lbl13->stop, Arg_5: Arg_0 {O(n)} 6: lbl13->stop, Arg_6: max([0, max([-1, max([max([0, Arg_0])+max([3, -1+2*Arg_0]), -1+max([0, Arg_0])+max([3, -1+2*Arg_0])])])]) {O(n)} 6: lbl13->stop, Arg_7: Arg_7 {O(n)} 6: lbl13->stop, Arg_8: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 6: lbl13->stop, Arg_9: Arg_9 {O(n)} 7: lbl13->lbl31, Arg_0: Arg_0 {O(n)} 7: lbl13->lbl31, Arg_2: Arg_2 {O(n)} 7: lbl13->lbl31, Arg_3: max([1, 1+max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 7: lbl13->lbl31, Arg_4: Arg_4 {O(n)} 7: lbl13->lbl31, Arg_5: Arg_0 {O(n)} 7: lbl13->lbl31, Arg_6: max([0, max([-1, max([max([0, Arg_0])+max([3, -1+2*Arg_0]), -1+max([0, Arg_0])+max([3, -1+2*Arg_0])])])]) {O(n)} 7: lbl13->lbl31, Arg_7: Arg_7 {O(n)} 7: lbl13->lbl31, Arg_8: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 7: lbl13->lbl31, Arg_9: Arg_9 {O(n)} 4: lbl31->lbl43, Arg_0: Arg_0 {O(n)} 4: lbl31->lbl43, Arg_2: Arg_2 {O(n)} 4: lbl31->lbl43, Arg_3: max([1, max([Arg_4, 1+max([0, Arg_0])+max([3, -1+2*Arg_0])])]) {O(n)} 4: lbl31->lbl43, Arg_4: Arg_4 {O(n)} 4: lbl31->lbl43, Arg_5: Arg_0 {O(n)} 4: lbl31->lbl43, Arg_6: max([-1, -1+max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 4: lbl31->lbl43, Arg_7: Arg_7 {O(n)} 4: lbl31->lbl43, Arg_8: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 4: lbl31->lbl43, Arg_9: Arg_9 {O(n)} 5: lbl31->lbl13, Arg_0: Arg_0 {O(n)} 5: lbl31->lbl13, Arg_2: Arg_2 {O(n)} 5: lbl31->lbl13, Arg_3: max([1, 1+max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 5: lbl31->lbl13, Arg_4: Arg_4 {O(n)} 5: lbl31->lbl13, Arg_5: Arg_0 {O(n)} 5: lbl31->lbl13, Arg_6: max([0, max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 5: lbl31->lbl13, Arg_7: Arg_7 {O(n)} 5: lbl31->lbl13, Arg_8: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 5: lbl31->lbl13, Arg_9: Arg_9 {O(n)} 2: lbl43->lbl43, Arg_0: Arg_0 {O(n)} 2: lbl43->lbl43, Arg_2: Arg_2 {O(n)} 2: lbl43->lbl43, Arg_3: max([1, max([Arg_4, 1+max([0, Arg_0])+max([3, -1+2*Arg_0])])]) {O(n)} 2: lbl43->lbl43, Arg_4: Arg_4 {O(n)} 2: lbl43->lbl43, Arg_5: Arg_0 {O(n)} 2: lbl43->lbl43, Arg_6: max([-1, -1+max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 2: lbl43->lbl43, Arg_7: Arg_7 {O(n)} 2: lbl43->lbl43, Arg_8: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 2: lbl43->lbl43, Arg_9: Arg_9 {O(n)} 3: lbl43->lbl13, Arg_0: Arg_0 {O(n)} 3: lbl43->lbl13, Arg_2: Arg_2 {O(n)} 3: lbl43->lbl13, Arg_3: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 3: lbl43->lbl13, Arg_4: Arg_4 {O(n)} 3: lbl43->lbl13, Arg_5: Arg_0 {O(n)} 3: lbl43->lbl13, Arg_6: max([-1, -1+max([0, Arg_0])+max([3, -1+2*Arg_0])]) {O(n)} 3: lbl43->lbl13, Arg_7: Arg_7 {O(n)} 3: lbl43->lbl13, Arg_8: 1+max([0, Arg_0])+max([3, -1+2*Arg_0]) {O(n)} 3: lbl43->lbl13, Arg_9: Arg_9 {O(n)} 0: start->stop, Arg_0: 1 {O(1)} 0: start->stop, Arg_1: Arg_2 {O(n)} 0: start->stop, Arg_2: Arg_2 {O(n)} 0: start->stop, Arg_3: Arg_4 {O(n)} 0: start->stop, Arg_4: Arg_4 {O(n)} 0: start->stop, Arg_5: 1 {O(1)} 0: start->stop, Arg_6: Arg_7 {O(n)} 0: start->stop, Arg_7: Arg_7 {O(n)} 0: start->stop, Arg_8: 1 {O(1)} 0: start->stop, Arg_9: Arg_9 {O(n)} 1: start->lbl31, Arg_0: Arg_0 {O(n)} 1: start->lbl31, Arg_2: Arg_2 {O(n)} 1: start->lbl31, Arg_3: Arg_4 {O(n)} 1: start->lbl31, Arg_4: Arg_4 {O(n)} 1: start->lbl31, Arg_5: Arg_0 {O(n)} 1: start->lbl31, Arg_6: Arg_7 {O(n)} 1: start->lbl31, Arg_7: Arg_7 {O(n)} 1: start->lbl31, Arg_8: 1 {O(1)} 1: start->lbl31, Arg_9: Arg_9 {O(n)} 8: start0->start, Arg_0: Arg_0 {O(n)} 8: start0->start, Arg_1: Arg_2 {O(n)} 8: start0->start, Arg_2: Arg_2 {O(n)} 8: start0->start, Arg_3: Arg_4 {O(n)} 8: start0->start, Arg_4: Arg_4 {O(n)} 8: start0->start, Arg_5: Arg_0 {O(n)} 8: start0->start, Arg_6: Arg_7 {O(n)} 8: start0->start, Arg_7: Arg_7 {O(n)} 8: start0->start, Arg_8: Arg_9 {O(n)} 8: start0->start, Arg_9: Arg_9 {O(n)} ---------------------------------------- (2) BOUNDS(1, nat(1 + Arg_0) + max(3, -1 + 2 * Arg_0) + max(7, 1 + 3 * Arg_0) + max(3, 3 + Arg_0 * max(7, 1 + 3 * Arg_0)) + max(4, 2 * Arg_0) + nat(Arg_0)) ---------------------------------------- (3) Loat Proof (FINISHED) ### Pre-processing the ITS problem ### Initial linear ITS problem Start location: start0 0: start -> stop : Q'=1, [ 1>=A && B==C && D==E && F==A && G==H && Q==J ], cost: 1 1: start -> lbl31 : B'=free, Q'=1, [ A>=2 && B==C && D==E && F==A && G==H && Q==J ], cost: 1 2: lbl43 -> lbl43 : G'=-1+G, [ G>=0 && Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 3: lbl43 -> lbl13 : D'=Q, Q'=1+Q, [ Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 4: lbl31 -> lbl43 : G'=-2+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 5: lbl31 -> lbl13 : D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 6: lbl13 -> stop : [ G+A>=2 && 1+G>=0 && A>=2+G && F==A && Q==A && 1+D==A ], cost: 1 7: lbl13 -> lbl31 : B'=free_1, [ A>=2+D && G+D>=1 && 1+G>=0 && A>=1+D && D>=1+G && F==A && Q==1+D ], cost: 1 8: start0 -> start : B'=C, D'=E, F'=A, G'=H, Q'=J, [], cost: 1 Checking for constant complexity: The following rule is satisfiable with cost >= 1, yielding constant complexity: 8: start0 -> start : B'=C, D'=E, F'=A, G'=H, Q'=J, [], cost: 1 Removed unreachable and leaf rules: Start location: start0 1: start -> lbl31 : B'=free, Q'=1, [ A>=2 && B==C && D==E && F==A && G==H && Q==J ], cost: 1 2: lbl43 -> lbl43 : G'=-1+G, [ G>=0 && Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 3: lbl43 -> lbl13 : D'=Q, Q'=1+Q, [ Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 4: lbl31 -> lbl43 : G'=-2+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 5: lbl31 -> lbl13 : D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 7: lbl13 -> lbl31 : B'=free_1, [ A>=2+D && G+D>=1 && 1+G>=0 && A>=1+D && D>=1+G && F==A && Q==1+D ], cost: 1 8: start0 -> start : B'=C, D'=E, F'=A, G'=H, Q'=J, [], cost: 1 Simplified all rules, resulting in: Start location: start0 1: start -> lbl31 : B'=free, Q'=1, [ A>=2 && B==C && D==E && F==A && G==H && Q==J ], cost: 1 2: lbl43 -> lbl43 : G'=-1+G, [ G>=0 && Q>=2+G && A>=1+Q && F==A ], cost: 1 3: lbl43 -> lbl13 : D'=Q, Q'=1+Q, [ Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 4: lbl31 -> lbl43 : G'=-2+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 5: lbl31 -> lbl13 : D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 7: lbl13 -> lbl31 : B'=free_1, [ A>=2+D && G+D>=1 && 1+G>=0 && D>=1+G && F==A && Q==1+D ], cost: 1 8: start0 -> start : B'=C, D'=E, F'=A, G'=H, Q'=J, [], cost: 1 ### Simplification by acceleration and chaining ### Accelerating simple loops of location 1. Accelerating the following rules: 2: lbl43 -> lbl43 : G'=-1+G, [ G>=0 && Q>=2+G && A>=1+Q && F==A ], cost: 1 Accelerated rule 2 with metering function 1+G, yielding the new rule 9. Removing the simple loops: 2. Accelerated all simple loops using metering functions (where possible): Start location: start0 1: start -> lbl31 : B'=free, Q'=1, [ A>=2 && B==C && D==E && F==A && G==H && Q==J ], cost: 1 3: lbl43 -> lbl13 : D'=Q, Q'=1+Q, [ Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 9: lbl43 -> lbl43 : G'=-1, [ G>=0 && Q>=2+G && A>=1+Q && F==A ], cost: 1+G 4: lbl31 -> lbl43 : G'=-2+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 5: lbl31 -> lbl13 : D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 7: lbl13 -> lbl31 : B'=free_1, [ A>=2+D && G+D>=1 && 1+G>=0 && D>=1+G && F==A && Q==1+D ], cost: 1 8: start0 -> start : B'=C, D'=E, F'=A, G'=H, Q'=J, [], cost: 1 Chained accelerated rules (with incoming rules): Start location: start0 1: start -> lbl31 : B'=free, Q'=1, [ A>=2 && B==C && D==E && F==A && G==H && Q==J ], cost: 1 3: lbl43 -> lbl13 : D'=Q, Q'=1+Q, [ Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 4: lbl31 -> lbl43 : G'=-2+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 5: lbl31 -> lbl13 : D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 10: lbl31 -> lbl43 : G'=-1, [ A>=1+Q && F==A && -2+Q>=0 ], cost: Q 7: lbl13 -> lbl31 : B'=free_1, [ A>=2+D && G+D>=1 && 1+G>=0 && D>=1+G && F==A && Q==1+D ], cost: 1 8: start0 -> start : B'=C, D'=E, F'=A, G'=H, Q'=J, [], cost: 1 Eliminated locations (on linear paths): Start location: start0 3: lbl43 -> lbl13 : D'=Q, Q'=1+Q, [ Q>=2+G && 1+G>=0 && A>=1+Q && F==A ], cost: 1 4: lbl31 -> lbl43 : G'=-2+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 5: lbl31 -> lbl13 : D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && A>=1+Q && F==A ], cost: 1 10: lbl31 -> lbl43 : G'=-1, [ A>=1+Q && F==A && -2+Q>=0 ], cost: Q 7: lbl13 -> lbl31 : B'=free_1, [ A>=2+D && G+D>=1 && 1+G>=0 && D>=1+G && F==A && Q==1+D ], cost: 1 11: start0 -> lbl31 : B'=free, D'=E, F'=A, G'=H, Q'=1, [ A>=2 ], cost: 2 Eliminated locations (on tree-shaped paths): Start location: start0 14: lbl31 -> lbl31 : B'=free_1, D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && F==A && A>=2+Q && -1+2*Q>=1 ], cost: 2 15: lbl31 -> lbl31 : B'=free_1, D'=Q, G'=-2+Q, Q'=1+Q, [ Q>=1 && F==A && A>=2+Q && -2+2*Q>=1 ], cost: 3 16: lbl31 -> lbl31 : B'=free_1, D'=Q, G'=-1, Q'=1+Q, [ F==A && -2+Q>=0 && A>=2+Q ], cost: 2+Q 11: start0 -> lbl31 : B'=free, D'=E, F'=A, G'=H, Q'=1, [ A>=2 ], cost: 2 Accelerating simple loops of location 2. Accelerating the following rules: 14: lbl31 -> lbl31 : B'=free_1, D'=Q, G'=-1+Q, Q'=1+Q, [ Q>=1 && F==A && A>=2+Q && -1+2*Q>=1 ], cost: 2 15: lbl31 -> lbl31 : B'=free_1, D'=Q, G'=-2+Q, Q'=1+Q, [ Q>=1 && F==A && A>=2+Q && -2+2*Q>=1 ], cost: 3 16: lbl31 -> lbl31 : B'=free_1, D'=Q, G'=-1, Q'=1+Q, [ F==A && -2+Q>=0 && A>=2+Q ], cost: 2+Q Accelerated rule 14 with metering function -1+A-Q, yielding the new rule 17. Accelerated rule 15 with metering function -1+A-Q, yielding the new rule 18. Accelerated rule 16 with metering function -1+A-Q, yielding the new rule 19. Removing the simple loops: 14 15 16. Accelerated all simple loops using metering functions (where possible): Start location: start0 17: lbl31 -> lbl31 : B'=free_1, D'=-2+A, G'=-3+A, Q'=-1+A, [ Q>=1 && F==A && A>=2+Q && -1+2*Q>=1 ], cost: -2+2*A-2*Q 18: lbl31 -> lbl31 : B'=free_1, D'=-2+A, G'=-4+A, Q'=-1+A, [ Q>=1 && F==A && A>=2+Q && -2+2*Q>=1 ], cost: -3+3*A-3*Q 19: lbl31 -> lbl31 : B'=free_1, D'=-2+A, G'=-1, Q'=-1+A, [ F==A && -2+Q>=0 && A>=2+Q ], cost: -3/2+(-1+A-Q)*Q+1/2*(-1+A-Q)^2+3/2*A-3/2*Q 11: start0 -> lbl31 : B'=free, D'=E, F'=A, G'=H, Q'=1, [ A>=2 ], cost: 2 Chained accelerated rules (with incoming rules): Start location: start0 11: start0 -> lbl31 : B'=free, D'=E, F'=A, G'=H, Q'=1, [ A>=2 ], cost: 2 20: start0 -> lbl31 : B'=free_1, D'=-2+A, F'=A, G'=-3+A, Q'=-1+A, [ A>=3 ], cost: -2+2*A Removed unreachable locations (and leaf rules with constant cost): Start location: start0 20: start0 -> lbl31 : B'=free_1, D'=-2+A, F'=A, G'=-3+A, Q'=-1+A, [ A>=3 ], cost: -2+2*A ### Computing asymptotic complexity ### Fully simplified ITS problem Start location: start0 20: start0 -> lbl31 : B'=free_1, D'=-2+A, F'=A, G'=-3+A, Q'=-1+A, [ A>=3 ], cost: -2+2*A Computing asymptotic complexity for rule 20 Solved the limit problem by the following transformations: Created initial limit problem: -2+2*A (+), -2+A (+/+!) [not solved] removing all constraints (solved by SMT) resulting limit problem: [solved] applying transformation rule (C) using substitution {A==n} resulting limit problem: [solved] Solution: A / n Resulting cost -2+2*n has complexity: Poly(n^1) Found new complexity Poly(n^1). Obtained the following overall complexity (w.r.t. the length of the input n): Complexity: Poly(n^1) Cpx degree: 1 Solved cost: -2+2*n Rule cost: -2+2*A Rule guard: [ A>=3 ] WORST_CASE(Omega(n^1),?) ---------------------------------------- (4) BOUNDS(n^1, INF)