4.76/2.91 WORST_CASE(Omega(n^1), O(n^1)) 4.76/2.92 proof of /export/starexec/sandbox/benchmark/theBenchmark.koat 4.76/2.92 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 4.76/2.92 4.76/2.92 4.76/2.92 The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(n^1, nat(2 * Arg_1) + nat(5 * Arg_1) + nat(2 * Arg_0) + nat(6 * Arg_0) + max(1, 1 + 3 * Arg_1)). 4.76/2.92 4.76/2.92 (0) CpxIntTrs 4.76/2.92 (1) Koat2 Proof [FINISHED, 427 ms] 4.76/2.92 (2) BOUNDS(1, nat(2 * Arg_1) + nat(5 * Arg_1) + nat(2 * Arg_0) + nat(6 * Arg_0) + max(1, 1 + 3 * Arg_1)) 4.76/2.92 (3) Loat Proof [FINISHED, 626 ms] 4.76/2.92 (4) BOUNDS(n^1, INF) 4.76/2.92 4.76/2.92 4.76/2.92 ---------------------------------------- 4.76/2.92 4.76/2.92 (0) 4.76/2.92 Obligation: 4.76/2.92 Complexity Int TRS consisting of the following rules: 4.76/2.92 eval1(A, B) -> Com_1(eval2(A, B)) :|: A >= 1 && B >= 1 && A >= B + 1 4.76/2.92 eval1(A, B) -> Com_1(eval3(A, B)) :|: A >= 1 && B >= 1 && B >= A 4.76/2.92 eval2(A, B) -> Com_1(eval2(A - 1, B)) :|: A >= 1 4.76/2.92 eval2(A, B) -> Com_1(eval1(A, B)) :|: 0 >= A 4.76/2.92 eval3(A, B) -> Com_1(eval3(A, B - 1)) :|: B >= 1 4.76/2.92 eval3(A, B) -> Com_1(eval1(A, B)) :|: 0 >= B 4.76/2.92 start(A, B) -> Com_1(eval1(A, B)) :|: TRUE 4.76/2.92 4.76/2.92 The start-symbols are:[start_2] 4.76/2.92 4.76/2.92 4.76/2.92 ---------------------------------------- 4.76/2.92 4.76/2.92 (1) Koat2 Proof (FINISHED) 4.76/2.92 YES( ?, 1+max([0, 3*Arg_1])+max([0, 2*Arg_1])+max([0, 5*Arg_1])+max([0, Arg_0])+max([0, Arg_0])+max([0, 6*Arg_0]) {O(n)}) 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Initial Complexity Problem: 4.76/2.92 4.76/2.92 Start: start 4.76/2.92 4.76/2.92 Program_Vars: Arg_0, Arg_1 4.76/2.92 4.76/2.92 Temp_Vars: 4.76/2.92 4.76/2.92 Locations: eval1, eval2, eval3, start 4.76/2.92 4.76/2.92 Transitions: 4.76/2.92 4.76/2.92 eval1(Arg_0,Arg_1) -> eval2(Arg_0,Arg_1):|:1 <= Arg_0 && 1 <= Arg_1 && Arg_1+1 <= Arg_0 4.76/2.92 4.76/2.92 eval1(Arg_0,Arg_1) -> eval3(Arg_0,Arg_1):|:1 <= Arg_0 && 1 <= Arg_1 && Arg_0 <= Arg_1 4.76/2.92 4.76/2.92 eval2(Arg_0,Arg_1) -> eval1(Arg_0,Arg_1):|:1 <= Arg_1 && Arg_0 <= 0 4.76/2.92 4.76/2.92 eval2(Arg_0,Arg_1) -> eval2(Arg_0-1,Arg_1):|:1 <= Arg_1 && 1 <= Arg_0 4.76/2.92 4.76/2.92 eval3(Arg_0,Arg_1) -> eval1(Arg_0,Arg_1):|:1 <= Arg_0 && Arg_1 <= 0 4.76/2.92 4.76/2.92 eval3(Arg_0,Arg_1) -> eval3(Arg_0,Arg_1-1):|:1 <= Arg_0 && 1 <= Arg_1 4.76/2.92 4.76/2.92 start(Arg_0,Arg_1) -> eval1(Arg_0,Arg_1):|: 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Timebounds: 4.76/2.92 4.76/2.92 Overall timebound: 1+max([0, 3*Arg_1])+max([0, 2*Arg_1])+max([0, 5*Arg_1])+max([0, Arg_0])+max([0, Arg_0])+max([0, 6*Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 0: eval1->eval2: max([0, Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 1: eval1->eval3: max([0, 2*Arg_1]) {O(n)} 4.76/2.92 4.76/2.92 2: eval2->eval2: max([0, Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 3: eval2->eval1: max([0, 6*Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 4: eval3->eval3: max([0, 3*Arg_1]) {O(n)} 4.76/2.92 4.76/2.92 5: eval3->eval1: max([0, 5*Arg_1]) {O(n)} 4.76/2.92 4.76/2.92 6: start->eval1: 1 {O(1)} 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Costbounds: 4.76/2.92 4.76/2.92 Overall costbound: 1+max([0, 3*Arg_1])+max([0, 2*Arg_1])+max([0, 5*Arg_1])+max([0, Arg_0])+max([0, Arg_0])+max([0, 6*Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 0: eval1->eval2: max([0, Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 1: eval1->eval3: max([0, 2*Arg_1]) {O(n)} 4.76/2.92 4.76/2.92 2: eval2->eval2: max([0, Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 3: eval2->eval1: max([0, 6*Arg_0]) {O(n)} 4.76/2.92 4.76/2.92 4: eval3->eval3: max([0, 3*Arg_1]) {O(n)} 4.76/2.92 4.76/2.92 5: eval3->eval1: max([0, 5*Arg_1]) {O(n)} 4.76/2.92 4.76/2.92 6: start->eval1: 1 {O(1)} 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Sizebounds: 4.76/2.92 4.76/2.92 `Lower: 4.76/2.92 4.76/2.92 0: eval1->eval2, Arg_0: 2 {O(1)} 4.76/2.92 4.76/2.92 0: eval1->eval2, Arg_1: 1 {O(1)} 4.76/2.92 4.76/2.92 1: eval1->eval3, Arg_0: 1 {O(1)} 4.76/2.92 4.76/2.92 1: eval1->eval3, Arg_1: 1 {O(1)} 4.76/2.92 4.76/2.92 2: eval2->eval2, Arg_0: 0 {O(1)} 4.76/2.92 4.76/2.92 2: eval2->eval2, Arg_1: 1 {O(1)} 4.76/2.92 4.76/2.92 3: eval2->eval1, Arg_0: 0 {O(1)} 4.76/2.92 4.76/2.92 3: eval2->eval1, Arg_1: 1 {O(1)} 4.76/2.92 4.76/2.92 4: eval3->eval3, Arg_0: 1 {O(1)} 4.76/2.92 4.76/2.92 4: eval3->eval3, Arg_1: 0 {O(1)} 4.76/2.92 4.76/2.92 5: eval3->eval1, Arg_0: 1 {O(1)} 4.76/2.92 4.76/2.92 5: eval3->eval1, Arg_1: 0 {O(1)} 4.76/2.92 4.76/2.92 6: start->eval1, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 6: start->eval1, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 `Upper: 4.76/2.92 4.76/2.92 0: eval1->eval2, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 0: eval1->eval2, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 1: eval1->eval3, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 1: eval1->eval3, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 2: eval2->eval2, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 2: eval2->eval2, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 3: eval2->eval1, Arg_0: 0 {O(1)} 4.76/2.92 4.76/2.92 3: eval2->eval1, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 4: eval3->eval3, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 4: eval3->eval3, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 5: eval3->eval1, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 5: eval3->eval1, Arg_1: 0 {O(1)} 4.76/2.92 4.76/2.92 6: start->eval1, Arg_0: Arg_0 {O(n)} 4.76/2.92 4.76/2.92 6: start->eval1, Arg_1: Arg_1 {O(n)} 4.76/2.92 4.76/2.92 4.76/2.92 ---------------------------------------- 4.76/2.92 4.76/2.92 (2) 4.76/2.92 BOUNDS(1, nat(2 * Arg_1) + nat(5 * Arg_1) + nat(2 * Arg_0) + nat(6 * Arg_0) + max(1, 1 + 3 * Arg_1)) 4.76/2.92 4.76/2.92 ---------------------------------------- 4.76/2.92 4.76/2.92 (3) Loat Proof (FINISHED) 4.76/2.92 4.76/2.92 4.76/2.92 ### Pre-processing the ITS problem ### 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Initial linear ITS problem 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 0: eval1 -> eval2 : [ A>=1 && B>=1 && A>=1+B ], cost: 1 4.76/2.92 4.76/2.92 1: eval1 -> eval3 : [ A>=1 && B>=1 && B>=A ], cost: 1 4.76/2.92 4.76/2.92 2: eval2 -> eval2 : A'=-1+A, [ A>=1 ], cost: 1 4.76/2.92 4.76/2.92 3: eval2 -> eval1 : [ 0>=A ], cost: 1 4.76/2.92 4.76/2.92 4: eval3 -> eval3 : B'=-1+B, [ B>=1 ], cost: 1 4.76/2.92 4.76/2.92 5: eval3 -> eval1 : [ 0>=B ], cost: 1 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Simplified all rules, resulting in: 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 0: eval1 -> eval2 : [ B>=1 && A>=1+B ], cost: 1 4.76/2.92 4.76/2.92 1: eval1 -> eval3 : [ A>=1 && B>=1 && B>=A ], cost: 1 4.76/2.92 4.76/2.92 2: eval2 -> eval2 : A'=-1+A, [ A>=1 ], cost: 1 4.76/2.92 4.76/2.92 3: eval2 -> eval1 : [ 0>=A ], cost: 1 4.76/2.92 4.76/2.92 4: eval3 -> eval3 : B'=-1+B, [ B>=1 ], cost: 1 4.76/2.92 4.76/2.92 5: eval3 -> eval1 : [ 0>=B ], cost: 1 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 ### Simplification by acceleration and chaining ### 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerating simple loops of location 1. 4.76/2.92 4.76/2.92 Accelerating the following rules: 4.76/2.92 4.76/2.92 2: eval2 -> eval2 : A'=-1+A, [ A>=1 ], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerated rule 2 with metering function A, yielding the new rule 7. 4.76/2.92 4.76/2.92 Removing the simple loops: 2. 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerating simple loops of location 2. 4.76/2.92 4.76/2.92 Accelerating the following rules: 4.76/2.92 4.76/2.92 4: eval3 -> eval3 : B'=-1+B, [ B>=1 ], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerated rule 4 with metering function B, yielding the new rule 8. 4.76/2.92 4.76/2.92 Removing the simple loops: 4. 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerated all simple loops using metering functions (where possible): 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 0: eval1 -> eval2 : [ B>=1 && A>=1+B ], cost: 1 4.76/2.92 4.76/2.92 1: eval1 -> eval3 : [ A>=1 && B>=1 && B>=A ], cost: 1 4.76/2.92 4.76/2.92 3: eval2 -> eval1 : [ 0>=A ], cost: 1 4.76/2.92 4.76/2.92 7: eval2 -> eval2 : A'=0, [ A>=1 ], cost: A 4.76/2.92 4.76/2.92 5: eval3 -> eval1 : [ 0>=B ], cost: 1 4.76/2.92 4.76/2.92 8: eval3 -> eval3 : B'=0, [ B>=1 ], cost: B 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Chained accelerated rules (with incoming rules): 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 0: eval1 -> eval2 : [ B>=1 && A>=1+B ], cost: 1 4.76/2.92 4.76/2.92 1: eval1 -> eval3 : [ A>=1 && B>=1 && B>=A ], cost: 1 4.76/2.92 4.76/2.92 9: eval1 -> eval2 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 1+A 4.76/2.92 4.76/2.92 10: eval1 -> eval3 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 1+B 4.76/2.92 4.76/2.92 3: eval2 -> eval1 : [ 0>=A ], cost: 1 4.76/2.92 4.76/2.92 5: eval3 -> eval1 : [ 0>=B ], cost: 1 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Eliminated locations (on tree-shaped paths): 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 11: eval1 -> eval1 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 2+A 4.76/2.92 4.76/2.92 12: eval1 -> eval1 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 2+B 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerating simple loops of location 0. 4.76/2.92 4.76/2.92 Accelerating the following rules: 4.76/2.92 4.76/2.92 11: eval1 -> eval1 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 2+A 4.76/2.92 4.76/2.92 12: eval1 -> eval1 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 2+B 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerated rule 11 with NONTERM (after strengthening guard), yielding the new rule 13. 4.76/2.92 4.76/2.92 Accelerated rule 12 with NONTERM (after strengthening guard), yielding the new rule 14. 4.76/2.92 4.76/2.92 Removing the simple loops:. 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Accelerated all simple loops using metering functions (where possible): 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 11: eval1 -> eval1 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 2+A 4.76/2.92 4.76/2.92 12: eval1 -> eval1 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 2+B 4.76/2.92 4.76/2.92 13: eval1 -> [6] : [ B>=1 && A>=1+B && A>=1 && 0>=1+B ], cost: INF 4.76/2.92 4.76/2.92 14: eval1 -> [6] : [ A>=1 && B>=1 && B>=A && 0>=A ], cost: INF 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Chained accelerated rules (with incoming rules): 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 6: start -> eval1 : [], cost: 1 4.76/2.92 4.76/2.92 15: start -> eval1 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 3+A 4.76/2.92 4.76/2.92 16: start -> eval1 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 3+B 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Removed unreachable locations (and leaf rules with constant cost): 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 15: start -> eval1 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 3+A 4.76/2.92 4.76/2.92 16: start -> eval1 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 3+B 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 ### Computing asymptotic complexity ### 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Fully simplified ITS problem 4.76/2.92 4.76/2.92 Start location: start 4.76/2.92 4.76/2.92 15: start -> eval1 : A'=0, [ B>=1 && A>=1+B && A>=1 ], cost: 3+A 4.76/2.92 4.76/2.92 16: start -> eval1 : B'=0, [ A>=1 && B>=1 && B>=A ], cost: 3+B 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Computing asymptotic complexity for rule 15 4.76/2.92 4.76/2.92 Solved the limit problem by the following transformations: 4.76/2.92 4.76/2.92 Created initial limit problem: 4.76/2.92 4.76/2.92 3+A (+), A-B (+/+!), B (+/+!) [not solved] 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 applying transformation rule (C) using substitution {B==1} 4.76/2.92 4.76/2.92 resulting limit problem: 4.76/2.92 4.76/2.92 1 (+/+!), -1+A (+/+!), 3+A (+) [not solved] 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 applying transformation rule (C) using substitution {A==1+B} 4.76/2.92 4.76/2.92 resulting limit problem: 4.76/2.92 4.76/2.92 1 (+/+!), B (+/+!), 4+B (+) [not solved] 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 applying transformation rule (B), deleting 1 (+/+!) 4.76/2.92 4.76/2.92 resulting limit problem: 4.76/2.92 4.76/2.92 B (+/+!), 4+B (+) [not solved] 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 applying transformation rule (D), replacing 4+B (+) by B (+) 4.76/2.92 4.76/2.92 resulting limit problem: 4.76/2.92 4.76/2.92 B (+) [solved] 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Solution: 4.76/2.92 4.76/2.92 A / 1+n 4.76/2.92 4.76/2.92 B / 1 4.76/2.92 4.76/2.92 Resulting cost 4+n has complexity: Poly(n^1) 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Found new complexity Poly(n^1). 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 Obtained the following overall complexity (w.r.t. the length of the input n): 4.76/2.92 4.76/2.92 Complexity: Poly(n^1) 4.76/2.92 4.76/2.92 Cpx degree: 1 4.76/2.92 4.76/2.92 Solved cost: 4+n 4.76/2.92 4.76/2.92 Rule cost: 3+A 4.76/2.92 4.76/2.92 Rule guard: [ B>=1 && A>=1+B ] 4.76/2.92 4.76/2.92 4.76/2.92 4.76/2.92 WORST_CASE(Omega(n^1),?) 4.76/2.92 4.76/2.92 4.76/2.92 ---------------------------------------- 4.76/2.92 4.76/2.92 (4) 4.76/2.92 BOUNDS(n^1, INF) 4.82/2.94 EOF