4.68/2.15 WORST_CASE(Omega(n^1), O(n^1)) 4.68/2.16 proof of /export/starexec/sandbox/benchmark/theBenchmark.koat 4.68/2.16 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 4.68/2.16 4.68/2.16 4.68/2.16 The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(n^1, n^1). 4.68/2.16 4.68/2.16 (0) CpxIntTrs 4.68/2.16 (1) Koat Proof [FINISHED, 245 ms] 4.68/2.16 (2) BOUNDS(1, n^1) 4.68/2.16 (3) Loat Proof [FINISHED, 439 ms] 4.68/2.16 (4) BOUNDS(n^1, INF) 4.68/2.16 4.68/2.16 4.68/2.16 ---------------------------------------- 4.68/2.16 4.68/2.16 (0) 4.68/2.16 Obligation: 4.68/2.16 Complexity Int TRS consisting of the following rules: 4.68/2.16 evalfstart(A, B, C) -> Com_1(evalfentryin(A, B, C)) :|: TRUE 4.68/2.16 evalfentryin(A, B, C) -> Com_1(evalfbb3in(0, 0, C)) :|: TRUE 4.68/2.16 evalfbb3in(A, B, C) -> Com_1(evalfbbin(A, B, C)) :|: 99 >= B 4.68/2.16 evalfbb3in(A, B, C) -> Com_1(evalfreturnin(A, B, C)) :|: B >= 100 4.68/2.16 evalfbbin(A, B, C) -> Com_1(evalfbb1in(A, B, C)) :|: C >= A + 1 4.68/2.16 evalfbbin(A, B, C) -> Com_1(evalfbb2in(A, B, C)) :|: A >= C 4.68/2.16 evalfbb1in(A, B, C) -> Com_1(evalfbb3in(A + 1, B, C)) :|: TRUE 4.68/2.16 evalfbb2in(A, B, C) -> Com_1(evalfbb3in(A, B + 1, C)) :|: TRUE 4.68/2.16 evalfreturnin(A, B, C) -> Com_1(evalfstop(A, B, C)) :|: TRUE 4.68/2.16 4.68/2.16 The start-symbols are:[evalfstart_3] 4.68/2.16 4.68/2.16 4.68/2.16 ---------------------------------------- 4.68/2.16 4.68/2.16 (1) Koat Proof (FINISHED) 4.68/2.16 YES(?, 3*ar_2 + 610) 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Initial complexity problem: 4.68/2.16 4.68/2.16 1: T: 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Repeatedly propagating knowledge in problem 1 produces the following problem: 4.68/2.16 4.68/2.16 2: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 A polynomial rank function with 4.68/2.16 4.68/2.16 Pol(evalfstart) = 2 4.68/2.16 4.68/2.16 Pol(evalfentryin) = 2 4.68/2.16 4.68/2.16 Pol(evalfbb3in) = 2 4.68/2.16 4.68/2.16 Pol(evalfbbin) = 2 4.68/2.16 4.68/2.16 Pol(evalfreturnin) = 1 4.68/2.16 4.68/2.16 Pol(evalfbb1in) = 2 4.68/2.16 4.68/2.16 Pol(evalfbb2in) = 2 4.68/2.16 4.68/2.16 Pol(evalfstop) = 0 4.68/2.16 4.68/2.16 Pol(koat_start) = 2 4.68/2.16 4.68/2.16 orients all transitions weakly and the transitions 4.68/2.16 4.68/2.16 evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 strictly and produces the following problem: 4.68/2.16 4.68/2.16 3: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 A polynomial rank function with 4.68/2.16 4.68/2.16 Pol(evalfstart) = V_3 + 1 4.68/2.16 4.68/2.16 Pol(evalfentryin) = V_3 + 1 4.68/2.16 4.68/2.16 Pol(evalfbb3in) = -V_1 + V_3 + 1 4.68/2.16 4.68/2.16 Pol(evalfbbin) = -V_1 + V_3 + 1 4.68/2.16 4.68/2.16 Pol(evalfreturnin) = -V_1 + V_3 4.68/2.16 4.68/2.16 Pol(evalfbb1in) = -V_1 + V_3 4.68/2.16 4.68/2.16 Pol(evalfbb2in) = -V_1 + V_3 + 1 4.68/2.16 4.68/2.16 Pol(evalfstop) = -V_1 + V_3 4.68/2.16 4.68/2.16 Pol(koat_start) = V_3 + 1 4.68/2.16 4.68/2.16 orients all transitions weakly and the transition 4.68/2.16 4.68/2.16 evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 strictly and produces the following problem: 4.68/2.16 4.68/2.16 4: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Repeatedly propagating knowledge in problem 4 produces the following problem: 4.68/2.16 4.68/2.16 5: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Applied AI with 'oct' on problem 5 to obtain the following invariants: 4.68/2.16 4.68/2.16 For symbol evalfbb1in: X_3 - 1 >= 0 /\ X_2 + X_3 - 1 >= 0 /\ -X_2 + X_3 + 98 >= 0 /\ X_1 + X_3 - 1 >= 0 /\ -X_1 + X_3 - 1 >= 0 /\ -X_2 + 99 >= 0 /\ X_1 - X_2 + 99 >= 0 /\ X_2 >= 0 /\ X_1 + X_2 >= 0 /\ X_1 >= 0 4.68/2.16 4.68/2.16 For symbol evalfbb2in: X_1 - X_3 >= 0 /\ -X_2 + 99 >= 0 /\ X_1 - X_2 + 99 >= 0 /\ X_2 >= 0 /\ X_1 + X_2 >= 0 /\ X_1 >= 0 4.68/2.16 4.68/2.16 For symbol evalfbb3in: X_2 >= 0 /\ X_1 + X_2 >= 0 /\ X_1 >= 0 4.68/2.16 4.68/2.16 For symbol evalfbbin: -X_2 + 99 >= 0 /\ X_1 - X_2 + 99 >= 0 /\ X_2 >= 0 /\ X_1 + X_2 >= 0 /\ X_1 >= 0 4.68/2.16 4.68/2.16 For symbol evalfreturnin: X_2 - 100 >= 0 /\ X_1 + X_2 - 100 >= 0 /\ X_1 >= 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 This yielded the following problem: 4.68/2.16 4.68/2.16 6: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) [ ar_1 - 100 >= 0 /\ ar_0 + ar_1 - 100 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) [ ar_0 - ar_2 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) [ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ -ar_1 + ar_2 + 98 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ -ar_0 + ar_2 - 1 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 A polynomial rank function with 4.68/2.16 4.68/2.16 Pol(koat_start) = 200 4.68/2.16 4.68/2.16 Pol(evalfstart) = 200 4.68/2.16 4.68/2.16 Pol(evalfreturnin) = -2*V_2 4.68/2.16 4.68/2.16 Pol(evalfstop) = -2*V_2 4.68/2.16 4.68/2.16 Pol(evalfbb2in) = -2*V_2 + 199 4.68/2.16 4.68/2.16 Pol(evalfbb3in) = -2*V_2 + 200 4.68/2.16 4.68/2.16 Pol(evalfbb1in) = -2*V_2 + 200 4.68/2.16 4.68/2.16 Pol(evalfbbin) = -2*V_2 + 200 4.68/2.16 4.68/2.16 Pol(evalfentryin) = 200 4.68/2.16 4.68/2.16 orients all transitions weakly and the transitions 4.68/2.16 4.68/2.16 evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) [ ar_0 - ar_2 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 strictly and produces the following problem: 4.68/2.16 4.68/2.16 7: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) [ ar_1 - 100 >= 0 /\ ar_0 + ar_1 - 100 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: 200, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) [ ar_0 - ar_2 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) [ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ -ar_1 + ar_2 + 98 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ -ar_0 + ar_2 - 1 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: 200, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ?, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Repeatedly propagating knowledge in problem 7 produces the following problem: 4.68/2.16 4.68/2.16 8: T: 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalfstart(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfreturnin(ar_0, ar_1, ar_2) -> Com_1(evalfstop(ar_0, ar_1, ar_2)) [ ar_1 - 100 >= 0 /\ ar_0 + ar_1 - 100 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: 200, Cost: 1) evalfbb2in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0, ar_1 + 1, ar_2)) [ ar_0 - ar_2 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbb1in(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(ar_0 + 1, ar_1, ar_2)) [ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 1 >= 0 /\ -ar_1 + ar_2 + 98 >= 0 /\ ar_0 + ar_2 - 1 >= 0 /\ -ar_0 + ar_2 - 1 >= 0 /\ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 ] 4.68/2.16 4.68/2.16 (Comp: 200, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb2in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_0 >= ar_2 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 1, Cost: 1) evalfbbin(ar_0, ar_1, ar_2) -> Com_1(evalfbb1in(ar_0, ar_1, ar_2)) [ -ar_1 + 99 >= 0 /\ ar_0 - ar_1 + 99 >= 0 /\ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_2 >= ar_0 + 1 ] 4.68/2.16 4.68/2.16 (Comp: 2, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfreturnin(ar_0, ar_1, ar_2)) [ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ ar_1 >= 100 ] 4.68/2.16 4.68/2.16 (Comp: ar_2 + 202, Cost: 1) evalfbb3in(ar_0, ar_1, ar_2) -> Com_1(evalfbbin(ar_0, ar_1, ar_2)) [ ar_1 >= 0 /\ ar_0 + ar_1 >= 0 /\ ar_0 >= 0 /\ 99 >= ar_1 ] 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfentryin(ar_0, ar_1, ar_2) -> Com_1(evalfbb3in(0, 0, ar_2)) 4.68/2.16 4.68/2.16 (Comp: 1, Cost: 1) evalfstart(ar_0, ar_1, ar_2) -> Com_1(evalfentryin(ar_0, ar_1, ar_2)) 4.68/2.16 4.68/2.16 start location: koat_start 4.68/2.16 4.68/2.16 leaf cost: 0 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Complexity upper bound 3*ar_2 + 610 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Time: 0.256 sec (SMT: 0.224 sec) 4.68/2.16 4.68/2.16 4.68/2.16 ---------------------------------------- 4.68/2.16 4.68/2.16 (2) 4.68/2.16 BOUNDS(1, n^1) 4.68/2.16 4.68/2.16 ---------------------------------------- 4.68/2.16 4.68/2.16 (3) Loat Proof (FINISHED) 4.68/2.16 4.68/2.16 4.68/2.16 ### Pre-processing the ITS problem ### 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Initial linear ITS problem 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 0: evalfstart -> evalfentryin : [], cost: 1 4.68/2.16 4.68/2.16 1: evalfentryin -> evalfbb3in : A'=0, B'=0, [], cost: 1 4.68/2.16 4.68/2.16 2: evalfbb3in -> evalfbbin : [ 99>=B ], cost: 1 4.68/2.16 4.68/2.16 3: evalfbb3in -> evalfreturnin : [ B>=100 ], cost: 1 4.68/2.16 4.68/2.16 4: evalfbbin -> evalfbb1in : [ C>=1+A ], cost: 1 4.68/2.16 4.68/2.16 5: evalfbbin -> evalfbb2in : [ A>=C ], cost: 1 4.68/2.16 4.68/2.16 6: evalfbb1in -> evalfbb3in : A'=1+A, [], cost: 1 4.68/2.16 4.68/2.16 7: evalfbb2in -> evalfbb3in : B'=1+B, [], cost: 1 4.68/2.16 4.68/2.16 8: evalfreturnin -> evalfstop : [], cost: 1 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Removed unreachable and leaf rules: 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 0: evalfstart -> evalfentryin : [], cost: 1 4.68/2.16 4.68/2.16 1: evalfentryin -> evalfbb3in : A'=0, B'=0, [], cost: 1 4.68/2.16 4.68/2.16 2: evalfbb3in -> evalfbbin : [ 99>=B ], cost: 1 4.68/2.16 4.68/2.16 4: evalfbbin -> evalfbb1in : [ C>=1+A ], cost: 1 4.68/2.16 4.68/2.16 5: evalfbbin -> evalfbb2in : [ A>=C ], cost: 1 4.68/2.16 4.68/2.16 6: evalfbb1in -> evalfbb3in : A'=1+A, [], cost: 1 4.68/2.16 4.68/2.16 7: evalfbb2in -> evalfbb3in : B'=1+B, [], cost: 1 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 ### Simplification by acceleration and chaining ### 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Eliminated locations (on linear paths): 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 9: evalfstart -> evalfbb3in : A'=0, B'=0, [], cost: 2 4.68/2.16 4.68/2.16 2: evalfbb3in -> evalfbbin : [ 99>=B ], cost: 1 4.68/2.16 4.68/2.16 10: evalfbbin -> evalfbb3in : A'=1+A, [ C>=1+A ], cost: 2 4.68/2.16 4.68/2.16 11: evalfbbin -> evalfbb3in : B'=1+B, [ A>=C ], cost: 2 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Eliminated locations (on tree-shaped paths): 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 9: evalfstart -> evalfbb3in : A'=0, B'=0, [], cost: 2 4.68/2.16 4.68/2.16 12: evalfbb3in -> evalfbb3in : A'=1+A, [ 99>=B && C>=1+A ], cost: 3 4.68/2.16 4.68/2.16 13: evalfbb3in -> evalfbb3in : B'=1+B, [ 99>=B && A>=C ], cost: 3 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Accelerating simple loops of location 2. 4.68/2.16 4.68/2.16 Accelerating the following rules: 4.68/2.16 4.68/2.16 12: evalfbb3in -> evalfbb3in : A'=1+A, [ 99>=B && C>=1+A ], cost: 3 4.68/2.16 4.68/2.16 13: evalfbb3in -> evalfbb3in : B'=1+B, [ 99>=B && A>=C ], cost: 3 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Accelerated rule 12 with metering function C-A, yielding the new rule 14. 4.68/2.16 4.68/2.16 Accelerated rule 13 with metering function 100-B, yielding the new rule 15. 4.68/2.16 4.68/2.16 Removing the simple loops: 12 13. 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Accelerated all simple loops using metering functions (where possible): 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 9: evalfstart -> evalfbb3in : A'=0, B'=0, [], cost: 2 4.68/2.16 4.68/2.16 14: evalfbb3in -> evalfbb3in : A'=C, [ 99>=B && C>=1+A ], cost: 3*C-3*A 4.68/2.16 4.68/2.16 15: evalfbb3in -> evalfbb3in : B'=100, [ 99>=B && A>=C ], cost: 300-3*B 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Chained accelerated rules (with incoming rules): 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 9: evalfstart -> evalfbb3in : A'=0, B'=0, [], cost: 2 4.68/2.16 4.68/2.16 16: evalfstart -> evalfbb3in : A'=C, B'=0, [ C>=1 ], cost: 2+3*C 4.68/2.16 4.68/2.16 17: evalfstart -> evalfbb3in : A'=0, B'=100, [ 0>=C ], cost: 302 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Removed unreachable locations (and leaf rules with constant cost): 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 16: evalfstart -> evalfbb3in : A'=C, B'=0, [ C>=1 ], cost: 2+3*C 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 ### Computing asymptotic complexity ### 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Fully simplified ITS problem 4.68/2.16 4.68/2.16 Start location: evalfstart 4.68/2.16 4.68/2.16 16: evalfstart -> evalfbb3in : A'=C, B'=0, [ C>=1 ], cost: 2+3*C 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Computing asymptotic complexity for rule 16 4.68/2.16 4.68/2.16 Solved the limit problem by the following transformations: 4.68/2.16 4.68/2.16 Created initial limit problem: 4.68/2.16 4.68/2.16 2+3*C (+), C (+/+!) [not solved] 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 removing all constraints (solved by SMT) 4.68/2.16 4.68/2.16 resulting limit problem: [solved] 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 applying transformation rule (C) using substitution {C==n} 4.68/2.16 4.68/2.16 resulting limit problem: 4.68/2.16 4.68/2.16 [solved] 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Solution: 4.68/2.16 4.68/2.16 C / n 4.68/2.16 4.68/2.16 Resulting cost 2+3*n has complexity: Poly(n^1) 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Found new complexity Poly(n^1). 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 Obtained the following overall complexity (w.r.t. the length of the input n): 4.68/2.16 4.68/2.16 Complexity: Poly(n^1) 4.68/2.16 4.68/2.16 Cpx degree: 1 4.68/2.16 4.68/2.16 Solved cost: 2+3*n 4.68/2.16 4.68/2.16 Rule cost: 2+3*C 4.68/2.16 4.68/2.16 Rule guard: [ C>=1 ] 4.68/2.16 4.68/2.16 4.68/2.16 4.68/2.16 WORST_CASE(Omega(n^1),?) 4.68/2.16 4.68/2.16 4.68/2.16 ---------------------------------------- 4.68/2.16 4.68/2.16 (4) 4.68/2.16 BOUNDS(n^1, INF) 4.85/2.18 EOF