38.10/11.00 WORST_CASE(Omega(n^1), O(n^1)) 38.34/11.02 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 38.34/11.02 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 38.34/11.02 38.34/11.02 38.34/11.02 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). 38.34/11.02 38.34/11.02 (0) CpxTRS 38.34/11.02 (1) NestedDefinedSymbolProof [UPPER BOUND(ID), 0 ms] 38.34/11.02 (2) CpxTRS 38.34/11.02 (3) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] 38.34/11.02 (4) CpxTRS 38.34/11.02 (5) CpxTrsMatchBoundsTAProof [FINISHED, 342 ms] 38.34/11.02 (6) BOUNDS(1, n^1) 38.34/11.02 (7) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] 38.34/11.02 (8) CpxTRS 38.34/11.02 (9) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 38.34/11.02 (10) typed CpxTrs 38.34/11.02 (11) OrderProof [LOWER BOUND(ID), 0 ms] 38.34/11.02 (12) typed CpxTrs 38.34/11.02 (13) RewriteLemmaProof [LOWER BOUND(ID), 488 ms] 38.34/11.02 (14) BEST 38.34/11.02 (15) proven lower bound 38.34/11.02 (16) LowerBoundPropagationProof [FINISHED, 0 ms] 38.34/11.02 (17) BOUNDS(n^1, INF) 38.34/11.02 (18) typed CpxTrs 38.34/11.02 (19) RewriteLemmaProof [LOWER BOUND(ID), 118 ms] 38.34/11.02 (20) typed CpxTrs 38.34/11.02 (21) RewriteLemmaProof [LOWER BOUND(ID), 65 ms] 38.34/11.02 (22) typed CpxTrs 38.34/11.02 (23) RewriteLemmaProof [LOWER BOUND(ID), 62 ms] 38.34/11.02 (24) typed CpxTrs 38.34/11.02 (25) RewriteLemmaProof [LOWER BOUND(ID), 125 ms] 38.34/11.02 (26) typed CpxTrs 38.34/11.02 (27) RewriteLemmaProof [LOWER BOUND(ID), 94 ms] 38.34/11.02 (28) typed CpxTrs 38.34/11.02 (29) RewriteLemmaProof [LOWER BOUND(ID), 92 ms] 38.34/11.02 (30) typed CpxTrs 38.34/11.02 (31) RewriteLemmaProof [LOWER BOUND(ID), 70 ms] 38.34/11.02 (32) typed CpxTrs 38.34/11.02 (33) RewriteLemmaProof [LOWER BOUND(ID), 114 ms] 38.34/11.02 (34) typed CpxTrs 38.34/11.02 (35) RewriteLemmaProof [LOWER BOUND(ID), 123 ms] 38.34/11.02 (36) typed CpxTrs 38.34/11.02 (37) RewriteLemmaProof [LOWER BOUND(ID), 135 ms] 38.34/11.02 (38) typed CpxTrs 38.34/11.02 (39) RewriteLemmaProof [LOWER BOUND(ID), 134 ms] 38.34/11.02 (40) typed CpxTrs 38.34/11.02 (41) RewriteLemmaProof [LOWER BOUND(ID), 159 ms] 38.34/11.02 (42) typed CpxTrs 38.34/11.02 38.34/11.02 38.34/11.02 ---------------------------------------- 38.34/11.02 38.34/11.02 (0) 38.34/11.02 Obligation: 38.34/11.02 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). 38.34/11.02 38.34/11.02 38.34/11.02 The TRS R consists of the following rules: 38.34/11.02 38.34/11.02 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.34/11.02 active(fst(pair(XS, YS))) -> mark(XS) 38.34/11.02 active(snd(pair(XS, YS))) -> mark(YS) 38.34/11.02 active(splitAt(0, XS)) -> mark(pair(nil, XS)) 38.34/11.02 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.34/11.02 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.34/11.02 active(head(cons(N, XS))) -> mark(N) 38.34/11.02 active(tail(cons(N, XS))) -> mark(XS) 38.34/11.02 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.34/11.02 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.34/11.02 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.34/11.02 active(natsFrom(X)) -> natsFrom(active(X)) 38.34/11.02 active(cons(X1, X2)) -> cons(active(X1), X2) 38.34/11.02 active(s(X)) -> s(active(X)) 38.34/11.02 active(fst(X)) -> fst(active(X)) 38.34/11.02 active(pair(X1, X2)) -> pair(active(X1), X2) 38.34/11.02 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.34/11.02 active(snd(X)) -> snd(active(X)) 38.34/11.02 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.34/11.02 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.34/11.02 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.34/11.02 active(head(X)) -> head(active(X)) 38.34/11.02 active(tail(X)) -> tail(active(X)) 38.34/11.02 active(sel(X1, X2)) -> sel(active(X1), X2) 38.34/11.02 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.34/11.02 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.34/11.02 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.34/11.02 active(take(X1, X2)) -> take(active(X1), X2) 38.34/11.02 active(take(X1, X2)) -> take(X1, active(X2)) 38.34/11.02 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.34/11.02 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.34/11.02 s(mark(X)) -> mark(s(X)) 38.34/11.02 fst(mark(X)) -> mark(fst(X)) 38.34/11.02 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.34/11.02 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.34/11.02 snd(mark(X)) -> mark(snd(X)) 38.34/11.02 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.34/11.02 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.34/11.02 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.34/11.02 head(mark(X)) -> mark(head(X)) 38.34/11.02 tail(mark(X)) -> mark(tail(X)) 38.34/11.02 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.34/11.02 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.34/11.02 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.34/11.02 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.34/11.02 take(mark(X1), X2) -> mark(take(X1, X2)) 38.34/11.02 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.34/11.02 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.34/11.02 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.34/11.02 proper(s(X)) -> s(proper(X)) 38.34/11.02 proper(fst(X)) -> fst(proper(X)) 38.34/11.02 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.34/11.02 proper(snd(X)) -> snd(proper(X)) 38.34/11.02 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.34/11.02 proper(0) -> ok(0) 38.34/11.02 proper(nil) -> ok(nil) 38.34/11.02 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.34/11.02 proper(head(X)) -> head(proper(X)) 38.34/11.02 proper(tail(X)) -> tail(proper(X)) 38.34/11.02 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.34/11.02 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.34/11.02 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.34/11.02 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.34/11.02 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.34/11.02 s(ok(X)) -> ok(s(X)) 38.34/11.02 fst(ok(X)) -> ok(fst(X)) 38.34/11.02 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.34/11.02 snd(ok(X)) -> ok(snd(X)) 38.34/11.02 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.34/11.02 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.34/11.02 head(ok(X)) -> ok(head(X)) 38.34/11.02 tail(ok(X)) -> ok(tail(X)) 38.34/11.02 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.34/11.02 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.34/11.02 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.34/11.02 top(mark(X)) -> top(proper(X)) 38.34/11.02 top(ok(X)) -> top(active(X)) 38.34/11.02 38.34/11.02 S is empty. 38.34/11.02 Rewrite Strategy: FULL 38.34/11.02 ---------------------------------------- 38.34/11.02 38.34/11.02 (1) NestedDefinedSymbolProof (UPPER BOUND(ID)) 38.34/11.02 The following defined symbols can occur below the 0th argument of top: proper, active 38.34/11.02 The following defined symbols can occur below the 0th argument of proper: proper, active 38.34/11.02 The following defined symbols can occur below the 0th argument of active: proper, active 38.34/11.02 38.34/11.02 Hence, the left-hand sides of the following rules are not basic-reachable and can be removed: 38.34/11.02 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.34/11.02 active(fst(pair(XS, YS))) -> mark(XS) 38.34/11.02 active(snd(pair(XS, YS))) -> mark(YS) 38.34/11.02 active(splitAt(0, XS)) -> mark(pair(nil, XS)) 38.34/11.02 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.34/11.02 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.34/11.02 active(head(cons(N, XS))) -> mark(N) 38.34/11.02 active(tail(cons(N, XS))) -> mark(XS) 38.34/11.02 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.34/11.02 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.34/11.02 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.34/11.02 active(natsFrom(X)) -> natsFrom(active(X)) 38.34/11.02 active(cons(X1, X2)) -> cons(active(X1), X2) 38.34/11.02 active(s(X)) -> s(active(X)) 38.34/11.02 active(fst(X)) -> fst(active(X)) 38.34/11.02 active(pair(X1, X2)) -> pair(active(X1), X2) 38.34/11.02 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.34/11.02 active(snd(X)) -> snd(active(X)) 38.34/11.02 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.34/11.02 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.34/11.02 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.34/11.02 active(head(X)) -> head(active(X)) 38.34/11.02 active(tail(X)) -> tail(active(X)) 38.34/11.02 active(sel(X1, X2)) -> sel(active(X1), X2) 38.34/11.02 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.34/11.02 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.34/11.02 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.34/11.02 active(take(X1, X2)) -> take(active(X1), X2) 38.34/11.02 active(take(X1, X2)) -> take(X1, active(X2)) 38.34/11.02 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.34/11.02 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.34/11.02 proper(s(X)) -> s(proper(X)) 38.34/11.02 proper(fst(X)) -> fst(proper(X)) 38.34/11.02 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.34/11.02 proper(snd(X)) -> snd(proper(X)) 38.34/11.02 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.34/11.02 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.34/11.02 proper(head(X)) -> head(proper(X)) 38.34/11.02 proper(tail(X)) -> tail(proper(X)) 38.34/11.02 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.34/11.02 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.34/11.02 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.34/11.02 38.34/11.02 ---------------------------------------- 38.34/11.02 38.34/11.02 (2) 38.34/11.02 Obligation: 38.34/11.02 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(1, n^1). 38.34/11.04 38.34/11.04 38.34/11.04 The TRS R consists of the following rules: 38.34/11.04 38.34/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.34/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.34/11.04 s(mark(X)) -> mark(s(X)) 38.34/11.04 fst(mark(X)) -> mark(fst(X)) 38.34/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.34/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.34/11.04 snd(mark(X)) -> mark(snd(X)) 38.34/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.34/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.34/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.34/11.04 head(mark(X)) -> mark(head(X)) 38.34/11.04 tail(mark(X)) -> mark(tail(X)) 38.34/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.34/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.34/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.34/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.34/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.34/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.34/11.04 proper(0) -> ok(0) 38.34/11.04 proper(nil) -> ok(nil) 38.34/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.34/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.34/11.04 s(ok(X)) -> ok(s(X)) 38.34/11.04 fst(ok(X)) -> ok(fst(X)) 38.34/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.34/11.04 snd(ok(X)) -> ok(snd(X)) 38.34/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.34/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.34/11.04 head(ok(X)) -> ok(head(X)) 38.34/11.04 tail(ok(X)) -> ok(tail(X)) 38.34/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.34/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.34/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.34/11.04 top(mark(X)) -> top(proper(X)) 38.34/11.04 top(ok(X)) -> top(active(X)) 38.34/11.04 38.34/11.04 S is empty. 38.34/11.04 Rewrite Strategy: FULL 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (3) RelTrsToTrsProof (UPPER BOUND(ID)) 38.34/11.04 transformed relative TRS to TRS 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (4) 38.34/11.04 Obligation: 38.34/11.04 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(1, n^1). 38.34/11.04 38.34/11.04 38.34/11.04 The TRS R consists of the following rules: 38.34/11.04 38.34/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.34/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.34/11.04 s(mark(X)) -> mark(s(X)) 38.34/11.04 fst(mark(X)) -> mark(fst(X)) 38.34/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.34/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.34/11.04 snd(mark(X)) -> mark(snd(X)) 38.34/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.34/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.34/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.34/11.04 head(mark(X)) -> mark(head(X)) 38.34/11.04 tail(mark(X)) -> mark(tail(X)) 38.34/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.34/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.34/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.34/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.34/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.34/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.34/11.04 proper(0) -> ok(0) 38.34/11.04 proper(nil) -> ok(nil) 38.34/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.34/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.34/11.04 s(ok(X)) -> ok(s(X)) 38.34/11.04 fst(ok(X)) -> ok(fst(X)) 38.34/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.34/11.04 snd(ok(X)) -> ok(snd(X)) 38.34/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.34/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.34/11.04 head(ok(X)) -> ok(head(X)) 38.34/11.04 tail(ok(X)) -> ok(tail(X)) 38.34/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.34/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.34/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.34/11.04 top(mark(X)) -> top(proper(X)) 38.34/11.04 top(ok(X)) -> top(active(X)) 38.34/11.04 38.34/11.04 S is empty. 38.34/11.04 Rewrite Strategy: FULL 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (5) CpxTrsMatchBoundsTAProof (FINISHED) 38.34/11.04 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 2. 38.34/11.04 38.34/11.04 The compatible tree automaton used to show the Match-Boundedness (for constructor-based start-terms) is represented by: 38.34/11.04 final states : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 38.34/11.04 transitions: 38.34/11.04 mark0(0) -> 0 38.34/11.04 00() -> 0 38.34/11.04 ok0(0) -> 0 38.34/11.04 nil0() -> 0 38.34/11.04 active0(0) -> 0 38.34/11.04 natsFrom0(0) -> 1 38.34/11.04 cons0(0, 0) -> 2 38.34/11.04 s0(0) -> 3 38.34/11.04 fst0(0) -> 4 38.34/11.04 pair0(0, 0) -> 5 38.34/11.04 snd0(0) -> 6 38.34/11.04 splitAt0(0, 0) -> 7 38.34/11.04 u0(0, 0, 0, 0) -> 8 38.34/11.04 head0(0) -> 9 38.34/11.04 tail0(0) -> 10 38.34/11.04 sel0(0, 0) -> 11 38.34/11.04 afterNth0(0, 0) -> 12 38.34/11.04 take0(0, 0) -> 13 38.34/11.04 proper0(0) -> 14 38.34/11.04 top0(0) -> 15 38.34/11.04 natsFrom1(0) -> 16 38.34/11.04 mark1(16) -> 1 38.34/11.04 cons1(0, 0) -> 17 38.34/11.04 mark1(17) -> 2 38.34/11.04 s1(0) -> 18 38.34/11.04 mark1(18) -> 3 38.34/11.04 fst1(0) -> 19 38.34/11.04 mark1(19) -> 4 38.34/11.04 pair1(0, 0) -> 20 38.34/11.04 mark1(20) -> 5 38.34/11.04 snd1(0) -> 21 38.34/11.04 mark1(21) -> 6 38.34/11.04 splitAt1(0, 0) -> 22 38.34/11.04 mark1(22) -> 7 38.34/11.04 u1(0, 0, 0, 0) -> 23 38.34/11.04 mark1(23) -> 8 38.34/11.04 head1(0) -> 24 38.34/11.04 mark1(24) -> 9 38.34/11.04 tail1(0) -> 25 38.34/11.04 mark1(25) -> 10 38.34/11.04 sel1(0, 0) -> 26 38.34/11.04 mark1(26) -> 11 38.34/11.04 afterNth1(0, 0) -> 27 38.34/11.04 mark1(27) -> 12 38.34/11.04 take1(0, 0) -> 28 38.34/11.04 mark1(28) -> 13 38.34/11.04 01() -> 29 38.34/11.04 ok1(29) -> 14 38.34/11.04 nil1() -> 30 38.34/11.04 ok1(30) -> 14 38.34/11.04 natsFrom1(0) -> 31 38.34/11.04 ok1(31) -> 1 38.34/11.04 cons1(0, 0) -> 32 38.34/11.04 ok1(32) -> 2 38.34/11.04 s1(0) -> 33 38.34/11.04 ok1(33) -> 3 38.34/11.04 fst1(0) -> 34 38.34/11.04 ok1(34) -> 4 38.34/11.04 pair1(0, 0) -> 35 38.34/11.04 ok1(35) -> 5 38.34/11.04 snd1(0) -> 36 38.34/11.04 ok1(36) -> 6 38.34/11.04 splitAt1(0, 0) -> 37 38.34/11.04 ok1(37) -> 7 38.34/11.04 u1(0, 0, 0, 0) -> 38 38.34/11.04 ok1(38) -> 8 38.34/11.04 head1(0) -> 39 38.34/11.04 ok1(39) -> 9 38.34/11.04 tail1(0) -> 40 38.34/11.04 ok1(40) -> 10 38.34/11.04 sel1(0, 0) -> 41 38.34/11.04 ok1(41) -> 11 38.34/11.04 afterNth1(0, 0) -> 42 38.34/11.04 ok1(42) -> 12 38.34/11.04 take1(0, 0) -> 43 38.34/11.04 ok1(43) -> 13 38.34/11.04 proper1(0) -> 44 38.34/11.04 top1(44) -> 15 38.34/11.04 active1(0) -> 45 38.34/11.04 top1(45) -> 15 38.34/11.04 mark1(16) -> 16 38.34/11.04 mark1(16) -> 31 38.34/11.04 mark1(17) -> 17 38.34/11.04 mark1(17) -> 32 38.34/11.04 mark1(18) -> 18 38.34/11.04 mark1(18) -> 33 38.34/11.04 mark1(19) -> 19 38.34/11.04 mark1(19) -> 34 38.34/11.04 mark1(20) -> 20 38.34/11.04 mark1(20) -> 35 38.34/11.04 mark1(21) -> 21 38.34/11.04 mark1(21) -> 36 38.34/11.04 mark1(22) -> 22 38.34/11.04 mark1(22) -> 37 38.34/11.04 mark1(23) -> 23 38.34/11.04 mark1(23) -> 38 38.34/11.04 mark1(24) -> 24 38.34/11.04 mark1(24) -> 39 38.34/11.04 mark1(25) -> 25 38.34/11.04 mark1(25) -> 40 38.34/11.04 mark1(26) -> 26 38.34/11.04 mark1(26) -> 41 38.34/11.04 mark1(27) -> 27 38.34/11.04 mark1(27) -> 42 38.34/11.04 mark1(28) -> 28 38.34/11.04 mark1(28) -> 43 38.34/11.04 ok1(29) -> 44 38.34/11.04 ok1(30) -> 44 38.34/11.04 ok1(31) -> 16 38.34/11.04 ok1(31) -> 31 38.34/11.04 ok1(32) -> 17 38.34/11.04 ok1(32) -> 32 38.34/11.04 ok1(33) -> 18 38.34/11.04 ok1(33) -> 33 38.34/11.04 ok1(34) -> 19 38.34/11.04 ok1(34) -> 34 38.34/11.04 ok1(35) -> 20 38.34/11.04 ok1(35) -> 35 38.34/11.04 ok1(36) -> 21 38.34/11.04 ok1(36) -> 36 38.34/11.04 ok1(37) -> 22 38.34/11.04 ok1(37) -> 37 38.34/11.04 ok1(38) -> 23 38.34/11.04 ok1(38) -> 38 38.34/11.04 ok1(39) -> 24 38.34/11.04 ok1(39) -> 39 38.34/11.04 ok1(40) -> 25 38.34/11.04 ok1(40) -> 40 38.34/11.04 ok1(41) -> 26 38.34/11.04 ok1(41) -> 41 38.34/11.04 ok1(42) -> 27 38.34/11.04 ok1(42) -> 42 38.34/11.04 ok1(43) -> 28 38.34/11.04 ok1(43) -> 43 38.34/11.04 active2(29) -> 46 38.34/11.04 top2(46) -> 15 38.34/11.04 active2(30) -> 46 38.34/11.04 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (6) 38.34/11.04 BOUNDS(1, n^1) 38.34/11.04 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (7) RenamingProof (BOTH BOUNDS(ID, ID)) 38.34/11.04 Renamed function symbols to avoid clashes with predefined symbol. 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (8) 38.34/11.04 Obligation: 38.34/11.04 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 38.34/11.04 38.34/11.04 38.34/11.04 The TRS R consists of the following rules: 38.34/11.04 38.34/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.34/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.34/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.34/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.34/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.34/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.34/11.04 active(head(cons(N, XS))) -> mark(N) 38.34/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.34/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.34/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.34/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.34/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.34/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.34/11.04 active(s(X)) -> s(active(X)) 38.34/11.04 active(fst(X)) -> fst(active(X)) 38.34/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.34/11.04 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.34/11.04 active(snd(X)) -> snd(active(X)) 38.34/11.04 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.34/11.04 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.34/11.04 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.34/11.04 active(head(X)) -> head(active(X)) 38.34/11.04 active(tail(X)) -> tail(active(X)) 38.34/11.04 active(sel(X1, X2)) -> sel(active(X1), X2) 38.34/11.04 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.34/11.04 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.34/11.04 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.34/11.04 active(take(X1, X2)) -> take(active(X1), X2) 38.34/11.04 active(take(X1, X2)) -> take(X1, active(X2)) 38.34/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.34/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.34/11.04 s(mark(X)) -> mark(s(X)) 38.34/11.04 fst(mark(X)) -> mark(fst(X)) 38.34/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.34/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.34/11.04 snd(mark(X)) -> mark(snd(X)) 38.34/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.34/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.34/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.34/11.04 head(mark(X)) -> mark(head(X)) 38.34/11.04 tail(mark(X)) -> mark(tail(X)) 38.34/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.34/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.34/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.34/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.34/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.34/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.34/11.04 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.34/11.04 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.34/11.04 proper(s(X)) -> s(proper(X)) 38.34/11.04 proper(fst(X)) -> fst(proper(X)) 38.34/11.04 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.34/11.04 proper(snd(X)) -> snd(proper(X)) 38.34/11.04 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.34/11.04 proper(0') -> ok(0') 38.34/11.04 proper(nil) -> ok(nil) 38.34/11.04 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.34/11.04 proper(head(X)) -> head(proper(X)) 38.34/11.04 proper(tail(X)) -> tail(proper(X)) 38.34/11.04 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.34/11.04 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.34/11.04 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.34/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.34/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.34/11.04 s(ok(X)) -> ok(s(X)) 38.34/11.04 fst(ok(X)) -> ok(fst(X)) 38.34/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.34/11.04 snd(ok(X)) -> ok(snd(X)) 38.34/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.34/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.34/11.04 head(ok(X)) -> ok(head(X)) 38.34/11.04 tail(ok(X)) -> ok(tail(X)) 38.34/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.34/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.34/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.34/11.04 top(mark(X)) -> top(proper(X)) 38.34/11.04 top(ok(X)) -> top(active(X)) 38.34/11.04 38.34/11.04 S is empty. 38.34/11.04 Rewrite Strategy: FULL 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (9) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 38.34/11.04 Infered types. 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (10) 38.34/11.04 Obligation: 38.34/11.04 TRS: 38.34/11.04 Rules: 38.34/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.34/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.34/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.34/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.34/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.34/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.34/11.04 active(head(cons(N, XS))) -> mark(N) 38.34/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.34/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.34/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.34/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.34/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.34/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.34/11.04 active(s(X)) -> s(active(X)) 38.34/11.04 active(fst(X)) -> fst(active(X)) 38.34/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.34/11.04 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.34/11.04 active(snd(X)) -> snd(active(X)) 38.34/11.04 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.34/11.04 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.34/11.04 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.34/11.04 active(head(X)) -> head(active(X)) 38.34/11.04 active(tail(X)) -> tail(active(X)) 38.34/11.04 active(sel(X1, X2)) -> sel(active(X1), X2) 38.34/11.04 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.34/11.04 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.34/11.04 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.34/11.04 active(take(X1, X2)) -> take(active(X1), X2) 38.34/11.04 active(take(X1, X2)) -> take(X1, active(X2)) 38.34/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.34/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.34/11.04 s(mark(X)) -> mark(s(X)) 38.34/11.04 fst(mark(X)) -> mark(fst(X)) 38.34/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.34/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.34/11.04 snd(mark(X)) -> mark(snd(X)) 38.34/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.34/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.34/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.34/11.04 head(mark(X)) -> mark(head(X)) 38.34/11.04 tail(mark(X)) -> mark(tail(X)) 38.34/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.34/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.34/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.34/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.34/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.34/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.34/11.04 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.34/11.04 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.34/11.04 proper(s(X)) -> s(proper(X)) 38.34/11.04 proper(fst(X)) -> fst(proper(X)) 38.34/11.04 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.34/11.04 proper(snd(X)) -> snd(proper(X)) 38.34/11.04 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.34/11.04 proper(0') -> ok(0') 38.34/11.04 proper(nil) -> ok(nil) 38.34/11.04 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.34/11.04 proper(head(X)) -> head(proper(X)) 38.34/11.04 proper(tail(X)) -> tail(proper(X)) 38.34/11.04 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.34/11.04 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.34/11.04 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.34/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.34/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.34/11.04 s(ok(X)) -> ok(s(X)) 38.34/11.04 fst(ok(X)) -> ok(fst(X)) 38.34/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.34/11.04 snd(ok(X)) -> ok(snd(X)) 38.34/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.34/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.34/11.04 head(ok(X)) -> ok(head(X)) 38.34/11.04 tail(ok(X)) -> ok(tail(X)) 38.34/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.34/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.34/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.34/11.04 top(mark(X)) -> top(proper(X)) 38.34/11.04 top(ok(X)) -> top(active(X)) 38.34/11.04 38.34/11.04 Types: 38.34/11.04 active :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 s :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 0' :: mark:0':nil:ok 38.34/11.04 nil :: mark:0':nil:ok 38.34/11.04 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 head :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.34/11.04 top :: mark:0':nil:ok -> top 38.34/11.04 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.34/11.04 hole_top2_0 :: top 38.34/11.04 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.34/11.04 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (11) OrderProof (LOWER BOUND(ID)) 38.34/11.04 Heuristically decided to analyse the following defined symbols: 38.34/11.04 active, cons, natsFrom, s, pair, u, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.34/11.04 38.34/11.04 They will be analysed ascendingly in the following order: 38.34/11.04 cons < active 38.34/11.04 natsFrom < active 38.34/11.04 s < active 38.34/11.04 pair < active 38.34/11.04 u < active 38.34/11.04 splitAt < active 38.34/11.04 head < active 38.34/11.04 afterNth < active 38.34/11.04 fst < active 38.34/11.04 snd < active 38.34/11.04 tail < active 38.34/11.04 sel < active 38.34/11.04 take < active 38.34/11.04 active < top 38.34/11.04 cons < proper 38.34/11.04 natsFrom < proper 38.34/11.04 s < proper 38.34/11.04 pair < proper 38.34/11.04 u < proper 38.34/11.04 splitAt < proper 38.34/11.04 head < proper 38.34/11.04 afterNth < proper 38.34/11.04 fst < proper 38.34/11.04 snd < proper 38.34/11.04 tail < proper 38.34/11.04 sel < proper 38.34/11.04 take < proper 38.34/11.04 proper < top 38.34/11.04 38.34/11.04 ---------------------------------------- 38.34/11.04 38.34/11.04 (12) 38.34/11.04 Obligation: 38.34/11.04 TRS: 38.34/11.04 Rules: 38.34/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.34/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.34/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.34/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.34/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.34/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.34/11.04 active(head(cons(N, XS))) -> mark(N) 38.34/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.34/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.34/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.34/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.34/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.34/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.34/11.04 active(s(X)) -> s(active(X)) 38.34/11.04 active(fst(X)) -> fst(active(X)) 38.34/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.34/11.04 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.34/11.04 active(snd(X)) -> snd(active(X)) 38.34/11.04 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.34/11.04 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.34/11.04 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.34/11.04 active(head(X)) -> head(active(X)) 38.34/11.04 active(tail(X)) -> tail(active(X)) 38.34/11.04 active(sel(X1, X2)) -> sel(active(X1), X2) 38.34/11.04 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.34/11.04 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.34/11.04 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.34/11.04 active(take(X1, X2)) -> take(active(X1), X2) 38.34/11.04 active(take(X1, X2)) -> take(X1, active(X2)) 38.34/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.34/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.34/11.04 s(mark(X)) -> mark(s(X)) 38.34/11.04 fst(mark(X)) -> mark(fst(X)) 38.34/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.04 snd(mark(X)) -> mark(snd(X)) 38.45/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.04 head(mark(X)) -> mark(head(X)) 38.45/11.04 tail(mark(X)) -> mark(tail(X)) 38.45/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.04 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.04 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.04 proper(s(X)) -> s(proper(X)) 38.45/11.04 proper(fst(X)) -> fst(proper(X)) 38.45/11.04 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.04 proper(snd(X)) -> snd(proper(X)) 38.45/11.04 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.04 proper(0') -> ok(0') 38.45/11.04 proper(nil) -> ok(nil) 38.45/11.04 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.04 proper(head(X)) -> head(proper(X)) 38.45/11.04 proper(tail(X)) -> tail(proper(X)) 38.45/11.04 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.04 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.04 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.04 s(ok(X)) -> ok(s(X)) 38.45/11.04 fst(ok(X)) -> ok(fst(X)) 38.45/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.04 snd(ok(X)) -> ok(snd(X)) 38.45/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.04 head(ok(X)) -> ok(head(X)) 38.45/11.04 tail(ok(X)) -> ok(tail(X)) 38.45/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.04 top(mark(X)) -> top(proper(X)) 38.45/11.04 top(ok(X)) -> top(active(X)) 38.45/11.04 38.45/11.04 Types: 38.45/11.04 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 0' :: mark:0':nil:ok 38.45/11.04 nil :: mark:0':nil:ok 38.45/11.04 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 top :: mark:0':nil:ok -> top 38.45/11.04 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.04 hole_top2_0 :: top 38.45/11.04 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.04 38.45/11.04 38.45/11.04 Generator Equations: 38.45/11.04 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.04 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.04 38.45/11.04 38.45/11.04 The following defined symbols remain to be analysed: 38.45/11.04 cons, active, natsFrom, s, pair, u, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.04 38.45/11.04 They will be analysed ascendingly in the following order: 38.45/11.04 cons < active 38.45/11.04 natsFrom < active 38.45/11.04 s < active 38.45/11.04 pair < active 38.45/11.04 u < active 38.45/11.04 splitAt < active 38.45/11.04 head < active 38.45/11.04 afterNth < active 38.45/11.04 fst < active 38.45/11.04 snd < active 38.45/11.04 tail < active 38.45/11.04 sel < active 38.45/11.04 take < active 38.45/11.04 active < top 38.45/11.04 cons < proper 38.45/11.04 natsFrom < proper 38.45/11.04 s < proper 38.45/11.04 pair < proper 38.45/11.04 u < proper 38.45/11.04 splitAt < proper 38.45/11.04 head < proper 38.45/11.04 afterNth < proper 38.45/11.04 fst < proper 38.45/11.04 snd < proper 38.45/11.04 tail < proper 38.45/11.04 sel < proper 38.45/11.04 take < proper 38.45/11.04 proper < top 38.45/11.04 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (13) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.04 Proved the following rewrite lemma: 38.45/11.04 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.04 38.45/11.04 Induction Base: 38.45/11.04 cons(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b)) 38.45/11.04 38.45/11.04 Induction Step: 38.45/11.04 cons(gen_mark:0':nil:ok3_0(+(1, +(n5_0, 1))), gen_mark:0':nil:ok3_0(b)) ->_R^Omega(1) 38.45/11.04 mark(cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b))) ->_IH 38.45/11.04 mark(*4_0) 38.45/11.04 38.45/11.04 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (14) 38.45/11.04 Complex Obligation (BEST) 38.45/11.04 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (15) 38.45/11.04 Obligation: 38.45/11.04 Proved the lower bound n^1 for the following obligation: 38.45/11.04 38.45/11.04 TRS: 38.45/11.04 Rules: 38.45/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.04 active(head(cons(N, XS))) -> mark(N) 38.45/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.04 active(s(X)) -> s(active(X)) 38.45/11.04 active(fst(X)) -> fst(active(X)) 38.45/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.04 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.04 active(snd(X)) -> snd(active(X)) 38.45/11.04 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.04 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.04 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.04 active(head(X)) -> head(active(X)) 38.45/11.04 active(tail(X)) -> tail(active(X)) 38.45/11.04 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.04 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.04 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.04 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.04 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.04 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.04 s(mark(X)) -> mark(s(X)) 38.45/11.04 fst(mark(X)) -> mark(fst(X)) 38.45/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.04 snd(mark(X)) -> mark(snd(X)) 38.45/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.04 head(mark(X)) -> mark(head(X)) 38.45/11.04 tail(mark(X)) -> mark(tail(X)) 38.45/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.04 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.04 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.04 proper(s(X)) -> s(proper(X)) 38.45/11.04 proper(fst(X)) -> fst(proper(X)) 38.45/11.04 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.04 proper(snd(X)) -> snd(proper(X)) 38.45/11.04 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.04 proper(0') -> ok(0') 38.45/11.04 proper(nil) -> ok(nil) 38.45/11.04 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.04 proper(head(X)) -> head(proper(X)) 38.45/11.04 proper(tail(X)) -> tail(proper(X)) 38.45/11.04 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.04 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.04 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.04 s(ok(X)) -> ok(s(X)) 38.45/11.04 fst(ok(X)) -> ok(fst(X)) 38.45/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.04 snd(ok(X)) -> ok(snd(X)) 38.45/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.04 head(ok(X)) -> ok(head(X)) 38.45/11.04 tail(ok(X)) -> ok(tail(X)) 38.45/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.04 top(mark(X)) -> top(proper(X)) 38.45/11.04 top(ok(X)) -> top(active(X)) 38.45/11.04 38.45/11.04 Types: 38.45/11.04 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 0' :: mark:0':nil:ok 38.45/11.04 nil :: mark:0':nil:ok 38.45/11.04 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 top :: mark:0':nil:ok -> top 38.45/11.04 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.04 hole_top2_0 :: top 38.45/11.04 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.04 38.45/11.04 38.45/11.04 Generator Equations: 38.45/11.04 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.04 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.04 38.45/11.04 38.45/11.04 The following defined symbols remain to be analysed: 38.45/11.04 cons, active, natsFrom, s, pair, u, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.04 38.45/11.04 They will be analysed ascendingly in the following order: 38.45/11.04 cons < active 38.45/11.04 natsFrom < active 38.45/11.04 s < active 38.45/11.04 pair < active 38.45/11.04 u < active 38.45/11.04 splitAt < active 38.45/11.04 head < active 38.45/11.04 afterNth < active 38.45/11.04 fst < active 38.45/11.04 snd < active 38.45/11.04 tail < active 38.45/11.04 sel < active 38.45/11.04 take < active 38.45/11.04 active < top 38.45/11.04 cons < proper 38.45/11.04 natsFrom < proper 38.45/11.04 s < proper 38.45/11.04 pair < proper 38.45/11.04 u < proper 38.45/11.04 splitAt < proper 38.45/11.04 head < proper 38.45/11.04 afterNth < proper 38.45/11.04 fst < proper 38.45/11.04 snd < proper 38.45/11.04 tail < proper 38.45/11.04 sel < proper 38.45/11.04 take < proper 38.45/11.04 proper < top 38.45/11.04 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (16) LowerBoundPropagationProof (FINISHED) 38.45/11.04 Propagated lower bound. 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (17) 38.45/11.04 BOUNDS(n^1, INF) 38.45/11.04 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (18) 38.45/11.04 Obligation: 38.45/11.04 TRS: 38.45/11.04 Rules: 38.45/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.04 active(head(cons(N, XS))) -> mark(N) 38.45/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.04 active(s(X)) -> s(active(X)) 38.45/11.04 active(fst(X)) -> fst(active(X)) 38.45/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.04 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.04 active(snd(X)) -> snd(active(X)) 38.45/11.04 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.04 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.04 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.04 active(head(X)) -> head(active(X)) 38.45/11.04 active(tail(X)) -> tail(active(X)) 38.45/11.04 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.04 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.04 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.04 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.04 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.04 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.04 s(mark(X)) -> mark(s(X)) 38.45/11.04 fst(mark(X)) -> mark(fst(X)) 38.45/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.04 snd(mark(X)) -> mark(snd(X)) 38.45/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.04 head(mark(X)) -> mark(head(X)) 38.45/11.04 tail(mark(X)) -> mark(tail(X)) 38.45/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.04 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.04 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.04 proper(s(X)) -> s(proper(X)) 38.45/11.04 proper(fst(X)) -> fst(proper(X)) 38.45/11.04 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.04 proper(snd(X)) -> snd(proper(X)) 38.45/11.04 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.04 proper(0') -> ok(0') 38.45/11.04 proper(nil) -> ok(nil) 38.45/11.04 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.04 proper(head(X)) -> head(proper(X)) 38.45/11.04 proper(tail(X)) -> tail(proper(X)) 38.45/11.04 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.04 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.04 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.04 s(ok(X)) -> ok(s(X)) 38.45/11.04 fst(ok(X)) -> ok(fst(X)) 38.45/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.04 snd(ok(X)) -> ok(snd(X)) 38.45/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.04 head(ok(X)) -> ok(head(X)) 38.45/11.04 tail(ok(X)) -> ok(tail(X)) 38.45/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.04 top(mark(X)) -> top(proper(X)) 38.45/11.04 top(ok(X)) -> top(active(X)) 38.45/11.04 38.45/11.04 Types: 38.45/11.04 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 0' :: mark:0':nil:ok 38.45/11.04 nil :: mark:0':nil:ok 38.45/11.04 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 top :: mark:0':nil:ok -> top 38.45/11.04 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.04 hole_top2_0 :: top 38.45/11.04 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.04 38.45/11.04 38.45/11.04 Lemmas: 38.45/11.04 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.04 38.45/11.04 38.45/11.04 Generator Equations: 38.45/11.04 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.04 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.04 38.45/11.04 38.45/11.04 The following defined symbols remain to be analysed: 38.45/11.04 natsFrom, active, s, pair, u, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.04 38.45/11.04 They will be analysed ascendingly in the following order: 38.45/11.04 natsFrom < active 38.45/11.04 s < active 38.45/11.04 pair < active 38.45/11.04 u < active 38.45/11.04 splitAt < active 38.45/11.04 head < active 38.45/11.04 afterNth < active 38.45/11.04 fst < active 38.45/11.04 snd < active 38.45/11.04 tail < active 38.45/11.04 sel < active 38.45/11.04 take < active 38.45/11.04 active < top 38.45/11.04 natsFrom < proper 38.45/11.04 s < proper 38.45/11.04 pair < proper 38.45/11.04 u < proper 38.45/11.04 splitAt < proper 38.45/11.04 head < proper 38.45/11.04 afterNth < proper 38.45/11.04 fst < proper 38.45/11.04 snd < proper 38.45/11.04 tail < proper 38.45/11.04 sel < proper 38.45/11.04 take < proper 38.45/11.04 proper < top 38.45/11.04 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (19) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.04 Proved the following rewrite lemma: 38.45/11.04 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.04 38.45/11.04 Induction Base: 38.45/11.04 natsFrom(gen_mark:0':nil:ok3_0(+(1, 0))) 38.45/11.04 38.45/11.04 Induction Step: 38.45/11.04 natsFrom(gen_mark:0':nil:ok3_0(+(1, +(n1518_0, 1)))) ->_R^Omega(1) 38.45/11.04 mark(natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0)))) ->_IH 38.45/11.04 mark(*4_0) 38.45/11.04 38.45/11.04 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (20) 38.45/11.04 Obligation: 38.45/11.04 TRS: 38.45/11.04 Rules: 38.45/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.04 active(head(cons(N, XS))) -> mark(N) 38.45/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.04 active(s(X)) -> s(active(X)) 38.45/11.04 active(fst(X)) -> fst(active(X)) 38.45/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.04 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.04 active(snd(X)) -> snd(active(X)) 38.45/11.04 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.04 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.04 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.04 active(head(X)) -> head(active(X)) 38.45/11.04 active(tail(X)) -> tail(active(X)) 38.45/11.04 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.04 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.04 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.04 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.04 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.04 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.04 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.04 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.04 s(mark(X)) -> mark(s(X)) 38.45/11.04 fst(mark(X)) -> mark(fst(X)) 38.45/11.04 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.04 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.04 snd(mark(X)) -> mark(snd(X)) 38.45/11.04 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.04 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.04 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.04 head(mark(X)) -> mark(head(X)) 38.45/11.04 tail(mark(X)) -> mark(tail(X)) 38.45/11.04 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.04 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.04 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.04 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.04 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.04 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.04 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.04 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.04 proper(s(X)) -> s(proper(X)) 38.45/11.04 proper(fst(X)) -> fst(proper(X)) 38.45/11.04 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.04 proper(snd(X)) -> snd(proper(X)) 38.45/11.04 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.04 proper(0') -> ok(0') 38.45/11.04 proper(nil) -> ok(nil) 38.45/11.04 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.04 proper(head(X)) -> head(proper(X)) 38.45/11.04 proper(tail(X)) -> tail(proper(X)) 38.45/11.04 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.04 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.04 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.04 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.04 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.04 s(ok(X)) -> ok(s(X)) 38.45/11.04 fst(ok(X)) -> ok(fst(X)) 38.45/11.04 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.04 snd(ok(X)) -> ok(snd(X)) 38.45/11.04 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.04 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.04 head(ok(X)) -> ok(head(X)) 38.45/11.04 tail(ok(X)) -> ok(tail(X)) 38.45/11.04 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.04 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.04 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.04 top(mark(X)) -> top(proper(X)) 38.45/11.04 top(ok(X)) -> top(active(X)) 38.45/11.04 38.45/11.04 Types: 38.45/11.04 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 0' :: mark:0':nil:ok 38.45/11.04 nil :: mark:0':nil:ok 38.45/11.04 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.04 top :: mark:0':nil:ok -> top 38.45/11.04 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.04 hole_top2_0 :: top 38.45/11.04 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.04 38.45/11.04 38.45/11.04 Lemmas: 38.45/11.04 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.04 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.04 38.45/11.04 38.45/11.04 Generator Equations: 38.45/11.04 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.04 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.04 38.45/11.04 38.45/11.04 The following defined symbols remain to be analysed: 38.45/11.04 s, active, pair, u, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.04 38.45/11.04 They will be analysed ascendingly in the following order: 38.45/11.04 s < active 38.45/11.04 pair < active 38.45/11.04 u < active 38.45/11.04 splitAt < active 38.45/11.04 head < active 38.45/11.04 afterNth < active 38.45/11.04 fst < active 38.45/11.04 snd < active 38.45/11.04 tail < active 38.45/11.04 sel < active 38.45/11.04 take < active 38.45/11.04 active < top 38.45/11.04 s < proper 38.45/11.04 pair < proper 38.45/11.04 u < proper 38.45/11.04 splitAt < proper 38.45/11.04 head < proper 38.45/11.04 afterNth < proper 38.45/11.04 fst < proper 38.45/11.04 snd < proper 38.45/11.04 tail < proper 38.45/11.04 sel < proper 38.45/11.04 take < proper 38.45/11.04 proper < top 38.45/11.04 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (21) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.04 Proved the following rewrite lemma: 38.45/11.04 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.04 38.45/11.04 Induction Base: 38.45/11.04 s(gen_mark:0':nil:ok3_0(+(1, 0))) 38.45/11.04 38.45/11.04 Induction Step: 38.45/11.04 s(gen_mark:0':nil:ok3_0(+(1, +(n2166_0, 1)))) ->_R^Omega(1) 38.45/11.04 mark(s(gen_mark:0':nil:ok3_0(+(1, n2166_0)))) ->_IH 38.45/11.04 mark(*4_0) 38.45/11.04 38.45/11.04 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.04 ---------------------------------------- 38.45/11.04 38.45/11.04 (22) 38.45/11.04 Obligation: 38.45/11.04 TRS: 38.45/11.04 Rules: 38.45/11.04 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.04 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.04 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.04 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.04 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.04 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.04 active(head(cons(N, XS))) -> mark(N) 38.45/11.04 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.04 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.04 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.04 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.04 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.04 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.04 active(s(X)) -> s(active(X)) 38.45/11.04 active(fst(X)) -> fst(active(X)) 38.45/11.04 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 pair, active, u, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 pair < active 38.45/11.05 u < active 38.45/11.05 splitAt < active 38.45/11.05 head < active 38.45/11.05 afterNth < active 38.45/11.05 fst < active 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 pair < proper 38.45/11.05 u < proper 38.45/11.05 splitAt < proper 38.45/11.05 head < proper 38.45/11.05 afterNth < proper 38.45/11.05 fst < proper 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (23) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b)) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, +(n2915_0, 1))), gen_mark:0':nil:ok3_0(b)) ->_R^Omega(1) 38.45/11.05 mark(pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (24) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 u, active, splitAt, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 u < active 38.45/11.05 splitAt < active 38.45/11.05 head < active 38.45/11.05 afterNth < active 38.45/11.05 fst < active 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 u < proper 38.45/11.05 splitAt < proper 38.45/11.05 head < proper 38.45/11.05 afterNth < proper 38.45/11.05 fst < proper 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (25) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, +(n5349_0, 1))), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) ->_R^Omega(1) 38.45/11.05 mark(u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (26) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 splitAt, active, head, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 splitAt < active 38.45/11.05 head < active 38.45/11.05 afterNth < active 38.45/11.05 fst < active 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 splitAt < proper 38.45/11.05 head < proper 38.45/11.05 afterNth < proper 38.45/11.05 fst < proper 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (27) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b)) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, +(n10972_0, 1))), gen_mark:0':nil:ok3_0(b)) ->_R^Omega(1) 38.45/11.05 mark(splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (28) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 head, active, afterNth, fst, snd, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 head < active 38.45/11.05 afterNth < active 38.45/11.05 fst < active 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 head < proper 38.45/11.05 afterNth < proper 38.45/11.05 fst < proper 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (29) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, 0))) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, +(n14214_0, 1)))) ->_R^Omega(1) 38.45/11.05 mark(head(gen_mark:0':nil:ok3_0(+(1, n14214_0)))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (30) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 afterNth, active, fst, snd, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 afterNth < active 38.45/11.05 fst < active 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 afterNth < proper 38.45/11.05 fst < proper 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (31) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b)) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, +(n15612_0, 1))), gen_mark:0':nil:ok3_0(b)) ->_R^Omega(1) 38.45/11.05 mark(afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (32) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 fst, active, snd, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 fst < active 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 fst < proper 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (33) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 fst(gen_mark:0':nil:ok3_0(+(1, n19368_0))) -> *4_0, rt in Omega(n19368_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 fst(gen_mark:0':nil:ok3_0(+(1, 0))) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 fst(gen_mark:0':nil:ok3_0(+(1, +(n19368_0, 1)))) ->_R^Omega(1) 38.45/11.05 mark(fst(gen_mark:0':nil:ok3_0(+(1, n19368_0)))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (34) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.05 fst(gen_mark:0':nil:ok3_0(+(1, n19368_0))) -> *4_0, rt in Omega(n19368_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 snd, active, tail, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 snd < active 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 snd < proper 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (35) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 snd(gen_mark:0':nil:ok3_0(+(1, n21017_0))) -> *4_0, rt in Omega(n21017_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 snd(gen_mark:0':nil:ok3_0(+(1, 0))) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 snd(gen_mark:0':nil:ok3_0(+(1, +(n21017_0, 1)))) ->_R^Omega(1) 38.45/11.05 mark(snd(gen_mark:0':nil:ok3_0(+(1, n21017_0)))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (36) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.05 fst(gen_mark:0':nil:ok3_0(+(1, n19368_0))) -> *4_0, rt in Omega(n19368_0) 38.45/11.05 snd(gen_mark:0':nil:ok3_0(+(1, n21017_0))) -> *4_0, rt in Omega(n21017_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 tail, active, sel, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 tail < active 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 tail < proper 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (37) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 tail(gen_mark:0':nil:ok3_0(+(1, n22767_0))) -> *4_0, rt in Omega(n22767_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 tail(gen_mark:0':nil:ok3_0(+(1, 0))) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 tail(gen_mark:0':nil:ok3_0(+(1, +(n22767_0, 1)))) ->_R^Omega(1) 38.45/11.05 mark(tail(gen_mark:0':nil:ok3_0(+(1, n22767_0)))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (38) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 0' :: mark:0':nil:ok 38.45/11.05 nil :: mark:0':nil:ok 38.45/11.05 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 top :: mark:0':nil:ok -> top 38.45/11.05 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.05 hole_top2_0 :: top 38.45/11.05 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.05 38.45/11.05 38.45/11.05 Lemmas: 38.45/11.05 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.05 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.05 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.05 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.05 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.05 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.05 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.05 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.05 fst(gen_mark:0':nil:ok3_0(+(1, n19368_0))) -> *4_0, rt in Omega(n19368_0) 38.45/11.05 snd(gen_mark:0':nil:ok3_0(+(1, n21017_0))) -> *4_0, rt in Omega(n21017_0) 38.45/11.05 tail(gen_mark:0':nil:ok3_0(+(1, n22767_0))) -> *4_0, rt in Omega(n22767_0) 38.45/11.05 38.45/11.05 38.45/11.05 Generator Equations: 38.45/11.05 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.05 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.05 38.45/11.05 38.45/11.05 The following defined symbols remain to be analysed: 38.45/11.05 sel, active, take, proper, top 38.45/11.05 38.45/11.05 They will be analysed ascendingly in the following order: 38.45/11.05 sel < active 38.45/11.05 take < active 38.45/11.05 active < top 38.45/11.05 sel < proper 38.45/11.05 take < proper 38.45/11.05 proper < top 38.45/11.05 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (39) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.05 Proved the following rewrite lemma: 38.45/11.05 sel(gen_mark:0':nil:ok3_0(+(1, n24618_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n24618_0) 38.45/11.05 38.45/11.05 Induction Base: 38.45/11.05 sel(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b)) 38.45/11.05 38.45/11.05 Induction Step: 38.45/11.05 sel(gen_mark:0':nil:ok3_0(+(1, +(n24618_0, 1))), gen_mark:0':nil:ok3_0(b)) ->_R^Omega(1) 38.45/11.05 mark(sel(gen_mark:0':nil:ok3_0(+(1, n24618_0)), gen_mark:0':nil:ok3_0(b))) ->_IH 38.45/11.05 mark(*4_0) 38.45/11.05 38.45/11.05 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.05 ---------------------------------------- 38.45/11.05 38.45/11.05 (40) 38.45/11.05 Obligation: 38.45/11.05 TRS: 38.45/11.05 Rules: 38.45/11.05 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.05 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.05 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.05 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.05 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.05 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.05 active(head(cons(N, XS))) -> mark(N) 38.45/11.05 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.05 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.05 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.05 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.05 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.05 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.05 active(s(X)) -> s(active(X)) 38.45/11.05 active(fst(X)) -> fst(active(X)) 38.45/11.05 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.05 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.05 active(snd(X)) -> snd(active(X)) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.05 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.05 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.05 active(head(X)) -> head(active(X)) 38.45/11.05 active(tail(X)) -> tail(active(X)) 38.45/11.05 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.05 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.05 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.05 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.05 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.05 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.05 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.05 s(mark(X)) -> mark(s(X)) 38.45/11.05 fst(mark(X)) -> mark(fst(X)) 38.45/11.05 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.05 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.05 snd(mark(X)) -> mark(snd(X)) 38.45/11.05 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.05 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.05 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.05 head(mark(X)) -> mark(head(X)) 38.45/11.05 tail(mark(X)) -> mark(tail(X)) 38.45/11.05 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.05 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.05 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.05 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.05 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.05 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.05 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.05 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.05 proper(s(X)) -> s(proper(X)) 38.45/11.05 proper(fst(X)) -> fst(proper(X)) 38.45/11.05 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.05 proper(snd(X)) -> snd(proper(X)) 38.45/11.05 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.05 proper(0') -> ok(0') 38.45/11.05 proper(nil) -> ok(nil) 38.45/11.05 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.05 proper(head(X)) -> head(proper(X)) 38.45/11.05 proper(tail(X)) -> tail(proper(X)) 38.45/11.05 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.05 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.05 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.05 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.05 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.05 s(ok(X)) -> ok(s(X)) 38.45/11.05 fst(ok(X)) -> ok(fst(X)) 38.45/11.05 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.05 snd(ok(X)) -> ok(snd(X)) 38.45/11.05 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.05 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.05 head(ok(X)) -> ok(head(X)) 38.45/11.05 tail(ok(X)) -> ok(tail(X)) 38.45/11.05 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.05 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.05 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.05 top(mark(X)) -> top(proper(X)) 38.45/11.05 top(ok(X)) -> top(active(X)) 38.45/11.05 38.45/11.05 Types: 38.45/11.05 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.05 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 0' :: mark:0':nil:ok 38.45/11.06 nil :: mark:0':nil:ok 38.45/11.06 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 top :: mark:0':nil:ok -> top 38.45/11.06 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.06 hole_top2_0 :: top 38.45/11.06 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.06 38.45/11.06 38.45/11.06 Lemmas: 38.45/11.06 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.06 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.06 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.06 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.06 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.06 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.06 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.06 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.06 fst(gen_mark:0':nil:ok3_0(+(1, n19368_0))) -> *4_0, rt in Omega(n19368_0) 38.45/11.06 snd(gen_mark:0':nil:ok3_0(+(1, n21017_0))) -> *4_0, rt in Omega(n21017_0) 38.45/11.06 tail(gen_mark:0':nil:ok3_0(+(1, n22767_0))) -> *4_0, rt in Omega(n22767_0) 38.45/11.06 sel(gen_mark:0':nil:ok3_0(+(1, n24618_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n24618_0) 38.45/11.06 38.45/11.06 38.45/11.06 Generator Equations: 38.45/11.06 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.06 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.06 38.45/11.06 38.45/11.06 The following defined symbols remain to be analysed: 38.45/11.06 take, active, proper, top 38.45/11.06 38.45/11.06 They will be analysed ascendingly in the following order: 38.45/11.06 take < active 38.45/11.06 active < top 38.45/11.06 take < proper 38.45/11.06 proper < top 38.45/11.06 38.45/11.06 ---------------------------------------- 38.45/11.06 38.45/11.06 (41) RewriteLemmaProof (LOWER BOUND(ID)) 38.45/11.06 Proved the following rewrite lemma: 38.45/11.06 take(gen_mark:0':nil:ok3_0(+(1, n29304_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n29304_0) 38.45/11.06 38.45/11.06 Induction Base: 38.45/11.06 take(gen_mark:0':nil:ok3_0(+(1, 0)), gen_mark:0':nil:ok3_0(b)) 38.45/11.06 38.45/11.06 Induction Step: 38.45/11.06 take(gen_mark:0':nil:ok3_0(+(1, +(n29304_0, 1))), gen_mark:0':nil:ok3_0(b)) ->_R^Omega(1) 38.45/11.06 mark(take(gen_mark:0':nil:ok3_0(+(1, n29304_0)), gen_mark:0':nil:ok3_0(b))) ->_IH 38.45/11.06 mark(*4_0) 38.45/11.06 38.45/11.06 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 38.45/11.06 ---------------------------------------- 38.45/11.06 38.45/11.06 (42) 38.45/11.06 Obligation: 38.45/11.06 TRS: 38.45/11.06 Rules: 38.45/11.06 active(natsFrom(N)) -> mark(cons(N, natsFrom(s(N)))) 38.45/11.06 active(fst(pair(XS, YS))) -> mark(XS) 38.45/11.06 active(snd(pair(XS, YS))) -> mark(YS) 38.45/11.06 active(splitAt(0', XS)) -> mark(pair(nil, XS)) 38.45/11.06 active(splitAt(s(N), cons(X, XS))) -> mark(u(splitAt(N, XS), N, X, XS)) 38.45/11.06 active(u(pair(YS, ZS), N, X, XS)) -> mark(pair(cons(X, YS), ZS)) 38.45/11.06 active(head(cons(N, XS))) -> mark(N) 38.45/11.06 active(tail(cons(N, XS))) -> mark(XS) 38.45/11.06 active(sel(N, XS)) -> mark(head(afterNth(N, XS))) 38.45/11.06 active(take(N, XS)) -> mark(fst(splitAt(N, XS))) 38.45/11.06 active(afterNth(N, XS)) -> mark(snd(splitAt(N, XS))) 38.45/11.06 active(natsFrom(X)) -> natsFrom(active(X)) 38.45/11.06 active(cons(X1, X2)) -> cons(active(X1), X2) 38.45/11.06 active(s(X)) -> s(active(X)) 38.45/11.06 active(fst(X)) -> fst(active(X)) 38.45/11.06 active(pair(X1, X2)) -> pair(active(X1), X2) 38.45/11.06 active(pair(X1, X2)) -> pair(X1, active(X2)) 38.45/11.06 active(snd(X)) -> snd(active(X)) 38.45/11.06 active(splitAt(X1, X2)) -> splitAt(active(X1), X2) 38.45/11.06 active(splitAt(X1, X2)) -> splitAt(X1, active(X2)) 38.45/11.06 active(u(X1, X2, X3, X4)) -> u(active(X1), X2, X3, X4) 38.45/11.06 active(head(X)) -> head(active(X)) 38.45/11.06 active(tail(X)) -> tail(active(X)) 38.45/11.06 active(sel(X1, X2)) -> sel(active(X1), X2) 38.45/11.06 active(sel(X1, X2)) -> sel(X1, active(X2)) 38.45/11.06 active(afterNth(X1, X2)) -> afterNth(active(X1), X2) 38.45/11.06 active(afterNth(X1, X2)) -> afterNth(X1, active(X2)) 38.45/11.06 active(take(X1, X2)) -> take(active(X1), X2) 38.45/11.06 active(take(X1, X2)) -> take(X1, active(X2)) 38.45/11.06 natsFrom(mark(X)) -> mark(natsFrom(X)) 38.45/11.06 cons(mark(X1), X2) -> mark(cons(X1, X2)) 38.45/11.06 s(mark(X)) -> mark(s(X)) 38.45/11.06 fst(mark(X)) -> mark(fst(X)) 38.45/11.06 pair(mark(X1), X2) -> mark(pair(X1, X2)) 38.45/11.06 pair(X1, mark(X2)) -> mark(pair(X1, X2)) 38.45/11.06 snd(mark(X)) -> mark(snd(X)) 38.45/11.06 splitAt(mark(X1), X2) -> mark(splitAt(X1, X2)) 38.45/11.06 splitAt(X1, mark(X2)) -> mark(splitAt(X1, X2)) 38.45/11.06 u(mark(X1), X2, X3, X4) -> mark(u(X1, X2, X3, X4)) 38.45/11.06 head(mark(X)) -> mark(head(X)) 38.45/11.06 tail(mark(X)) -> mark(tail(X)) 38.45/11.06 sel(mark(X1), X2) -> mark(sel(X1, X2)) 38.45/11.06 sel(X1, mark(X2)) -> mark(sel(X1, X2)) 38.45/11.06 afterNth(mark(X1), X2) -> mark(afterNth(X1, X2)) 38.45/11.06 afterNth(X1, mark(X2)) -> mark(afterNth(X1, X2)) 38.45/11.06 take(mark(X1), X2) -> mark(take(X1, X2)) 38.45/11.06 take(X1, mark(X2)) -> mark(take(X1, X2)) 38.45/11.06 proper(natsFrom(X)) -> natsFrom(proper(X)) 38.45/11.06 proper(cons(X1, X2)) -> cons(proper(X1), proper(X2)) 38.45/11.06 proper(s(X)) -> s(proper(X)) 38.45/11.06 proper(fst(X)) -> fst(proper(X)) 38.45/11.06 proper(pair(X1, X2)) -> pair(proper(X1), proper(X2)) 38.45/11.06 proper(snd(X)) -> snd(proper(X)) 38.45/11.06 proper(splitAt(X1, X2)) -> splitAt(proper(X1), proper(X2)) 38.45/11.06 proper(0') -> ok(0') 38.45/11.06 proper(nil) -> ok(nil) 38.45/11.06 proper(u(X1, X2, X3, X4)) -> u(proper(X1), proper(X2), proper(X3), proper(X4)) 38.45/11.06 proper(head(X)) -> head(proper(X)) 38.45/11.06 proper(tail(X)) -> tail(proper(X)) 38.45/11.06 proper(sel(X1, X2)) -> sel(proper(X1), proper(X2)) 38.45/11.06 proper(afterNth(X1, X2)) -> afterNth(proper(X1), proper(X2)) 38.45/11.06 proper(take(X1, X2)) -> take(proper(X1), proper(X2)) 38.45/11.06 natsFrom(ok(X)) -> ok(natsFrom(X)) 38.45/11.06 cons(ok(X1), ok(X2)) -> ok(cons(X1, X2)) 38.45/11.06 s(ok(X)) -> ok(s(X)) 38.45/11.06 fst(ok(X)) -> ok(fst(X)) 38.45/11.06 pair(ok(X1), ok(X2)) -> ok(pair(X1, X2)) 38.45/11.06 snd(ok(X)) -> ok(snd(X)) 38.45/11.06 splitAt(ok(X1), ok(X2)) -> ok(splitAt(X1, X2)) 38.45/11.06 u(ok(X1), ok(X2), ok(X3), ok(X4)) -> ok(u(X1, X2, X3, X4)) 38.45/11.06 head(ok(X)) -> ok(head(X)) 38.45/11.06 tail(ok(X)) -> ok(tail(X)) 38.45/11.06 sel(ok(X1), ok(X2)) -> ok(sel(X1, X2)) 38.45/11.06 afterNth(ok(X1), ok(X2)) -> ok(afterNth(X1, X2)) 38.45/11.06 take(ok(X1), ok(X2)) -> ok(take(X1, X2)) 38.45/11.06 top(mark(X)) -> top(proper(X)) 38.45/11.06 top(ok(X)) -> top(active(X)) 38.45/11.06 38.45/11.06 Types: 38.45/11.06 active :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 natsFrom :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 mark :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 cons :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 s :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 fst :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 pair :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 snd :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 splitAt :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 0' :: mark:0':nil:ok 38.45/11.06 nil :: mark:0':nil:ok 38.45/11.06 u :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 head :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 tail :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 sel :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 afterNth :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 take :: mark:0':nil:ok -> mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 proper :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 ok :: mark:0':nil:ok -> mark:0':nil:ok 38.45/11.06 top :: mark:0':nil:ok -> top 38.45/11.06 hole_mark:0':nil:ok1_0 :: mark:0':nil:ok 38.45/11.06 hole_top2_0 :: top 38.45/11.06 gen_mark:0':nil:ok3_0 :: Nat -> mark:0':nil:ok 38.45/11.06 38.45/11.06 38.45/11.06 Lemmas: 38.45/11.06 cons(gen_mark:0':nil:ok3_0(+(1, n5_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n5_0) 38.45/11.06 natsFrom(gen_mark:0':nil:ok3_0(+(1, n1518_0))) -> *4_0, rt in Omega(n1518_0) 38.45/11.06 s(gen_mark:0':nil:ok3_0(+(1, n2166_0))) -> *4_0, rt in Omega(n2166_0) 38.45/11.06 pair(gen_mark:0':nil:ok3_0(+(1, n2915_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n2915_0) 38.45/11.06 u(gen_mark:0':nil:ok3_0(+(1, n5349_0)), gen_mark:0':nil:ok3_0(b), gen_mark:0':nil:ok3_0(c), gen_mark:0':nil:ok3_0(d)) -> *4_0, rt in Omega(n5349_0) 38.45/11.06 splitAt(gen_mark:0':nil:ok3_0(+(1, n10972_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n10972_0) 38.45/11.06 head(gen_mark:0':nil:ok3_0(+(1, n14214_0))) -> *4_0, rt in Omega(n14214_0) 38.45/11.06 afterNth(gen_mark:0':nil:ok3_0(+(1, n15612_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n15612_0) 38.45/11.06 fst(gen_mark:0':nil:ok3_0(+(1, n19368_0))) -> *4_0, rt in Omega(n19368_0) 38.45/11.06 snd(gen_mark:0':nil:ok3_0(+(1, n21017_0))) -> *4_0, rt in Omega(n21017_0) 38.45/11.06 tail(gen_mark:0':nil:ok3_0(+(1, n22767_0))) -> *4_0, rt in Omega(n22767_0) 38.45/11.06 sel(gen_mark:0':nil:ok3_0(+(1, n24618_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n24618_0) 38.45/11.06 take(gen_mark:0':nil:ok3_0(+(1, n29304_0)), gen_mark:0':nil:ok3_0(b)) -> *4_0, rt in Omega(n29304_0) 38.45/11.06 38.45/11.06 38.45/11.06 Generator Equations: 38.45/11.06 gen_mark:0':nil:ok3_0(0) <=> 0' 38.45/11.06 gen_mark:0':nil:ok3_0(+(x, 1)) <=> mark(gen_mark:0':nil:ok3_0(x)) 38.45/11.06 38.45/11.06 38.45/11.06 The following defined symbols remain to be analysed: 38.45/11.06 active, proper, top 38.45/11.06 38.45/11.06 They will be analysed ascendingly in the following order: 38.45/11.06 active < top 38.45/11.06 proper < top 38.45/11.09 EOF