WORST_CASE(Omega(n^1),O(n^1)) proof of input_N9yYQe5BVO.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, n^1). (0) CpxTRS (1) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (2) CpxTRS (3) CpxTrsMatchBoundsTAProof [FINISHED, 109 ms] (4) BOUNDS(1, n^1) (5) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxRelTRS (9) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxRelTRS (11) TypeInferenceProof [BOTH BOUNDS(ID, ID), 9 ms] (12) typed CpxTrs (13) OrderProof [LOWER BOUND(ID), 0 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 282 ms] (16) BEST (17) proven lower bound (18) LowerBoundPropagationProof [FINISHED, 0 ms] (19) BOUNDS(n^1, INF) (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 25 ms] (22) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). The TRS R consists of the following rules: dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(x, xs))) -> dec(Cons(x, xs)) dec(Cons(Cons(x, xs), Nil)) -> dec(Nil) dec(Cons(Cons(x', xs'), Cons(x, xs))) -> dec(Cons(x, xs)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(x, xs))) -> False isNilNil(Cons(Cons(x, xs), Nil)) -> False isNilNil(Cons(Cons(x', xs'), Cons(x, xs))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(x, xs)) -> nestdec(dec(Cons(x, xs))) number17(n) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(x) -> nestdec(x) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (2) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(x, xs))) -> dec(Cons(x, xs)) dec(Cons(Cons(x, xs), Nil)) -> dec(Nil) dec(Cons(Cons(x', xs'), Cons(x, xs))) -> dec(Cons(x, xs)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(x, xs))) -> False isNilNil(Cons(Cons(x, xs), Nil)) -> False isNilNil(Cons(Cons(x', xs'), Cons(x, xs))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(x, xs)) -> nestdec(dec(Cons(x, xs))) number17(n) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(x) -> nestdec(x) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (3) CpxTrsMatchBoundsTAProof (FINISHED) A linear upper bound on the runtime complexity of the TRS R could be shown with a Match-Bound[TAB_LEFTLINEAR,TAB_NONLEFTLINEAR] (for contructor-based start-terms) of 2. The compatible tree automaton used to show the Match-Boundedness (for constructor-based start-terms) is represented by: final states : [1, 2, 3, 4, 5] transitions: Cons0(0, 0) -> 0 Nil0() -> 0 True0() -> 0 False0() -> 0 dec0(0) -> 1 isNilNil0(0) -> 2 nestdec0(0) -> 3 number170(0) -> 4 goal0(0) -> 5 Nil1() -> 1 Cons1(0, 0) -> 6 dec1(6) -> 1 Nil1() -> 7 dec1(7) -> 1 True1() -> 2 False1() -> 2 Nil1() -> 8 Nil1() -> 11 Cons1(8, 11) -> 10 Cons1(8, 10) -> 9 Cons1(8, 9) -> 9 Cons1(8, 9) -> 3 dec1(6) -> 12 nestdec1(12) -> 3 Cons1(8, 9) -> 4 nestdec1(0) -> 5 Nil1() -> 12 dec1(7) -> 12 Cons1(8, 9) -> 5 nestdec1(12) -> 5 Nil2() -> 13 Nil2() -> 16 Cons2(13, 16) -> 15 Cons2(13, 15) -> 14 Cons2(13, 14) -> 14 Cons2(13, 14) -> 3 Cons2(13, 14) -> 5 ---------------------------------------- (4) BOUNDS(1, n^1) ---------------------------------------- (5) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Tuples: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) S tuples: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) K tuples:none Defined Rule Symbols: dec_1, isNilNil_1, nestdec_1, number17_1, goal_1 Defined Pair Symbols: DEC_1, ISNILNIL_1, NESTDEC_1, NUMBER17_1, GOAL_1 Compound Symbols: c, c1_1, c2_1, c3_1, c4, c5, c6, c7, c8, c9_2, c10, c11_1 ---------------------------------------- (7) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (8) 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: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) The (relative) TRS S consists of the following rules: dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Rewrite Strategy: INNERMOST ---------------------------------------- (9) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (10) 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: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) The (relative) TRS S consists of the following rules: dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Rewrite Strategy: INNERMOST ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (12) Obligation: Innermost TRS: Rules: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Types: DEC :: Nil:Cons -> c:c1:c2:c3 Cons :: Nil:Cons -> Nil:Cons -> Nil:Cons Nil :: Nil:Cons c :: c:c1:c2:c3 c1 :: c:c1:c2:c3 -> c:c1:c2:c3 c2 :: c:c1:c2:c3 -> c:c1:c2:c3 c3 :: c:c1:c2:c3 -> c:c1:c2:c3 ISNILNIL :: Nil:Cons -> c4:c5:c6:c7 c4 :: c4:c5:c6:c7 c5 :: c4:c5:c6:c7 c6 :: c4:c5:c6:c7 c7 :: c4:c5:c6:c7 NESTDEC :: Nil:Cons -> c8:c9 c8 :: c8:c9 c9 :: c8:c9 -> c:c1:c2:c3 -> c8:c9 dec :: Nil:Cons -> Nil:Cons NUMBER17 :: a -> c10 c10 :: c10 GOAL :: Nil:Cons -> c11 c11 :: c8:c9 -> c11 isNilNil :: Nil:Cons -> True:False True :: True:False False :: True:False nestdec :: Nil:Cons -> Nil:Cons number17 :: b -> Nil:Cons goal :: Nil:Cons -> Nil:Cons hole_c:c1:c2:c31_12 :: c:c1:c2:c3 hole_Nil:Cons2_12 :: Nil:Cons hole_c4:c5:c6:c73_12 :: c4:c5:c6:c7 hole_c8:c94_12 :: c8:c9 hole_c105_12 :: c10 hole_a6_12 :: a hole_c117_12 :: c11 hole_True:False8_12 :: True:False hole_b9_12 :: b gen_c:c1:c2:c310_12 :: Nat -> c:c1:c2:c3 gen_Nil:Cons11_12 :: Nat -> Nil:Cons gen_c8:c912_12 :: Nat -> c8:c9 ---------------------------------------- (13) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: DEC, NESTDEC, dec, nestdec They will be analysed ascendingly in the following order: DEC < NESTDEC dec < NESTDEC dec < nestdec ---------------------------------------- (14) Obligation: Innermost TRS: Rules: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Types: DEC :: Nil:Cons -> c:c1:c2:c3 Cons :: Nil:Cons -> Nil:Cons -> Nil:Cons Nil :: Nil:Cons c :: c:c1:c2:c3 c1 :: c:c1:c2:c3 -> c:c1:c2:c3 c2 :: c:c1:c2:c3 -> c:c1:c2:c3 c3 :: c:c1:c2:c3 -> c:c1:c2:c3 ISNILNIL :: Nil:Cons -> c4:c5:c6:c7 c4 :: c4:c5:c6:c7 c5 :: c4:c5:c6:c7 c6 :: c4:c5:c6:c7 c7 :: c4:c5:c6:c7 NESTDEC :: Nil:Cons -> c8:c9 c8 :: c8:c9 c9 :: c8:c9 -> c:c1:c2:c3 -> c8:c9 dec :: Nil:Cons -> Nil:Cons NUMBER17 :: a -> c10 c10 :: c10 GOAL :: Nil:Cons -> c11 c11 :: c8:c9 -> c11 isNilNil :: Nil:Cons -> True:False True :: True:False False :: True:False nestdec :: Nil:Cons -> Nil:Cons number17 :: b -> Nil:Cons goal :: Nil:Cons -> Nil:Cons hole_c:c1:c2:c31_12 :: c:c1:c2:c3 hole_Nil:Cons2_12 :: Nil:Cons hole_c4:c5:c6:c73_12 :: c4:c5:c6:c7 hole_c8:c94_12 :: c8:c9 hole_c105_12 :: c10 hole_a6_12 :: a hole_c117_12 :: c11 hole_True:False8_12 :: True:False hole_b9_12 :: b gen_c:c1:c2:c310_12 :: Nat -> c:c1:c2:c3 gen_Nil:Cons11_12 :: Nat -> Nil:Cons gen_c8:c912_12 :: Nat -> c8:c9 Generator Equations: gen_c:c1:c2:c310_12(0) <=> c gen_c:c1:c2:c310_12(+(x, 1)) <=> c1(gen_c:c1:c2:c310_12(x)) gen_Nil:Cons11_12(0) <=> Nil gen_Nil:Cons11_12(+(x, 1)) <=> Cons(Nil, gen_Nil:Cons11_12(x)) gen_c8:c912_12(0) <=> c8 gen_c8:c912_12(+(x, 1)) <=> c9(gen_c8:c912_12(x), c) The following defined symbols remain to be analysed: DEC, NESTDEC, dec, nestdec They will be analysed ascendingly in the following order: DEC < NESTDEC dec < NESTDEC dec < nestdec ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: DEC(gen_Nil:Cons11_12(+(1, n14_12))) -> gen_c:c1:c2:c310_12(n14_12), rt in Omega(1 + n14_12) Induction Base: DEC(gen_Nil:Cons11_12(+(1, 0))) ->_R^Omega(1) c Induction Step: DEC(gen_Nil:Cons11_12(+(1, +(n14_12, 1)))) ->_R^Omega(1) c1(DEC(Cons(Nil, gen_Nil:Cons11_12(n14_12)))) ->_IH c1(gen_c:c1:c2:c310_12(c15_12)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Complex Obligation (BEST) ---------------------------------------- (17) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Types: DEC :: Nil:Cons -> c:c1:c2:c3 Cons :: Nil:Cons -> Nil:Cons -> Nil:Cons Nil :: Nil:Cons c :: c:c1:c2:c3 c1 :: c:c1:c2:c3 -> c:c1:c2:c3 c2 :: c:c1:c2:c3 -> c:c1:c2:c3 c3 :: c:c1:c2:c3 -> c:c1:c2:c3 ISNILNIL :: Nil:Cons -> c4:c5:c6:c7 c4 :: c4:c5:c6:c7 c5 :: c4:c5:c6:c7 c6 :: c4:c5:c6:c7 c7 :: c4:c5:c6:c7 NESTDEC :: Nil:Cons -> c8:c9 c8 :: c8:c9 c9 :: c8:c9 -> c:c1:c2:c3 -> c8:c9 dec :: Nil:Cons -> Nil:Cons NUMBER17 :: a -> c10 c10 :: c10 GOAL :: Nil:Cons -> c11 c11 :: c8:c9 -> c11 isNilNil :: Nil:Cons -> True:False True :: True:False False :: True:False nestdec :: Nil:Cons -> Nil:Cons number17 :: b -> Nil:Cons goal :: Nil:Cons -> Nil:Cons hole_c:c1:c2:c31_12 :: c:c1:c2:c3 hole_Nil:Cons2_12 :: Nil:Cons hole_c4:c5:c6:c73_12 :: c4:c5:c6:c7 hole_c8:c94_12 :: c8:c9 hole_c105_12 :: c10 hole_a6_12 :: a hole_c117_12 :: c11 hole_True:False8_12 :: True:False hole_b9_12 :: b gen_c:c1:c2:c310_12 :: Nat -> c:c1:c2:c3 gen_Nil:Cons11_12 :: Nat -> Nil:Cons gen_c8:c912_12 :: Nat -> c8:c9 Generator Equations: gen_c:c1:c2:c310_12(0) <=> c gen_c:c1:c2:c310_12(+(x, 1)) <=> c1(gen_c:c1:c2:c310_12(x)) gen_Nil:Cons11_12(0) <=> Nil gen_Nil:Cons11_12(+(x, 1)) <=> Cons(Nil, gen_Nil:Cons11_12(x)) gen_c8:c912_12(0) <=> c8 gen_c8:c912_12(+(x, 1)) <=> c9(gen_c8:c912_12(x), c) The following defined symbols remain to be analysed: DEC, NESTDEC, dec, nestdec They will be analysed ascendingly in the following order: DEC < NESTDEC dec < NESTDEC dec < nestdec ---------------------------------------- (18) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (19) BOUNDS(n^1, INF) ---------------------------------------- (20) Obligation: Innermost TRS: Rules: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Types: DEC :: Nil:Cons -> c:c1:c2:c3 Cons :: Nil:Cons -> Nil:Cons -> Nil:Cons Nil :: Nil:Cons c :: c:c1:c2:c3 c1 :: c:c1:c2:c3 -> c:c1:c2:c3 c2 :: c:c1:c2:c3 -> c:c1:c2:c3 c3 :: c:c1:c2:c3 -> c:c1:c2:c3 ISNILNIL :: Nil:Cons -> c4:c5:c6:c7 c4 :: c4:c5:c6:c7 c5 :: c4:c5:c6:c7 c6 :: c4:c5:c6:c7 c7 :: c4:c5:c6:c7 NESTDEC :: Nil:Cons -> c8:c9 c8 :: c8:c9 c9 :: c8:c9 -> c:c1:c2:c3 -> c8:c9 dec :: Nil:Cons -> Nil:Cons NUMBER17 :: a -> c10 c10 :: c10 GOAL :: Nil:Cons -> c11 c11 :: c8:c9 -> c11 isNilNil :: Nil:Cons -> True:False True :: True:False False :: True:False nestdec :: Nil:Cons -> Nil:Cons number17 :: b -> Nil:Cons goal :: Nil:Cons -> Nil:Cons hole_c:c1:c2:c31_12 :: c:c1:c2:c3 hole_Nil:Cons2_12 :: Nil:Cons hole_c4:c5:c6:c73_12 :: c4:c5:c6:c7 hole_c8:c94_12 :: c8:c9 hole_c105_12 :: c10 hole_a6_12 :: a hole_c117_12 :: c11 hole_True:False8_12 :: True:False hole_b9_12 :: b gen_c:c1:c2:c310_12 :: Nat -> c:c1:c2:c3 gen_Nil:Cons11_12 :: Nat -> Nil:Cons gen_c8:c912_12 :: Nat -> c8:c9 Lemmas: DEC(gen_Nil:Cons11_12(+(1, n14_12))) -> gen_c:c1:c2:c310_12(n14_12), rt in Omega(1 + n14_12) Generator Equations: gen_c:c1:c2:c310_12(0) <=> c gen_c:c1:c2:c310_12(+(x, 1)) <=> c1(gen_c:c1:c2:c310_12(x)) gen_Nil:Cons11_12(0) <=> Nil gen_Nil:Cons11_12(+(x, 1)) <=> Cons(Nil, gen_Nil:Cons11_12(x)) gen_c8:c912_12(0) <=> c8 gen_c8:c912_12(+(x, 1)) <=> c9(gen_c8:c912_12(x), c) The following defined symbols remain to be analysed: dec, NESTDEC, nestdec They will be analysed ascendingly in the following order: dec < NESTDEC dec < nestdec ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: dec(gen_Nil:Cons11_12(+(1, n887_12))) -> gen_Nil:Cons11_12(0), rt in Omega(0) Induction Base: dec(gen_Nil:Cons11_12(+(1, 0))) ->_R^Omega(0) Nil Induction Step: dec(gen_Nil:Cons11_12(+(1, +(n887_12, 1)))) ->_R^Omega(0) dec(Cons(Nil, gen_Nil:Cons11_12(n887_12))) ->_IH gen_Nil:Cons11_12(0) 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: DEC(Cons(Nil, Nil)) -> c DEC(Cons(Nil, Cons(z0, z1))) -> c1(DEC(Cons(z0, z1))) DEC(Cons(Cons(z0, z1), Nil)) -> c2(DEC(Nil)) DEC(Cons(Cons(z0, z1), Cons(z2, z3))) -> c3(DEC(Cons(z2, z3))) ISNILNIL(Cons(Nil, Nil)) -> c4 ISNILNIL(Cons(Nil, Cons(z0, z1))) -> c5 ISNILNIL(Cons(Cons(z0, z1), Nil)) -> c6 ISNILNIL(Cons(Cons(z0, z1), Cons(z2, z3))) -> c7 NESTDEC(Nil) -> c8 NESTDEC(Cons(z0, z1)) -> c9(NESTDEC(dec(Cons(z0, z1))), DEC(Cons(z0, z1))) NUMBER17(z0) -> c10 GOAL(z0) -> c11(NESTDEC(z0)) dec(Cons(Nil, Nil)) -> Nil dec(Cons(Nil, Cons(z0, z1))) -> dec(Cons(z0, z1)) dec(Cons(Cons(z0, z1), Nil)) -> dec(Nil) dec(Cons(Cons(z0, z1), Cons(z2, z3))) -> dec(Cons(z2, z3)) isNilNil(Cons(Nil, Nil)) -> True isNilNil(Cons(Nil, Cons(z0, z1))) -> False isNilNil(Cons(Cons(z0, z1), Nil)) -> False isNilNil(Cons(Cons(z0, z1), Cons(z2, z3))) -> False nestdec(Nil) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) nestdec(Cons(z0, z1)) -> nestdec(dec(Cons(z0, z1))) number17(z0) -> Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Cons(Nil, Nil))))))))))))))))) goal(z0) -> nestdec(z0) Types: DEC :: Nil:Cons -> c:c1:c2:c3 Cons :: Nil:Cons -> Nil:Cons -> Nil:Cons Nil :: Nil:Cons c :: c:c1:c2:c3 c1 :: c:c1:c2:c3 -> c:c1:c2:c3 c2 :: c:c1:c2:c3 -> c:c1:c2:c3 c3 :: c:c1:c2:c3 -> c:c1:c2:c3 ISNILNIL :: Nil:Cons -> c4:c5:c6:c7 c4 :: c4:c5:c6:c7 c5 :: c4:c5:c6:c7 c6 :: c4:c5:c6:c7 c7 :: c4:c5:c6:c7 NESTDEC :: Nil:Cons -> c8:c9 c8 :: c8:c9 c9 :: c8:c9 -> c:c1:c2:c3 -> c8:c9 dec :: Nil:Cons -> Nil:Cons NUMBER17 :: a -> c10 c10 :: c10 GOAL :: Nil:Cons -> c11 c11 :: c8:c9 -> c11 isNilNil :: Nil:Cons -> True:False True :: True:False False :: True:False nestdec :: Nil:Cons -> Nil:Cons number17 :: b -> Nil:Cons goal :: Nil:Cons -> Nil:Cons hole_c:c1:c2:c31_12 :: c:c1:c2:c3 hole_Nil:Cons2_12 :: Nil:Cons hole_c4:c5:c6:c73_12 :: c4:c5:c6:c7 hole_c8:c94_12 :: c8:c9 hole_c105_12 :: c10 hole_a6_12 :: a hole_c117_12 :: c11 hole_True:False8_12 :: True:False hole_b9_12 :: b gen_c:c1:c2:c310_12 :: Nat -> c:c1:c2:c3 gen_Nil:Cons11_12 :: Nat -> Nil:Cons gen_c8:c912_12 :: Nat -> c8:c9 Lemmas: DEC(gen_Nil:Cons11_12(+(1, n14_12))) -> gen_c:c1:c2:c310_12(n14_12), rt in Omega(1 + n14_12) dec(gen_Nil:Cons11_12(+(1, n887_12))) -> gen_Nil:Cons11_12(0), rt in Omega(0) Generator Equations: gen_c:c1:c2:c310_12(0) <=> c gen_c:c1:c2:c310_12(+(x, 1)) <=> c1(gen_c:c1:c2:c310_12(x)) gen_Nil:Cons11_12(0) <=> Nil gen_Nil:Cons11_12(+(x, 1)) <=> Cons(Nil, gen_Nil:Cons11_12(x)) gen_c8:c912_12(0) <=> c8 gen_c8:c912_12(+(x, 1)) <=> c9(gen_c8:c912_12(x), c) The following defined symbols remain to be analysed: NESTDEC, nestdec