/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^2)) proof of /export/starexec/sandbox2/benchmark/theBenchmark.koat # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(n^1, n^2). (0) CpxIntTrs (1) Koat Proof [FINISHED, 147 ms] (2) BOUNDS(1, n^2) (3) Loat Proof [FINISHED, 746 ms] (4) BOUNDS(n^1, INF) ---------------------------------------- (0) Obligation: Complexity Int TRS consisting of the following rules: f1(A, B, C) -> Com_1(f2(A, B, B + 1)) :|: A >= B && A >= 1 && B >= 1 f2(A, B, C) -> Com_1(f3(A, B, C)) :|: B >= C + 1 f2(A, B, C) -> Com_1(f3(A, B, C)) :|: C >= B + 1 f3(A, B, C) -> Com_1(f2(A, B, 0)) :|: A + 1 >= 0 && C >= 1 && C >= A + 1 f3(A, B, C) -> Com_1(f2(A, B, C + 1)) :|: A >= C && C + 1 >= 0 The start-symbols are:[f1_3] ---------------------------------------- (1) Koat Proof (FINISHED) YES(?, 20*Ar_0^2 + 32*Ar_0*Ar_1 + 280*Ar_0 + 260*Ar_1 + 12*Ar_1^2 + 576) Initial complexity problem: 1: T: (Comp: ?, Cost: 1) f1(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_1 >= Ar_2 + 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_2 >= Ar_1 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 1, Cost: 0) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f1(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) f1(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_1 >= Ar_2 + 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_2 >= Ar_1 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 1, Cost: 0) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f1(Ar_0, Ar_1, Ar_2)) [ 0 <= 0 ] start location: koat_start leaf cost: 0 Applied AI with 'oct' on problem 2 to obtain the following invariants: For symbol f2: X_1 - X_3 + 1 >= 0 /\ X_1 - X_2 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 For symbol f3: X_1 - X_3 + 1 >= 0 /\ X_1 - X_2 >= 0 /\ X_2 - 1 >= 0 /\ X_1 + X_2 - 2 >= 0 /\ X_1 - 1 >= 0 This yielded the following problem: 3: T: (Comp: 1, Cost: 0) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f1(Ar_0, Ar_1, Ar_2)) [ 0 <= 0 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 ] (Comp: 1, Cost: 1) f1(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 By chaining the transition koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f1(Ar_0, Ar_1, Ar_2)) [ 0 <= 0 ] with all transitions in problem 3, the following new transition is obtained: koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] We thus obtain the following problem: 4: T: (Comp: 1, Cost: 1) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 ] (Comp: 1, Cost: 1) f1(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 Testing for reachability in the complexity graph removes the following transition from problem 4: f1(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] We thus obtain the following problem: 5: T: (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: 1, Cost: 1) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 By chaining the transition f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 ] with all transitions in problem 5, the following new transition is obtained: f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] We thus obtain the following problem: 6: T: (Comp: ?, Cost: 2) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: ?, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: 1, Cost: 1) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 A polynomial rank function with Pol(f3) = 2*V_1 - 2*V_3 + 2 Pol(f2) = 2*V_1 - 2*V_3 + 3 and size complexities S("koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\\ Ar_0 >= Ar_1 /\\ Ar_0 >= 1 /\\ Ar_1 >= 1 ]", 0-0) = Ar_0 S("koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\\ Ar_0 >= Ar_1 /\\ Ar_0 >= 1 /\\ Ar_1 >= 1 ]", 0-1) = Ar_1 S("koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\\ Ar_0 >= Ar_1 /\\ Ar_0 >= 1 /\\ Ar_1 >= 1 ]", 0-2) = Ar_1 + 1 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_2 >= Ar_1 + 1 ]", 0-0) = Ar_0 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_2 >= Ar_1 + 1 ]", 0-1) = Ar_1 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_2 >= Ar_1 + 1 ]", 0-2) = ? S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-0) = Ar_0 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-1) = Ar_1 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-2) = ? S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 + 1 >= 0 /\\ Ar_2 >= 1 /\\ Ar_2 >= Ar_0 + 1 ]", 0-0) = Ar_0 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 + 1 >= 0 /\\ Ar_2 >= 1 /\\ Ar_2 >= Ar_0 + 1 ]", 0-1) = Ar_1 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 + 1 >= 0 /\\ Ar_2 >= 1 /\\ Ar_2 >= Ar_0 + 1 ]", 0-2) = 0 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_1 >= Ar_2 + 1 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-0) = Ar_0 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_1 >= Ar_2 + 1 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-1) = Ar_1 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_1 >= Ar_2 + 1 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-2) = Ar_0 orients the transitions f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] weakly and the transitions f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] strictly and produces the following problem: 7: T: (Comp: ?, Cost: 2) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: ?, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: 1, Cost: 1) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 Repeatedly propagating knowledge in problem 7 produces the following problem: 8: T: (Comp: ?, Cost: 2) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: 1, Cost: 1) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 A polynomial rank function with Pol(f2) = V_1 - V_3 + 1 and size complexities S("koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\\ Ar_0 >= Ar_1 /\\ Ar_0 >= 1 /\\ Ar_1 >= 1 ]", 0-0) = Ar_0 S("koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\\ Ar_0 >= Ar_1 /\\ Ar_0 >= 1 /\\ Ar_1 >= 1 ]", 0-1) = Ar_1 S("koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\\ Ar_0 >= Ar_1 /\\ Ar_0 >= 1 /\\ Ar_1 >= 1 ]", 0-2) = Ar_1 + 1 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_2 >= Ar_1 + 1 ]", 0-0) = Ar_0 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_2 >= Ar_1 + 1 ]", 0-1) = Ar_1 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_2 >= Ar_1 + 1 ]", 0-2) = 3*Ar_0 + 3*Ar_1 + 54 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-0) = Ar_0 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-1) = Ar_1 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-2) = 3*Ar_0 + 3*Ar_1 + 54 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 + 1 >= 0 /\\ Ar_2 >= 1 /\\ Ar_2 >= Ar_0 + 1 ]", 0-0) = Ar_0 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 + 1 >= 0 /\\ Ar_2 >= 1 /\\ Ar_2 >= Ar_0 + 1 ]", 0-1) = Ar_1 S("f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_0 + 1 >= 0 /\\ Ar_2 >= 1 /\\ Ar_2 >= Ar_0 + 1 ]", 0-2) = 0 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_1 >= Ar_2 + 1 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-0) = Ar_0 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_1 >= Ar_2 + 1 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-1) = Ar_1 S("f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\\ Ar_0 - Ar_1 >= 0 /\\ Ar_1 - 1 >= 0 /\\ Ar_0 + Ar_1 - 2 >= 0 /\\ Ar_0 - 1 >= 0 /\\ Ar_1 >= Ar_2 + 1 /\\ Ar_0 >= Ar_2 /\\ Ar_2 + 1 >= 0 ]", 0-2) = Ar_0 orients the transitions f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] weakly and the transition f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] strictly and produces the following problem: 9: T: (Comp: 10*Ar_0^2 + 16*Ar_0*Ar_1 + 137*Ar_0 + 127*Ar_1 + 6*Ar_1^2 + 280, Cost: 2) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_1 >= Ar_2 + 1 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, 0)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 + 1 >= 0 /\ Ar_2 >= 1 /\ Ar_2 >= Ar_0 + 1 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f3(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_2 + 1)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_0 >= Ar_2 /\ Ar_2 + 1 >= 0 ] (Comp: 2*Ar_0 + 2*Ar_1 + 5, Cost: 1) f2(Ar_0, Ar_1, Ar_2) -> Com_1(f3(Ar_0, Ar_1, Ar_2)) [ Ar_0 - Ar_2 + 1 >= 0 /\ Ar_0 - Ar_1 >= 0 /\ Ar_1 - 1 >= 0 /\ Ar_0 + Ar_1 - 2 >= 0 /\ Ar_0 - 1 >= 0 /\ Ar_2 >= Ar_1 + 1 ] (Comp: 1, Cost: 1) koat_start(Ar_0, Ar_1, Ar_2) -> Com_1(f2(Ar_0, Ar_1, Ar_1 + 1)) [ 0 <= 0 /\ Ar_0 >= Ar_1 /\ Ar_0 >= 1 /\ Ar_1 >= 1 ] start location: koat_start leaf cost: 0 Complexity upper bound 20*Ar_0^2 + 32*Ar_0*Ar_1 + 280*Ar_0 + 260*Ar_1 + 12*Ar_1^2 + 576 Time: 0.207 sec (SMT: 0.175 sec) ---------------------------------------- (2) BOUNDS(1, n^2) ---------------------------------------- (3) Loat Proof (FINISHED) ### Pre-processing the ITS problem ### Initial linear ITS problem Start location: f1 0: f1 -> f2 : C'=1+B, [ A>=B && A>=1 && B>=1 ], cost: 1 1: f2 -> f3 : [ B>=1+C ], cost: 1 2: f2 -> f3 : [ C>=1+B ], cost: 1 3: f3 -> f2 : C'=0, [ 1+A>=0 && C>=1 && C>=1+A ], cost: 1 4: f3 -> f2 : C'=1+C, [ A>=C && 1+C>=0 ], cost: 1 Checking for constant complexity: The following rule is satisfiable with cost >= 1, yielding constant complexity: 0: f1 -> f2 : C'=1+B, [ A>=B && A>=1 && B>=1 ], cost: 1 ### Simplification by acceleration and chaining ### Eliminated locations (on tree-shaped paths): Start location: f1 0: f1 -> f2 : C'=1+B, [ A>=B && A>=1 && B>=1 ], cost: 1 5: f2 -> f2 : C'=0, [ B>=1+C && 1+A>=0 && C>=1 && C>=1+A ], cost: 2 6: f2 -> f2 : C'=1+C, [ B>=1+C && A>=C && 1+C>=0 ], cost: 2 7: f2 -> f2 : C'=0, [ C>=1+B && 1+A>=0 && C>=1 && C>=1+A ], cost: 2 8: f2 -> f2 : C'=1+C, [ C>=1+B && A>=C && 1+C>=0 ], cost: 2 Accelerating simple loops of location 1. Accelerating the following rules: 5: f2 -> f2 : C'=0, [ B>=1+C && 1+A>=0 && C>=1 && C>=1+A ], cost: 2 6: f2 -> f2 : C'=1+C, [ B>=1+C && A>=C && 1+C>=0 ], cost: 2 7: f2 -> f2 : C'=0, [ C>=1+B && 1+A>=0 && C>=1 && C>=1+A ], cost: 2 8: f2 -> f2 : C'=1+C, [ C>=1+B && A>=C && 1+C>=0 ], cost: 2 Found no metering function for rule 5. Found no metering function for rule 6. Found no metering function for rule 7. Accelerated rule 8 with metering function 1-C+A, yielding the new rule 9. Nested simple loops 7 (outer loop) and 9 (inner loop) with NONTERM, resulting in the new rules: 10, 11. Removing the simple loops: 7 8. Accelerated all simple loops using metering functions (where possible): Start location: f1 0: f1 -> f2 : C'=1+B, [ A>=B && A>=1 && B>=1 ], cost: 1 5: f2 -> f2 : C'=0, [ B>=1+C && 1+A>=0 && C>=1 && C>=1+A ], cost: 2 6: f2 -> f2 : C'=1+C, [ B>=1+C && A>=C && 1+C>=0 ], cost: 2 9: f2 -> f2 : C'=1+A, [ C>=1+B && A>=C && 1+C>=0 ], cost: 2-2*C+2*A 10: f2 -> [3] : [ C>=1+B && C>=1 && C>=1+A && 0>=1+B && A>=0 && 4+2*A>=1 ], cost: NONTERM 11: f2 -> [3] : C'=1+A, [ C>=1+B && A>=C && 1+C>=0 && 1+A>=1+B && 1+A>=1 && 0>=1+B && 4+2*A>=1 ], cost: NONTERM Chained accelerated rules (with incoming rules): Start location: f1 0: f1 -> f2 : C'=1+B, [ A>=B && A>=1 && B>=1 ], cost: 1 12: f1 -> f2 : C'=1+A, [ A>=1 && B>=1 && A>=1+B ], cost: 1+2*A-2*B Removed unreachable locations (and leaf rules with constant cost): Start location: f1 12: f1 -> f2 : C'=1+A, [ A>=1 && B>=1 && A>=1+B ], cost: 1+2*A-2*B ### Computing asymptotic complexity ### Fully simplified ITS problem Start location: f1 12: f1 -> f2 : C'=1+A, [ A>=1 && B>=1 && A>=1+B ], cost: 1+2*A-2*B Computing asymptotic complexity for rule 12 Simplified the guard: 12: f1 -> f2 : C'=1+A, [ B>=1 && A>=1+B ], cost: 1+2*A-2*B Solved the limit problem by the following transformations: Created initial limit problem: 1+2*A-2*B (+), A-B (+/+!), B (+/+!) [not solved] removing all constraints (solved by SMT) resulting limit problem: [solved] applying transformation rule (C) using substitution {A==n,B==1} resulting limit problem: [solved] Solution: A / n B / 1 Resulting cost -1+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: -1+2*n Rule cost: 1+2*A-2*B Rule guard: [ B>=1 && A>=1+B ] WORST_CASE(Omega(n^1),?) ---------------------------------------- (4) BOUNDS(n^1, INF)