/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), ?) proof of /export/starexec/sandbox/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (4) typed CpxTrs (5) OrderProof [LOWER BOUND(ID), 0 ms] (6) typed CpxTrs (7) RewriteLemmaProof [LOWER BOUND(ID), 480 ms] (8) BEST (9) proven lower bound (10) LowerBoundPropagationProof [FINISHED, 0 ms] (11) BOUNDS(n^1, INF) (12) typed CpxTrs (13) RewriteLemmaProof [LOWER BOUND(ID), 100 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 96 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 71 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 45 ms] (20) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: active(nats) -> mark(cons(0, incr(nats))) active(pairs) -> mark(cons(0, incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0) -> ok(0) proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) S is empty. Rewrite Strategy: FULL ---------------------------------------- (1) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (2) Obligation: The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) S is empty. Rewrite Strategy: FULL ---------------------------------------- (3) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (4) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok ---------------------------------------- (5) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: active, cons, incr, s, head, tail, proper, top They will be analysed ascendingly in the following order: cons < active incr < active s < active head < active tail < active active < top cons < proper incr < proper s < proper head < proper tail < proper proper < top ---------------------------------------- (6) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: cons, active, incr, s, head, tail, proper, top They will be analysed ascendingly in the following order: cons < active incr < active s < active head < active tail < active active < top cons < proper incr < proper s < proper head < proper tail < proper proper < top ---------------------------------------- (7) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) -> *4_0, rt in Omega(n5_0) Induction Base: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, 0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) Induction Step: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, +(n5_0, 1))), gen_nats:0':mark:pairs:odds:ok3_0(b)) ->_R^Omega(1) mark(cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b))) ->_IH mark(*4_0) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (8) Complex Obligation (BEST) ---------------------------------------- (9) Obligation: Proved the lower bound n^1 for the following obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: cons, active, incr, s, head, tail, proper, top They will be analysed ascendingly in the following order: cons < active incr < active s < active head < active tail < active active < top cons < proper incr < proper s < proper head < proper tail < proper proper < top ---------------------------------------- (10) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (11) BOUNDS(n^1, INF) ---------------------------------------- (12) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Lemmas: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) -> *4_0, rt in Omega(n5_0) Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: incr, active, s, head, tail, proper, top They will be analysed ascendingly in the following order: incr < active s < active head < active tail < active active < top incr < proper s < proper head < proper tail < proper proper < top ---------------------------------------- (13) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n888_0))) -> *4_0, rt in Omega(n888_0) Induction Base: incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, 0))) Induction Step: incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, +(n888_0, 1)))) ->_R^Omega(1) mark(incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n888_0)))) ->_IH mark(*4_0) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (14) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Lemmas: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) -> *4_0, rt in Omega(n5_0) incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n888_0))) -> *4_0, rt in Omega(n888_0) Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: s, active, head, tail, proper, top They will be analysed ascendingly in the following order: s < active head < active tail < active active < top s < proper head < proper tail < proper proper < top ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n1401_0))) -> *4_0, rt in Omega(n1401_0) Induction Base: s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, 0))) Induction Step: s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, +(n1401_0, 1)))) ->_R^Omega(1) mark(s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n1401_0)))) ->_IH mark(*4_0) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Lemmas: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) -> *4_0, rt in Omega(n5_0) incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n888_0))) -> *4_0, rt in Omega(n888_0) s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n1401_0))) -> *4_0, rt in Omega(n1401_0) Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: head, active, tail, proper, top They will be analysed ascendingly in the following order: head < active tail < active active < top head < proper tail < proper proper < top ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: head(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2015_0))) -> *4_0, rt in Omega(n2015_0) Induction Base: head(gen_nats:0':mark:pairs:odds:ok3_0(+(1, 0))) Induction Step: head(gen_nats:0':mark:pairs:odds:ok3_0(+(1, +(n2015_0, 1)))) ->_R^Omega(1) mark(head(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2015_0)))) ->_IH mark(*4_0) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (18) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Lemmas: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) -> *4_0, rt in Omega(n5_0) incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n888_0))) -> *4_0, rt in Omega(n888_0) s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n1401_0))) -> *4_0, rt in Omega(n1401_0) head(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2015_0))) -> *4_0, rt in Omega(n2015_0) Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: tail, active, proper, top They will be analysed ascendingly in the following order: tail < active active < top tail < proper proper < top ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: tail(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2730_0))) -> *4_0, rt in Omega(n2730_0) Induction Base: tail(gen_nats:0':mark:pairs:odds:ok3_0(+(1, 0))) Induction Step: tail(gen_nats:0':mark:pairs:odds:ok3_0(+(1, +(n2730_0, 1)))) ->_R^Omega(1) mark(tail(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2730_0)))) ->_IH mark(*4_0) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (20) Obligation: TRS: Rules: active(nats) -> mark(cons(0', incr(nats))) active(pairs) -> mark(cons(0', incr(odds))) active(odds) -> mark(incr(pairs)) active(incr(cons(X, XS))) -> mark(cons(s(X), incr(XS))) active(head(cons(X, XS))) -> mark(X) active(tail(cons(X, XS))) -> mark(XS) active(cons(X1, X2)) -> cons(active(X1), X2) active(incr(X)) -> incr(active(X)) active(s(X)) -> s(active(X)) active(head(X)) -> head(active(X)) active(tail(X)) -> tail(active(X)) cons(mark(X1), X2) -> mark(cons(X1, X2)) incr(mark(X)) -> mark(incr(X)) s(mark(X)) -> mark(s(X)) head(mark(X)) -> mark(head(X)) tail(mark(X)) -> mark(tail(X)) proper(nats) -> ok(nats) proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) proper(0') -> ok(0') proper(incr(X)) -> incr(proper(X)) proper(pairs) -> ok(pairs) proper(odds) -> ok(odds) proper(s(X)) -> s(proper(X)) proper(head(X)) -> head(proper(X)) proper(tail(X)) -> tail(proper(X)) cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) incr(ok(X)) -> ok(incr(X)) s(ok(X)) -> ok(s(X)) head(ok(X)) -> ok(head(X)) tail(ok(X)) -> ok(tail(X)) top(mark(X)) -> top(proper(X)) top(ok(X)) -> top(active(X)) Types: active :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok nats :: nats:0':mark:pairs:odds:ok mark :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok cons :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok 0' :: nats:0':mark:pairs:odds:ok incr :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok pairs :: nats:0':mark:pairs:odds:ok odds :: nats:0':mark:pairs:odds:ok s :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok head :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok tail :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok proper :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok ok :: nats:0':mark:pairs:odds:ok -> nats:0':mark:pairs:odds:ok top :: nats:0':mark:pairs:odds:ok -> top hole_nats:0':mark:pairs:odds:ok1_0 :: nats:0':mark:pairs:odds:ok hole_top2_0 :: top gen_nats:0':mark:pairs:odds:ok3_0 :: Nat -> nats:0':mark:pairs:odds:ok Lemmas: cons(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n5_0)), gen_nats:0':mark:pairs:odds:ok3_0(b)) -> *4_0, rt in Omega(n5_0) incr(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n888_0))) -> *4_0, rt in Omega(n888_0) s(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n1401_0))) -> *4_0, rt in Omega(n1401_0) head(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2015_0))) -> *4_0, rt in Omega(n2015_0) tail(gen_nats:0':mark:pairs:odds:ok3_0(+(1, n2730_0))) -> *4_0, rt in Omega(n2730_0) Generator Equations: gen_nats:0':mark:pairs:odds:ok3_0(0) <=> nats gen_nats:0':mark:pairs:odds:ok3_0(+(x, 1)) <=> mark(gen_nats:0':mark:pairs:odds:ok3_0(x)) The following defined symbols remain to be analysed: active, proper, top They will be analysed ascendingly in the following order: active < top proper < top