WORST_CASE(Omega(n^1),?) proof of input_Y7BXK6YVeQ.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), 0 ms] (10) typed CpxTrs (11) RewriteLemmaProof [LOWER BOUND(ID), 356 ms] (12) BEST (13) proven lower bound (14) LowerBoundPropagationProof [FINISHED, 0 ms] (15) BOUNDS(n^1, INF) (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 28 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 103 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 66 ms] (22) 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: le(s(x), 0) -> false le(0, y) -> true le(s(x), s(y)) -> le(x, y) double(0) -> 0 double(s(x)) -> s(s(double(x))) log(0) -> logError log(s(x)) -> loop(s(x), s(0), 0) loop(x, s(y), z) -> if(le(x, s(y)), x, s(y), z) if(true, x, y, z) -> z if(false, x, y, z) -> loop(x, double(y), s(z)) 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: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Tuples: LE(s(z0), 0) -> c LE(0, z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0) -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0) -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) S tuples: LE(s(z0), 0) -> c LE(0, z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0) -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0) -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) K tuples:none Defined Rule Symbols: le_2, double_1, log_1, loop_3, if_4 Defined Pair Symbols: LE_2, DOUBLE_1, LOG_1, LOOP_3, IF_4 Compound Symbols: c, c1, c2_1, c3, c4_1, c5, c6_1, c7_2, c8, c9_2 ---------------------------------------- (3) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (4) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: LE(s(z0), 0) -> c LE(0, z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0) -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0) -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0), 0)) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) The (relative) TRS S consists of the following rules: le(s(z0), 0) -> false le(0, z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0) -> 0 double(s(z0)) -> s(s(double(z0))) log(0) -> logError log(s(z0)) -> loop(s(z0), s(0), 0) loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) 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: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) The (relative) TRS S consists of the following rules: le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (8) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 ---------------------------------------- (9) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: LE, DOUBLE, LOOP, le, double, loop They will be analysed ascendingly in the following order: LE < LOOP DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop ---------------------------------------- (10) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 Generator Equations: gen_c:c1:c28_10(0) <=> c gen_c:c1:c28_10(+(x, 1)) <=> c2(gen_c:c1:c28_10(x)) gen_s:0':logError9_10(0) <=> 0' gen_s:0':logError9_10(+(x, 1)) <=> s(gen_s:0':logError9_10(x)) gen_c3:c410_10(0) <=> c3 gen_c3:c410_10(+(x, 1)) <=> c4(gen_c3:c410_10(x)) The following defined symbols remain to be analysed: LE, DOUBLE, LOOP, le, double, loop They will be analysed ascendingly in the following order: LE < LOOP DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop ---------------------------------------- (11) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LE(gen_s:0':logError9_10(+(1, n12_10)), gen_s:0':logError9_10(n12_10)) -> gen_c:c1:c28_10(n12_10), rt in Omega(1 + n12_10) Induction Base: LE(gen_s:0':logError9_10(+(1, 0)), gen_s:0':logError9_10(0)) ->_R^Omega(1) c Induction Step: LE(gen_s:0':logError9_10(+(1, +(n12_10, 1))), gen_s:0':logError9_10(+(n12_10, 1))) ->_R^Omega(1) c2(LE(gen_s:0':logError9_10(+(1, n12_10)), gen_s:0':logError9_10(n12_10))) ->_IH c2(gen_c:c1:c28_10(c13_10)) 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: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 Generator Equations: gen_c:c1:c28_10(0) <=> c gen_c:c1:c28_10(+(x, 1)) <=> c2(gen_c:c1:c28_10(x)) gen_s:0':logError9_10(0) <=> 0' gen_s:0':logError9_10(+(x, 1)) <=> s(gen_s:0':logError9_10(x)) gen_c3:c410_10(0) <=> c3 gen_c3:c410_10(+(x, 1)) <=> c4(gen_c3:c410_10(x)) The following defined symbols remain to be analysed: LE, DOUBLE, LOOP, le, double, loop They will be analysed ascendingly in the following order: LE < LOOP DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop ---------------------------------------- (14) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (15) BOUNDS(n^1, INF) ---------------------------------------- (16) Obligation: Innermost TRS: Rules: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 Lemmas: LE(gen_s:0':logError9_10(+(1, n12_10)), gen_s:0':logError9_10(n12_10)) -> gen_c:c1:c28_10(n12_10), rt in Omega(1 + n12_10) Generator Equations: gen_c:c1:c28_10(0) <=> c gen_c:c1:c28_10(+(x, 1)) <=> c2(gen_c:c1:c28_10(x)) gen_s:0':logError9_10(0) <=> 0' gen_s:0':logError9_10(+(x, 1)) <=> s(gen_s:0':logError9_10(x)) gen_c3:c410_10(0) <=> c3 gen_c3:c410_10(+(x, 1)) <=> c4(gen_c3:c410_10(x)) The following defined symbols remain to be analysed: DOUBLE, LOOP, le, double, loop They will be analysed ascendingly in the following order: DOUBLE < LOOP le < LOOP double < LOOP le < loop double < loop ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: DOUBLE(gen_s:0':logError9_10(n588_10)) -> gen_c3:c410_10(n588_10), rt in Omega(1 + n588_10) Induction Base: DOUBLE(gen_s:0':logError9_10(0)) ->_R^Omega(1) c3 Induction Step: DOUBLE(gen_s:0':logError9_10(+(n588_10, 1))) ->_R^Omega(1) c4(DOUBLE(gen_s:0':logError9_10(n588_10))) ->_IH c4(gen_c3:c410_10(c589_10)) 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: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 Lemmas: LE(gen_s:0':logError9_10(+(1, n12_10)), gen_s:0':logError9_10(n12_10)) -> gen_c:c1:c28_10(n12_10), rt in Omega(1 + n12_10) DOUBLE(gen_s:0':logError9_10(n588_10)) -> gen_c3:c410_10(n588_10), rt in Omega(1 + n588_10) Generator Equations: gen_c:c1:c28_10(0) <=> c gen_c:c1:c28_10(+(x, 1)) <=> c2(gen_c:c1:c28_10(x)) gen_s:0':logError9_10(0) <=> 0' gen_s:0':logError9_10(+(x, 1)) <=> s(gen_s:0':logError9_10(x)) gen_c3:c410_10(0) <=> c3 gen_c3:c410_10(+(x, 1)) <=> c4(gen_c3:c410_10(x)) The following defined symbols remain to be analysed: le, LOOP, double, loop They will be analysed ascendingly in the following order: le < LOOP double < LOOP le < loop double < loop ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: le(gen_s:0':logError9_10(+(1, n925_10)), gen_s:0':logError9_10(n925_10)) -> false, rt in Omega(0) Induction Base: le(gen_s:0':logError9_10(+(1, 0)), gen_s:0':logError9_10(0)) ->_R^Omega(0) false Induction Step: le(gen_s:0':logError9_10(+(1, +(n925_10, 1))), gen_s:0':logError9_10(+(n925_10, 1))) ->_R^Omega(0) le(gen_s:0':logError9_10(+(1, n925_10)), gen_s:0':logError9_10(n925_10)) ->_IH false 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: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 Lemmas: LE(gen_s:0':logError9_10(+(1, n12_10)), gen_s:0':logError9_10(n12_10)) -> gen_c:c1:c28_10(n12_10), rt in Omega(1 + n12_10) DOUBLE(gen_s:0':logError9_10(n588_10)) -> gen_c3:c410_10(n588_10), rt in Omega(1 + n588_10) le(gen_s:0':logError9_10(+(1, n925_10)), gen_s:0':logError9_10(n925_10)) -> false, rt in Omega(0) Generator Equations: gen_c:c1:c28_10(0) <=> c gen_c:c1:c28_10(+(x, 1)) <=> c2(gen_c:c1:c28_10(x)) gen_s:0':logError9_10(0) <=> 0' gen_s:0':logError9_10(+(x, 1)) <=> s(gen_s:0':logError9_10(x)) gen_c3:c410_10(0) <=> c3 gen_c3:c410_10(+(x, 1)) <=> c4(gen_c3:c410_10(x)) The following defined symbols remain to be analysed: double, LOOP, loop They will be analysed ascendingly in the following order: double < LOOP double < loop ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: double(gen_s:0':logError9_10(n1292_10)) -> gen_s:0':logError9_10(*(2, n1292_10)), rt in Omega(0) Induction Base: double(gen_s:0':logError9_10(0)) ->_R^Omega(0) 0' Induction Step: double(gen_s:0':logError9_10(+(n1292_10, 1))) ->_R^Omega(0) s(s(double(gen_s:0':logError9_10(n1292_10)))) ->_IH s(s(gen_s:0':logError9_10(*(2, c1293_10)))) 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: LE(s(z0), 0') -> c LE(0', z0) -> c1 LE(s(z0), s(z1)) -> c2(LE(z0, z1)) DOUBLE(0') -> c3 DOUBLE(s(z0)) -> c4(DOUBLE(z0)) LOG(0') -> c5 LOG(s(z0)) -> c6(LOOP(s(z0), s(0'), 0')) LOOP(z0, s(z1), z2) -> c7(IF(le(z0, s(z1)), z0, s(z1), z2), LE(z0, s(z1))) IF(true, z0, z1, z2) -> c8 IF(false, z0, z1, z2) -> c9(LOOP(z0, double(z1), s(z2)), DOUBLE(z1)) le(s(z0), 0') -> false le(0', z0) -> true le(s(z0), s(z1)) -> le(z0, z1) double(0') -> 0' double(s(z0)) -> s(s(double(z0))) log(0') -> logError log(s(z0)) -> loop(s(z0), s(0'), 0') loop(z0, s(z1), z2) -> if(le(z0, s(z1)), z0, s(z1), z2) if(true, z0, z1, z2) -> z2 if(false, z0, z1, z2) -> loop(z0, double(z1), s(z2)) Types: LE :: s:0':logError -> s:0':logError -> c:c1:c2 s :: s:0':logError -> s:0':logError 0' :: s:0':logError c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 DOUBLE :: s:0':logError -> c3:c4 c3 :: c3:c4 c4 :: c3:c4 -> c3:c4 LOG :: s:0':logError -> c5:c6 c5 :: c5:c6 c6 :: c7 -> c5:c6 LOOP :: s:0':logError -> s:0':logError -> s:0':logError -> c7 c7 :: c8:c9 -> c:c1:c2 -> c7 IF :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> c8:c9 le :: s:0':logError -> s:0':logError -> true:false true :: true:false c8 :: c8:c9 false :: true:false c9 :: c7 -> c3:c4 -> c8:c9 double :: s:0':logError -> s:0':logError log :: s:0':logError -> s:0':logError logError :: s:0':logError loop :: s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError if :: true:false -> s:0':logError -> s:0':logError -> s:0':logError -> s:0':logError hole_c:c1:c21_10 :: c:c1:c2 hole_s:0':logError2_10 :: s:0':logError hole_c3:c43_10 :: c3:c4 hole_c5:c64_10 :: c5:c6 hole_c75_10 :: c7 hole_c8:c96_10 :: c8:c9 hole_true:false7_10 :: true:false gen_c:c1:c28_10 :: Nat -> c:c1:c2 gen_s:0':logError9_10 :: Nat -> s:0':logError gen_c3:c410_10 :: Nat -> c3:c4 Lemmas: LE(gen_s:0':logError9_10(+(1, n12_10)), gen_s:0':logError9_10(n12_10)) -> gen_c:c1:c28_10(n12_10), rt in Omega(1 + n12_10) DOUBLE(gen_s:0':logError9_10(n588_10)) -> gen_c3:c410_10(n588_10), rt in Omega(1 + n588_10) le(gen_s:0':logError9_10(+(1, n925_10)), gen_s:0':logError9_10(n925_10)) -> false, rt in Omega(0) double(gen_s:0':logError9_10(n1292_10)) -> gen_s:0':logError9_10(*(2, n1292_10)), rt in Omega(0) Generator Equations: gen_c:c1:c28_10(0) <=> c gen_c:c1:c28_10(+(x, 1)) <=> c2(gen_c:c1:c28_10(x)) gen_s:0':logError9_10(0) <=> 0' gen_s:0':logError9_10(+(x, 1)) <=> s(gen_s:0':logError9_10(x)) gen_c3:c410_10(0) <=> c3 gen_c3:c410_10(+(x, 1)) <=> c4(gen_c3:c410_10(x)) The following defined symbols remain to be analysed: LOOP, loop