WORST_CASE(Omega(n^3),?) proof of /export/starexec/sandbox2/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^3, INF). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 1276 ms] (2) CpxRelTRS (3) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxRelTRS (5) SlicingProof [LOWER BOUND(ID), 0 ms] (6) CpxRelTRS (7) TypeInferenceProof [BOTH BOUNDS(ID, ID), 5 ms] (8) typed CpxTrs (9) OrderProof [LOWER BOUND(ID), 0 ms] (10) typed CpxTrs (11) RewriteLemmaProof [LOWER BOUND(ID), 293 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), 763 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 219 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 65 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 655 ms] (24) BEST (25) proven lower bound (26) LowerBoundPropagationProof [FINISHED, 0 ms] (27) BOUNDS(n^2, INF) (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 1450 ms] (30) BEST (31) proven lower bound (32) LowerBoundPropagationProof [FINISHED, 0 ms] (33) BOUNDS(n^3, INF) (34) typed CpxTrs (35) RewriteLemmaProof [LOWER BOUND(ID), 378 ms] (36) BOUNDS(1, INF) ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) The (relative) TRS S consists of the following rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) 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^3, INF). The TRS R consists of the following rules: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0, z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0) -> c5 MINUS(z0, 0) -> c6 MINUS(0, z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0) -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), MINUS(z0, s(0))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0))) The (relative) TRS S consists of the following rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0) -> 0 minus(z0, 0) -> z0 minus(0, z0) -> 0 minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0) -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0)), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0)) 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^3, INF). The TRS R consists of the following rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z1, z2) -> c14 IF(false, z0, z1, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) The (relative) TRS S consists of the following rules: plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Rewrite Strategy: INNERMOST ---------------------------------------- (5) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: IF/2 ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^3, INF). The TRS R consists of the following rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) The (relative) TRS S consists of the following rules: plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (8) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 ---------------------------------------- (9) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: PLUS, TIMES, times, MINUS, minus, FACITER, plus, facIter They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (10) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: PLUS, TIMES, times, MINUS, minus, FACITER, plus, facIter They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (11) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) Induction Base: PLUS(gen_0':s12_17(0), gen_0':s12_17(b)) ->_R^Omega(1) c Induction Step: PLUS(gen_0':s12_17(+(n16_17, 1)), gen_0':s12_17(b)) ->_R^Omega(1) c1(PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b))) ->_IH c1(gen_c:c111_17(c17_17)) 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: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: PLUS, TIMES, times, MINUS, minus, FACITER, plus, facIter They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (14) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (15) BOUNDS(n^1, INF) ---------------------------------------- (16) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: minus, TIMES, times, MINUS, FACITER, plus, facIter They will be analysed ascendingly in the following order: times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter minus < MINUS MINUS < FACITER minus < FACITER minus < facIter ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) Induction Base: minus(gen_0':s12_17(a), gen_0':s12_17(+(1, 0))) Induction Step: minus(gen_0':s12_17(a), gen_0':s12_17(+(1, +(n747_17, 1)))) ->_R^Omega(0) p(minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17)))) ->_IH p(*15_17) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (18) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: MINUS, TIMES, times, FACITER, plus, facIter They will be analysed ascendingly in the following order: times < TIMES TIMES < FACITER times < FACITER plus < times times < facIter MINUS < FACITER ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) Induction Base: plus(gen_0':s12_17(0), gen_0':s12_17(b)) ->_R^Omega(0) gen_0':s12_17(b) Induction Step: plus(gen_0':s12_17(+(n10714_17, 1)), gen_0':s12_17(b)) ->_R^Omega(0) s(plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b))) ->_IH s(gen_0':s12_17(+(b, c10715_17))) 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: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: times, TIMES, FACITER, facIter They will be analysed ascendingly in the following order: times < TIMES TIMES < FACITER times < FACITER times < facIter ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) Induction Base: times(gen_0':s12_17(0), gen_0':s12_17(b)) ->_R^Omega(0) 0' Induction Step: times(gen_0':s12_17(+(n12294_17, 1)), gen_0':s12_17(b)) ->_R^Omega(0) plus(gen_0':s12_17(b), times(gen_0':s12_17(n12294_17), gen_0':s12_17(b))) ->_IH plus(gen_0':s12_17(b), gen_0':s12_17(*(c12295_17, b))) ->_L^Omega(0) gen_0':s12_17(+(b, *(n12294_17, b))) 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: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: TIMES, FACITER, facIter They will be analysed ascendingly in the following order: TIMES < FACITER ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) Induction Base: TIMES(gen_0':s12_17(0), gen_0':s12_17(b)) Induction Step: TIMES(gen_0':s12_17(+(n15292_17, 1)), gen_0':s12_17(b)) ->_R^Omega(1) c3(PLUS(gen_0':s12_17(b), times(gen_0':s12_17(n15292_17), gen_0':s12_17(b))), TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b))) ->_L^Omega(0) c3(PLUS(gen_0':s12_17(b), gen_0':s12_17(*(n15292_17, b))), TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b))) ->_L^Omega(1 + b) c3(gen_c:c111_17(b), TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(*(n15292_17, b)))) ->_IH c3(gen_c:c111_17(*(n15292_17, b)), *15_17) We have rt in Omega(n^2) and sz in O(n). Thus, we have irc_R in Omega(n^2). ---------------------------------------- (24) Complex Obligation (BEST) ---------------------------------------- (25) Obligation: Proved the lower bound n^2 for the following obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: TIMES, FACITER, facIter They will be analysed ascendingly in the following order: TIMES < FACITER ---------------------------------------- (26) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (27) BOUNDS(n^2, INF) ---------------------------------------- (28) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: FACITER, facIter ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: FACITER(gen_0':s12_17(n44219_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(n44219_17 + n44219_17^2 + n44219_17^3) Induction Base: FACITER(gen_0':s12_17(0), gen_0':s12_17(b)) Induction Step: FACITER(gen_0':s12_17(+(n44219_17, 1)), gen_0':s12_17(b)) ->_R^Omega(1) c13(IF(isZero(gen_0':s12_17(+(n44219_17, 1))), minus(gen_0':s12_17(+(n44219_17, 1)), s(0')), times(gen_0':s12_17(b), gen_0':s12_17(+(n44219_17, 1)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(n44219_17, 1)))) ->_R^Omega(0) c13(IF(false, minus(gen_0':s12_17(+(1, n44219_17)), s(0')), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(0) c13(IF(false, p(minus(gen_0':s12_17(+(1, n44219_17)), 0')), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(0) c13(IF(false, p(gen_0':s12_17(+(1, n44219_17))), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(0) c13(IF(false, gen_0':s12_17(n44219_17), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(b), gen_0':s12_17(+(1, n44219_17)))) ->_L^Omega(0) c13(IF(false, gen_0':s12_17(n44219_17), gen_0':s12_17(*(b, +(1, n44219_17)))), TIMES(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(1) c13(c15(FACITER(gen_0':s12_17(n44219_17), gen_0':s12_17(+(b, *(b, n44219_17))))), TIMES(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(+(1, n44219_17)))) ->_IH c13(c15(*15_17), TIMES(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(+(1, n44219_17)))) ->_R^Omega(1) c13(c15(*15_17), c3(PLUS(gen_0':s12_17(+(1, n44219_17)), times(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17)))), TIMES(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17))))) ->_L^Omega(0) c13(c15(*15_17), c3(PLUS(gen_0':s12_17(+(1, n44219_17)), gen_0':s12_17(*(n44219_17, +(1, n44219_17)))), TIMES(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17))))) ->_L^Omega(2 + n44219_17) c13(c15(*15_17), c3(gen_c:c111_17(+(1, n44219_17)), TIMES(gen_0':s12_17(n44219_17), gen_0':s12_17(+(1, n44219_17))))) ->_L^Omega(2*n44219_17 + n44219_17^2) c13(c15(*15_17), c3(gen_c:c111_17(+(1, n44219_17)), *15_17)) We have rt in Omega(n^3) and sz in O(n). Thus, we have irc_R in Omega(n^3). ---------------------------------------- (30) Complex Obligation (BEST) ---------------------------------------- (31) Obligation: Proved the lower bound n^3 for the following obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: FACITER, facIter ---------------------------------------- (32) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (33) BOUNDS(n^3, INF) ---------------------------------------- (34) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) TIMES(0', z0) -> c2 TIMES(s(z0), z1) -> c3(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) P(s(z0)) -> c4 P(0') -> c5 MINUS(z0, 0') -> c6 MINUS(0', z0) -> c7 MINUS(z0, s(z1)) -> c8(P(minus(z0, z1)), MINUS(z0, z1)) ISZERO(0') -> c9 ISZERO(s(z0)) -> c10 FACITER(z0, z1) -> c11(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), ISZERO(z0)) FACITER(z0, z1) -> c12(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), MINUS(z0, s(0'))) FACITER(z0, z1) -> c13(IF(isZero(z0), minus(z0, s(0')), times(z1, z0)), TIMES(z1, z0)) IF(true, z0, z2) -> c14 IF(false, z0, z2) -> c15(FACITER(z0, z2)) FACTORIAL(z0) -> c16(FACITER(z0, s(0'))) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) p(s(z0)) -> z0 p(0') -> 0' minus(z0, 0') -> z0 minus(0', z0) -> 0' minus(z0, s(z1)) -> p(minus(z0, z1)) isZero(0') -> true isZero(s(z0)) -> false facIter(z0, z1) -> if(isZero(z0), minus(z0, s(0')), z1, times(z1, z0)) if(true, z0, z1, z2) -> z1 if(false, z0, z1, z2) -> facIter(z0, z2) factorial(z0) -> facIter(z0, s(0')) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 TIMES :: 0':s -> 0':s -> c2:c3 c2 :: c2:c3 c3 :: c:c1 -> c2:c3 -> c2:c3 times :: 0':s -> 0':s -> 0':s P :: 0':s -> c4:c5 c4 :: c4:c5 c5 :: c4:c5 MINUS :: 0':s -> 0':s -> c6:c7:c8 c6 :: c6:c7:c8 c7 :: c6:c7:c8 c8 :: c4:c5 -> c6:c7:c8 -> c6:c7:c8 minus :: 0':s -> 0':s -> 0':s ISZERO :: 0':s -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 FACITER :: 0':s -> 0':s -> c11:c12:c13 c11 :: c14:c15 -> c9:c10 -> c11:c12:c13 IF :: true:false -> 0':s -> 0':s -> c14:c15 isZero :: 0':s -> true:false c12 :: c14:c15 -> c6:c7:c8 -> c11:c12:c13 c13 :: c14:c15 -> c2:c3 -> c11:c12:c13 true :: true:false c14 :: c14:c15 false :: true:false c15 :: c11:c12:c13 -> c14:c15 FACTORIAL :: 0':s -> c16 c16 :: c11:c12:c13 -> c16 plus :: 0':s -> 0':s -> 0':s p :: 0':s -> 0':s facIter :: 0':s -> 0':s -> 0':s if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s factorial :: 0':s -> 0':s hole_c:c11_17 :: c:c1 hole_0':s2_17 :: 0':s hole_c2:c33_17 :: c2:c3 hole_c4:c54_17 :: c4:c5 hole_c6:c7:c85_17 :: c6:c7:c8 hole_c9:c106_17 :: c9:c10 hole_c11:c12:c137_17 :: c11:c12:c13 hole_c14:c158_17 :: c14:c15 hole_true:false9_17 :: true:false hole_c1610_17 :: c16 gen_c:c111_17 :: Nat -> c:c1 gen_0':s12_17 :: Nat -> 0':s gen_c2:c313_17 :: Nat -> c2:c3 gen_c6:c7:c814_17 :: Nat -> c6:c7:c8 Lemmas: PLUS(gen_0':s12_17(n16_17), gen_0':s12_17(b)) -> gen_c:c111_17(n16_17), rt in Omega(1 + n16_17) minus(gen_0':s12_17(a), gen_0':s12_17(+(1, n747_17))) -> *15_17, rt in Omega(0) plus(gen_0':s12_17(n10714_17), gen_0':s12_17(b)) -> gen_0':s12_17(+(n10714_17, b)), rt in Omega(0) times(gen_0':s12_17(n12294_17), gen_0':s12_17(b)) -> gen_0':s12_17(*(n12294_17, b)), rt in Omega(0) TIMES(gen_0':s12_17(n15292_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(b*n15292_17 + n15292_17) FACITER(gen_0':s12_17(n44219_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(n44219_17 + n44219_17^2 + n44219_17^3) Generator Equations: gen_c:c111_17(0) <=> c gen_c:c111_17(+(x, 1)) <=> c1(gen_c:c111_17(x)) gen_0':s12_17(0) <=> 0' gen_0':s12_17(+(x, 1)) <=> s(gen_0':s12_17(x)) gen_c2:c313_17(0) <=> c2 gen_c2:c313_17(+(x, 1)) <=> c3(c, gen_c2:c313_17(x)) gen_c6:c7:c814_17(0) <=> c6 gen_c6:c7:c814_17(+(x, 1)) <=> c8(c4, gen_c6:c7:c814_17(x)) The following defined symbols remain to be analysed: facIter ---------------------------------------- (35) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: facIter(gen_0':s12_17(n81456_17), gen_0':s12_17(b)) -> *15_17, rt in Omega(0) Induction Base: facIter(gen_0':s12_17(0), gen_0':s12_17(b)) Induction Step: facIter(gen_0':s12_17(+(n81456_17, 1)), gen_0':s12_17(b)) ->_R^Omega(0) if(isZero(gen_0':s12_17(+(n81456_17, 1))), minus(gen_0':s12_17(+(n81456_17, 1)), s(0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(n81456_17, 1)))) ->_R^Omega(0) if(false, minus(gen_0':s12_17(+(1, n81456_17)), s(0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n81456_17)))) ->_R^Omega(0) if(false, p(minus(gen_0':s12_17(+(1, n81456_17)), 0')), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n81456_17)))) ->_R^Omega(0) if(false, p(gen_0':s12_17(+(1, n81456_17))), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n81456_17)))) ->_R^Omega(0) if(false, gen_0':s12_17(n81456_17), gen_0':s12_17(b), times(gen_0':s12_17(b), gen_0':s12_17(+(1, n81456_17)))) ->_L^Omega(0) if(false, gen_0':s12_17(n81456_17), gen_0':s12_17(+(1, n81456_17)), gen_0':s12_17(*(b, +(1, n81456_17)))) ->_R^Omega(0) facIter(gen_0':s12_17(n81456_17), gen_0':s12_17(+(b, *(b, n81456_17)))) ->_IH *15_17 We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (36) BOUNDS(1, INF)