WORST_CASE(Omega(n^1),?) proof of input_G03axqOmDN.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). (0) CpxTRS (1) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 41 ms] (2) CdtProblem (3) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxRelTRS (5) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxRelTRS (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 6 ms] (8) typed CpxTrs (9) OrderProof [LOWER BOUND(ID), 0 ms] (10) typed CpxTrs (11) RewriteLemmaProof [LOWER BOUND(ID), 433 ms] (12) BEST (13) proven lower bound (14) LowerBoundPropagationProof [FINISHED, 0 ms] (15) BOUNDS(n^1, INF) (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 157 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 133 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 60 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 54 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 57 ms] (26) typed CpxTrs (27) RewriteLemmaProof [LOWER BOUND(ID), 41 ms] (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 0 ms] (30) typed CpxTrs (31) RewriteLemmaProof [LOWER BOUND(ID), 25 ms] (32) typed CpxTrs (33) RewriteLemmaProof [LOWER BOUND(ID), 63 ms] (34) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: fstsplit(0, x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0, x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0, m) -> true leq(s(n), 0) -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0 length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) head(cons(h, t)) -> h tail(cons(h, t)) -> t ring(st_1, in_2, st_2, in_3, st_3, m) -> if_1(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_1))) if_1(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(sndsplit(m, st_1), cons(fstsplit(m, st_1), in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_2(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_2))) if_2(st_1, in_2, st_2, in_3, st_3, m, true) -> if_3(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_2))) if_3(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, sndsplit(m, st_2), cons(fstsplit(m, st_2), in_3), st_3, m) if_2(st_1, in_2, st_2, in_3, st_3, m, false) -> if_4(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(two, head(in_2)), st_2)))) if_4(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, tail(in_2), sndsplit(m, app(map_f(two, head(in_2)), st_2)), cons(fstsplit(m, app(map_f(two, head(in_2)), st_2)), in_3), st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_5(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(two, head(in_2)))) if_5(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, tail(in_2), st_2, in_3, st_3, m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_6(st_1, in_2, st_2, in_3, st_3, m, leq(m, length(st_3))) if_6(st_1, in_2, st_2, in_3, st_3, m, true) -> if_7(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, st_3))) if_7(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, in_3, sndsplit(m, st_3), m) if_6(st_1, in_2, st_2, in_3, st_3, m, false) -> if_8(st_1, in_2, st_2, in_3, st_3, m, empty(fstsplit(m, app(map_f(three, head(in_3)), st_3)))) if_8(st_1, in_2, st_2, in_3, st_3, m, false) -> ring(st_1, in_2, st_2, tail(in_3), sndsplit(m, app(map_f(three, head(in_3)), st_3)), m) ring(st_1, in_2, st_2, in_3, st_3, m) -> if_9(st_1, in_2, st_2, in_3, st_3, m, empty(map_f(three, head(in_3)))) if_9(st_1, in_2, st_2, in_3, st_3, m, true) -> ring(st_1, in_2, st_2, tail(in_3), st_3, m) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) S tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, head_1, tail_1, ring_6, if_1_7, if_2_7, if_3_7, if_4_7, if_5_7, if_6_7, if_7_7, if_8_7, if_9_7 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, EMPTY_1, LEQ_2, LENGTH_1, APP_2, MAP_F_2, HEAD_1, TAIL_1, RING_6, IF_1_7, IF_2_7, IF_3_7, IF_4_7, IF_5_7, IF_6_7, IF_7_7, IF_8_7, IF_9_7 Compound Symbols: c, c1, c2_1, c3, c4, c5_1, c6, c7, c8, c9, c10_1, c11, c12_1, c13, c14_1, c15, c16_2, c17, c18, c19_3, c20_3, c21_4, c22_3, c23_4, c24_2, c25_2, c26_3, c27_6, c28_2, c29_2, c30_2, c31_5, c32_5, c33_2, c34_3, c35_6, c36_2, c37_2, c38_5, c39_2 ---------------------------------------- (3) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (4) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) The (relative) TRS S consists of the following rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Rewrite Strategy: INNERMOST ---------------------------------------- (5) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) The (relative) TRS S consists of the following rules: fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (8) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 ---------------------------------------- (9) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: FSTSPLIT, SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: FSTSPLIT < RING SNDSPLIT < RING LEQ < RING LENGTH < RING APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (10) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: FSTSPLIT, SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: FSTSPLIT < RING SNDSPLIT < RING LEQ < RING LENGTH < RING APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (11) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) Induction Base: FSTSPLIT(gen_0':s26_40(0), gen_nil:cons:f27_40(0)) ->_R^Omega(1) c Induction Step: FSTSPLIT(gen_0':s26_40(+(n34_40, 1)), gen_nil:cons:f27_40(+(n34_40, 1))) ->_R^Omega(1) c2(FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40))) ->_IH c2(gen_c:c1:c225_40(c35_40)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (12) Complex Obligation (BEST) ---------------------------------------- (13) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: FSTSPLIT, SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: FSTSPLIT < RING SNDSPLIT < RING LEQ < RING LENGTH < RING APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (14) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (15) BOUNDS(n^1, INF) ---------------------------------------- (16) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: SNDSPLIT < RING LEQ < RING LENGTH < RING APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) Induction Base: SNDSPLIT(gen_0':s26_40(0), gen_nil:cons:f27_40(0)) ->_R^Omega(1) c3 Induction Step: SNDSPLIT(gen_0':s26_40(+(n1092_40, 1)), gen_nil:cons:f27_40(+(n1092_40, 1))) ->_R^Omega(1) c5(SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40))) ->_IH c5(gen_c3:c4:c528_40(c1093_40)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (18) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: LEQ, LENGTH, APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: LEQ < RING LENGTH < RING APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) Induction Base: LEQ(gen_0':s26_40(0), gen_0':s26_40(0)) ->_R^Omega(1) c8 Induction Step: LEQ(gen_0':s26_40(+(n2259_40, 1)), gen_0':s26_40(+(n2259_40, 1))) ->_R^Omega(1) c10(LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40))) ->_IH c10(gen_c8:c9:c1029_40(c2260_40)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (20) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: LENGTH, APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: LENGTH < RING APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) Induction Base: LENGTH(gen_nil:cons:f27_40(0)) ->_R^Omega(1) c11 Induction Step: LENGTH(gen_nil:cons:f27_40(+(n3392_40, 1))) ->_R^Omega(1) c12(LENGTH(gen_nil:cons:f27_40(n3392_40))) ->_IH c12(gen_c11:c1230_40(c3393_40)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (22) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: APP, MAP_F, map_f, RING, fstsplit, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: APP < MAP_F APP < RING map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) Induction Base: APP(gen_nil:cons:f27_40(0), gen_nil:cons:f27_40(b)) ->_R^Omega(1) c13 Induction Step: APP(gen_nil:cons:f27_40(+(n4132_40, 1)), gen_nil:cons:f27_40(b)) ->_R^Omega(1) c14(APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b))) ->_IH c14(gen_c13:c1431_40(c4133_40)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (24) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: fstsplit, MAP_F, map_f, RING, leq, length, sndsplit, app, ring They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring fstsplit < RING leq < RING length < RING sndsplit < RING app < RING fstsplit < ring leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40)) -> gen_nil:cons:f27_40(n5754_40), rt in Omega(0) Induction Base: fstsplit(gen_0':s26_40(0), gen_nil:cons:f27_40(0)) ->_R^Omega(0) nil Induction Step: fstsplit(gen_0':s26_40(+(n5754_40, 1)), gen_nil:cons:f27_40(+(n5754_40, 1))) ->_R^Omega(0) cons(nil, fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40))) ->_IH cons(nil, gen_nil:cons:f27_40(c5755_40)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (26) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40)) -> gen_nil:cons:f27_40(n5754_40), rt in Omega(0) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: leq, MAP_F, map_f, RING, length, sndsplit, app, ring They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring leq < RING length < RING sndsplit < RING app < RING leq < ring length < ring sndsplit < ring app < ring ---------------------------------------- (27) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: leq(gen_0':s26_40(n6913_40), gen_0':s26_40(n6913_40)) -> true, rt in Omega(0) Induction Base: leq(gen_0':s26_40(0), gen_0':s26_40(0)) ->_R^Omega(0) true Induction Step: leq(gen_0':s26_40(+(n6913_40, 1)), gen_0':s26_40(+(n6913_40, 1))) ->_R^Omega(0) leq(gen_0':s26_40(n6913_40), gen_0':s26_40(n6913_40)) ->_IH true We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (28) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40)) -> gen_nil:cons:f27_40(n5754_40), rt in Omega(0) leq(gen_0':s26_40(n6913_40), gen_0':s26_40(n6913_40)) -> true, rt in Omega(0) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: length, MAP_F, map_f, RING, sndsplit, app, ring They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring length < RING sndsplit < RING app < RING length < ring sndsplit < ring app < ring ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: length(gen_nil:cons:f27_40(n7626_40)) -> gen_0':s26_40(n7626_40), rt in Omega(0) Induction Base: length(gen_nil:cons:f27_40(0)) ->_R^Omega(0) 0' Induction Step: length(gen_nil:cons:f27_40(+(n7626_40, 1))) ->_R^Omega(0) s(length(gen_nil:cons:f27_40(n7626_40))) ->_IH s(gen_0':s26_40(c7627_40)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (30) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40)) -> gen_nil:cons:f27_40(n5754_40), rt in Omega(0) leq(gen_0':s26_40(n6913_40), gen_0':s26_40(n6913_40)) -> true, rt in Omega(0) length(gen_nil:cons:f27_40(n7626_40)) -> gen_0':s26_40(n7626_40), rt in Omega(0) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: sndsplit, MAP_F, map_f, RING, app, ring They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring sndsplit < RING app < RING sndsplit < ring app < ring ---------------------------------------- (31) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: sndsplit(gen_0':s26_40(n8246_40), gen_nil:cons:f27_40(n8246_40)) -> gen_nil:cons:f27_40(0), rt in Omega(0) Induction Base: sndsplit(gen_0':s26_40(0), gen_nil:cons:f27_40(0)) ->_R^Omega(0) gen_nil:cons:f27_40(0) Induction Step: sndsplit(gen_0':s26_40(+(n8246_40, 1)), gen_nil:cons:f27_40(+(n8246_40, 1))) ->_R^Omega(0) sndsplit(gen_0':s26_40(n8246_40), gen_nil:cons:f27_40(n8246_40)) ->_IH gen_nil:cons:f27_40(0) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (32) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40)) -> gen_nil:cons:f27_40(n5754_40), rt in Omega(0) leq(gen_0':s26_40(n6913_40), gen_0':s26_40(n6913_40)) -> true, rt in Omega(0) length(gen_nil:cons:f27_40(n7626_40)) -> gen_0':s26_40(n7626_40), rt in Omega(0) sndsplit(gen_0':s26_40(n8246_40), gen_nil:cons:f27_40(n8246_40)) -> gen_nil:cons:f27_40(0), rt in Omega(0) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: app, MAP_F, map_f, RING, ring They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < RING map_f < RING app < map_f map_f < ring app < RING app < ring ---------------------------------------- (33) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: app(gen_nil:cons:f27_40(n9941_40), gen_nil:cons:f27_40(b)) -> gen_nil:cons:f27_40(+(n9941_40, b)), rt in Omega(0) Induction Base: app(gen_nil:cons:f27_40(0), gen_nil:cons:f27_40(b)) ->_R^Omega(0) gen_nil:cons:f27_40(b) Induction Step: app(gen_nil:cons:f27_40(+(n9941_40, 1)), gen_nil:cons:f27_40(b)) ->_R^Omega(0) cons(nil, app(gen_nil:cons:f27_40(n9941_40), gen_nil:cons:f27_40(b))) ->_IH cons(nil, gen_nil:cons:f27_40(+(b, c9942_40))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (34) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) HEAD(cons(z0, z1)) -> c17 TAIL(cons(z0, z1)) -> c18 RING(z0, z1, z2, z3, z4, z5) -> c19(IF_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))), EMPTY(fstsplit(z5, z0)), FSTSPLIT(z5, z0)) RING(z0, z1, z2, z3, z4, z5) -> c20(IF_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))), LEQ(z5, length(z2)), LENGTH(z2)) RING(z0, z1, z2, z3, z4, z5) -> c21(IF_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))), EMPTY(map_f(two, head(z1))), MAP_F(two, head(z1)), HEAD(z1)) RING(z0, z1, z2, z3, z4, z5) -> c22(IF_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))), LEQ(z5, length(z4)), LENGTH(z4)) RING(z0, z1, z2, z3, z4, z5) -> c23(IF_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))), EMPTY(map_f(three, head(z3))), MAP_F(three, head(z3)), HEAD(z3)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c24(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), SNDSPLIT(z5, z0)) IF_1(z0, z1, z2, z3, z4, z5, false) -> c25(RING(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5), FSTSPLIT(z5, z0)) IF_2(z0, z1, z2, z3, z4, z5, true) -> c26(IF_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))), EMPTY(fstsplit(z5, z2)), FSTSPLIT(z5, z2)) IF_2(z0, z1, z2, z3, z4, z5, false) -> c27(IF_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))), EMPTY(fstsplit(z5, app(map_f(two, head(z1)), z2))), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c28(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), SNDSPLIT(z5, z2)) IF_3(z0, z1, z2, z3, z4, z5, false) -> c29(RING(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5), FSTSPLIT(z5, z2)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c30(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), TAIL(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c31(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), SNDSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_4(z0, z1, z2, z3, z4, z5, false) -> c32(RING(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5), FSTSPLIT(z5, app(map_f(two, head(z1)), z2)), APP(map_f(two, head(z1)), z2), MAP_F(two, head(z1)), HEAD(z1)) IF_5(z0, z1, z2, z3, z4, z5, true) -> c33(RING(z0, tail(z1), z2, z3, z4, z5), TAIL(z1)) IF_6(z0, z1, z2, z3, z4, z5, true) -> c34(IF_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))), EMPTY(fstsplit(z5, z4)), FSTSPLIT(z5, z4)) IF_6(z0, z1, z2, z3, z4, z5, false) -> c35(IF_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))), EMPTY(fstsplit(z5, app(map_f(three, head(z3)), z4))), FSTSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_7(z0, z1, z2, z3, z4, z5, false) -> c36(RING(z0, z1, z2, z3, sndsplit(z5, z4), z5), SNDSPLIT(z5, z4)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c37(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), TAIL(z3)) IF_8(z0, z1, z2, z3, z4, z5, false) -> c38(RING(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5), SNDSPLIT(z5, app(map_f(three, head(z3)), z4)), APP(map_f(three, head(z3)), z4), MAP_F(three, head(z3)), HEAD(z3)) IF_9(z0, z1, z2, z3, z4, z5, true) -> c39(RING(z0, z1, z2, tail(z3), z4, z5), TAIL(z3)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 ring(z0, z1, z2, z3, z4, z5) -> if_1(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z0))) ring(z0, z1, z2, z3, z4, z5) -> if_2(z0, z1, z2, z3, z4, z5, leq(z5, length(z2))) ring(z0, z1, z2, z3, z4, z5) -> if_5(z0, z1, z2, z3, z4, z5, empty(map_f(two, head(z1)))) ring(z0, z1, z2, z3, z4, z5) -> if_6(z0, z1, z2, z3, z4, z5, leq(z5, length(z4))) ring(z0, z1, z2, z3, z4, z5) -> if_9(z0, z1, z2, z3, z4, z5, empty(map_f(three, head(z3)))) if_1(z0, z1, z2, z3, z4, z5, false) -> ring(sndsplit(z5, z0), cons(fstsplit(z5, z0), z1), z2, z3, z4, z5) if_2(z0, z1, z2, z3, z4, z5, true) -> if_3(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z2))) if_2(z0, z1, z2, z3, z4, z5, false) -> if_4(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(two, head(z1)), z2)))) if_3(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, sndsplit(z5, z2), cons(fstsplit(z5, z2), z3), z4, z5) if_4(z0, z1, z2, z3, z4, z5, false) -> ring(z0, tail(z1), sndsplit(z5, app(map_f(two, head(z1)), z2)), cons(fstsplit(z5, app(map_f(two, head(z1)), z2)), z3), z4, z5) if_5(z0, z1, z2, z3, z4, z5, true) -> ring(z0, tail(z1), z2, z3, z4, z5) if_6(z0, z1, z2, z3, z4, z5, true) -> if_7(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, z4))) if_6(z0, z1, z2, z3, z4, z5, false) -> if_8(z0, z1, z2, z3, z4, z5, empty(fstsplit(z5, app(map_f(three, head(z3)), z4)))) if_7(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, z3, sndsplit(z5, z4), z5) if_8(z0, z1, z2, z3, z4, z5, false) -> ring(z0, z1, z2, tail(z3), sndsplit(z5, app(map_f(three, head(z3)), z4)), z5) if_9(z0, z1, z2, z3, z4, z5, true) -> ring(z0, z1, z2, tail(z3), z4, z5) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: nil:cons:f -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: two:three -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: two:three -> nil:cons:f -> nil:cons:f map_f :: two:three -> nil:cons:f -> nil:cons:f HEAD :: nil:cons:f -> c17 c17 :: c17 TAIL :: nil:cons:f -> c18 c18 :: c18 RING :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> c19:c20:c21:c22:c23 c19 :: c24:c25 -> c6:c7 -> c:c1:c2 -> c19:c20:c21:c22:c23 IF_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c24:c25 empty :: nil:cons:f -> false:true fstsplit :: 0':s -> nil:cons:f -> nil:cons:f c20 :: c26:c27 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c26:c27 leq :: 0':s -> 0':s -> false:true length :: nil:cons:f -> 0':s c21 :: c33 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c33 two :: two:three head :: nil:cons:f -> nil:cons:f c22 :: c34:c35 -> c8:c9:c10 -> c11:c12 -> c19:c20:c21:c22:c23 IF_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c34:c35 c23 :: c39 -> c6:c7 -> c15:c16 -> c17 -> c19:c20:c21:c22:c23 IF_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c39 three :: two:three false :: false:true c24 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c24:c25 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c25 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c24:c25 true :: false:true c26 :: c28:c29 -> c6:c7 -> c:c1:c2 -> c26:c27 IF_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c28:c29 c27 :: c30:c31:c32 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c26:c27 IF_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c30:c31:c32 app :: nil:cons:f -> nil:cons:f -> nil:cons:f c28 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c28:c29 c29 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c28:c29 c30 :: c19:c20:c21:c22:c23 -> c18 -> c30:c31:c32 tail :: nil:cons:f -> nil:cons:f c31 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c32 :: c19:c20:c21:c22:c23 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c30:c31:c32 c33 :: c19:c20:c21:c22:c23 -> c18 -> c33 c34 :: c36 -> c6:c7 -> c:c1:c2 -> c34:c35 IF_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c36 c35 :: c37:c38 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c17 -> c34:c35 IF_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> c37:c38 c36 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c36 c37 :: c19:c20:c21:c22:c23 -> c18 -> c37:c38 c38 :: c19:c20:c21:c22:c23 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c17 -> c37:c38 c39 :: c19:c20:c21:c22:c23 -> c18 -> c39 ring :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_1 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_2 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_5 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_6 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_9 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_3 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_4 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_7 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 if_8 :: nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> nil:cons:f -> 0':s -> false:true -> ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 hole_c:c1:c21_40 :: c:c1:c2 hole_0':s2_40 :: 0':s hole_nil:cons:f3_40 :: nil:cons:f hole_c3:c4:c54_40 :: c3:c4:c5 hole_c6:c75_40 :: c6:c7 hole_c8:c9:c106_40 :: c8:c9:c10 hole_c11:c127_40 :: c11:c12 hole_c13:c148_40 :: c13:c14 hole_c15:c169_40 :: c15:c16 hole_two:three10_40 :: two:three hole_c1711_40 :: c17 hole_c1812_40 :: c18 hole_c19:c20:c21:c22:c2313_40 :: c19:c20:c21:c22:c23 hole_c24:c2514_40 :: c24:c25 hole_false:true15_40 :: false:true hole_c26:c2716_40 :: c26:c27 hole_c3317_40 :: c33 hole_c34:c3518_40 :: c34:c35 hole_c3919_40 :: c39 hole_c28:c2920_40 :: c28:c29 hole_c30:c31:c3221_40 :: c30:c31:c32 hole_c3622_40 :: c36 hole_c37:c3823_40 :: c37:c38 hole_ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_824_40 :: ring:if_1:if_2:if_5:if_6:if_9:if_3:if_4:if_7:if_8 gen_c:c1:c225_40 :: Nat -> c:c1:c2 gen_0':s26_40 :: Nat -> 0':s gen_nil:cons:f27_40 :: Nat -> nil:cons:f gen_c3:c4:c528_40 :: Nat -> c3:c4:c5 gen_c8:c9:c1029_40 :: Nat -> c8:c9:c10 gen_c11:c1230_40 :: Nat -> c11:c12 gen_c13:c1431_40 :: Nat -> c13:c14 gen_c15:c1632_40 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s26_40(n34_40), gen_nil:cons:f27_40(n34_40)) -> gen_c:c1:c225_40(n34_40), rt in Omega(1 + n34_40) SNDSPLIT(gen_0':s26_40(n1092_40), gen_nil:cons:f27_40(n1092_40)) -> gen_c3:c4:c528_40(n1092_40), rt in Omega(1 + n1092_40) LEQ(gen_0':s26_40(n2259_40), gen_0':s26_40(n2259_40)) -> gen_c8:c9:c1029_40(n2259_40), rt in Omega(1 + n2259_40) LENGTH(gen_nil:cons:f27_40(n3392_40)) -> gen_c11:c1230_40(n3392_40), rt in Omega(1 + n3392_40) APP(gen_nil:cons:f27_40(n4132_40), gen_nil:cons:f27_40(b)) -> gen_c13:c1431_40(n4132_40), rt in Omega(1 + n4132_40) fstsplit(gen_0':s26_40(n5754_40), gen_nil:cons:f27_40(n5754_40)) -> gen_nil:cons:f27_40(n5754_40), rt in Omega(0) leq(gen_0':s26_40(n6913_40), gen_0':s26_40(n6913_40)) -> true, rt in Omega(0) length(gen_nil:cons:f27_40(n7626_40)) -> gen_0':s26_40(n7626_40), rt in Omega(0) sndsplit(gen_0':s26_40(n8246_40), gen_nil:cons:f27_40(n8246_40)) -> gen_nil:cons:f27_40(0), rt in Omega(0) app(gen_nil:cons:f27_40(n9941_40), gen_nil:cons:f27_40(b)) -> gen_nil:cons:f27_40(+(n9941_40, b)), rt in Omega(0) Generator Equations: gen_c:c1:c225_40(0) <=> c gen_c:c1:c225_40(+(x, 1)) <=> c2(gen_c:c1:c225_40(x)) gen_0':s26_40(0) <=> 0' gen_0':s26_40(+(x, 1)) <=> s(gen_0':s26_40(x)) gen_nil:cons:f27_40(0) <=> nil gen_nil:cons:f27_40(+(x, 1)) <=> cons(nil, gen_nil:cons:f27_40(x)) gen_c3:c4:c528_40(0) <=> c3 gen_c3:c4:c528_40(+(x, 1)) <=> c5(gen_c3:c4:c528_40(x)) gen_c8:c9:c1029_40(0) <=> c8 gen_c8:c9:c1029_40(+(x, 1)) <=> c10(gen_c8:c9:c1029_40(x)) gen_c11:c1230_40(0) <=> c11 gen_c11:c1230_40(+(x, 1)) <=> c12(gen_c11:c1230_40(x)) gen_c13:c1431_40(0) <=> c13 gen_c13:c1431_40(+(x, 1)) <=> c14(gen_c13:c1431_40(x)) gen_c15:c1632_40(0) <=> c15 gen_c15:c1632_40(+(x, 1)) <=> c16(c13, gen_c15:c1632_40(x)) The following defined symbols remain to be analysed: map_f, MAP_F, RING, ring They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < RING map_f < RING map_f < ring