WORST_CASE(Omega(n^1), O(n^1)) proof of /export/starexec/sandbox/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). (0) CpxTRS (1) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (2) CdtProblem (3) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CdtProblem (5) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 64 ms] (10) CdtProblem (11) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 0 ms] (12) CdtProblem (13) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (14) BOUNDS(1, 1) (15) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CpxTRS (17) SlicingProof [LOWER BOUND(ID), 0 ms] (18) CpxTRS (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), 273 ms] (24) BEST (25) proven lower bound (26) LowerBoundPropagationProof [FINISHED, 0 ms] (27) BOUNDS(n^1, INF) (28) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). The TRS R consists of the following rules: a__eq(0, 0) -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(X, inf(s(X))) a__take(0, X) -> nil a__take(s(X), cons(Y, L)) -> cons(Y, take(X, L)) a__length(nil) -> 0 a__length(cons(X, L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0) -> 0 mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X1, X2)) -> cons(X1, X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: a__eq(0, 0) -> true a__eq(s(z0), s(z1)) -> a__eq(z0, z1) a__eq(z0, z1) -> false a__eq(z0, z1) -> eq(z0, z1) a__inf(z0) -> cons(z0, inf(s(z0))) a__inf(z0) -> inf(z0) a__take(0, z0) -> nil a__take(s(z0), cons(z1, z2)) -> cons(z1, take(z0, z2)) a__take(z0, z1) -> take(z0, z1) a__length(nil) -> 0 a__length(cons(z0, z1)) -> s(length(z1)) a__length(z0) -> length(z0) mark(eq(z0, z1)) -> a__eq(z0, z1) mark(inf(z0)) -> a__inf(mark(z0)) mark(take(z0, z1)) -> a__take(mark(z0), mark(z1)) mark(length(z0)) -> a__length(mark(z0)) mark(0) -> 0 mark(true) -> true mark(s(z0)) -> s(z0) mark(false) -> false mark(cons(z0, z1)) -> cons(z0, z1) mark(nil) -> nil Tuples: A__EQ(0, 0) -> c A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) A__EQ(z0, z1) -> c2 A__EQ(z0, z1) -> c3 A__INF(z0) -> c4 A__INF(z0) -> c5 A__TAKE(0, z0) -> c6 A__TAKE(s(z0), cons(z1, z2)) -> c7 A__TAKE(z0, z1) -> c8 A__LENGTH(nil) -> c9 A__LENGTH(cons(z0, z1)) -> c10 A__LENGTH(z0) -> c11 MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(A__INF(mark(z0)), MARK(z0)) MARK(take(z0, z1)) -> c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(A__LENGTH(mark(z0)), MARK(z0)) MARK(0) -> c16 MARK(true) -> c17 MARK(s(z0)) -> c18 MARK(false) -> c19 MARK(cons(z0, z1)) -> c20 MARK(nil) -> c21 S tuples: A__EQ(0, 0) -> c A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) A__EQ(z0, z1) -> c2 A__EQ(z0, z1) -> c3 A__INF(z0) -> c4 A__INF(z0) -> c5 A__TAKE(0, z0) -> c6 A__TAKE(s(z0), cons(z1, z2)) -> c7 A__TAKE(z0, z1) -> c8 A__LENGTH(nil) -> c9 A__LENGTH(cons(z0, z1)) -> c10 A__LENGTH(z0) -> c11 MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(A__INF(mark(z0)), MARK(z0)) MARK(take(z0, z1)) -> c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(A__LENGTH(mark(z0)), MARK(z0)) MARK(0) -> c16 MARK(true) -> c17 MARK(s(z0)) -> c18 MARK(false) -> c19 MARK(cons(z0, z1)) -> c20 MARK(nil) -> c21 K tuples:none Defined Rule Symbols: a__eq_2, a__inf_1, a__take_2, a__length_1, mark_1 Defined Pair Symbols: A__EQ_2, A__INF_1, A__TAKE_2, A__LENGTH_1, MARK_1 Compound Symbols: c, c1_1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12_1, c13_2, c14_3, c15_2, c16, c17, c18, c19, c20, c21 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 17 trailing nodes: MARK(nil) -> c21 A__LENGTH(cons(z0, z1)) -> c10 A__LENGTH(z0) -> c11 A__EQ(z0, z1) -> c3 A__TAKE(s(z0), cons(z1, z2)) -> c7 A__TAKE(0, z0) -> c6 A__INF(z0) -> c5 MARK(true) -> c17 MARK(s(z0)) -> c18 A__TAKE(z0, z1) -> c8 A__INF(z0) -> c4 MARK(false) -> c19 A__EQ(0, 0) -> c MARK(0) -> c16 MARK(cons(z0, z1)) -> c20 A__LENGTH(nil) -> c9 A__EQ(z0, z1) -> c2 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: a__eq(0, 0) -> true a__eq(s(z0), s(z1)) -> a__eq(z0, z1) a__eq(z0, z1) -> false a__eq(z0, z1) -> eq(z0, z1) a__inf(z0) -> cons(z0, inf(s(z0))) a__inf(z0) -> inf(z0) a__take(0, z0) -> nil a__take(s(z0), cons(z1, z2)) -> cons(z1, take(z0, z2)) a__take(z0, z1) -> take(z0, z1) a__length(nil) -> 0 a__length(cons(z0, z1)) -> s(length(z1)) a__length(z0) -> length(z0) mark(eq(z0, z1)) -> a__eq(z0, z1) mark(inf(z0)) -> a__inf(mark(z0)) mark(take(z0, z1)) -> a__take(mark(z0), mark(z1)) mark(length(z0)) -> a__length(mark(z0)) mark(0) -> 0 mark(true) -> true mark(s(z0)) -> s(z0) mark(false) -> false mark(cons(z0, z1)) -> cons(z0, z1) mark(nil) -> nil Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(A__INF(mark(z0)), MARK(z0)) MARK(take(z0, z1)) -> c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(A__LENGTH(mark(z0)), MARK(z0)) S tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(A__INF(mark(z0)), MARK(z0)) MARK(take(z0, z1)) -> c14(A__TAKE(mark(z0), mark(z1)), MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(A__LENGTH(mark(z0)), MARK(z0)) K tuples:none Defined Rule Symbols: a__eq_2, a__inf_1, a__take_2, a__length_1, mark_1 Defined Pair Symbols: A__EQ_2, MARK_1 Compound Symbols: c1_1, c12_1, c13_2, c14_3, c15_2 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: a__eq(0, 0) -> true a__eq(s(z0), s(z1)) -> a__eq(z0, z1) a__eq(z0, z1) -> false a__eq(z0, z1) -> eq(z0, z1) a__inf(z0) -> cons(z0, inf(s(z0))) a__inf(z0) -> inf(z0) a__take(0, z0) -> nil a__take(s(z0), cons(z1, z2)) -> cons(z1, take(z0, z2)) a__take(z0, z1) -> take(z0, z1) a__length(nil) -> 0 a__length(cons(z0, z1)) -> s(length(z1)) a__length(z0) -> length(z0) mark(eq(z0, z1)) -> a__eq(z0, z1) mark(inf(z0)) -> a__inf(mark(z0)) mark(take(z0, z1)) -> a__take(mark(z0), mark(z1)) mark(length(z0)) -> a__length(mark(z0)) mark(0) -> 0 mark(true) -> true mark(s(z0)) -> s(z0) mark(false) -> false mark(cons(z0, z1)) -> cons(z0, z1) mark(nil) -> nil Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) S tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) K tuples:none Defined Rule Symbols: a__eq_2, a__inf_1, a__take_2, a__length_1, mark_1 Defined Pair Symbols: A__EQ_2, MARK_1 Compound Symbols: c1_1, c12_1, c13_1, c14_2, c15_1 ---------------------------------------- (7) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: a__eq(0, 0) -> true a__eq(s(z0), s(z1)) -> a__eq(z0, z1) a__eq(z0, z1) -> false a__eq(z0, z1) -> eq(z0, z1) a__inf(z0) -> cons(z0, inf(s(z0))) a__inf(z0) -> inf(z0) a__take(0, z0) -> nil a__take(s(z0), cons(z1, z2)) -> cons(z1, take(z0, z2)) a__take(z0, z1) -> take(z0, z1) a__length(nil) -> 0 a__length(cons(z0, z1)) -> s(length(z1)) a__length(z0) -> length(z0) mark(eq(z0, z1)) -> a__eq(z0, z1) mark(inf(z0)) -> a__inf(mark(z0)) mark(take(z0, z1)) -> a__take(mark(z0), mark(z1)) mark(length(z0)) -> a__length(mark(z0)) mark(0) -> 0 mark(true) -> true mark(s(z0)) -> s(z0) mark(false) -> false mark(cons(z0, z1)) -> cons(z0, z1) mark(nil) -> nil ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules:none Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) S tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) K tuples:none Defined Rule Symbols:none Defined Pair Symbols: A__EQ_2, MARK_1 Compound Symbols: c1_1, c12_1, c13_1, c14_2, c15_1 ---------------------------------------- (9) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(length(z0)) -> c15(MARK(z0)) We considered the (Usable) Rules:none And the Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(A__EQ(x_1, x_2)) = [1] + x_1 + x_2 POL(MARK(x_1)) = [1] + x_1 POL(c1(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(eq(x_1, x_2)) = [1] + x_1 + x_2 POL(inf(x_1)) = [1] + x_1 POL(length(x_1)) = [1] + x_1 POL(s(x_1)) = [1] + x_1 POL(take(x_1, x_2)) = [1] + x_1 + x_2 ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules:none Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) S tuples: MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) K tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(length(z0)) -> c15(MARK(z0)) Defined Rule Symbols:none Defined Pair Symbols: A__EQ_2, MARK_1 Compound Symbols: c1_1, c12_1, c13_1, c14_2, c15_1 ---------------------------------------- (11) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) We considered the (Usable) Rules:none And the Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(A__EQ(x_1, x_2)) = [2]x_1 + [2]x_2 POL(MARK(x_1)) = [3] + [3]x_1 POL(c1(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c13(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1)) = x_1 POL(eq(x_1, x_2)) = [3] + x_1 + x_2 POL(inf(x_1)) = x_1 POL(length(x_1)) = x_1 POL(s(x_1)) = x_1 POL(take(x_1, x_2)) = [3] + x_1 + x_2 ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules:none Tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) MARK(length(z0)) -> c15(MARK(z0)) S tuples:none K tuples: A__EQ(s(z0), s(z1)) -> c1(A__EQ(z0, z1)) MARK(eq(z0, z1)) -> c12(A__EQ(z0, z1)) MARK(inf(z0)) -> c13(MARK(z0)) MARK(length(z0)) -> c15(MARK(z0)) MARK(take(z0, z1)) -> c14(MARK(z0), MARK(z1)) Defined Rule Symbols:none Defined Pair Symbols: A__EQ_2, MARK_1 Compound Symbols: c1_1, c12_1, c13_1, c14_2, c15_1 ---------------------------------------- (13) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (14) BOUNDS(1, 1) ---------------------------------------- (15) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (16) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: a__eq(0', 0') -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(X, inf(s(X))) a__take(0', X) -> nil a__take(s(X), cons(Y, L)) -> cons(Y, take(X, L)) a__length(nil) -> 0' a__length(cons(X, L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0') -> 0' mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X1, X2)) -> cons(X1, X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (17) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: cons/0 ---------------------------------------- (18) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: a__eq(0', 0') -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(inf(s(X))) a__take(0', X) -> nil a__take(s(X), cons(L)) -> cons(take(X, L)) a__length(nil) -> 0' a__length(cons(L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0') -> 0' mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X2)) -> cons(X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (19) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (20) Obligation: Innermost TRS: Rules: a__eq(0', 0') -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(inf(s(X))) a__take(0', X) -> nil a__take(s(X), cons(L)) -> cons(take(X, L)) a__length(nil) -> 0' a__length(cons(L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0') -> 0' mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X2)) -> cons(X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) Types: a__eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq 0' :: 0':true:s:false:inf:cons:nil:take:length:eq true :: 0':true:s:false:inf:cons:nil:take:length:eq s :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq false :: 0':true:s:false:inf:cons:nil:take:length:eq a__inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq cons :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq nil :: 0':true:s:false:inf:cons:nil:take:length:eq take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq mark :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq hole_0':true:s:false:inf:cons:nil:take:length:eq1_0 :: 0':true:s:false:inf:cons:nil:take:length:eq gen_0':true:s:false:inf:cons:nil:take:length:eq2_0 :: Nat -> 0':true:s:false:inf:cons:nil:take:length:eq ---------------------------------------- (21) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: a__eq, mark They will be analysed ascendingly in the following order: a__eq < mark ---------------------------------------- (22) Obligation: Innermost TRS: Rules: a__eq(0', 0') -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(inf(s(X))) a__take(0', X) -> nil a__take(s(X), cons(L)) -> cons(take(X, L)) a__length(nil) -> 0' a__length(cons(L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0') -> 0' mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X2)) -> cons(X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) Types: a__eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq 0' :: 0':true:s:false:inf:cons:nil:take:length:eq true :: 0':true:s:false:inf:cons:nil:take:length:eq s :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq false :: 0':true:s:false:inf:cons:nil:take:length:eq a__inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq cons :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq nil :: 0':true:s:false:inf:cons:nil:take:length:eq take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq mark :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq hole_0':true:s:false:inf:cons:nil:take:length:eq1_0 :: 0':true:s:false:inf:cons:nil:take:length:eq gen_0':true:s:false:inf:cons:nil:take:length:eq2_0 :: Nat -> 0':true:s:false:inf:cons:nil:take:length:eq Generator Equations: gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(0) <=> 0' gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(+(x, 1)) <=> s(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(x)) The following defined symbols remain to be analysed: a__eq, mark They will be analysed ascendingly in the following order: a__eq < mark ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: a__eq(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(n4_0), gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(n4_0)) -> true, rt in Omega(1 + n4_0) Induction Base: a__eq(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(0), gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(0)) ->_R^Omega(1) true Induction Step: a__eq(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(+(n4_0, 1)), gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(+(n4_0, 1))) ->_R^Omega(1) a__eq(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(n4_0), gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(n4_0)) ->_IH true 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: Innermost TRS: Rules: a__eq(0', 0') -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(inf(s(X))) a__take(0', X) -> nil a__take(s(X), cons(L)) -> cons(take(X, L)) a__length(nil) -> 0' a__length(cons(L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0') -> 0' mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X2)) -> cons(X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) Types: a__eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq 0' :: 0':true:s:false:inf:cons:nil:take:length:eq true :: 0':true:s:false:inf:cons:nil:take:length:eq s :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq false :: 0':true:s:false:inf:cons:nil:take:length:eq a__inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq cons :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq nil :: 0':true:s:false:inf:cons:nil:take:length:eq take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq mark :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq hole_0':true:s:false:inf:cons:nil:take:length:eq1_0 :: 0':true:s:false:inf:cons:nil:take:length:eq gen_0':true:s:false:inf:cons:nil:take:length:eq2_0 :: Nat -> 0':true:s:false:inf:cons:nil:take:length:eq Generator Equations: gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(0) <=> 0' gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(+(x, 1)) <=> s(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(x)) The following defined symbols remain to be analysed: a__eq, mark They will be analysed ascendingly in the following order: a__eq < mark ---------------------------------------- (26) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (27) BOUNDS(n^1, INF) ---------------------------------------- (28) Obligation: Innermost TRS: Rules: a__eq(0', 0') -> true a__eq(s(X), s(Y)) -> a__eq(X, Y) a__eq(X, Y) -> false a__inf(X) -> cons(inf(s(X))) a__take(0', X) -> nil a__take(s(X), cons(L)) -> cons(take(X, L)) a__length(nil) -> 0' a__length(cons(L)) -> s(length(L)) mark(eq(X1, X2)) -> a__eq(X1, X2) mark(inf(X)) -> a__inf(mark(X)) mark(take(X1, X2)) -> a__take(mark(X1), mark(X2)) mark(length(X)) -> a__length(mark(X)) mark(0') -> 0' mark(true) -> true mark(s(X)) -> s(X) mark(false) -> false mark(cons(X2)) -> cons(X2) mark(nil) -> nil a__eq(X1, X2) -> eq(X1, X2) a__inf(X) -> inf(X) a__take(X1, X2) -> take(X1, X2) a__length(X) -> length(X) Types: a__eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq 0' :: 0':true:s:false:inf:cons:nil:take:length:eq true :: 0':true:s:false:inf:cons:nil:take:length:eq s :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq false :: 0':true:s:false:inf:cons:nil:take:length:eq a__inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq cons :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq inf :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq nil :: 0':true:s:false:inf:cons:nil:take:length:eq take :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq a__length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq length :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq mark :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq eq :: 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq -> 0':true:s:false:inf:cons:nil:take:length:eq hole_0':true:s:false:inf:cons:nil:take:length:eq1_0 :: 0':true:s:false:inf:cons:nil:take:length:eq gen_0':true:s:false:inf:cons:nil:take:length:eq2_0 :: Nat -> 0':true:s:false:inf:cons:nil:take:length:eq Lemmas: a__eq(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(n4_0), gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(n4_0)) -> true, rt in Omega(1 + n4_0) Generator Equations: gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(0) <=> 0' gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(+(x, 1)) <=> s(gen_0':true:s:false:inf:cons:nil:take:length:eq2_0(x)) The following defined symbols remain to be analysed: mark