WORST_CASE(?,O(n^1)) proof of input_D37WvPia3s.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(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) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxTRS (11) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (12) CpxTRS (13) CpxTrsMatchBoundsTAProof [FINISHED, 25 ms] (14) BOUNDS(1, n^1) ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(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: PARALLEL_INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST 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(take(z0, z1)) -> c15(A__TAKE(mark(z0), mark(z1)), MARK(z1)) MARK(length(z0)) -> c16(A__LENGTH(mark(z0)), MARK(z0)) MARK(0) -> c17 MARK(true) -> c18 MARK(s(z0)) -> c19 MARK(false) -> c20 MARK(cons(z0, z1)) -> c21 MARK(nil) -> c22 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(take(z0, z1)) -> c15(A__TAKE(mark(z0), mark(z1)), MARK(z1)) MARK(length(z0)) -> c16(A__LENGTH(mark(z0)), MARK(z0)) MARK(0) -> c17 MARK(true) -> c18 MARK(s(z0)) -> c19 MARK(false) -> c20 MARK(cons(z0, z1)) -> c21 MARK(nil) -> c22 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_2, c15_2, c16_2, c17, c18, c19, c20, c21, c22 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 17 trailing nodes: MARK(nil) -> c22 A__TAKE(s(z0), cons(z1, z2)) -> c7 A__INF(z0) -> c5 MARK(false) -> c20 A__EQ(z0, z1) -> c2 A__LENGTH(nil) -> c9 MARK(true) -> c18 A__LENGTH(cons(z0, z1)) -> c10 A__TAKE(0, z0) -> c6 A__EQ(z0, z1) -> c3 A__EQ(0, 0) -> c A__LENGTH(z0) -> c11 MARK(cons(z0, z1)) -> c21 A__INF(z0) -> c4 MARK(0) -> c17 A__TAKE(z0, z1) -> c8 MARK(s(z0)) -> c19 ---------------------------------------- (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(take(z0, z1)) -> c15(A__TAKE(mark(z0), mark(z1)), MARK(z1)) MARK(length(z0)) -> c16(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(take(z0, z1)) -> c15(A__TAKE(mark(z0), mark(z1)), MARK(z1)) MARK(length(z0)) -> c16(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_2, c15_2, c16_2 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 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(take(z0, z1)) -> c15(MARK(z1)) MARK(length(z0)) -> c16(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(take(z0, z1)) -> c15(MARK(z1)) MARK(length(z0)) -> c16(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_1, c15_1, c16_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(take(z0, z1)) -> c15(MARK(z1)) MARK(length(z0)) -> c16(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(take(z0, z1)) -> c15(MARK(z1)) MARK(length(z0)) -> c16(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_1, c15_1, c16_1 ---------------------------------------- (9) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (10) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: 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(take(z0, z1)) -> c15(MARK(z1)) MARK(length(z0)) -> c16(MARK(z0)) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (11) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (12) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: 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(take(z0, z1)) -> c15(MARK(z1)) MARK(length(z0)) -> c16(MARK(z0)) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (13) CpxTrsMatchBoundsTAProof (FINISHED) A linear upper bound on the runtime complexity of the TRS R could be shown with a Match-Bound[TAB_LEFTLINEAR,TAB_NONLEFTLINEAR] (for contructor-based start-terms) of 1. The compatible tree automaton used to show the Match-Boundedness (for constructor-based start-terms) is represented by: final states : [1, 2] transitions: s0(0) -> 0 c10(0) -> 0 eq0(0, 0) -> 0 c120(0) -> 0 inf0(0) -> 0 c130(0) -> 0 take0(0, 0) -> 0 c140(0) -> 0 c150(0) -> 0 length0(0) -> 0 c160(0) -> 0 A__EQ0(0, 0) -> 1 MARK0(0) -> 2 A__EQ1(0, 0) -> 3 c11(3) -> 1 A__EQ1(0, 0) -> 4 c121(4) -> 2 MARK1(0) -> 5 c131(5) -> 2 MARK1(0) -> 6 c141(6) -> 2 MARK1(0) -> 7 c151(7) -> 2 MARK1(0) -> 8 c161(8) -> 2 c11(3) -> 3 c11(3) -> 4 c121(4) -> 5 c121(4) -> 6 c121(4) -> 7 c121(4) -> 8 c131(5) -> 5 c131(5) -> 6 c131(5) -> 7 c131(5) -> 8 c141(6) -> 5 c141(6) -> 6 c141(6) -> 7 c141(6) -> 8 c151(7) -> 5 c151(7) -> 6 c151(7) -> 7 c151(7) -> 8 c161(8) -> 5 c161(8) -> 6 c161(8) -> 7 c161(8) -> 8 ---------------------------------------- (14) BOUNDS(1, n^1)