/export/starexec/sandbox2/solver/bin/starexec_run_rcdcRelativeAlsoLower /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Derivational Complexity (full) of the given DCpxTrs could be proven to be BOUNDS(n^1, n^2). (0) DCpxTrs (1) DerivationalComplexityToRuntimeComplexityProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxRelTRS (3) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 139 ms] (4) CpxRelTRS (5) RcToIrcProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxRelTRS (7) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxWeightedTrs (9) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxTypedWeightedTrs (11) CompletionProof [UPPER BOUND(ID), 0 ms] (12) CpxTypedWeightedCompleteTrs (13) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (14) CpxRNTS (15) CompleteCoflocoProof [FINISHED, 614 ms] (16) BOUNDS(1, n^2) (17) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxRelTRS (19) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (20) typed CpxTrs (21) OrderProof [LOWER BOUND(ID), 0 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 307 ms] (24) BEST (25) proven lower bound (26) LowerBoundPropagationProof [FINISHED, 0 ms] (27) BOUNDS(n^1, INF) (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 22 ms] (30) BOUNDS(1, INF) ---------------------------------------- (0) Obligation: The Derivational Complexity (full) of the given DCpxTrs could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) S is empty. Rewrite Strategy: FULL ---------------------------------------- (1) DerivationalComplexityToRuntimeComplexityProof (BOTH BOUNDS(ID, ID)) The following rules have been added to S to convert the given derivational complexity problem to a runtime complexity problem: encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) ---------------------------------------- (2) Obligation: The Runtime Complexity (full) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) The (relative) TRS S consists of the following rules: encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Rewrite Strategy: FULL ---------------------------------------- (3) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (4) Obligation: The Runtime Complexity (full) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) The (relative) TRS S consists of the following rules: encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Rewrite Strategy: FULL ---------------------------------------- (5) RcToIrcProof (BOTH BOUNDS(ID, ID)) Converted rc-obligation to irc-obligation. As the TRS is a non-duplicating overlay system, we have rc = irc. ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^2). The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) The (relative) TRS S consists of the following rules: encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Rewrite Strategy: INNERMOST ---------------------------------------- (7) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (8) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) [1] r1(empty, a) -> a [1] r1(cons(x, k), a) -> r1(k, cons(x, a)) [1] encArg(empty) -> empty [0] encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) [0] encArg(cons_rev(x_1)) -> rev(encArg(x_1)) [0] encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) [0] encode_rev(x_1) -> rev(encArg(x_1)) [0] encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) [0] encode_empty -> empty [0] encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (9) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (10) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) [1] r1(empty, a) -> a [1] r1(cons(x, k), a) -> r1(k, cons(x, a)) [1] encArg(empty) -> empty [0] encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) [0] encArg(cons_rev(x_1)) -> rev(encArg(x_1)) [0] encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) [0] encode_rev(x_1) -> rev(encArg(x_1)) [0] encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) [0] encode_empty -> empty [0] encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) [0] The TRS has the following type information: rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 empty :: empty:cons:cons_rev:cons_r1 cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encArg :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_empty :: empty:cons:cons_rev:cons_r1 encode_cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 Rewrite Strategy: INNERMOST ---------------------------------------- (11) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: encArg(v0) -> null_encArg [0] encode_rev(v0) -> null_encode_rev [0] encode_r1(v0, v1) -> null_encode_r1 [0] encode_empty -> null_encode_empty [0] encode_cons(v0, v1) -> null_encode_cons [0] r1(v0, v1) -> null_r1 [0] And the following fresh constants: null_encArg, null_encode_rev, null_encode_r1, null_encode_empty, null_encode_cons, null_r1 ---------------------------------------- (12) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) [1] r1(empty, a) -> a [1] r1(cons(x, k), a) -> r1(k, cons(x, a)) [1] encArg(empty) -> empty [0] encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) [0] encArg(cons_rev(x_1)) -> rev(encArg(x_1)) [0] encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) [0] encode_rev(x_1) -> rev(encArg(x_1)) [0] encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) [0] encode_empty -> empty [0] encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) [0] encArg(v0) -> null_encArg [0] encode_rev(v0) -> null_encode_rev [0] encode_r1(v0, v1) -> null_encode_r1 [0] encode_empty -> null_encode_empty [0] encode_cons(v0, v1) -> null_encode_cons [0] r1(v0, v1) -> null_r1 [0] The TRS has the following type information: rev :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 r1 :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 empty :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 cons :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 encArg :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 cons_rev :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 cons_r1 :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 encode_rev :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 encode_r1 :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 encode_empty :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 encode_cons :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 -> empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 null_encArg :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 null_encode_rev :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 null_encode_r1 :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 null_encode_empty :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 null_encode_cons :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 null_r1 :: empty:cons:cons_rev:cons_r1:null_encArg:null_encode_rev:null_encode_r1:null_encode_empty:null_encode_cons:null_r1 Rewrite Strategy: INNERMOST ---------------------------------------- (13) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: empty => 0 null_encArg => 0 null_encode_rev => 0 null_encode_r1 => 0 null_encode_empty => 0 null_encode_cons => 0 null_r1 => 0 ---------------------------------------- (14) Obligation: Complexity RNTS consisting of the following rules: encArg(z) -{ 0 }-> rev(encArg(x_1)) :|: z = 1 + x_1, x_1 >= 0 encArg(z) -{ 0 }-> r1(encArg(x_1), encArg(x_2)) :|: x_1 >= 0, z = 1 + x_1 + x_2, x_2 >= 0 encArg(z) -{ 0 }-> 0 :|: z = 0 encArg(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 encArg(z) -{ 0 }-> 1 + encArg(x_1) + encArg(x_2) :|: x_1 >= 0, z = 1 + x_1 + x_2, x_2 >= 0 encode_cons(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 encode_cons(z, z') -{ 0 }-> 1 + encArg(x_1) + encArg(x_2) :|: x_1 >= 0, x_2 >= 0, z = x_1, z' = x_2 encode_empty -{ 0 }-> 0 :|: encode_r1(z, z') -{ 0 }-> r1(encArg(x_1), encArg(x_2)) :|: x_1 >= 0, x_2 >= 0, z = x_1, z' = x_2 encode_r1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 encode_rev(z) -{ 0 }-> rev(encArg(x_1)) :|: x_1 >= 0, z = x_1 encode_rev(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 r1(z, z') -{ 1 }-> a :|: z' = a, a >= 0, z = 0 r1(z, z') -{ 1 }-> r1(k, 1 + x + a) :|: z' = a, a >= 0, x >= 0, k >= 0, z = 1 + x + k r1(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 rev(z) -{ 1 }-> r1(ls, 0) :|: ls >= 0, z = ls Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (15) CompleteCoflocoProof (FINISHED) Transformed the RNTS (where only complete derivations are relevant) into cost relations for CoFloCo: eq(start(V, V2),0,[rev(V, Out)],[V >= 0]). eq(start(V, V2),0,[r1(V, V2, Out)],[V >= 0,V2 >= 0]). eq(start(V, V2),0,[encArg(V, Out)],[V >= 0]). eq(start(V, V2),0,[fun(V, Out)],[V >= 0]). eq(start(V, V2),0,[fun1(V, V2, Out)],[V >= 0,V2 >= 0]). eq(start(V, V2),0,[fun2(Out)],[]). eq(start(V, V2),0,[fun3(V, V2, Out)],[V >= 0,V2 >= 0]). eq(rev(V, Out),1,[r1(V1, 0, Ret)],[Out = Ret,V1 >= 0,V = V1]). eq(r1(V, V2, Out),1,[],[Out = V3,V2 = V3,V3 >= 0,V = 0]). eq(r1(V, V2, Out),1,[r1(V6, 1 + V5 + V4, Ret1)],[Out = Ret1,V2 = V4,V4 >= 0,V5 >= 0,V6 >= 0,V = 1 + V5 + V6]). eq(encArg(V, Out),0,[],[Out = 0,V = 0]). eq(encArg(V, Out),0,[encArg(V8, Ret01),encArg(V7, Ret11)],[Out = 1 + Ret01 + Ret11,V8 >= 0,V = 1 + V7 + V8,V7 >= 0]). eq(encArg(V, Out),0,[encArg(V9, Ret0),rev(Ret0, Ret2)],[Out = Ret2,V = 1 + V9,V9 >= 0]). eq(encArg(V, Out),0,[encArg(V10, Ret02),encArg(V11, Ret12),r1(Ret02, Ret12, Ret3)],[Out = Ret3,V10 >= 0,V = 1 + V10 + V11,V11 >= 0]). eq(fun(V, Out),0,[encArg(V12, Ret03),rev(Ret03, Ret4)],[Out = Ret4,V12 >= 0,V = V12]). eq(fun1(V, V2, Out),0,[encArg(V14, Ret04),encArg(V13, Ret13),r1(Ret04, Ret13, Ret5)],[Out = Ret5,V14 >= 0,V13 >= 0,V = V14,V2 = V13]). eq(fun2(Out),0,[],[Out = 0]). eq(fun3(V, V2, Out),0,[encArg(V16, Ret011),encArg(V15, Ret14)],[Out = 1 + Ret011 + Ret14,V16 >= 0,V15 >= 0,V = V16,V2 = V15]). eq(encArg(V, Out),0,[],[Out = 0,V17 >= 0,V = V17]). eq(fun(V, Out),0,[],[Out = 0,V18 >= 0,V = V18]). eq(fun1(V, V2, Out),0,[],[Out = 0,V20 >= 0,V19 >= 0,V = V20,V2 = V19]). eq(fun3(V, V2, Out),0,[],[Out = 0,V21 >= 0,V22 >= 0,V = V21,V2 = V22]). eq(r1(V, V2, Out),0,[],[Out = 0,V23 >= 0,V24 >= 0,V = V23,V2 = V24]). input_output_vars(rev(V,Out),[V],[Out]). input_output_vars(r1(V,V2,Out),[V,V2],[Out]). input_output_vars(encArg(V,Out),[V],[Out]). input_output_vars(fun(V,Out),[V],[Out]). input_output_vars(fun1(V,V2,Out),[V,V2],[Out]). input_output_vars(fun2(Out),[],[Out]). input_output_vars(fun3(V,V2,Out),[V,V2],[Out]). CoFloCo proof output: Preprocessing Cost Relations ===================================== #### Computed strongly connected components 0. recursive : [r1/3] 1. non_recursive : [rev/2] 2. recursive [non_tail,multiple] : [encArg/2] 3. non_recursive : [fun/2] 4. non_recursive : [fun1/3] 5. non_recursive : [fun2/1] 6. non_recursive : [fun3/3] 7. non_recursive : [start/2] #### Obtained direct recursion through partial evaluation 0. SCC is partially evaluated into r1/3 1. SCC is completely evaluated into other SCCs 2. SCC is partially evaluated into encArg/2 3. SCC is partially evaluated into fun/2 4. SCC is partially evaluated into fun1/3 5. SCC is completely evaluated into other SCCs 6. SCC is partially evaluated into fun3/3 7. SCC is partially evaluated into start/2 Control-Flow Refinement of Cost Relations ===================================== ### Specialization of cost equations r1/3 * CE 10 is refined into CE [21] * CE 8 is refined into CE [22] * CE 9 is refined into CE [23] ### Cost equations --> "Loop" of r1/3 * CEs [23] --> Loop 11 * CEs [21] --> Loop 12 * CEs [22] --> Loop 13 ### Ranking functions of CR r1(V,V2,Out) * RF of phase [11]: [V] #### Partial ranking functions of CR r1(V,V2,Out) * Partial RF of phase [11]: - RF of loop [11:1]: V ### Specialization of cost equations encArg/2 * CE 11 is refined into CE [24] * CE 12 is refined into CE [25] * CE 14 is refined into CE [26,27,28] * CE 13 is refined into CE [29,30,31] ### Cost equations --> "Loop" of encArg/2 * CEs [31] --> Loop 14 * CEs [29,30] --> Loop 15 * CEs [25] --> Loop 16 * CEs [28] --> Loop 17 * CEs [26] --> Loop 18 * CEs [27] --> Loop 19 * CEs [24] --> Loop 20 ### Ranking functions of CR encArg(V,Out) * RF of phase [14,15,16,17,18,19]: [V] #### Partial ranking functions of CR encArg(V,Out) * Partial RF of phase [14,15,16,17,18,19]: - RF of loop [14:1,15:1,16:1,16:2,17:1,17:2,18:1,18:2,19:1,19:2]: V ### Specialization of cost equations fun/2 * CE 15 is refined into CE [32,33,34,35,36] * CE 16 is refined into CE [37] ### Cost equations --> "Loop" of fun/2 * CEs [36] --> Loop 21 * CEs [32,33,34,35,37] --> Loop 22 ### Ranking functions of CR fun(V,Out) #### Partial ranking functions of CR fun(V,Out) ### Specialization of cost equations fun1/3 * CE 17 is refined into CE [38,39,40,41,42,43,44,45,46,47] * CE 18 is refined into CE [48] ### Cost equations --> "Loop" of fun1/3 * CEs [44] --> Loop 23 * CEs [47] --> Loop 24 * CEs [40,45] --> Loop 25 * CEs [38,39,41,42,43,46,48] --> Loop 26 ### Ranking functions of CR fun1(V,V2,Out) #### Partial ranking functions of CR fun1(V,V2,Out) ### Specialization of cost equations fun3/3 * CE 19 is refined into CE [49,50,51,52] * CE 20 is refined into CE [53] ### Cost equations --> "Loop" of fun3/3 * CEs [52] --> Loop 27 * CEs [51] --> Loop 28 * CEs [50] --> Loop 29 * CEs [49] --> Loop 30 * CEs [53] --> Loop 31 ### Ranking functions of CR fun3(V,V2,Out) #### Partial ranking functions of CR fun3(V,V2,Out) ### Specialization of cost equations start/2 * CE 1 is refined into CE [54,55,56] * CE 2 is refined into CE [57,58,59] * CE 3 is refined into CE [60,61] * CE 4 is refined into CE [62,63] * CE 5 is refined into CE [64,65,66,67] * CE 6 is refined into CE [68] * CE 7 is refined into CE [69,70,71,72,73] ### Cost equations --> "Loop" of start/2 * CEs [54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73] --> Loop 32 ### Ranking functions of CR start(V,V2) #### Partial ranking functions of CR start(V,V2) Computing Bounds ===================================== #### Cost of chains of r1(V,V2,Out): * Chain [[11],13]: 1*it(11)+1 Such that:it(11) =< -V2+Out with precondition: [V+V2=Out,V>=1,V2>=0] * Chain [[11],12]: 1*it(11)+0 Such that:it(11) =< V with precondition: [Out=0,V>=1,V2>=0] * Chain [13]: 1 with precondition: [V=0,V2=Out,V2>=0] * Chain [12]: 0 with precondition: [Out=0,V>=0,V2>=0] #### Cost of chains of encArg(V,Out): * Chain [20]: 0 with precondition: [Out=0,V>=0] * Chain [multiple([14,15,16,17,18,19],[[20]])]: 5*it(14)+1*it(17)+1*s(10)+1*s(11)+1*s(12)+1*s(13)+0 Such that:aux(9) =< V aux(10) =< 2/3*V it(14) =< aux(9) it(16) =< aux(9) it(17) =< aux(9) it(17) =< aux(10) aux(4) =< aux(9) aux(2) =< aux(9)+1 s(10) =< it(14)*aux(9) s(11) =< it(14)*aux(2) s(13) =< it(16)*aux(4) s(12) =< it(17)*aux(4) with precondition: [V>=1,Out>=0,V>=Out] #### Cost of chains of fun(V,Out): * Chain [22]: 11*s(17)+2*s(19)+2*s(22)+2*s(23)+2*s(24)+2*s(25)+2 Such that:aux(12) =< V aux(13) =< 2/3*V s(17) =< aux(12) s(19) =< aux(12) s(19) =< aux(13) s(20) =< aux(12) s(21) =< aux(12)+1 s(22) =< s(17)*aux(12) s(23) =< s(17)*s(21) s(24) =< aux(12)*s(20) s(25) =< s(19)*s(20) with precondition: [Out=0,V>=0] * Chain [21]: 6*s(40)+1*s(42)+1*s(45)+1*s(46)+1*s(47)+1*s(48)+2 Such that:s(39) =< 2/3*V aux(14) =< V s(40) =< aux(14) s(42) =< aux(14) s(42) =< s(39) s(43) =< aux(14) s(44) =< aux(14)+1 s(45) =< s(40)*aux(14) s(46) =< s(40)*s(44) s(47) =< aux(14)*s(43) s(48) =< s(42)*s(43) with precondition: [Out>=1,V>=Out] #### Cost of chains of fun1(V,V2,Out): * Chain [26]: 10*s(53)+2*s(55)+2*s(58)+2*s(59)+2*s(60)+2*s(61)+17*s(65)+3*s(67)+3*s(70)+3*s(71)+3*s(72)+3*s(73)+1 Such that:aux(17) =< V aux(18) =< 2/3*V aux(19) =< V2 aux(20) =< 2/3*V2 s(65) =< aux(17) s(67) =< aux(17) s(67) =< aux(18) s(68) =< aux(17) s(69) =< aux(17)+1 s(70) =< s(65)*aux(17) s(71) =< s(65)*s(69) s(72) =< aux(17)*s(68) s(73) =< s(67)*s(68) s(53) =< aux(19) s(55) =< aux(19) s(55) =< aux(20) s(56) =< aux(19) s(57) =< aux(19)+1 s(58) =< s(53)*aux(19) s(59) =< s(53)*s(57) s(60) =< aux(19)*s(56) s(61) =< s(55)*s(56) with precondition: [Out=0,V>=0,V2>=0] * Chain [25]: 10*s(111)+2*s(113)+2*s(116)+2*s(117)+2*s(118)+2*s(119)+5*s(122)+1*s(124)+1*s(127)+1*s(128)+1*s(129)+1*s(130)+1 Such that:s(120) =< V s(121) =< 2/3*V aux(21) =< V2 aux(22) =< 2/3*V2 s(111) =< aux(21) s(113) =< aux(21) s(113) =< aux(22) s(114) =< aux(21) s(115) =< aux(21)+1 s(116) =< s(111)*aux(21) s(117) =< s(111)*s(115) s(118) =< aux(21)*s(114) s(119) =< s(113)*s(114) s(122) =< s(120) s(124) =< s(120) s(124) =< s(121) s(125) =< s(120) s(126) =< s(120)+1 s(127) =< s(122)*s(120) s(128) =< s(122)*s(126) s(129) =< s(120)*s(125) s(130) =< s(124)*s(125) with precondition: [V>=0,V2>=1,Out>=0,V2>=Out] * Chain [24]: 6*s(144)+1*s(146)+1*s(149)+1*s(150)+1*s(151)+1*s(152)+5*s(155)+1*s(157)+1*s(160)+1*s(161)+1*s(162)+1*s(163)+1 Such that:s(143) =< 2/3*V s(153) =< V2 s(154) =< 2/3*V2 aux(23) =< V s(144) =< aux(23) s(155) =< s(153) s(157) =< s(153) s(157) =< s(154) s(158) =< s(153) s(159) =< s(153)+1 s(160) =< s(155)*s(153) s(161) =< s(155)*s(159) s(162) =< s(153)*s(158) s(163) =< s(157)*s(158) s(146) =< aux(23) s(146) =< s(143) s(147) =< aux(23) s(148) =< aux(23)+1 s(149) =< s(144)*aux(23) s(150) =< s(144)*s(148) s(151) =< aux(23)*s(147) s(152) =< s(146)*s(147) with precondition: [V>=1,V2>=1,Out>=1,V+V2>=Out] * Chain [23]: 6*s(167)+1*s(169)+1*s(172)+1*s(173)+1*s(174)+1*s(175)+1 Such that:s(166) =< 2/3*V aux(24) =< V s(167) =< aux(24) s(169) =< aux(24) s(169) =< s(166) s(170) =< aux(24) s(171) =< aux(24)+1 s(172) =< s(167)*aux(24) s(173) =< s(167)*s(171) s(174) =< aux(24)*s(170) s(175) =< s(169)*s(170) with precondition: [V2>=0,Out>=1,V>=Out] #### Cost of chains of fun3(V,V2,Out): * Chain [31]: 0 with precondition: [Out=0,V>=0,V2>=0] * Chain [30]: 0 with precondition: [Out=1,V>=0,V2>=0] * Chain [29]: 5*s(179)+1*s(181)+1*s(184)+1*s(185)+1*s(186)+1*s(187)+0 Such that:s(177) =< V2 s(178) =< 2/3*V2 s(179) =< s(177) s(181) =< s(177) s(181) =< s(178) s(182) =< s(177) s(183) =< s(177)+1 s(184) =< s(179)*s(177) s(185) =< s(179)*s(183) s(186) =< s(177)*s(182) s(187) =< s(181)*s(182) with precondition: [V>=0,V2>=1,Out>=1,V2+1>=Out] * Chain [28]: 5*s(190)+1*s(192)+1*s(195)+1*s(196)+1*s(197)+1*s(198)+0 Such that:s(188) =< V s(189) =< 2/3*V s(190) =< s(188) s(192) =< s(188) s(192) =< s(189) s(193) =< s(188) s(194) =< s(188)+1 s(195) =< s(190)*s(188) s(196) =< s(190)*s(194) s(197) =< s(188)*s(193) s(198) =< s(192)*s(193) with precondition: [V>=1,V2>=0,Out>=1,V+1>=Out] * Chain [27]: 5*s(201)+1*s(203)+1*s(206)+1*s(207)+1*s(208)+1*s(209)+5*s(212)+1*s(214)+1*s(217)+1*s(218)+1*s(219)+1*s(220)+0 Such that:s(199) =< V s(200) =< 2/3*V s(210) =< V2 s(211) =< 2/3*V2 s(212) =< s(210) s(214) =< s(210) s(214) =< s(211) s(215) =< s(210) s(216) =< s(210)+1 s(217) =< s(212)*s(210) s(218) =< s(212)*s(216) s(219) =< s(210)*s(215) s(220) =< s(214)*s(215) s(201) =< s(199) s(203) =< s(199) s(203) =< s(200) s(204) =< s(199) s(205) =< s(199)+1 s(206) =< s(201)*s(199) s(207) =< s(201)*s(205) s(208) =< s(199)*s(204) s(209) =< s(203)*s(204) with precondition: [V>=1,V2>=1,Out>=1,V+V2+1>=Out] #### Cost of chains of start(V,V2): * Chain [32]: 70*s(221)+12*s(229)+12*s(232)+12*s(233)+12*s(234)+12*s(235)+35*s(268)+7*s(269)+7*s(272)+7*s(273)+7*s(274)+7*s(275)+2 Such that:aux(25) =< V aux(26) =< 2/3*V aux(27) =< V2 aux(28) =< 2/3*V2 s(221) =< aux(25) s(229) =< aux(25) s(229) =< aux(26) s(230) =< aux(25) s(231) =< aux(25)+1 s(232) =< s(221)*aux(25) s(233) =< s(221)*s(231) s(234) =< aux(25)*s(230) s(235) =< s(229)*s(230) s(268) =< aux(27) s(269) =< aux(27) s(269) =< aux(28) s(270) =< aux(27) s(271) =< aux(27)+1 s(272) =< s(268)*aux(27) s(273) =< s(268)*s(271) s(274) =< aux(27)*s(270) s(275) =< s(269)*s(270) with precondition: [] Closed-form bounds of start(V,V2): ------------------------------------- * Chain [32] with precondition: [] - Upper bound: nat(V)*94+2+nat(V)*48*nat(V)+nat(V2)*49+nat(V2)*28*nat(V2) - Complexity: n^2 ### Maximum cost of start(V,V2): nat(V)*94+2+nat(V)*48*nat(V)+nat(V2)*49+nat(V2)*28*nat(V2) Asymptotic class: n^2 * Total analysis performed in 506 ms. ---------------------------------------- (16) BOUNDS(1, n^2) ---------------------------------------- (17) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (18) Obligation: The Runtime Complexity (full) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) The (relative) TRS S consists of the following rules: encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Rewrite Strategy: FULL ---------------------------------------- (19) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (20) Obligation: TRS: Rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Types: rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 empty :: empty:cons:cons_rev:cons_r1 cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encArg :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_empty :: empty:cons:cons_rev:cons_r1 encode_cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 hole_empty:cons:cons_rev:cons_r11_0 :: empty:cons:cons_rev:cons_r1 gen_empty:cons:cons_rev:cons_r12_0 :: Nat -> empty:cons:cons_rev:cons_r1 ---------------------------------------- (21) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: r1, encArg They will be analysed ascendingly in the following order: r1 < encArg ---------------------------------------- (22) Obligation: TRS: Rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Types: rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 empty :: empty:cons:cons_rev:cons_r1 cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encArg :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_empty :: empty:cons:cons_rev:cons_r1 encode_cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 hole_empty:cons:cons_rev:cons_r11_0 :: empty:cons:cons_rev:cons_r1 gen_empty:cons:cons_rev:cons_r12_0 :: Nat -> empty:cons:cons_rev:cons_r1 Generator Equations: gen_empty:cons:cons_rev:cons_r12_0(0) <=> empty gen_empty:cons:cons_rev:cons_r12_0(+(x, 1)) <=> cons(empty, gen_empty:cons:cons_rev:cons_r12_0(x)) The following defined symbols remain to be analysed: r1, encArg They will be analysed ascendingly in the following order: r1 < encArg ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: r1(gen_empty:cons:cons_rev:cons_r12_0(n4_0), gen_empty:cons:cons_rev:cons_r12_0(b)) -> gen_empty:cons:cons_rev:cons_r12_0(+(n4_0, b)), rt in Omega(1 + n4_0) Induction Base: r1(gen_empty:cons:cons_rev:cons_r12_0(0), gen_empty:cons:cons_rev:cons_r12_0(b)) ->_R^Omega(1) gen_empty:cons:cons_rev:cons_r12_0(b) Induction Step: r1(gen_empty:cons:cons_rev:cons_r12_0(+(n4_0, 1)), gen_empty:cons:cons_rev:cons_r12_0(b)) ->_R^Omega(1) r1(gen_empty:cons:cons_rev:cons_r12_0(n4_0), cons(empty, gen_empty:cons:cons_rev:cons_r12_0(b))) ->_IH gen_empty:cons:cons_rev:cons_r12_0(+(+(b, 1), c5_0)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (24) Complex Obligation (BEST) ---------------------------------------- (25) Obligation: Proved the lower bound n^1 for the following obligation: TRS: Rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Types: rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 empty :: empty:cons:cons_rev:cons_r1 cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encArg :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_empty :: empty:cons:cons_rev:cons_r1 encode_cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 hole_empty:cons:cons_rev:cons_r11_0 :: empty:cons:cons_rev:cons_r1 gen_empty:cons:cons_rev:cons_r12_0 :: Nat -> empty:cons:cons_rev:cons_r1 Generator Equations: gen_empty:cons:cons_rev:cons_r12_0(0) <=> empty gen_empty:cons:cons_rev:cons_r12_0(+(x, 1)) <=> cons(empty, gen_empty:cons:cons_rev:cons_r12_0(x)) The following defined symbols remain to be analysed: r1, encArg They will be analysed ascendingly in the following order: r1 < encArg ---------------------------------------- (26) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (27) BOUNDS(n^1, INF) ---------------------------------------- (28) Obligation: TRS: Rules: rev(ls) -> r1(ls, empty) r1(empty, a) -> a r1(cons(x, k), a) -> r1(k, cons(x, a)) encArg(empty) -> empty encArg(cons(x_1, x_2)) -> cons(encArg(x_1), encArg(x_2)) encArg(cons_rev(x_1)) -> rev(encArg(x_1)) encArg(cons_r1(x_1, x_2)) -> r1(encArg(x_1), encArg(x_2)) encode_rev(x_1) -> rev(encArg(x_1)) encode_r1(x_1, x_2) -> r1(encArg(x_1), encArg(x_2)) encode_empty -> empty encode_cons(x_1, x_2) -> cons(encArg(x_1), encArg(x_2)) Types: rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 empty :: empty:cons:cons_rev:cons_r1 cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encArg :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 cons_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_rev :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_r1 :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 encode_empty :: empty:cons:cons_rev:cons_r1 encode_cons :: empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 -> empty:cons:cons_rev:cons_r1 hole_empty:cons:cons_rev:cons_r11_0 :: empty:cons:cons_rev:cons_r1 gen_empty:cons:cons_rev:cons_r12_0 :: Nat -> empty:cons:cons_rev:cons_r1 Lemmas: r1(gen_empty:cons:cons_rev:cons_r12_0(n4_0), gen_empty:cons:cons_rev:cons_r12_0(b)) -> gen_empty:cons:cons_rev:cons_r12_0(+(n4_0, b)), rt in Omega(1 + n4_0) Generator Equations: gen_empty:cons:cons_rev:cons_r12_0(0) <=> empty gen_empty:cons:cons_rev:cons_r12_0(+(x, 1)) <=> cons(empty, gen_empty:cons:cons_rev:cons_r12_0(x)) The following defined symbols remain to be analysed: encArg ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: encArg(gen_empty:cons:cons_rev:cons_r12_0(n558_0)) -> gen_empty:cons:cons_rev:cons_r12_0(n558_0), rt in Omega(0) Induction Base: encArg(gen_empty:cons:cons_rev:cons_r12_0(0)) ->_R^Omega(0) empty Induction Step: encArg(gen_empty:cons:cons_rev:cons_r12_0(+(n558_0, 1))) ->_R^Omega(0) cons(encArg(empty), encArg(gen_empty:cons:cons_rev:cons_r12_0(n558_0))) ->_R^Omega(0) cons(empty, encArg(gen_empty:cons:cons_rev:cons_r12_0(n558_0))) ->_IH cons(empty, gen_empty:cons:cons_rev:cons_r12_0(c559_0)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (30) BOUNDS(1, INF)