WORST_CASE(Omega(n^1),?) proof of /export/starexec/sandbox/benchmark/theBenchmark.trs # AProVE Commit ID: c69e44bd14796315568835c1ffa2502984884775 mhark 20210624 unpublished The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 3373 ms] (2) CpxRelTRS (3) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxRelTRS (5) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (6) typed CpxTrs (7) OrderProof [LOWER BOUND(ID), 22 ms] (8) typed CpxTrs (9) RewriteLemmaProof [LOWER BOUND(ID), 266 ms] (10) BEST (11) proven lower bound (12) LowerBoundPropagationProof [FINISHED, 0 ms] (13) BOUNDS(n^1, INF) (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 53 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 58 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 40 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 60 ms] (22) typed CpxTrs ---------------------------------------- (0) 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: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0) -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0)) -> c10 P(0) -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0) -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) The (relative) TRS S consists of the following rules: isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0) -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0)) -> 0 p(0) -> 0 inc(s(z0)) -> s(inc(z0)) inc(0) -> s(0) addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Rewrite Strategy: INNERMOST ---------------------------------------- (1) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (2) 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: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0) -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0)) -> c10 P(0) -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0) -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) The (relative) TRS S consists of the following rules: isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0) -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0)) -> 0 p(0) -> 0 inc(s(z0)) -> s(inc(z0)) inc(0) -> s(0) addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Rewrite Strategy: INNERMOST ---------------------------------------- (3) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (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: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) The (relative) TRS S consists of the following rules: isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Rewrite Strategy: INNERMOST ---------------------------------------- (5) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (6) Obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 ---------------------------------------- (7) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: APPEND, P, INC, ADDLISTS, p, inc, append, addLists They will be analysed ascendingly in the following order: APPEND < ADDLISTS P < ADDLISTS INC < ADDLISTS p < ADDLISTS inc < ADDLISTS append < ADDLISTS p < addLists inc < addLists append < addLists ---------------------------------------- (8) Obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: APPEND, P, INC, ADDLISTS, p, inc, append, addLists They will be analysed ascendingly in the following order: APPEND < ADDLISTS P < ADDLISTS INC < ADDLISTS p < ADDLISTS inc < ADDLISTS append < ADDLISTS p < addLists inc < addLists append < addLists ---------------------------------------- (9) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b)) -> gen_c7:c816_30(n20_30), rt in Omega(1 + n20_30) Induction Base: APPEND(gen_cons:nil:differentLengthError14_30(0), gen_0':s15_30(b)) ->_R^Omega(1) c7 Induction Step: APPEND(gen_cons:nil:differentLengthError14_30(+(n20_30, 1)), gen_0':s15_30(b)) ->_R^Omega(1) c8(APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b))) ->_IH c8(gen_c7:c816_30(c21_30)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (10) Complex Obligation (BEST) ---------------------------------------- (11) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: APPEND, P, INC, ADDLISTS, p, inc, append, addLists They will be analysed ascendingly in the following order: APPEND < ADDLISTS P < ADDLISTS INC < ADDLISTS p < ADDLISTS inc < ADDLISTS append < ADDLISTS p < addLists inc < addLists append < addLists ---------------------------------------- (12) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (13) BOUNDS(n^1, INF) ---------------------------------------- (14) Obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Lemmas: APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b)) -> gen_c7:c816_30(n20_30), rt in Omega(1 + n20_30) Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: P, INC, ADDLISTS, p, inc, append, addLists They will be analysed ascendingly in the following order: P < ADDLISTS INC < ADDLISTS p < ADDLISTS inc < ADDLISTS append < ADDLISTS p < addLists inc < addLists append < addLists ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: P(gen_0':s15_30(+(1, n1073_30))) -> gen_c9:c10:c1117_30(n1073_30), rt in Omega(1 + n1073_30) Induction Base: P(gen_0':s15_30(+(1, 0))) ->_R^Omega(1) c10 Induction Step: P(gen_0':s15_30(+(1, +(n1073_30, 1)))) ->_R^Omega(1) c9(P(s(gen_0':s15_30(n1073_30)))) ->_IH c9(gen_c9:c10:c1117_30(c1074_30)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Lemmas: APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b)) -> gen_c7:c816_30(n20_30), rt in Omega(1 + n20_30) P(gen_0':s15_30(+(1, n1073_30))) -> gen_c9:c10:c1117_30(n1073_30), rt in Omega(1 + n1073_30) Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: INC, ADDLISTS, p, inc, append, addLists They will be analysed ascendingly in the following order: INC < ADDLISTS p < ADDLISTS inc < ADDLISTS append < ADDLISTS p < addLists inc < addLists append < addLists ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: INC(gen_0':s15_30(n1577_30)) -> gen_c12:c1318_30(n1577_30), rt in Omega(1 + n1577_30) Induction Base: INC(gen_0':s15_30(0)) ->_R^Omega(1) c13 Induction Step: INC(gen_0':s15_30(+(n1577_30, 1))) ->_R^Omega(1) c12(INC(gen_0':s15_30(n1577_30))) ->_IH c12(gen_c12:c1318_30(c1578_30)) 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: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Lemmas: APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b)) -> gen_c7:c816_30(n20_30), rt in Omega(1 + n20_30) P(gen_0':s15_30(+(1, n1073_30))) -> gen_c9:c10:c1117_30(n1073_30), rt in Omega(1 + n1073_30) INC(gen_0':s15_30(n1577_30)) -> gen_c12:c1318_30(n1577_30), rt in Omega(1 + n1577_30) Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: p, ADDLISTS, inc, append, addLists They will be analysed ascendingly in the following order: p < ADDLISTS inc < ADDLISTS append < ADDLISTS p < addLists inc < addLists append < addLists ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: p(gen_0':s15_30(+(1, n2114_30))) -> gen_0':s15_30(n2114_30), rt in Omega(0) Induction Base: p(gen_0':s15_30(+(1, 0))) ->_R^Omega(0) 0' Induction Step: p(gen_0':s15_30(+(1, +(n2114_30, 1)))) ->_R^Omega(0) s(p(s(gen_0':s15_30(n2114_30)))) ->_IH s(gen_0':s15_30(c2115_30)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (20) Obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Lemmas: APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b)) -> gen_c7:c816_30(n20_30), rt in Omega(1 + n20_30) P(gen_0':s15_30(+(1, n1073_30))) -> gen_c9:c10:c1117_30(n1073_30), rt in Omega(1 + n1073_30) INC(gen_0':s15_30(n1577_30)) -> gen_c12:c1318_30(n1577_30), rt in Omega(1 + n1577_30) p(gen_0':s15_30(+(1, n2114_30))) -> gen_0':s15_30(n2114_30), rt in Omega(0) Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: inc, ADDLISTS, append, addLists They will be analysed ascendingly in the following order: inc < ADDLISTS append < ADDLISTS inc < addLists append < addLists ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: inc(gen_0':s15_30(n2561_30)) -> gen_0':s15_30(+(1, n2561_30)), rt in Omega(0) Induction Base: inc(gen_0':s15_30(0)) ->_R^Omega(0) s(0') Induction Step: inc(gen_0':s15_30(+(n2561_30, 1))) ->_R^Omega(0) s(inc(gen_0':s15_30(n2561_30))) ->_IH s(gen_0':s15_30(+(1, c2562_30))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (22) Obligation: Innermost TRS: Rules: ISEMPTY(cons(z0, z1)) -> c ISEMPTY(nil) -> c1 ISZERO(0') -> c2 ISZERO(s(z0)) -> c3 HEAD(cons(z0, z1)) -> c4 TAIL(cons(z0, z1)) -> c5 TAIL(nil) -> c6 APPEND(nil, z0) -> c7 APPEND(cons(z0, z1), z2) -> c8(APPEND(z1, z2)) P(s(s(z0))) -> c9(P(s(z0))) P(s(0')) -> c10 P(0') -> c11 INC(s(z0)) -> c12(INC(z0)) INC(0') -> c13 ADDLISTS(z0, z1, z2) -> c14(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z0)) ADDLISTS(z0, z1, z2) -> c15(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISEMPTY(z1)) ADDLISTS(z0, z1, z2) -> c16(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), ISZERO(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c17(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c18(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c19(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), P(head(z0)), HEAD(z0)) ADDLISTS(z0, z1, z2) -> c20(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z0)) ADDLISTS(z0, z1, z2) -> c21(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), INC(head(z1)), HEAD(z1)) ADDLISTS(z0, z1, z2) -> c22(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), TAIL(z1)) ADDLISTS(z0, z1, z2) -> c23(IF(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))), APPEND(z2, head(z1)), HEAD(z1)) IF(true, true, z0, z1, z2, z3, z4, z5, z6) -> c24 IF(true, false, z0, z1, z2, z3, z4, z5, z6) -> c25 IF(false, true, z0, z1, z2, z3, z4, z5, z6) -> c26 IF(false, false, false, z0, z1, z2, z3, z4, z5) -> c27(ADDLISTS(z2, z3, z4)) IF(false, false, true, z0, z1, z2, z3, z4, z5) -> c28(ADDLISTS(z0, z1, z5)) ADDLIST(z0, z1) -> c29(ADDLISTS(z0, z1, nil)) isEmpty(cons(z0, z1)) -> false isEmpty(nil) -> true isZero(0') -> true isZero(s(z0)) -> false head(cons(z0, z1)) -> z0 tail(cons(z0, z1)) -> z1 tail(nil) -> nil append(nil, z0) -> cons(z0, nil) append(cons(z0, z1), z2) -> cons(z0, append(z1, z2)) p(s(s(z0))) -> s(p(s(z0))) p(s(0')) -> 0' p(0') -> 0' inc(s(z0)) -> s(inc(z0)) inc(0') -> s(0') addLists(z0, z1, z2) -> if(isEmpty(z0), isEmpty(z1), isZero(head(z0)), tail(z0), tail(z1), cons(p(head(z0)), tail(z0)), cons(inc(head(z1)), tail(z1)), z2, append(z2, head(z1))) if(true, true, z0, z1, z2, z3, z4, z5, z6) -> z5 if(true, false, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, true, z0, z1, z2, z3, z4, z5, z6) -> differentLengthError if(false, false, false, z0, z1, z2, z3, z4, z5) -> addLists(z2, z3, z4) if(false, false, true, z0, z1, z2, z3, z4, z5) -> addLists(z0, z1, z5) addList(z0, z1) -> addLists(z0, z1, nil) Types: ISEMPTY :: cons:nil:differentLengthError -> c:c1 cons :: 0':s -> cons:nil:differentLengthError -> cons:nil:differentLengthError c :: c:c1 nil :: cons:nil:differentLengthError c1 :: c:c1 ISZERO :: 0':s -> c2:c3 0' :: 0':s c2 :: c2:c3 s :: 0':s -> 0':s c3 :: c2:c3 HEAD :: cons:nil:differentLengthError -> c4 c4 :: c4 TAIL :: cons:nil:differentLengthError -> c5:c6 c5 :: c5:c6 c6 :: c5:c6 APPEND :: cons:nil:differentLengthError -> 0':s -> c7:c8 c7 :: c7:c8 c8 :: c7:c8 -> c7:c8 P :: 0':s -> c9:c10:c11 c9 :: c9:c10:c11 -> c9:c10:c11 c10 :: c9:c10:c11 c11 :: c9:c10:c11 INC :: 0':s -> c12:c13 c12 :: c12:c13 -> c12:c13 c13 :: c12:c13 ADDLISTS :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c14 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 IF :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> c24:c25:c26:c27:c28 isEmpty :: cons:nil:differentLengthError -> true:false isZero :: 0':s -> true:false head :: cons:nil:differentLengthError -> 0':s tail :: cons:nil:differentLengthError -> cons:nil:differentLengthError p :: 0':s -> 0':s inc :: 0':s -> 0':s append :: cons:nil:differentLengthError -> 0':s -> cons:nil:differentLengthError c15 :: c24:c25:c26:c27:c28 -> c:c1 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c16 :: c24:c25:c26:c27:c28 -> c2:c3 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c17 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c18 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c19 :: c24:c25:c26:c27:c28 -> c9:c10:c11 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c20 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c21 :: c24:c25:c26:c27:c28 -> c12:c13 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c22 :: c24:c25:c26:c27:c28 -> c5:c6 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 c23 :: c24:c25:c26:c27:c28 -> c7:c8 -> c4 -> c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 true :: true:false c24 :: c24:c25:c26:c27:c28 false :: true:false c25 :: c24:c25:c26:c27:c28 c26 :: c24:c25:c26:c27:c28 c27 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 c28 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c24:c25:c26:c27:c28 ADDLIST :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> c29 c29 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 -> c29 addLists :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError if :: true:false -> true:false -> true:false -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError differentLengthError :: cons:nil:differentLengthError addList :: cons:nil:differentLengthError -> cons:nil:differentLengthError -> cons:nil:differentLengthError hole_c:c11_30 :: c:c1 hole_cons:nil:differentLengthError2_30 :: cons:nil:differentLengthError hole_0':s3_30 :: 0':s hole_c2:c34_30 :: c2:c3 hole_c45_30 :: c4 hole_c5:c66_30 :: c5:c6 hole_c7:c87_30 :: c7:c8 hole_c9:c10:c118_30 :: c9:c10:c11 hole_c12:c139_30 :: c12:c13 hole_c14:c15:c16:c17:c18:c19:c20:c21:c22:c2310_30 :: c14:c15:c16:c17:c18:c19:c20:c21:c22:c23 hole_c24:c25:c26:c27:c2811_30 :: c24:c25:c26:c27:c28 hole_true:false12_30 :: true:false hole_c2913_30 :: c29 gen_cons:nil:differentLengthError14_30 :: Nat -> cons:nil:differentLengthError gen_0':s15_30 :: Nat -> 0':s gen_c7:c816_30 :: Nat -> c7:c8 gen_c9:c10:c1117_30 :: Nat -> c9:c10:c11 gen_c12:c1318_30 :: Nat -> c12:c13 Lemmas: APPEND(gen_cons:nil:differentLengthError14_30(n20_30), gen_0':s15_30(b)) -> gen_c7:c816_30(n20_30), rt in Omega(1 + n20_30) P(gen_0':s15_30(+(1, n1073_30))) -> gen_c9:c10:c1117_30(n1073_30), rt in Omega(1 + n1073_30) INC(gen_0':s15_30(n1577_30)) -> gen_c12:c1318_30(n1577_30), rt in Omega(1 + n1577_30) p(gen_0':s15_30(+(1, n2114_30))) -> gen_0':s15_30(n2114_30), rt in Omega(0) inc(gen_0':s15_30(n2561_30)) -> gen_0':s15_30(+(1, n2561_30)), rt in Omega(0) Generator Equations: gen_cons:nil:differentLengthError14_30(0) <=> nil gen_cons:nil:differentLengthError14_30(+(x, 1)) <=> cons(0', gen_cons:nil:differentLengthError14_30(x)) gen_0':s15_30(0) <=> 0' gen_0':s15_30(+(x, 1)) <=> s(gen_0':s15_30(x)) gen_c7:c816_30(0) <=> c7 gen_c7:c816_30(+(x, 1)) <=> c8(gen_c7:c816_30(x)) gen_c9:c10:c1117_30(0) <=> c10 gen_c9:c10:c1117_30(+(x, 1)) <=> c9(gen_c9:c10:c1117_30(x)) gen_c12:c1318_30(0) <=> c13 gen_c12:c1318_30(+(x, 1)) <=> c12(gen_c12:c1318_30(x)) The following defined symbols remain to be analysed: append, ADDLISTS, addLists They will be analysed ascendingly in the following order: append < ADDLISTS append < addLists