5.14/2.53 WORST_CASE(?, O(n^1)) 5.14/2.54 proof of /export/starexec/sandbox2/benchmark/theBenchmark.koat 5.14/2.54 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 5.14/2.54 5.14/2.54 5.14/2.54 The runtime complexity of the given CpxIntTrs could be proven to be BOUNDS(1, 2 + max(5, 1 + 2 * Arg_1) * nat(Arg_0) + max(2 * Arg_1, 4) + max(8 + 2 * Arg_1, 12)). 5.14/2.54 5.14/2.54 (0) CpxIntTrs 5.14/2.54 (1) Koat Proof [FINISHED, 294 ms] 5.14/2.54 (2) BOUNDS(1, n^1) 5.14/2.54 (3) Loat Proof [FINISHED, 509 ms] 5.14/2.54 (4) BOUNDS(1, INF) 5.14/2.54 (5) Koat2 Proof [FINISHED, 828 ms] 5.14/2.54 (6) BOUNDS(1, 2 + max(5, 1 + 2 * Arg_1) * nat(Arg_0) + max(2 * Arg_1, 4) + max(8 + 2 * Arg_1, 12)) 5.14/2.54 5.14/2.54 5.14/2.54 ---------------------------------------- 5.14/2.54 5.14/2.54 (0) 5.14/2.54 Obligation: 5.14/2.54 Complexity Int TRS consisting of the following rules: 5.14/2.54 eval_speedpldi4_start(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb0_in(v_i_0, v_m, v_n)) :|: TRUE 5.14/2.54 eval_speedpldi4_bb0_in(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_0(v_i_0, v_m, v_n)) :|: TRUE 5.14/2.54 eval_speedpldi4_0(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_1(v_i_0, v_m, v_n)) :|: TRUE 5.14/2.54 eval_speedpldi4_1(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_2(v_i_0, v_m, v_n)) :|: TRUE 5.14/2.54 eval_speedpldi4_2(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb3_in(v_i_0, v_m, v_n)) :|: v_m <= 0 5.14/2.54 eval_speedpldi4_2(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb3_in(v_i_0, v_m, v_n)) :|: v_n <= v_m 5.14/2.54 eval_speedpldi4_2(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb1_in(v_n, v_m, v_n)) :|: v_m > 0 && v_n > v_m 5.14/2.54 eval_speedpldi4_bb1_in(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb2_in(v_i_0, v_m, v_n)) :|: v_i_0 > 0 5.14/2.54 eval_speedpldi4_bb1_in(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb3_in(v_i_0, v_m, v_n)) :|: v_i_0 <= 0 5.14/2.54 eval_speedpldi4_bb2_in(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb1_in(v_i_0 - 1, v_m, v_n)) :|: v_i_0 < v_m 5.14/2.54 eval_speedpldi4_bb2_in(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_bb1_in(v_i_0 - v_m, v_m, v_n)) :|: v_i_0 >= v_m 5.14/2.54 eval_speedpldi4_bb3_in(v_i_0, v_m, v_n) -> Com_1(eval_speedpldi4_stop(v_i_0, v_m, v_n)) :|: TRUE 5.14/2.54 5.14/2.54 The start-symbols are:[eval_speedpldi4_start_3] 5.14/2.54 5.14/2.54 5.14/2.54 ---------------------------------------- 5.14/2.54 5.14/2.54 (1) Koat Proof (FINISHED) 5.14/2.54 YES(?, 6*ar_1 + 11) 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Initial complexity problem: 5.14/2.54 5.14/2.54 1: T: 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\ ar_1 >= ar_0 + 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_2 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 5.14/2.54 5.14/2.54 start location: koat_start 5.14/2.54 5.14/2.54 leaf cost: 0 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Repeatedly propagating knowledge in problem 1 produces the following problem: 5.14/2.54 5.14/2.54 2: T: 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\ ar_1 >= ar_0 + 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_2 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 5.14/2.54 5.14/2.54 start location: koat_start 5.14/2.54 5.14/2.54 leaf cost: 0 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 A polynomial rank function with 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4start) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4bb0in) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi40) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi41) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi42) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4bb3in) = 1 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4bb1in) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4bb2in) = 2 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4stop) = 0 5.14/2.54 5.14/2.54 Pol(koat_start) = 2 5.14/2.54 5.14/2.54 orients all transitions weakly and the transitions 5.14/2.54 5.14/2.54 evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_2 ] 5.14/2.54 5.14/2.54 strictly and produces the following problem: 5.14/2.54 5.14/2.54 3: T: 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\ ar_1 >= ar_0 + 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 (Comp: 2, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_2 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: 2, Cost: 1) evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 5.14/2.54 5.14/2.54 start location: koat_start 5.14/2.54 5.14/2.54 leaf cost: 0 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Applied AI with 'oct' on problem 3 to obtain the following invariants: 5.14/2.54 5.14/2.54 For symbol evalspeedpldi4bb1in: X_2 - X_3 >= 0 /\ X_2 - 2 >= 0 /\ X_1 + X_2 - 3 >= 0 /\ -X_1 + X_2 - 1 >= 0 /\ X_1 - 1 >= 0 5.14/2.54 5.14/2.54 For symbol evalspeedpldi4bb2in: X_2 - X_3 >= 0 /\ X_3 - 1 >= 0 /\ X_2 + X_3 - 3 >= 0 /\ X_1 + X_3 - 2 >= 0 /\ X_2 - 2 >= 0 /\ X_1 + X_2 - 3 >= 0 /\ -X_1 + X_2 - 1 >= 0 /\ X_1 - 1 >= 0 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 This yielded the following problem: 5.14/2.54 5.14/2.54 4: T: 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 5.14/2.54 5.14/2.54 (Comp: 2, Cost: 1) evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 (Comp: 2, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= ar_2 ] 5.14/2.54 5.14/2.54 (Comp: ?, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\ ar_1 >= ar_0 + 1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 start location: koat_start 5.14/2.54 5.14/2.54 leaf cost: 0 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 A polynomial rank function with 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4bb2in) = 2*V_3 - 1 5.14/2.54 5.14/2.54 Pol(evalspeedpldi4bb1in) = 2*V_3 5.14/2.54 5.14/2.54 and size complexities 5.14/2.54 5.14/2.54 S("evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2))", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2))", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2))", 0-2) = ar_2 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2))", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2))", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2))", 0-2) = ar_2 5.14/2.54 5.14/2.54 S("evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2))", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2))", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2))", 0-2) = ar_2 5.14/2.54 5.14/2.54 S("evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2))", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2))", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2))", 0-2) = ar_2 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ]", 0-2) = ar_2 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ]", 0-2) = ar_2 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\\ ar_1 >= ar_0 + 1 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\\ ar_1 >= ar_0 + 1 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\\ ar_1 >= ar_0 + 1 ]", 0-2) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_2 >= 1 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_2 >= 1 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_2 >= 1 ]", 0-2) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ 0 >= ar_2 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ 0 >= ar_2 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ 0 >= ar_2 ]", 0-2) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\\ ar_2 - 1 >= 0 /\\ ar_1 + ar_2 - 3 >= 0 /\\ ar_0 + ar_2 - 2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_0 >= ar_2 + 1 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\\ ar_2 - 1 >= 0 /\\ ar_1 + ar_2 - 3 >= 0 /\\ ar_0 + ar_2 - 2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_0 >= ar_2 + 1 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\\ ar_2 - 1 >= 0 /\\ ar_1 + ar_2 - 3 >= 0 /\\ ar_0 + ar_2 - 2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_0 >= ar_2 + 1 ]", 0-2) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\\ ar_2 - 1 >= 0 /\\ ar_1 + ar_2 - 3 >= 0 /\\ ar_0 + ar_2 - 2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_2 >= ar_0 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\\ ar_2 - 1 >= 0 /\\ ar_1 + ar_2 - 3 >= 0 /\\ ar_0 + ar_2 - 2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_2 >= ar_0 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\\ ar_2 - 1 >= 0 /\\ ar_1 + ar_2 - 3 >= 0 /\\ ar_0 + ar_2 - 2 >= 0 /\\ ar_1 - 2 >= 0 /\\ ar_0 + ar_1 - 3 >= 0 /\\ -ar_0 + ar_1 - 1 >= 0 /\\ ar_0 - 1 >= 0 /\\ ar_2 >= ar_0 ]", 0-2) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2))", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2))", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2))", 0-2) = ar_1 + ar_2 5.14/2.54 5.14/2.54 S("koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ]", 0-0) = ar_0 5.14/2.54 5.14/2.54 S("koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ]", 0-1) = ar_1 5.14/2.54 5.14/2.54 S("koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ]", 0-2) = ar_2 5.14/2.54 5.14/2.54 orients the transitions 5.14/2.54 5.14/2.54 evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 weakly and the transitions 5.14/2.54 5.14/2.54 evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 strictly and produces the following problem: 5.14/2.54 5.14/2.54 5: T: 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 0) koat_start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4start(ar_0, ar_1, ar_2)) [ 0 <= 0 ] 5.14/2.54 5.14/2.54 (Comp: 2, Cost: 1) evalspeedpldi4bb3in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4stop(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 2*ar_1, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - ar_0)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: 2*ar_1, Cost: 1) evalspeedpldi4bb2in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_2 - 1)) [ ar_1 - ar_2 >= 0 /\ ar_2 - 1 >= 0 /\ ar_1 + ar_2 - 3 >= 0 /\ ar_0 + ar_2 - 2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_0 >= ar_2 + 1 ] 5.14/2.54 5.14/2.54 (Comp: 2, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ 0 >= ar_2 ] 5.14/2.54 5.14/2.54 (Comp: 2*ar_1, Cost: 1) evalspeedpldi4bb1in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb2in(ar_0, ar_1, ar_2)) [ ar_1 - ar_2 >= 0 /\ ar_1 - 2 >= 0 /\ ar_0 + ar_1 - 3 >= 0 /\ -ar_0 + ar_1 - 1 >= 0 /\ ar_0 - 1 >= 0 /\ ar_2 >= 1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb1in(ar_0, ar_1, ar_1)) [ ar_0 >= 1 /\ ar_1 >= ar_0 + 1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ ar_0 >= ar_1 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi42(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb3in(ar_0, ar_1, ar_2)) [ 0 >= ar_0 ] 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi41(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi42(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi40(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi41(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4bb0in(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi40(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 (Comp: 1, Cost: 1) evalspeedpldi4start(ar_0, ar_1, ar_2) -> Com_1(evalspeedpldi4bb0in(ar_0, ar_1, ar_2)) 5.14/2.54 5.14/2.54 start location: koat_start 5.14/2.54 5.14/2.54 leaf cost: 0 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Complexity upper bound 6*ar_1 + 11 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Time: 0.282 sec (SMT: 0.244 sec) 5.14/2.54 5.14/2.54 5.14/2.54 ---------------------------------------- 5.14/2.54 5.14/2.54 (2) 5.14/2.54 BOUNDS(1, n^1) 5.14/2.54 5.14/2.54 ---------------------------------------- 5.14/2.54 5.14/2.54 (3) Loat Proof (FINISHED) 5.14/2.54 5.14/2.54 5.14/2.54 ### Pre-processing the ITS problem ### 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Initial linear ITS problem 5.14/2.54 5.14/2.54 Start location: evalspeedpldi4start 5.14/2.54 5.14/2.54 0: evalspeedpldi4start -> evalspeedpldi4bb0in : [], cost: 1 5.14/2.54 5.14/2.54 1: evalspeedpldi4bb0in -> evalspeedpldi40 : [], cost: 1 5.14/2.54 5.14/2.54 2: evalspeedpldi40 -> evalspeedpldi41 : [], cost: 1 5.14/2.54 5.14/2.54 3: evalspeedpldi41 -> evalspeedpldi42 : [], cost: 1 5.14/2.54 5.14/2.54 4: evalspeedpldi42 -> evalspeedpldi4bb3in : [ 0>=A ], cost: 1 5.14/2.54 5.14/2.54 5: evalspeedpldi42 -> evalspeedpldi4bb3in : [ A>=B ], cost: 1 5.14/2.54 5.14/2.54 6: evalspeedpldi42 -> evalspeedpldi4bb1in : C'=B, [ A>=1 && B>=1+A ], cost: 1 5.14/2.54 5.14/2.54 7: evalspeedpldi4bb1in -> evalspeedpldi4bb2in : [ C>=1 ], cost: 1 5.14/2.54 5.14/2.54 8: evalspeedpldi4bb1in -> evalspeedpldi4bb3in : [ 0>=C ], cost: 1 5.14/2.54 5.14/2.54 9: evalspeedpldi4bb2in -> evalspeedpldi4bb1in : C'=-1+C, [ A>=1+C ], cost: 1 5.14/2.54 5.14/2.54 10: evalspeedpldi4bb2in -> evalspeedpldi4bb1in : C'=C-A, [ C>=A ], cost: 1 5.14/2.54 5.14/2.54 11: evalspeedpldi4bb3in -> evalspeedpldi4stop : [], cost: 1 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Removed unreachable and leaf rules: 5.14/2.54 5.14/2.54 Start location: evalspeedpldi4start 5.14/2.54 5.14/2.54 0: evalspeedpldi4start -> evalspeedpldi4bb0in : [], cost: 1 5.14/2.54 5.14/2.54 1: evalspeedpldi4bb0in -> evalspeedpldi40 : [], cost: 1 5.14/2.54 5.14/2.54 2: evalspeedpldi40 -> evalspeedpldi41 : [], cost: 1 5.14/2.54 5.14/2.54 3: evalspeedpldi41 -> evalspeedpldi42 : [], cost: 1 5.14/2.54 5.14/2.54 6: evalspeedpldi42 -> evalspeedpldi4bb1in : C'=B, [ A>=1 && B>=1+A ], cost: 1 5.14/2.54 5.14/2.54 7: evalspeedpldi4bb1in -> evalspeedpldi4bb2in : [ C>=1 ], cost: 1 5.14/2.54 5.14/2.54 9: evalspeedpldi4bb2in -> evalspeedpldi4bb1in : C'=-1+C, [ A>=1+C ], cost: 1 5.14/2.54 5.14/2.54 10: evalspeedpldi4bb2in -> evalspeedpldi4bb1in : C'=C-A, [ C>=A ], cost: 1 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 ### Simplification by acceleration and chaining ### 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Eliminated locations (on linear paths): 5.14/2.54 5.14/2.54 Start location: evalspeedpldi4start 5.14/2.54 5.14/2.54 15: evalspeedpldi4start -> evalspeedpldi4bb1in : C'=B, [ A>=1 && B>=1+A ], cost: 5 5.14/2.54 5.14/2.54 7: evalspeedpldi4bb1in -> evalspeedpldi4bb2in : [ C>=1 ], cost: 1 5.14/2.54 5.14/2.54 9: evalspeedpldi4bb2in -> evalspeedpldi4bb1in : C'=-1+C, [ A>=1+C ], cost: 1 5.14/2.54 5.14/2.54 10: evalspeedpldi4bb2in -> evalspeedpldi4bb1in : C'=C-A, [ C>=A ], cost: 1 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Eliminated locations (on tree-shaped paths): 5.14/2.54 5.14/2.54 Start location: evalspeedpldi4start 5.14/2.54 5.14/2.54 15: evalspeedpldi4start -> evalspeedpldi4bb1in : C'=B, [ A>=1 && B>=1+A ], cost: 5 5.14/2.54 5.14/2.54 16: evalspeedpldi4bb1in -> evalspeedpldi4bb1in : C'=-1+C, [ C>=1 && A>=1+C ], cost: 2 5.14/2.54 5.14/2.54 17: evalspeedpldi4bb1in -> evalspeedpldi4bb1in : C'=C-A, [ C>=1 && C>=A ], cost: 2 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Accelerating simple loops of location 5. 5.14/2.54 5.14/2.54 Accelerating the following rules: 5.14/2.54 5.14/2.54 16: evalspeedpldi4bb1in -> evalspeedpldi4bb1in : C'=-1+C, [ C>=1 && A>=1+C ], cost: 2 5.14/2.54 5.14/2.54 17: evalspeedpldi4bb1in -> evalspeedpldi4bb1in : C'=C-A, [ C>=1 && C>=A ], cost: 2 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Accelerated rule 16 with metering function C, yielding the new rule 18. 5.14/2.54 5.14/2.54 Found no metering function for rule 17. 5.14/2.54 5.14/2.54 Removing the simple loops: 16. 5.14/2.54 5.14/2.54 5.14/2.54 5.14/2.54 Accelerated all simple loops using metering functions (where possible): 5.14/2.54 5.14/2.54 Start location: evalspeedpldi4start 5.14/2.54 5.14/2.54 15: evalspeedpldi4start -> evalspeedpldi4bb1in : C'=B, [ A>=1 && B>=1+A ], cost: 5 5.14/2.54 5.14/2.54 17: evalspeedpldi4bb1in -> evalspeedpldi4bb1in : C'=C-A, [ C>=1 && C>=A ], cost: 2 5.14/2.55 5.14/2.55 18: evalspeedpldi4bb1in -> evalspeedpldi4bb1in : C'=0, [ C>=1 && A>=1+C ], cost: 2*C 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Chained accelerated rules (with incoming rules): 5.14/2.55 5.14/2.55 Start location: evalspeedpldi4start 5.14/2.55 5.14/2.55 15: evalspeedpldi4start -> evalspeedpldi4bb1in : C'=B, [ A>=1 && B>=1+A ], cost: 5 5.14/2.55 5.14/2.55 19: evalspeedpldi4start -> evalspeedpldi4bb1in : C'=-A+B, [ A>=1 && B>=1+A && B>=1 ], cost: 7 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Removed unreachable locations (and leaf rules with constant cost): 5.14/2.55 5.14/2.55 Start location: evalspeedpldi4start 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 ### Computing asymptotic complexity ### 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Fully simplified ITS problem 5.14/2.55 5.14/2.55 Start location: evalspeedpldi4start 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Obtained the following overall complexity (w.r.t. the length of the input n): 5.14/2.55 5.14/2.55 Complexity: Unknown 5.14/2.55 5.14/2.55 Cpx degree: ? 5.14/2.55 5.14/2.55 Solved cost: 0 5.14/2.55 5.14/2.55 Rule cost: 0 5.14/2.55 5.14/2.55 Rule guard: [] 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 WORST_CASE(Omega(0),?) 5.14/2.55 5.14/2.55 5.14/2.55 ---------------------------------------- 5.14/2.55 5.14/2.55 (4) 5.14/2.55 BOUNDS(1, INF) 5.14/2.55 5.14/2.55 ---------------------------------------- 5.14/2.55 5.14/2.55 (5) Koat2 Proof (FINISHED) 5.14/2.55 YES( ?, 2+max([5, 1+2*Arg_1])*max([0, Arg_0])+max([4, 2*Arg_1])+max([12, 8+2*Arg_1]) {O(n^2)}) 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Initial Complexity Problem: 5.14/2.55 5.14/2.55 Start: evalspeedpldi4start 5.14/2.55 5.14/2.55 Program_Vars: Arg_0, Arg_1, Arg_2 5.14/2.55 5.14/2.55 Temp_Vars: 5.14/2.55 5.14/2.55 Locations: evalspeedpldi40, evalspeedpldi41, evalspeedpldi42, evalspeedpldi4bb0in, evalspeedpldi4bb1in, evalspeedpldi4bb2in, evalspeedpldi4bb3in, evalspeedpldi4start, evalspeedpldi4stop 5.14/2.55 5.14/2.55 Transitions: 5.14/2.55 5.14/2.55 evalspeedpldi40(Arg_0,Arg_1,Arg_2) -> evalspeedpldi41(Arg_0,Arg_1,Arg_2):|: 5.14/2.55 5.14/2.55 evalspeedpldi41(Arg_0,Arg_1,Arg_2) -> evalspeedpldi42(Arg_0,Arg_1,Arg_2):|: 5.14/2.55 5.14/2.55 evalspeedpldi42(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb1in(Arg_0,Arg_1,Arg_1):|:1 <= Arg_0 && Arg_0+1 <= Arg_1 5.14/2.55 5.14/2.55 evalspeedpldi42(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb3in(Arg_0,Arg_1,Arg_2):|:Arg_0 <= 0 5.14/2.55 5.14/2.55 evalspeedpldi42(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb3in(Arg_0,Arg_1,Arg_2):|:Arg_1 <= Arg_0 5.14/2.55 5.14/2.55 evalspeedpldi4bb0in(Arg_0,Arg_1,Arg_2) -> evalspeedpldi40(Arg_0,Arg_1,Arg_2):|: 5.14/2.55 5.14/2.55 evalspeedpldi4bb1in(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb2in(Arg_0,Arg_1,Arg_2):|:Arg_2 <= Arg_1 && 2 <= Arg_1 && 3 <= Arg_0+Arg_1 && 1+Arg_0 <= Arg_1 && 1 <= Arg_0 && 1 <= Arg_2 5.14/2.55 5.14/2.55 evalspeedpldi4bb1in(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb3in(Arg_0,Arg_1,Arg_2):|:Arg_2 <= Arg_1 && 2 <= Arg_1 && 3 <= Arg_0+Arg_1 && 1+Arg_0 <= Arg_1 && 1 <= Arg_0 && Arg_2 <= 0 5.14/2.55 5.14/2.55 evalspeedpldi4bb2in(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb1in(Arg_0,Arg_1,Arg_2-1):|:Arg_2 <= Arg_1 && 2 <= Arg_1 && 3 <= Arg_0+Arg_1 && 1+Arg_0 <= Arg_1 && 1 <= Arg_0 && Arg_2+1 <= Arg_0 5.14/2.55 5.14/2.55 evalspeedpldi4bb2in(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb1in(Arg_0,Arg_1,Arg_2-Arg_0):|:Arg_2 <= Arg_1 && 2 <= Arg_1 && 3 <= Arg_0+Arg_1 && 1+Arg_0 <= Arg_1 && 1 <= Arg_0 && Arg_0 <= Arg_2 5.14/2.55 5.14/2.55 evalspeedpldi4bb3in(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4stop(Arg_0,Arg_1,Arg_2):|: 5.14/2.55 5.14/2.55 evalspeedpldi4start(Arg_0,Arg_1,Arg_2) -> evalspeedpldi4bb0in(Arg_0,Arg_1,Arg_2):|: 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Timebounds: 5.14/2.55 5.14/2.55 Overall timebound: 2+max([5, 1+2*Arg_1])*max([0, Arg_0])+max([4, 2*Arg_1])+max([12, 8+2*Arg_1]) {O(n^2)} 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41: 1 {O(1)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42: 1 {O(1)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in: 1 {O(1)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in: 1 {O(1)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in: 1 {O(1)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40: 1 {O(1)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in: max([5, 1+2*Arg_1]) {O(n)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in: 1 {O(1)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in: max([5, 1+2*Arg_1])*max([0, Arg_0]) {O(n^2)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in: max([4, 2*Arg_1]) {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop: 1 {O(1)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in: 1 {O(1)} 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Costbounds: 5.14/2.55 5.14/2.55 Overall costbound: 2+max([5, 1+2*Arg_1])*max([0, Arg_0])+max([4, 2*Arg_1])+max([12, 8+2*Arg_1]) {O(n^2)} 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41: 1 {O(1)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42: 1 {O(1)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in: 1 {O(1)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in: 1 {O(1)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in: 1 {O(1)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40: 1 {O(1)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in: max([5, 1+2*Arg_1]) {O(n)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in: 1 {O(1)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in: max([5, 1+2*Arg_1])*max([0, Arg_0]) {O(n^2)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in: max([4, 2*Arg_1]) {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop: 1 {O(1)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in: 1 {O(1)} 5.14/2.55 5.14/2.55 5.14/2.55 5.14/2.55 Sizebounds: 5.14/2.55 5.14/2.55 `Lower: 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in, Arg_0: 1 {O(1)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in, Arg_1: 2 {O(1)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in, Arg_2: 2 {O(1)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in, Arg_0: 1 {O(1)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in, Arg_1: 2 {O(1)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in, Arg_2: 1 {O(1)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in, Arg_0: 1 {O(1)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in, Arg_1: 2 {O(1)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in, Arg_2: 0 {O(1)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_0: 1 {O(1)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_1: 2 {O(1)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_2: 0 {O(1)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_0: 1 {O(1)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_1: 2 {O(1)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_2: 0 {O(1)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop, Arg_0: min([1, Arg_0]) {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop, Arg_1: min([2, Arg_1]) {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop, Arg_2: min([0, Arg_2]) {O(n)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 `Upper: 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 2: evalspeedpldi40->evalspeedpldi41, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 3: evalspeedpldi41->evalspeedpldi42, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in, Arg_0: 0 {O(1)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 4: evalspeedpldi42->evalspeedpldi4bb3in, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 5: evalspeedpldi42->evalspeedpldi4bb3in, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 6: evalspeedpldi42->evalspeedpldi4bb1in, Arg_2: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 1: evalspeedpldi4bb0in->evalspeedpldi40, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 7: evalspeedpldi4bb1in->evalspeedpldi4bb2in, Arg_2: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 8: evalspeedpldi4bb1in->evalspeedpldi4bb3in, Arg_2: 0 {O(1)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 9: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_2: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 10: evalspeedpldi4bb2in->evalspeedpldi4bb1in, Arg_2: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop, Arg_0: max([0, Arg_0]) {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 11: evalspeedpldi4bb3in->evalspeedpldi4stop, Arg_2: max([0, Arg_2]) {O(n)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in, Arg_0: Arg_0 {O(n)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in, Arg_1: Arg_1 {O(n)} 5.14/2.55 5.14/2.55 0: evalspeedpldi4start->evalspeedpldi4bb0in, Arg_2: Arg_2 {O(n)} 5.14/2.55 5.14/2.55 5.14/2.55 ---------------------------------------- 5.14/2.55 5.14/2.55 (6) 5.14/2.55 BOUNDS(1, 2 + max(5, 1 + 2 * Arg_1) * nat(Arg_0) + max(2 * Arg_1, 4) + max(8 + 2 * Arg_1, 12)) 5.22/2.57 EOF