4.07/2.05 WORST_CASE(Omega(n^1), O(n^1)) 4.17/2.21 proof of /export/starexec/sandbox/benchmark/theBenchmark.koat 4.17/2.21 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 4.17/2.21 4.17/2.21 4.17/2.21 The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(n^1, n^1). 4.17/2.21 4.17/2.21 (0) CpxIntTrs 4.17/2.21 (1) Koat Proof [FINISHED, 30 ms] 4.17/2.21 (2) BOUNDS(1, n^1) 4.17/2.21 (3) Loat Proof [FINISHED, 434 ms] 4.17/2.21 (4) BOUNDS(n^1, INF) 4.17/2.21 4.17/2.21 4.17/2.21 ---------------------------------------- 4.17/2.21 4.17/2.21 (0) 4.17/2.21 Obligation: 4.17/2.21 Complexity Int TRS consisting of the following rules: 4.17/2.21 eval1(A, B, C) -> Com_1(eval2(A, B, C)) :|: A >= B + 1 4.17/2.21 eval2(A, B, C) -> Com_1(eval2(A, B, C - 1)) :|: A >= B + 1 && C >= B + 1 4.17/2.21 eval2(A, B, C) -> Com_1(eval1(A - 1, B, C)) :|: A >= B + 1 && B >= C 4.17/2.21 start(A, B, C) -> Com_1(eval1(A, B, C)) :|: TRUE 4.17/2.21 4.17/2.21 The start-symbols are:[start_3] 4.17/2.21 4.17/2.21 4.17/2.21 ---------------------------------------- 4.17/2.21 4.17/2.21 (1) Koat Proof (FINISHED) 4.17/2.21 YES(?, 4*ar_0 + 5*ar_1 + ar_2 + 1) 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Initial complexity problem: 4.17/2.21 4.17/2.21 1: T: 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval1(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_1 + 1 /\ ar_2 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0 - 1, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 /\ ar_1 >= ar_2 ] 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) start(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0, ar_1, ar_2)) 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.17/2.21 4.17/2.21 start location: koat_start 4.17/2.21 4.17/2.21 leaf cost: 0 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Repeatedly propagating knowledge in problem 1 produces the following problem: 4.17/2.21 4.17/2.21 2: T: 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval1(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_1 + 1 /\ ar_2 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0 - 1, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 /\ ar_1 >= ar_2 ] 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 1) start(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0, ar_1, ar_2)) 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.17/2.21 4.17/2.21 start location: koat_start 4.17/2.21 4.17/2.21 leaf cost: 0 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 A polynomial rank function with 4.17/2.21 4.17/2.21 Pol(eval1) = 2*V_1 - 2*V_2 4.17/2.21 4.17/2.21 Pol(eval2) = 2*V_1 - 2*V_2 - 1 4.17/2.21 4.17/2.21 Pol(start) = 2*V_1 - 2*V_2 4.17/2.21 4.17/2.21 Pol(koat_start) = 2*V_1 - 2*V_2 4.17/2.21 4.17/2.21 orients all transitions weakly and the transitions 4.17/2.21 4.17/2.21 eval2(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0 - 1, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 /\ ar_1 >= ar_2 ] 4.17/2.21 4.17/2.21 eval1(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 strictly and produces the following problem: 4.17/2.21 4.17/2.21 3: T: 4.17/2.21 4.17/2.21 (Comp: 2*ar_0 + 2*ar_1, Cost: 1) eval1(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: ?, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_1 + 1 /\ ar_2 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: 2*ar_0 + 2*ar_1, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0 - 1, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 /\ ar_1 >= ar_2 ] 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 1) start(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0, ar_1, ar_2)) 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.17/2.21 4.17/2.21 start location: koat_start 4.17/2.21 4.17/2.21 leaf cost: 0 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 A polynomial rank function with 4.17/2.21 4.17/2.21 Pol(eval1) = -V_2 + V_3 4.17/2.21 4.17/2.21 Pol(eval2) = -V_2 + V_3 4.17/2.21 4.17/2.21 Pol(start) = -V_2 + V_3 4.17/2.21 4.17/2.21 Pol(koat_start) = -V_2 + V_3 4.17/2.21 4.17/2.21 orients all transitions weakly and the transition 4.17/2.21 4.17/2.21 eval2(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_1 + 1 /\ ar_2 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 strictly and produces the following problem: 4.17/2.21 4.17/2.21 4: T: 4.17/2.21 4.17/2.21 (Comp: 2*ar_0 + 2*ar_1, Cost: 1) eval1(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: ar_1 + ar_2, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval2(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_1 + 1 /\ ar_2 >= ar_1 + 1 ] 4.17/2.21 4.17/2.21 (Comp: 2*ar_0 + 2*ar_1, Cost: 1) eval2(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0 - 1, ar_1, ar_2)) [ ar_0 >= ar_1 + 1 /\ ar_1 >= ar_2 ] 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 1) start(ar_0, ar_1, ar_2) -> Com_1(eval1(ar_0, ar_1, ar_2)) 4.17/2.21 4.17/2.21 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 4.17/2.21 4.17/2.21 start location: koat_start 4.17/2.21 4.17/2.21 leaf cost: 0 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Complexity upper bound 4*ar_0 + 5*ar_1 + ar_2 + 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Time: 0.062 sec (SMT: 0.056 sec) 4.17/2.21 4.17/2.21 4.17/2.21 ---------------------------------------- 4.17/2.21 4.17/2.21 (2) 4.17/2.21 BOUNDS(1, n^1) 4.17/2.21 4.17/2.21 ---------------------------------------- 4.17/2.21 4.17/2.21 (3) Loat Proof (FINISHED) 4.17/2.21 4.17/2.21 4.17/2.21 ### Pre-processing the ITS problem ### 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Initial linear ITS problem 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 0: eval1 -> eval2 : [ A>=1+B ], cost: 1 4.17/2.21 4.17/2.21 1: eval2 -> eval2 : C'=-1+C, [ A>=1+B && C>=1+B ], cost: 1 4.17/2.21 4.17/2.21 2: eval2 -> eval1 : A'=-1+A, [ A>=1+B && B>=C ], cost: 1 4.17/2.21 4.17/2.21 3: start -> eval1 : [], cost: 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 ### Simplification by acceleration and chaining ### 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Accelerating simple loops of location 1. 4.17/2.21 4.17/2.21 Accelerating the following rules: 4.17/2.21 4.17/2.21 1: eval2 -> eval2 : C'=-1+C, [ A>=1+B && C>=1+B ], cost: 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Accelerated rule 1 with metering function C-B, yielding the new rule 4. 4.17/2.21 4.17/2.21 Removing the simple loops: 1. 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Accelerated all simple loops using metering functions (where possible): 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 0: eval1 -> eval2 : [ A>=1+B ], cost: 1 4.17/2.21 4.17/2.21 2: eval2 -> eval1 : A'=-1+A, [ A>=1+B && B>=C ], cost: 1 4.17/2.21 4.17/2.21 4: eval2 -> eval2 : C'=B, [ A>=1+B && C>=1+B ], cost: C-B 4.17/2.21 4.17/2.21 3: start -> eval1 : [], cost: 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Chained accelerated rules (with incoming rules): 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 0: eval1 -> eval2 : [ A>=1+B ], cost: 1 4.17/2.21 4.17/2.21 5: eval1 -> eval2 : C'=B, [ A>=1+B && C>=1+B ], cost: 1+C-B 4.17/2.21 4.17/2.21 2: eval2 -> eval1 : A'=-1+A, [ A>=1+B && B>=C ], cost: 1 4.17/2.21 4.17/2.21 3: start -> eval1 : [], cost: 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Eliminated locations (on tree-shaped paths): 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 6: eval1 -> eval1 : A'=-1+A, [ A>=1+B && B>=C ], cost: 2 4.17/2.21 4.17/2.21 7: eval1 -> eval1 : A'=-1+A, C'=B, [ A>=1+B && C>=1+B ], cost: 2+C-B 4.17/2.21 4.17/2.21 3: start -> eval1 : [], cost: 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Accelerating simple loops of location 0. 4.17/2.21 4.17/2.21 Accelerating the following rules: 4.17/2.21 4.17/2.21 6: eval1 -> eval1 : A'=-1+A, [ A>=1+B && B>=C ], cost: 2 4.17/2.21 4.17/2.21 7: eval1 -> eval1 : A'=-1+A, C'=B, [ A>=1+B && C>=1+B ], cost: 2+C-B 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Accelerated rule 6 with metering function A-B, yielding the new rule 8. 4.17/2.21 4.17/2.21 Found no metering function for rule 7. 4.17/2.21 4.17/2.21 Removing the simple loops: 6. 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Accelerated all simple loops using metering functions (where possible): 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 7: eval1 -> eval1 : A'=-1+A, C'=B, [ A>=1+B && C>=1+B ], cost: 2+C-B 4.17/2.21 4.17/2.21 8: eval1 -> eval1 : A'=B, [ A>=1+B && B>=C ], cost: 2*A-2*B 4.17/2.21 4.17/2.21 3: start -> eval1 : [], cost: 1 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Chained accelerated rules (with incoming rules): 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 3: start -> eval1 : [], cost: 1 4.17/2.21 4.17/2.21 9: start -> eval1 : A'=-1+A, C'=B, [ A>=1+B && C>=1+B ], cost: 3+C-B 4.17/2.21 4.17/2.21 10: start -> eval1 : A'=B, [ A>=1+B && B>=C ], cost: 1+2*A-2*B 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Removed unreachable locations (and leaf rules with constant cost): 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 9: start -> eval1 : A'=-1+A, C'=B, [ A>=1+B && C>=1+B ], cost: 3+C-B 4.17/2.21 4.17/2.21 10: start -> eval1 : A'=B, [ A>=1+B && B>=C ], cost: 1+2*A-2*B 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 ### Computing asymptotic complexity ### 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Fully simplified ITS problem 4.17/2.21 4.17/2.21 Start location: start 4.17/2.21 4.17/2.21 9: start -> eval1 : A'=-1+A, C'=B, [ A>=1+B && C>=1+B ], cost: 3+C-B 4.17/2.21 4.17/2.21 10: start -> eval1 : A'=B, [ A>=1+B && B>=C ], cost: 1+2*A-2*B 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Computing asymptotic complexity for rule 9 4.17/2.21 4.17/2.21 Solved the limit problem by the following transformations: 4.17/2.21 4.17/2.21 Created initial limit problem: 4.17/2.21 4.17/2.21 3+C-B (+), C-B (+/+!), A-B (+/+!) [not solved] 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 removing all constraints (solved by SMT) 4.17/2.21 4.17/2.21 resulting limit problem: [solved] 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 applying transformation rule (C) using substitution {C==n,A==0,B==-1} 4.17/2.21 4.17/2.21 resulting limit problem: 4.17/2.21 4.17/2.21 [solved] 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Solution: 4.17/2.21 4.17/2.21 C / n 4.17/2.21 4.17/2.21 A / 0 4.17/2.21 4.17/2.21 B / -1 4.17/2.21 4.17/2.21 Resulting cost 4+n has complexity: Poly(n^1) 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Found new complexity Poly(n^1). 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 Obtained the following overall complexity (w.r.t. the length of the input n): 4.17/2.21 4.17/2.21 Complexity: Poly(n^1) 4.17/2.21 4.17/2.21 Cpx degree: 1 4.17/2.21 4.17/2.21 Solved cost: 4+n 4.17/2.21 4.17/2.21 Rule cost: 3+C-B 4.17/2.21 4.17/2.21 Rule guard: [ A>=1+B && C>=1+B ] 4.17/2.21 4.17/2.21 4.17/2.21 4.17/2.21 WORST_CASE(Omega(n^1),?) 4.17/2.21 4.17/2.21 4.17/2.21 ---------------------------------------- 4.17/2.21 4.17/2.21 (4) 4.17/2.21 BOUNDS(n^1, INF) 4.18/2.34 EOF