/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^1)) proof of /export/starexec/sandbox/benchmark/theBenchmark.koat # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(n^1, max(3, 2 + Arg_0) + max(1, 1 + Arg_0)). (0) CpxIntTrs (1) Koat2 Proof [FINISHED, 147 ms] (2) BOUNDS(1, max(3, 2 + Arg_0) + max(1, 1 + Arg_0)) (3) Loat Proof [FINISHED, 242 ms] (4) BOUNDS(n^1, INF) ---------------------------------------- (0) Obligation: Complexity Int TRS consisting of the following rules: evalndecrstart(A) -> Com_1(evalndecrentryin(A)) :|: TRUE evalndecrentryin(A) -> Com_1(evalndecrbb1in(A - 1)) :|: TRUE evalndecrbb1in(A) -> Com_1(evalndecrbbin(A)) :|: A >= 2 evalndecrbb1in(A) -> Com_1(evalndecrreturnin(A)) :|: 1 >= A evalndecrbbin(A) -> Com_1(evalndecrbb1in(A - 1)) :|: TRUE evalndecrreturnin(A) -> Com_1(evalndecrstop(A)) :|: TRUE The start-symbols are:[evalndecrstart_1] ---------------------------------------- (1) Koat2 Proof (FINISHED) YES( ?, 3+max([0, -1+Arg_0])+max([1, 1+Arg_0]) {O(n)}) Initial Complexity Problem: Start: evalndecrstart Program_Vars: Arg_0 Temp_Vars: Locations: evalndecrbb1in, evalndecrbbin, evalndecrentryin, evalndecrreturnin, evalndecrstart, evalndecrstop Transitions: evalndecrbb1in(Arg_0) -> evalndecrbbin(Arg_0):|:2 <= Arg_0 evalndecrbb1in(Arg_0) -> evalndecrreturnin(Arg_0):|:Arg_0 <= 1 evalndecrbbin(Arg_0) -> evalndecrbb1in(Arg_0-1):|:2 <= Arg_0 evalndecrentryin(Arg_0) -> evalndecrbb1in(Arg_0-1):|: evalndecrreturnin(Arg_0) -> evalndecrstop(Arg_0):|:Arg_0 <= 1 evalndecrstart(Arg_0) -> evalndecrentryin(Arg_0):|: Timebounds: Overall timebound: 3+max([0, -1+Arg_0])+max([1, 1+Arg_0]) {O(n)} 2: evalndecrbb1in->evalndecrbbin: max([0, Arg_0]) {O(n)} 3: evalndecrbb1in->evalndecrreturnin: 1 {O(1)} 4: evalndecrbbin->evalndecrbb1in: max([0, -1+Arg_0]) {O(n)} 1: evalndecrentryin->evalndecrbb1in: 1 {O(1)} 5: evalndecrreturnin->evalndecrstop: 1 {O(1)} 0: evalndecrstart->evalndecrentryin: 1 {O(1)} Costbounds: Overall costbound: 3+max([0, -1+Arg_0])+max([1, 1+Arg_0]) {O(n)} 2: evalndecrbb1in->evalndecrbbin: max([0, Arg_0]) {O(n)} 3: evalndecrbb1in->evalndecrreturnin: 1 {O(1)} 4: evalndecrbbin->evalndecrbb1in: max([0, -1+Arg_0]) {O(n)} 1: evalndecrentryin->evalndecrbb1in: 1 {O(1)} 5: evalndecrreturnin->evalndecrstop: 1 {O(1)} 0: evalndecrstart->evalndecrentryin: 1 {O(1)} Sizebounds: `Lower: 2: evalndecrbb1in->evalndecrbbin, Arg_0: 2 {O(1)} 3: evalndecrbb1in->evalndecrreturnin, Arg_0: min([1, -(1-Arg_0)]) {O(n)} 4: evalndecrbbin->evalndecrbb1in, Arg_0: 1 {O(1)} 1: evalndecrentryin->evalndecrbb1in, Arg_0: -1+Arg_0 {O(n)} 5: evalndecrreturnin->evalndecrstop, Arg_0: min([1, -(1-Arg_0)]) {O(n)} 0: evalndecrstart->evalndecrentryin, Arg_0: Arg_0 {O(n)} `Upper: 2: evalndecrbb1in->evalndecrbbin, Arg_0: -1+Arg_0 {O(n)} 3: evalndecrbb1in->evalndecrreturnin, Arg_0: 1 {O(1)} 4: evalndecrbbin->evalndecrbb1in, Arg_0: -1+Arg_0 {O(n)} 1: evalndecrentryin->evalndecrbb1in, Arg_0: -1+Arg_0 {O(n)} 5: evalndecrreturnin->evalndecrstop, Arg_0: 1 {O(1)} 0: evalndecrstart->evalndecrentryin, Arg_0: Arg_0 {O(n)} ---------------------------------------- (2) BOUNDS(1, max(3, 2 + Arg_0) + max(1, 1 + Arg_0)) ---------------------------------------- (3) Loat Proof (FINISHED) ### Pre-processing the ITS problem ### Initial linear ITS problem Start location: evalndecrstart 0: evalndecrstart -> evalndecrentryin : [], cost: 1 1: evalndecrentryin -> evalndecrbb1in : A'=-1+A, [], cost: 1 2: evalndecrbb1in -> evalndecrbbin : [ A>=2 ], cost: 1 3: evalndecrbb1in -> evalndecrreturnin : [ 1>=A ], cost: 1 4: evalndecrbbin -> evalndecrbb1in : A'=-1+A, [], cost: 1 5: evalndecrreturnin -> evalndecrstop : [], cost: 1 Removed unreachable and leaf rules: Start location: evalndecrstart 0: evalndecrstart -> evalndecrentryin : [], cost: 1 1: evalndecrentryin -> evalndecrbb1in : A'=-1+A, [], cost: 1 2: evalndecrbb1in -> evalndecrbbin : [ A>=2 ], cost: 1 4: evalndecrbbin -> evalndecrbb1in : A'=-1+A, [], cost: 1 ### Simplification by acceleration and chaining ### Eliminated locations (on linear paths): Start location: evalndecrstart 6: evalndecrstart -> evalndecrbb1in : A'=-1+A, [], cost: 2 7: evalndecrbb1in -> evalndecrbb1in : A'=-1+A, [ A>=2 ], cost: 2 Accelerating simple loops of location 2. Accelerating the following rules: 7: evalndecrbb1in -> evalndecrbb1in : A'=-1+A, [ A>=2 ], cost: 2 Accelerated rule 7 with metering function -1+A, yielding the new rule 8. Removing the simple loops: 7. Accelerated all simple loops using metering functions (where possible): Start location: evalndecrstart 6: evalndecrstart -> evalndecrbb1in : A'=-1+A, [], cost: 2 8: evalndecrbb1in -> evalndecrbb1in : A'=1, [ A>=2 ], cost: -2+2*A Chained accelerated rules (with incoming rules): Start location: evalndecrstart 6: evalndecrstart -> evalndecrbb1in : A'=-1+A, [], cost: 2 9: evalndecrstart -> evalndecrbb1in : A'=1, [ -1+A>=2 ], cost: -2+2*A Removed unreachable locations (and leaf rules with constant cost): Start location: evalndecrstart 9: evalndecrstart -> evalndecrbb1in : A'=1, [ -1+A>=2 ], cost: -2+2*A ### Computing asymptotic complexity ### Fully simplified ITS problem Start location: evalndecrstart 9: evalndecrstart -> evalndecrbb1in : A'=1, [ -1+A>=2 ], cost: -2+2*A Computing asymptotic complexity for rule 9 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: [ -1+A>=2 ] WORST_CASE(Omega(n^1),?) ---------------------------------------- (4) BOUNDS(n^1, INF)