/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.koat /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^1)) proof of /export/starexec/sandbox2/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, n^1). (0) CpxIntTrs (1) Koat Proof [FINISHED, 223 ms] (2) BOUNDS(1, n^1) (3) Loat Proof [FINISHED, 839 ms] (4) BOUNDS(n^1, INF) ---------------------------------------- (0) Obligation: Complexity Int TRS consisting of the following rules: evalfstart(A, B, C) -> Com_1(evalfentryin(A, B, C)) :|: TRUE evalfentryin(A, B, C) -> Com_1(evalfbb3in(B, A, 0)) :|: A >= 1 && B >= 1 evalfbb3in(A, B, C) -> Com_1(evalfreturnin(A, B, C)) :|: 0 >= B evalfbb3in(A, B, C) -> Com_1(evalfbb4in(A, B, C)) :|: B >= 1 evalfbb4in(A, B, C) -> Com_1(evalfbbin(A, B, C)) :|: 0 >= D + 1 evalfbb4in(A, B, C) -> Com_1(evalfbbin(A, B, C)) :|: D >= 1 evalfbb4in(A, B, C) -> Com_1(evalfreturnin(A, B, C)) :|: TRUE evalfbbin(A, B, C) -> Com_1(evalfbb1in(A, B, C)) :|: A >= C + 1 evalfbbin(A, B, C) -> Com_1(evalfbb3in(A, B, 0)) :|: C >= A evalfbb1in(A, B, C) -> Com_1(evalfbb3in(A, B - 1, C + 1)) :|: TRUE evalfreturnin(A, B, C) -> Com_1(evalfstop(A, B, C)) :|: TRUE The start-symbols are:[evalfstart_3] ---------------------------------------- (1) Koat Proof (FINISHED) YES(?, 42*ar_0 + 14) Initial complexity problem: 1: T: (Comp: ?, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) (Comp: ?, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_1, ar_0, 0)) [ ar_0 >= 1 /\ ar_1 >= 1 ] (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ 0 >= ar_1 ] (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbb4in(ar_0, ar_1, ar_2)) [ ar_1 >= 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 0 >= d + 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ d >= 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 + 1 ] (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1, 0)) [ ar_2 >= ar_0 ] (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 - 1, ar_2 + 1)) (Comp: ?, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] start location: koat_start leaf cost: 0 Repeatedly propagating knowledge in problem 1 produces the following problem: 2: T: (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_1, ar_0, 0)) [ ar_0 >= 1 /\ ar_1 >= 1 ] (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ 0 >= ar_1 ] (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbb4in(ar_0, ar_1, ar_2)) [ ar_1 >= 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 0 >= d + 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ d >= 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 + 1 ] (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1, 0)) [ ar_2 >= ar_0 ] (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 - 1, ar_2 + 1)) (Comp: ?, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] start location: koat_start leaf cost: 0 A polynomial rank function with Pol(evalfstart) = 2 Pol(evalfentryin) = 2 Pol(evalfbb3in) = 2 Pol(evalfreturnin) = 1 Pol(evalfbb4in) = 2 Pol(evalfbbin) = 2 Pol(evalfbb1in) = 2 Pol(evalfstop) = 0 Pol(koat_start) = 2 orients all transitions weakly and the transitions evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ 0 >= ar_1 ] strictly and produces the following problem: 3: T: (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_1, ar_0, 0)) [ ar_0 >= 1 /\ ar_1 >= 1 ] (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ 0 >= ar_1 ] (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbb4in(ar_0, ar_1, ar_2)) [ ar_1 >= 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 0 >= d + 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ d >= 1 ] (Comp: 2, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 + 1 ] (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1, 0)) [ ar_2 >= ar_0 ] (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 - 1, ar_2 + 1)) (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] start location: koat_start leaf cost: 0 Applied AI with 'oct' on problem 3 to obtain the following invariants: For symbol evalfbb1in: X_1 - X_3 - 1 >= 0 /\ X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 For symbol evalfbb3in: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_1 - 1 >= 0 For symbol evalfbb4in: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 For symbol evalfbbin: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 For symbol evalfreturnin: X_3 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ X_1 - 1 >= 0 This yielded the following problem: 4: T: (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 ] (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 - 1, ar_2 + 1)) [ ar_0 - ar_2 - 1 >= 0 /\ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 ] (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1, 0)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] (Comp: 2, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ d >= 1 ] (Comp: ?, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= d + 1 ] (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbb4in(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_1 >= 1 ] (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= ar_1 ] (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_1, ar_0, 0)) [ ar_0 >= 1 /\ ar_1 >= 1 ] (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) start location: koat_start leaf cost: 0 A polynomial rank function with Pol(koat_start) = 7*V_1 + 1 Pol(evalfstart) = 7*V_1 + 1 Pol(evalfreturnin) = 7*V_2 + 3*V_3 Pol(evalfstop) = 7*V_2 + 3*V_3 Pol(evalfbb1in) = 7*V_2 + 3*V_3 - 2 Pol(evalfbb3in) = 7*V_2 + 3*V_3 + 1 Pol(evalfbbin) = 7*V_2 + 3*V_3 - 1 Pol(evalfbb4in) = 7*V_2 + 3*V_3 Pol(evalfentryin) = 7*V_1 + 1 orients all transitions weakly and the transitions evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1, 0)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ d >= 1 ] evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= d + 1 ] evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbb4in(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_1 >= 1 ] evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 - 1, ar_2 + 1)) [ ar_0 - ar_2 - 1 >= 0 /\ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 ] strictly and produces the following problem: 5: T: (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 ] (Comp: 7*ar_0 + 1, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 - 1, ar_2 + 1)) [ ar_0 - ar_2 - 1 >= 0 /\ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 ] (Comp: 7*ar_0 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1, 0)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] (Comp: 7*ar_0 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] (Comp: 2, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 ] (Comp: 7*ar_0 + 1, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ d >= 1 ] (Comp: 7*ar_0 + 1, Cost: 1) evalfbb4in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_1 - 1 >= 0 /\ ar_0 + ar_1 - 2 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= d + 1 ] (Comp: 7*ar_0 + 1, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbb4in(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_1 >= 1 ] (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_2 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= ar_1 ] (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_1, ar_0, 0)) [ ar_0 >= 1 /\ ar_1 >= 1 ] (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) start location: koat_start leaf cost: 0 Complexity upper bound 42*ar_0 + 14 Time: 0.238 sec (SMT: 0.204 sec) ---------------------------------------- (2) BOUNDS(1, n^1) ---------------------------------------- (3) Loat Proof (FINISHED) ### Pre-processing the ITS problem ### Initial linear ITS problem Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 1 2: evalfbb3in -> evalfreturnin : [ 0>=B ], cost: 1 3: evalfbb3in -> evalfbb4in : [ B>=1 ], cost: 1 4: evalfbb4in -> evalfbbin : [ 0>=1+free ], cost: 1 5: evalfbb4in -> evalfbbin : [ free_1>=1 ], cost: 1 6: evalfbb4in -> evalfreturnin : [], cost: 1 7: evalfbbin -> evalfbb1in : [ A>=1+C ], cost: 1 8: evalfbbin -> evalfbb3in : C'=0, [ C>=A ], cost: 1 9: evalfbb1in -> evalfbb3in : B'=-1+B, C'=1+C, [], cost: 1 10: evalfreturnin -> evalfstop : [], cost: 1 Removed unreachable and leaf rules: Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 1 3: evalfbb3in -> evalfbb4in : [ B>=1 ], cost: 1 4: evalfbb4in -> evalfbbin : [ 0>=1+free ], cost: 1 5: evalfbb4in -> evalfbbin : [ free_1>=1 ], cost: 1 7: evalfbbin -> evalfbb1in : [ A>=1+C ], cost: 1 8: evalfbbin -> evalfbb3in : C'=0, [ C>=A ], cost: 1 9: evalfbb1in -> evalfbb3in : B'=-1+B, C'=1+C, [], cost: 1 Simplified all rules, resulting in: Start location: evalfstart 0: evalfstart -> evalfentryin : [], cost: 1 1: evalfentryin -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 1 3: evalfbb3in -> evalfbb4in : [ B>=1 ], cost: 1 5: evalfbb4in -> evalfbbin : [], cost: 1 7: evalfbbin -> evalfbb1in : [ A>=1+C ], cost: 1 8: evalfbbin -> evalfbb3in : C'=0, [ C>=A ], cost: 1 9: evalfbb1in -> evalfbb3in : B'=-1+B, C'=1+C, [], cost: 1 ### Simplification by acceleration and chaining ### Eliminated locations (on linear paths): Start location: evalfstart 11: evalfstart -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 2 12: evalfbb3in -> evalfbbin : [ B>=1 ], cost: 2 8: evalfbbin -> evalfbb3in : C'=0, [ C>=A ], cost: 1 13: evalfbbin -> evalfbb3in : B'=-1+B, C'=1+C, [ A>=1+C ], cost: 2 Eliminated locations (on tree-shaped paths): Start location: evalfstart 11: evalfstart -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 2 14: evalfbb3in -> evalfbb3in : C'=0, [ B>=1 && C>=A ], cost: 3 15: evalfbb3in -> evalfbb3in : B'=-1+B, C'=1+C, [ B>=1 && A>=1+C ], cost: 4 Accelerating simple loops of location 2. Accelerating the following rules: 14: evalfbb3in -> evalfbb3in : C'=0, [ B>=1 && C>=A ], cost: 3 15: evalfbb3in -> evalfbb3in : B'=-1+B, C'=1+C, [ B>=1 && A>=1+C ], cost: 4 Accelerated rule 14 with NONTERM (after strengthening guard), yielding the new rule 16. Accelerated rule 15 with backward acceleration, yielding the new rule 17. Accelerated rule 15 with backward acceleration, yielding the new rule 18. Removing the simple loops: 15. Accelerated all simple loops using metering functions (where possible): Start location: evalfstart 11: evalfstart -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 2 14: evalfbb3in -> evalfbb3in : C'=0, [ B>=1 && C>=A ], cost: 3 16: evalfbb3in -> [8] : [ B>=1 && C>=A && 0>=A ], cost: INF 17: evalfbb3in -> evalfbb3in : B'=0, C'=C+B, [ B>=1 && A>=1+C && A>=C+B ], cost: 4*B 18: evalfbb3in -> evalfbb3in : B'=C-A+B, C'=A, [ B>=1 && A>=1+C && 1+C-A+B>=1 ], cost: -4*C+4*A Chained accelerated rules (with incoming rules): Start location: evalfstart 11: evalfstart -> evalfbb3in : A'=B, B'=A, C'=0, [ A>=1 && B>=1 ], cost: 2 19: evalfstart -> evalfbb3in : A'=B, B'=0, C'=A, [ A>=1 && B>=1 && B>=A ], cost: 2+4*A 20: evalfstart -> evalfbb3in : A'=B, B'=A-B, C'=B, [ A>=1 && B>=1 && 1+A-B>=1 ], cost: 2+4*B Removed unreachable locations (and leaf rules with constant cost): Start location: evalfstart 19: evalfstart -> evalfbb3in : A'=B, B'=0, C'=A, [ A>=1 && B>=1 && B>=A ], cost: 2+4*A 20: evalfstart -> evalfbb3in : A'=B, B'=A-B, C'=B, [ A>=1 && B>=1 && 1+A-B>=1 ], cost: 2+4*B ### Computing asymptotic complexity ### Fully simplified ITS problem Start location: evalfstart 19: evalfstart -> evalfbb3in : A'=B, B'=0, C'=A, [ A>=1 && B>=1 && B>=A ], cost: 2+4*A 20: evalfstart -> evalfbb3in : A'=B, B'=A-B, C'=B, [ A>=1 && B>=1 && 1+A-B>=1 ], cost: 2+4*B Computing asymptotic complexity for rule 19 Solved the limit problem by the following transformations: Created initial limit problem: 2+4*A (+), A (+/+!), 1-A+B (+/+!), B (+/+!) [not solved] removing all constraints (solved by SMT) resulting limit problem: [solved] applying transformation rule (C) using substitution {A==n,B==2*n} resulting limit problem: [solved] Solution: A / n B / 2*n Resulting cost 2+4*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+4*n Rule cost: 2+4*A Rule guard: [ A>=1 && B>=1 && B>=A ] WORST_CASE(Omega(n^1),?) ---------------------------------------- (4) BOUNDS(n^1, INF)