WORST_CASE(Omega(n^1),?) proof of input_ch7pWjOWkQ.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), 0 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), 0 ms] (8) typed CpxTrs (9) OrderProof [LOWER BOUND(ID), 1 ms] (10) typed CpxTrs (11) RewriteLemmaProof [LOWER BOUND(ID), 95.0 s] (12) BEST (13) proven lower bound (14) LowerBoundPropagationProof [FINISHED, 0 ms] (15) BOUNDS(n^1, INF) (16) 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: empty(nil) -> true empty(cons(x, y)) -> false tail(nil) -> nil tail(cons(x, y)) -> y head(cons(x, y)) -> x zero(0) -> true zero(s(x)) -> false p(0) -> 0 p(s(0)) -> 0 p(s(s(x))) -> s(p(s(x))) intlist(x) -> if_intlist(empty(x), x) if_intlist(true, x) -> nil if_intlist(false, x) -> cons(s(head(x)), intlist(tail(x))) int(x, y) -> if_int(zero(x), zero(y), x, y) if_int(true, b, x, y) -> if1(b, x, y) if_int(false, b, x, y) -> if2(b, x, y) if1(true, x, y) -> cons(0, nil) if1(false, x, y) -> cons(0, int(s(0), y)) if2(true, x, y) -> nil if2(false, x, y) -> intlist(int(p(x), p(y))) 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: empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0) -> true zero(s(z0)) -> false p(0) -> 0 p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0, nil) if1(false, z0, z1) -> cons(0, int(s(0), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) Tuples: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0) -> c5 ZERO(s(z0)) -> c6 P(0) -> c7 P(s(0)) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) S tuples: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0) -> c5 ZERO(s(z0)) -> c6 P(0) -> c7 P(s(0)) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) K tuples:none Defined Rule Symbols: empty_1, tail_1, head_1, zero_1, p_1, intlist_1, if_intlist_2, int_2, if_int_4, if1_3, if2_3 Defined Pair Symbols: EMPTY_1, TAIL_1, HEAD_1, ZERO_1, P_1, INTLIST_1, IF_INTLIST_2, INT_2, IF_INT_4, IF1_3, IF2_3 Compound Symbols: c, c1, c2, c3, c4, c5, c6, c7, c8, c9_1, c10_2, c11, c12_1, c13_2, c14_2, c15_2, c16_1, c17_1, c18, c19_1, c20, c21_3, c22_3 ---------------------------------------- (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: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0) -> c5 ZERO(s(z0)) -> c6 P(0) -> c7 P(s(0)) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) The (relative) TRS S consists of the following rules: empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0) -> true zero(s(z0)) -> false p(0) -> 0 p(s(0)) -> 0 p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0, nil) if1(false, z0, z1) -> cons(0, int(s(0), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) 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: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0') -> c5 ZERO(s(z0)) -> c6 P(0') -> c7 P(s(0')) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0'), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) The (relative) TRS S consists of the following rules: empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0') -> true zero(s(z0)) -> false p(0') -> 0' p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0', nil) if1(false, z0, z1) -> cons(0', int(s(0'), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (8) Obligation: Innermost TRS: Rules: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0') -> c5 ZERO(s(z0)) -> c6 P(0') -> c7 P(s(0')) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0'), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0') -> true zero(s(z0)) -> false p(0') -> 0' p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0', nil) if1(false, z0, z1) -> cons(0', int(s(0'), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) Types: EMPTY :: nil:cons -> c:c1 nil :: nil:cons c :: c:c1 cons :: 0':s -> nil:cons -> nil:cons c1 :: c:c1 TAIL :: nil:cons -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:cons -> c4 c4 :: c4 ZERO :: 0':s -> c5:c6 0' :: 0':s c5 :: c5:c6 s :: 0':s -> 0':s c6 :: c5:c6 P :: 0':s -> c7:c8:c9 c7 :: c7:c8:c9 c8 :: c7:c8:c9 c9 :: c7:c8:c9 -> c7:c8:c9 INTLIST :: nil:cons -> c10 c10 :: c11:c12:c13 -> c:c1 -> c10 IF_INTLIST :: true:false -> nil:cons -> c11:c12:c13 empty :: nil:cons -> true:false true :: true:false c11 :: c11:c12:c13 false :: true:false c12 :: c4 -> c11:c12:c13 c13 :: c10 -> c2:c3 -> c11:c12:c13 tail :: nil:cons -> nil:cons INT :: 0':s -> 0':s -> c14:c15 c14 :: c16:c17 -> c5:c6 -> c14:c15 IF_INT :: true:false -> true:false -> 0':s -> 0':s -> c16:c17 zero :: 0':s -> true:false c15 :: c16:c17 -> c5:c6 -> c14:c15 c16 :: c18:c19 -> c16:c17 IF1 :: true:false -> 0':s -> 0':s -> c18:c19 c17 :: c20:c21:c22 -> c16:c17 IF2 :: true:false -> 0':s -> 0':s -> c20:c21:c22 c18 :: c18:c19 c19 :: c14:c15 -> c18:c19 c20 :: c20:c21:c22 c21 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 int :: 0':s -> 0':s -> nil:cons p :: 0':s -> 0':s c22 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 head :: nil:cons -> 0':s intlist :: nil:cons -> nil:cons if_intlist :: true:false -> nil:cons -> nil:cons if_int :: true:false -> true:false -> 0':s -> 0':s -> nil:cons if1 :: true:false -> 0':s -> 0':s -> nil:cons if2 :: true:false -> 0':s -> 0':s -> nil:cons hole_c:c11_23 :: c:c1 hole_nil:cons2_23 :: nil:cons hole_0':s3_23 :: 0':s hole_c2:c34_23 :: c2:c3 hole_c45_23 :: c4 hole_c5:c66_23 :: c5:c6 hole_c7:c8:c97_23 :: c7:c8:c9 hole_c108_23 :: c10 hole_c11:c12:c139_23 :: c11:c12:c13 hole_true:false10_23 :: true:false hole_c14:c1511_23 :: c14:c15 hole_c16:c1712_23 :: c16:c17 hole_c18:c1913_23 :: c18:c19 hole_c20:c21:c2214_23 :: c20:c21:c22 gen_nil:cons15_23 :: Nat -> nil:cons gen_0':s16_23 :: Nat -> 0':s gen_c7:c8:c917_23 :: Nat -> c7:c8:c9 ---------------------------------------- (9) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: P, INTLIST, INT, int, p, intlist They will be analysed ascendingly in the following order: P < INT INTLIST < INT int < INT p < INT p < int intlist < int ---------------------------------------- (10) Obligation: Innermost TRS: Rules: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0') -> c5 ZERO(s(z0)) -> c6 P(0') -> c7 P(s(0')) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0'), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0') -> true zero(s(z0)) -> false p(0') -> 0' p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0', nil) if1(false, z0, z1) -> cons(0', int(s(0'), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) Types: EMPTY :: nil:cons -> c:c1 nil :: nil:cons c :: c:c1 cons :: 0':s -> nil:cons -> nil:cons c1 :: c:c1 TAIL :: nil:cons -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:cons -> c4 c4 :: c4 ZERO :: 0':s -> c5:c6 0' :: 0':s c5 :: c5:c6 s :: 0':s -> 0':s c6 :: c5:c6 P :: 0':s -> c7:c8:c9 c7 :: c7:c8:c9 c8 :: c7:c8:c9 c9 :: c7:c8:c9 -> c7:c8:c9 INTLIST :: nil:cons -> c10 c10 :: c11:c12:c13 -> c:c1 -> c10 IF_INTLIST :: true:false -> nil:cons -> c11:c12:c13 empty :: nil:cons -> true:false true :: true:false c11 :: c11:c12:c13 false :: true:false c12 :: c4 -> c11:c12:c13 c13 :: c10 -> c2:c3 -> c11:c12:c13 tail :: nil:cons -> nil:cons INT :: 0':s -> 0':s -> c14:c15 c14 :: c16:c17 -> c5:c6 -> c14:c15 IF_INT :: true:false -> true:false -> 0':s -> 0':s -> c16:c17 zero :: 0':s -> true:false c15 :: c16:c17 -> c5:c6 -> c14:c15 c16 :: c18:c19 -> c16:c17 IF1 :: true:false -> 0':s -> 0':s -> c18:c19 c17 :: c20:c21:c22 -> c16:c17 IF2 :: true:false -> 0':s -> 0':s -> c20:c21:c22 c18 :: c18:c19 c19 :: c14:c15 -> c18:c19 c20 :: c20:c21:c22 c21 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 int :: 0':s -> 0':s -> nil:cons p :: 0':s -> 0':s c22 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 head :: nil:cons -> 0':s intlist :: nil:cons -> nil:cons if_intlist :: true:false -> nil:cons -> nil:cons if_int :: true:false -> true:false -> 0':s -> 0':s -> nil:cons if1 :: true:false -> 0':s -> 0':s -> nil:cons if2 :: true:false -> 0':s -> 0':s -> nil:cons hole_c:c11_23 :: c:c1 hole_nil:cons2_23 :: nil:cons hole_0':s3_23 :: 0':s hole_c2:c34_23 :: c2:c3 hole_c45_23 :: c4 hole_c5:c66_23 :: c5:c6 hole_c7:c8:c97_23 :: c7:c8:c9 hole_c108_23 :: c10 hole_c11:c12:c139_23 :: c11:c12:c13 hole_true:false10_23 :: true:false hole_c14:c1511_23 :: c14:c15 hole_c16:c1712_23 :: c16:c17 hole_c18:c1913_23 :: c18:c19 hole_c20:c21:c2214_23 :: c20:c21:c22 gen_nil:cons15_23 :: Nat -> nil:cons gen_0':s16_23 :: Nat -> 0':s gen_c7:c8:c917_23 :: Nat -> c7:c8:c9 Generator Equations: gen_nil:cons15_23(0) <=> nil gen_nil:cons15_23(+(x, 1)) <=> cons(0', gen_nil:cons15_23(x)) gen_0':s16_23(0) <=> 0' gen_0':s16_23(+(x, 1)) <=> s(gen_0':s16_23(x)) gen_c7:c8:c917_23(0) <=> c7 gen_c7:c8:c917_23(+(x, 1)) <=> c9(gen_c7:c8:c917_23(x)) The following defined symbols remain to be analysed: P, INTLIST, INT, int, p, intlist They will be analysed ascendingly in the following order: P < INT INTLIST < INT int < INT p < INT p < int intlist < int ---------------------------------------- (11) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: P(gen_0':s16_23(+(2, n19_23))) -> *18_23, rt in Omega(n19_23) Induction Base: P(gen_0':s16_23(+(2, 0))) Induction Step: P(gen_0':s16_23(+(2, +(n19_23, 1)))) ->_R^Omega(1) c9(P(s(gen_0':s16_23(+(1, n19_23))))) ->_IH c9(*18_23) 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: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0') -> c5 ZERO(s(z0)) -> c6 P(0') -> c7 P(s(0')) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0'), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0') -> true zero(s(z0)) -> false p(0') -> 0' p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0', nil) if1(false, z0, z1) -> cons(0', int(s(0'), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) Types: EMPTY :: nil:cons -> c:c1 nil :: nil:cons c :: c:c1 cons :: 0':s -> nil:cons -> nil:cons c1 :: c:c1 TAIL :: nil:cons -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:cons -> c4 c4 :: c4 ZERO :: 0':s -> c5:c6 0' :: 0':s c5 :: c5:c6 s :: 0':s -> 0':s c6 :: c5:c6 P :: 0':s -> c7:c8:c9 c7 :: c7:c8:c9 c8 :: c7:c8:c9 c9 :: c7:c8:c9 -> c7:c8:c9 INTLIST :: nil:cons -> c10 c10 :: c11:c12:c13 -> c:c1 -> c10 IF_INTLIST :: true:false -> nil:cons -> c11:c12:c13 empty :: nil:cons -> true:false true :: true:false c11 :: c11:c12:c13 false :: true:false c12 :: c4 -> c11:c12:c13 c13 :: c10 -> c2:c3 -> c11:c12:c13 tail :: nil:cons -> nil:cons INT :: 0':s -> 0':s -> c14:c15 c14 :: c16:c17 -> c5:c6 -> c14:c15 IF_INT :: true:false -> true:false -> 0':s -> 0':s -> c16:c17 zero :: 0':s -> true:false c15 :: c16:c17 -> c5:c6 -> c14:c15 c16 :: c18:c19 -> c16:c17 IF1 :: true:false -> 0':s -> 0':s -> c18:c19 c17 :: c20:c21:c22 -> c16:c17 IF2 :: true:false -> 0':s -> 0':s -> c20:c21:c22 c18 :: c18:c19 c19 :: c14:c15 -> c18:c19 c20 :: c20:c21:c22 c21 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 int :: 0':s -> 0':s -> nil:cons p :: 0':s -> 0':s c22 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 head :: nil:cons -> 0':s intlist :: nil:cons -> nil:cons if_intlist :: true:false -> nil:cons -> nil:cons if_int :: true:false -> true:false -> 0':s -> 0':s -> nil:cons if1 :: true:false -> 0':s -> 0':s -> nil:cons if2 :: true:false -> 0':s -> 0':s -> nil:cons hole_c:c11_23 :: c:c1 hole_nil:cons2_23 :: nil:cons hole_0':s3_23 :: 0':s hole_c2:c34_23 :: c2:c3 hole_c45_23 :: c4 hole_c5:c66_23 :: c5:c6 hole_c7:c8:c97_23 :: c7:c8:c9 hole_c108_23 :: c10 hole_c11:c12:c139_23 :: c11:c12:c13 hole_true:false10_23 :: true:false hole_c14:c1511_23 :: c14:c15 hole_c16:c1712_23 :: c16:c17 hole_c18:c1913_23 :: c18:c19 hole_c20:c21:c2214_23 :: c20:c21:c22 gen_nil:cons15_23 :: Nat -> nil:cons gen_0':s16_23 :: Nat -> 0':s gen_c7:c8:c917_23 :: Nat -> c7:c8:c9 Generator Equations: gen_nil:cons15_23(0) <=> nil gen_nil:cons15_23(+(x, 1)) <=> cons(0', gen_nil:cons15_23(x)) gen_0':s16_23(0) <=> 0' gen_0':s16_23(+(x, 1)) <=> s(gen_0':s16_23(x)) gen_c7:c8:c917_23(0) <=> c7 gen_c7:c8:c917_23(+(x, 1)) <=> c9(gen_c7:c8:c917_23(x)) The following defined symbols remain to be analysed: P, INTLIST, INT, int, p, intlist They will be analysed ascendingly in the following order: P < INT INTLIST < INT int < INT p < INT p < int intlist < int ---------------------------------------- (14) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (15) BOUNDS(n^1, INF) ---------------------------------------- (16) Obligation: Innermost TRS: Rules: EMPTY(nil) -> c EMPTY(cons(z0, z1)) -> c1 TAIL(nil) -> c2 TAIL(cons(z0, z1)) -> c3 HEAD(cons(z0, z1)) -> c4 ZERO(0') -> c5 ZERO(s(z0)) -> c6 P(0') -> c7 P(s(0')) -> c8 P(s(s(z0))) -> c9(P(s(z0))) INTLIST(z0) -> c10(IF_INTLIST(empty(z0), z0), EMPTY(z0)) IF_INTLIST(true, z0) -> c11 IF_INTLIST(false, z0) -> c12(HEAD(z0)) IF_INTLIST(false, z0) -> c13(INTLIST(tail(z0)), TAIL(z0)) INT(z0, z1) -> c14(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z0)) INT(z0, z1) -> c15(IF_INT(zero(z0), zero(z1), z0, z1), ZERO(z1)) IF_INT(true, z0, z1, z2) -> c16(IF1(z0, z1, z2)) IF_INT(false, z0, z1, z2) -> c17(IF2(z0, z1, z2)) IF1(true, z0, z1) -> c18 IF1(false, z0, z1) -> c19(INT(s(0'), z1)) IF2(true, z0, z1) -> c20 IF2(false, z0, z1) -> c21(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z0)) IF2(false, z0, z1) -> c22(INTLIST(int(p(z0), p(z1))), INT(p(z0), p(z1)), P(z1)) empty(nil) -> true empty(cons(z0, z1)) -> false tail(nil) -> nil tail(cons(z0, z1)) -> z1 head(cons(z0, z1)) -> z0 zero(0') -> true zero(s(z0)) -> false p(0') -> 0' p(s(0')) -> 0' p(s(s(z0))) -> s(p(s(z0))) intlist(z0) -> if_intlist(empty(z0), z0) if_intlist(true, z0) -> nil if_intlist(false, z0) -> cons(s(head(z0)), intlist(tail(z0))) int(z0, z1) -> if_int(zero(z0), zero(z1), z0, z1) if_int(true, z0, z1, z2) -> if1(z0, z1, z2) if_int(false, z0, z1, z2) -> if2(z0, z1, z2) if1(true, z0, z1) -> cons(0', nil) if1(false, z0, z1) -> cons(0', int(s(0'), z1)) if2(true, z0, z1) -> nil if2(false, z0, z1) -> intlist(int(p(z0), p(z1))) Types: EMPTY :: nil:cons -> c:c1 nil :: nil:cons c :: c:c1 cons :: 0':s -> nil:cons -> nil:cons c1 :: c:c1 TAIL :: nil:cons -> c2:c3 c2 :: c2:c3 c3 :: c2:c3 HEAD :: nil:cons -> c4 c4 :: c4 ZERO :: 0':s -> c5:c6 0' :: 0':s c5 :: c5:c6 s :: 0':s -> 0':s c6 :: c5:c6 P :: 0':s -> c7:c8:c9 c7 :: c7:c8:c9 c8 :: c7:c8:c9 c9 :: c7:c8:c9 -> c7:c8:c9 INTLIST :: nil:cons -> c10 c10 :: c11:c12:c13 -> c:c1 -> c10 IF_INTLIST :: true:false -> nil:cons -> c11:c12:c13 empty :: nil:cons -> true:false true :: true:false c11 :: c11:c12:c13 false :: true:false c12 :: c4 -> c11:c12:c13 c13 :: c10 -> c2:c3 -> c11:c12:c13 tail :: nil:cons -> nil:cons INT :: 0':s -> 0':s -> c14:c15 c14 :: c16:c17 -> c5:c6 -> c14:c15 IF_INT :: true:false -> true:false -> 0':s -> 0':s -> c16:c17 zero :: 0':s -> true:false c15 :: c16:c17 -> c5:c6 -> c14:c15 c16 :: c18:c19 -> c16:c17 IF1 :: true:false -> 0':s -> 0':s -> c18:c19 c17 :: c20:c21:c22 -> c16:c17 IF2 :: true:false -> 0':s -> 0':s -> c20:c21:c22 c18 :: c18:c19 c19 :: c14:c15 -> c18:c19 c20 :: c20:c21:c22 c21 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 int :: 0':s -> 0':s -> nil:cons p :: 0':s -> 0':s c22 :: c10 -> c14:c15 -> c7:c8:c9 -> c20:c21:c22 head :: nil:cons -> 0':s intlist :: nil:cons -> nil:cons if_intlist :: true:false -> nil:cons -> nil:cons if_int :: true:false -> true:false -> 0':s -> 0':s -> nil:cons if1 :: true:false -> 0':s -> 0':s -> nil:cons if2 :: true:false -> 0':s -> 0':s -> nil:cons hole_c:c11_23 :: c:c1 hole_nil:cons2_23 :: nil:cons hole_0':s3_23 :: 0':s hole_c2:c34_23 :: c2:c3 hole_c45_23 :: c4 hole_c5:c66_23 :: c5:c6 hole_c7:c8:c97_23 :: c7:c8:c9 hole_c108_23 :: c10 hole_c11:c12:c139_23 :: c11:c12:c13 hole_true:false10_23 :: true:false hole_c14:c1511_23 :: c14:c15 hole_c16:c1712_23 :: c16:c17 hole_c18:c1913_23 :: c18:c19 hole_c20:c21:c2214_23 :: c20:c21:c22 gen_nil:cons15_23 :: Nat -> nil:cons gen_0':s16_23 :: Nat -> 0':s gen_c7:c8:c917_23 :: Nat -> c7:c8:c9 Lemmas: P(gen_0':s16_23(+(2, n19_23))) -> *18_23, rt in Omega(n19_23) Generator Equations: gen_nil:cons15_23(0) <=> nil gen_nil:cons15_23(+(x, 1)) <=> cons(0', gen_nil:cons15_23(x)) gen_0':s16_23(0) <=> 0' gen_0':s16_23(+(x, 1)) <=> s(gen_0':s16_23(x)) gen_c7:c8:c917_23(0) <=> c7 gen_c7:c8:c917_23(+(x, 1)) <=> c9(gen_c7:c8:c917_23(x)) The following defined symbols remain to be analysed: INTLIST, INT, int, p, intlist They will be analysed ascendingly in the following order: INTLIST < INT int < INT p < INT p < int intlist < int