/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), ?) proof of /export/starexec/sandbox2/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) SlicingProof [LOWER BOUND(ID), 0 ms] (4) CpxTRS (5) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (6) typed CpxTrs (7) OrderProof [LOWER BOUND(ID), 0 ms] (8) typed CpxTrs (9) RewriteLemmaProof [LOWER BOUND(ID), 334 ms] (10) BEST (11) proven lower bound (12) LowerBoundPropagationProof [FINISHED, 0 ms] (13) BOUNDS(n^1, INF) (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 45 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 0 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 2 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 17 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 2156 ms] (24) 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: fstsplit(0, x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0, x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0, m) -> true leq(s(n), 0) -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0 length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(self, nil), store)))) if2(store, m, false) -> process(app(map_f(self, nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(self, nil), store)), m) 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: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(self, nil), store)))) if2(store, m, false) -> process(app(map_f(self, nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(self, nil), store)), m) S is empty. Rewrite Strategy: FULL ---------------------------------------- (3) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: cons/0 map_f/0 f/0 f/1 ---------------------------------------- (4) 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: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) S is empty. Rewrite Strategy: FULL ---------------------------------------- (5) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (6) Obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s ---------------------------------------- (7) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: fstsplit, sndsplit, leq, length, app, map_f, process They will be analysed ascendingly in the following order: fstsplit < process sndsplit < process leq < process length < process app < map_f app < process map_f < process ---------------------------------------- (8) Obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: fstsplit, sndsplit, leq, length, app, map_f, process They will be analysed ascendingly in the following order: fstsplit < process sndsplit < process leq < process length < process app < map_f app < process map_f < process ---------------------------------------- (9) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) Induction Base: fstsplit(gen_0':s6_0(0), gen_nil:cons:f5_0(0)) ->_R^Omega(1) nil Induction Step: fstsplit(gen_0':s6_0(+(n8_0, 1)), gen_nil:cons:f5_0(+(n8_0, 1))) ->_R^Omega(1) cons(fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0))) ->_IH cons(gen_nil:cons:f5_0(c9_0)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (10) Complex Obligation (BEST) ---------------------------------------- (11) Obligation: Proved the lower bound n^1 for the following obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: fstsplit, sndsplit, leq, length, app, map_f, process They will be analysed ascendingly in the following order: fstsplit < process sndsplit < process leq < process length < process app < map_f app < process map_f < process ---------------------------------------- (12) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (13) BOUNDS(n^1, INF) ---------------------------------------- (14) Obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Lemmas: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: sndsplit, leq, length, app, map_f, process They will be analysed ascendingly in the following order: sndsplit < process leq < process length < process app < map_f app < process map_f < process ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) -> gen_nil:cons:f5_0(0), rt in Omega(1 + n502_0) Induction Base: sndsplit(gen_0':s6_0(0), gen_nil:cons:f5_0(0)) ->_R^Omega(1) gen_nil:cons:f5_0(0) Induction Step: sndsplit(gen_0':s6_0(+(n502_0, 1)), gen_nil:cons:f5_0(+(n502_0, 1))) ->_R^Omega(1) sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) ->_IH gen_nil:cons:f5_0(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: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Lemmas: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) -> gen_nil:cons:f5_0(0), rt in Omega(1 + n502_0) Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: leq, length, app, map_f, process They will be analysed ascendingly in the following order: leq < process length < process app < map_f app < process map_f < process ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: leq(gen_0':s6_0(n1054_0), gen_0':s6_0(n1054_0)) -> true, rt in Omega(1 + n1054_0) Induction Base: leq(gen_0':s6_0(0), gen_0':s6_0(0)) ->_R^Omega(1) true Induction Step: leq(gen_0':s6_0(+(n1054_0, 1)), gen_0':s6_0(+(n1054_0, 1))) ->_R^Omega(1) leq(gen_0':s6_0(n1054_0), gen_0':s6_0(n1054_0)) ->_IH true We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (18) Obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Lemmas: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) -> gen_nil:cons:f5_0(0), rt in Omega(1 + n502_0) leq(gen_0':s6_0(n1054_0), gen_0':s6_0(n1054_0)) -> true, rt in Omega(1 + n1054_0) Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: length, app, map_f, process They will be analysed ascendingly in the following order: length < process app < map_f app < process map_f < process ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: length(gen_nil:cons:f5_0(n1389_0)) -> gen_0':s6_0(n1389_0), rt in Omega(1 + n1389_0) Induction Base: length(gen_nil:cons:f5_0(0)) ->_R^Omega(1) 0' Induction Step: length(gen_nil:cons:f5_0(+(n1389_0, 1))) ->_R^Omega(1) s(length(gen_nil:cons:f5_0(n1389_0))) ->_IH s(gen_0':s6_0(c1390_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: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Lemmas: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) -> gen_nil:cons:f5_0(0), rt in Omega(1 + n502_0) leq(gen_0':s6_0(n1054_0), gen_0':s6_0(n1054_0)) -> true, rt in Omega(1 + n1054_0) length(gen_nil:cons:f5_0(n1389_0)) -> gen_0':s6_0(n1389_0), rt in Omega(1 + n1389_0) Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: app, map_f, process They will be analysed ascendingly in the following order: app < map_f app < process map_f < process ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: app(gen_nil:cons:f5_0(n1677_0), gen_nil:cons:f5_0(b)) -> gen_nil:cons:f5_0(+(n1677_0, b)), rt in Omega(1 + n1677_0) Induction Base: app(gen_nil:cons:f5_0(0), gen_nil:cons:f5_0(b)) ->_R^Omega(1) gen_nil:cons:f5_0(b) Induction Step: app(gen_nil:cons:f5_0(+(n1677_0, 1)), gen_nil:cons:f5_0(b)) ->_R^Omega(1) cons(app(gen_nil:cons:f5_0(n1677_0), gen_nil:cons:f5_0(b))) ->_IH cons(gen_nil:cons:f5_0(+(b, c1678_0))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (22) Obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Lemmas: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) -> gen_nil:cons:f5_0(0), rt in Omega(1 + n502_0) leq(gen_0':s6_0(n1054_0), gen_0':s6_0(n1054_0)) -> true, rt in Omega(1 + n1054_0) length(gen_nil:cons:f5_0(n1389_0)) -> gen_0':s6_0(n1389_0), rt in Omega(1 + n1389_0) app(gen_nil:cons:f5_0(n1677_0), gen_nil:cons:f5_0(b)) -> gen_nil:cons:f5_0(+(n1677_0, b)), rt in Omega(1 + n1677_0) Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: map_f, process They will be analysed ascendingly in the following order: map_f < process ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: map_f(gen_nil:cons:f5_0(+(1, n2574_0))) -> *7_0, rt in Omega(n2574_0) Induction Base: map_f(gen_nil:cons:f5_0(+(1, 0))) Induction Step: map_f(gen_nil:cons:f5_0(+(1, +(n2574_0, 1)))) ->_R^Omega(1) app(f, map_f(gen_nil:cons:f5_0(+(1, n2574_0)))) ->_IH app(f, *7_0) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (24) Obligation: TRS: Rules: fstsplit(0', x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(t)) -> cons(fstsplit(n, t)) sndsplit(0', x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(t)) -> false leq(0', m) -> true leq(s(n), 0') -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0' length(cons(t)) -> s(length(t)) app(nil, x) -> x app(cons(t), x) -> cons(app(t, x)) map_f(nil) -> nil map_f(cons(t)) -> app(f, map_f(t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(nil), store)))) if2(store, m, false) -> process(app(map_f(nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(nil), store)), m) Types: fstsplit :: 0':s -> nil:cons:f -> nil:cons:f 0' :: 0':s nil :: nil:cons:f s :: 0':s -> 0':s cons :: nil:cons:f -> nil:cons:f sndsplit :: 0':s -> nil:cons:f -> nil:cons:f empty :: nil:cons:f -> true:false true :: true:false false :: true:false leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s app :: nil:cons:f -> nil:cons:f -> nil:cons:f map_f :: nil:cons:f -> nil:cons:f f :: nil:cons:f process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_nil:cons:f1_0 :: nil:cons:f hole_0':s2_0 :: 0':s hole_true:false3_0 :: true:false hole_process:if1:if2:if34_0 :: process:if1:if2:if3 gen_nil:cons:f5_0 :: Nat -> nil:cons:f gen_0':s6_0 :: Nat -> 0':s Lemmas: fstsplit(gen_0':s6_0(n8_0), gen_nil:cons:f5_0(n8_0)) -> gen_nil:cons:f5_0(n8_0), rt in Omega(1 + n8_0) sndsplit(gen_0':s6_0(n502_0), gen_nil:cons:f5_0(n502_0)) -> gen_nil:cons:f5_0(0), rt in Omega(1 + n502_0) leq(gen_0':s6_0(n1054_0), gen_0':s6_0(n1054_0)) -> true, rt in Omega(1 + n1054_0) length(gen_nil:cons:f5_0(n1389_0)) -> gen_0':s6_0(n1389_0), rt in Omega(1 + n1389_0) app(gen_nil:cons:f5_0(n1677_0), gen_nil:cons:f5_0(b)) -> gen_nil:cons:f5_0(+(n1677_0, b)), rt in Omega(1 + n1677_0) map_f(gen_nil:cons:f5_0(+(1, n2574_0))) -> *7_0, rt in Omega(n2574_0) Generator Equations: gen_nil:cons:f5_0(0) <=> nil gen_nil:cons:f5_0(+(x, 1)) <=> cons(gen_nil:cons:f5_0(x)) gen_0':s6_0(0) <=> 0' gen_0':s6_0(+(x, 1)) <=> s(gen_0':s6_0(x)) The following defined symbols remain to be analysed: process