/export/starexec/sandbox/solver/bin/starexec_run_complexity /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- 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)), 71 ms] (10) CdtProblem (11) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (12) BOUNDS(1, 1) (13) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (14) CpxTRS (15) SlicingProof [LOWER BOUND(ID), 0 ms] (16) CpxTRS (17) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (18) typed CpxTrs (19) OrderProof [LOWER BOUND(ID), 0 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 258 ms] (22) proven lower bound (23) LowerBoundPropagationProof [FINISHED, 0 ms] (24) BOUNDS(n^1, INF) ---------------------------------------- (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: from(X) -> cons(X, n__from(s(X))) after(0, XS) -> XS after(s(N), cons(X, XS)) -> after(N, activate(XS)) from(X) -> n__from(X) activate(n__from(X)) -> from(X) activate(X) -> 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: from(z0) -> cons(z0, n__from(s(z0))) from(z0) -> n__from(z0) after(0, z0) -> z0 after(s(z0), cons(z1, z2)) -> after(z0, activate(z2)) activate(n__from(z0)) -> from(z0) activate(z0) -> z0 Tuples: FROM(z0) -> c FROM(z0) -> c1 AFTER(0, z0) -> c2 AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2)), ACTIVATE(z2)) ACTIVATE(n__from(z0)) -> c4(FROM(z0)) ACTIVATE(z0) -> c5 S tuples: FROM(z0) -> c FROM(z0) -> c1 AFTER(0, z0) -> c2 AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2)), ACTIVATE(z2)) ACTIVATE(n__from(z0)) -> c4(FROM(z0)) ACTIVATE(z0) -> c5 K tuples:none Defined Rule Symbols: from_1, after_2, activate_1 Defined Pair Symbols: FROM_1, AFTER_2, ACTIVATE_1 Compound Symbols: c, c1, c2, c3_2, c4_1, c5 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 5 trailing nodes: ACTIVATE(z0) -> c5 FROM(z0) -> c1 FROM(z0) -> c ACTIVATE(n__from(z0)) -> c4(FROM(z0)) AFTER(0, z0) -> c2 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: from(z0) -> cons(z0, n__from(s(z0))) from(z0) -> n__from(z0) after(0, z0) -> z0 after(s(z0), cons(z1, z2)) -> after(z0, activate(z2)) activate(n__from(z0)) -> from(z0) activate(z0) -> z0 Tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2)), ACTIVATE(z2)) S tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2)), ACTIVATE(z2)) K tuples:none Defined Rule Symbols: from_1, after_2, activate_1 Defined Pair Symbols: AFTER_2 Compound Symbols: c3_2 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: from(z0) -> cons(z0, n__from(s(z0))) from(z0) -> n__from(z0) after(0, z0) -> z0 after(s(z0), cons(z1, z2)) -> after(z0, activate(z2)) activate(n__from(z0)) -> from(z0) activate(z0) -> z0 Tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) S tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) K tuples:none Defined Rule Symbols: from_1, after_2, activate_1 Defined Pair Symbols: AFTER_2 Compound Symbols: c3_1 ---------------------------------------- (7) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: after(0, z0) -> z0 after(s(z0), cons(z1, z2)) -> after(z0, activate(z2)) ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: activate(n__from(z0)) -> from(z0) activate(z0) -> z0 from(z0) -> cons(z0, n__from(s(z0))) from(z0) -> n__from(z0) Tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) S tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) K tuples:none Defined Rule Symbols: activate_1, from_1 Defined Pair Symbols: AFTER_2 Compound Symbols: c3_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. AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) We considered the (Usable) Rules: from(z0) -> cons(z0, n__from(s(z0))) from(z0) -> n__from(z0) activate(n__from(z0)) -> from(z0) activate(z0) -> z0 And the Tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) The order we found is given by the following interpretation: Polynomial interpretation : POL(AFTER(x_1, x_2)) = x_1 + x_2 POL(activate(x_1)) = x_1 POL(c3(x_1)) = x_1 POL(cons(x_1, x_2)) = x_2 POL(from(x_1)) = [1] POL(n__from(x_1)) = [1] POL(s(x_1)) = [1] + x_1 ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: activate(n__from(z0)) -> from(z0) activate(z0) -> z0 from(z0) -> cons(z0, n__from(s(z0))) from(z0) -> n__from(z0) Tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) S tuples:none K tuples: AFTER(s(z0), cons(z1, z2)) -> c3(AFTER(z0, activate(z2))) Defined Rule Symbols: activate_1, from_1 Defined Pair Symbols: AFTER_2 Compound Symbols: c3_1 ---------------------------------------- (11) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (12) BOUNDS(1, 1) ---------------------------------------- (13) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (14) 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: from(X) -> cons(X, n__from(s(X))) after(0', XS) -> XS after(s(N), cons(X, XS)) -> after(N, activate(XS)) from(X) -> n__from(X) activate(n__from(X)) -> from(X) activate(X) -> X S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (15) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: from/0 cons/0 n__from/0 ---------------------------------------- (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: from -> cons(n__from) after(0', XS) -> XS after(s(N), cons(XS)) -> after(N, activate(XS)) from -> n__from activate(n__from) -> from activate(X) -> X S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (17) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (18) Obligation: Innermost TRS: Rules: from -> cons(n__from) after(0', XS) -> XS after(s(N), cons(XS)) -> after(N, activate(XS)) from -> n__from activate(n__from) -> from activate(X) -> X Types: from :: n__from:cons cons :: n__from:cons -> n__from:cons n__from :: n__from:cons after :: 0':s -> n__from:cons -> n__from:cons 0' :: 0':s s :: 0':s -> 0':s activate :: n__from:cons -> n__from:cons hole_n__from:cons1_0 :: n__from:cons hole_0':s2_0 :: 0':s gen_n__from:cons3_0 :: Nat -> n__from:cons gen_0':s4_0 :: Nat -> 0':s ---------------------------------------- (19) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: after ---------------------------------------- (20) Obligation: Innermost TRS: Rules: from -> cons(n__from) after(0', XS) -> XS after(s(N), cons(XS)) -> after(N, activate(XS)) from -> n__from activate(n__from) -> from activate(X) -> X Types: from :: n__from:cons cons :: n__from:cons -> n__from:cons n__from :: n__from:cons after :: 0':s -> n__from:cons -> n__from:cons 0' :: 0':s s :: 0':s -> 0':s activate :: n__from:cons -> n__from:cons hole_n__from:cons1_0 :: n__from:cons hole_0':s2_0 :: 0':s gen_n__from:cons3_0 :: Nat -> n__from:cons gen_0':s4_0 :: Nat -> 0':s Generator Equations: gen_n__from:cons3_0(0) <=> n__from gen_n__from:cons3_0(+(x, 1)) <=> cons(gen_n__from:cons3_0(x)) gen_0':s4_0(0) <=> 0' gen_0':s4_0(+(x, 1)) <=> s(gen_0':s4_0(x)) The following defined symbols remain to be analysed: after ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: after(gen_0':s4_0(n6_0), gen_n__from:cons3_0(1)) -> gen_n__from:cons3_0(1), rt in Omega(1 + n6_0) Induction Base: after(gen_0':s4_0(0), gen_n__from:cons3_0(1)) ->_R^Omega(1) gen_n__from:cons3_0(1) Induction Step: after(gen_0':s4_0(+(n6_0, 1)), gen_n__from:cons3_0(1)) ->_R^Omega(1) after(gen_0':s4_0(n6_0), activate(gen_n__from:cons3_0(0))) ->_R^Omega(1) after(gen_0':s4_0(n6_0), from) ->_R^Omega(1) after(gen_0':s4_0(n6_0), cons(n__from)) ->_IH gen_n__from:cons3_0(1) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (22) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: from -> cons(n__from) after(0', XS) -> XS after(s(N), cons(XS)) -> after(N, activate(XS)) from -> n__from activate(n__from) -> from activate(X) -> X Types: from :: n__from:cons cons :: n__from:cons -> n__from:cons n__from :: n__from:cons after :: 0':s -> n__from:cons -> n__from:cons 0' :: 0':s s :: 0':s -> 0':s activate :: n__from:cons -> n__from:cons hole_n__from:cons1_0 :: n__from:cons hole_0':s2_0 :: 0':s gen_n__from:cons3_0 :: Nat -> n__from:cons gen_0':s4_0 :: Nat -> 0':s Generator Equations: gen_n__from:cons3_0(0) <=> n__from gen_n__from:cons3_0(+(x, 1)) <=> cons(gen_n__from:cons3_0(x)) gen_0':s4_0(0) <=> 0' gen_0':s4_0(+(x, 1)) <=> s(gen_0':s4_0(x)) The following defined symbols remain to be analysed: after ---------------------------------------- (23) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (24) BOUNDS(n^1, INF)