WORST_CASE(Omega(n^2),?) proof of input_nmikTorEPz.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^2, 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), 9 ms] (8) typed CpxTrs (9) OrderProof [LOWER BOUND(ID), 0 ms] (10) typed CpxTrs (11) RewriteLemmaProof [LOWER BOUND(ID), 361 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), 73 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 59 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 66 ms] (22) typed CpxTrs (23) RewriteLemmaProof [LOWER BOUND(ID), 50 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 660 ms] (26) BEST (27) proven lower bound (28) LowerBoundPropagationProof [FINISHED, 0 ms] (29) BOUNDS(n^2, INF) (30) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^2, INF). The TRS R consists of the following rules: lt(0, s(x)) -> true lt(x, 0) -> false lt(s(x), s(y)) -> lt(x, y) times(0, y) -> 0 times(s(x), y) -> plus(y, times(x, y)) plus(0, y) -> y plus(s(x), y) -> s(plus(x, y)) fac(x) -> loop(x, s(0), s(0)) loop(x, c, y) -> if(lt(x, c), x, c, y) if(false, x, c, y) -> loop(x, s(c), times(y, s(c))) if(true, x, c, y) -> y S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0), s(0)) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Tuples: LT(0, s(z0)) -> c LT(z0, 0) -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0, z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0, z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0), s(0))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 S tuples: LT(0, s(z0)) -> c LT(z0, 0) -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0, z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0, z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0), s(0))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 K tuples:none Defined Rule Symbols: lt_2, times_2, plus_2, fac_1, loop_3, if_4 Defined Pair Symbols: LT_2, TIMES_2, PLUS_2, FAC_1, LOOP_3, IF_4 Compound Symbols: c, c1, c2_1, c3, c4_2, c5, c6_1, c7_1, c8_2, c9_2, c10 ---------------------------------------- (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^2, INF). The TRS R consists of the following rules: LT(0, s(z0)) -> c LT(z0, 0) -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0, z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0, z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0), s(0))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 The (relative) TRS S consists of the following rules: lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0, z0) -> 0 times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0), s(0)) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> 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^2, INF). The TRS R consists of the following rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 The (relative) TRS S consists of the following rules: lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (8) Obligation: Innermost TRS: Rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 ---------------------------------------- (9) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: LT, TIMES, PLUS, times, LOOP, lt, plus, loop They will be analysed ascendingly in the following order: LT < LOOP PLUS < TIMES times < TIMES TIMES < LOOP times < LOOP plus < times times < loop lt < LOOP lt < loop ---------------------------------------- (10) Obligation: Innermost TRS: Rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: LT, TIMES, PLUS, times, LOOP, lt, plus, loop They will be analysed ascendingly in the following order: LT < LOOP PLUS < TIMES times < TIMES TIMES < LOOP times < LOOP plus < times times < loop lt < LOOP lt < loop ---------------------------------------- (11) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) Induction Base: LT(gen_0':s10_11(0), gen_0':s10_11(+(1, 0))) ->_R^Omega(1) c Induction Step: LT(gen_0':s10_11(+(n14_11, 1)), gen_0':s10_11(+(1, +(n14_11, 1)))) ->_R^Omega(1) c2(LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11)))) ->_IH c2(gen_c:c1:c29_11(c15_11)) 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: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: LT, TIMES, PLUS, times, LOOP, lt, plus, loop They will be analysed ascendingly in the following order: LT < LOOP PLUS < TIMES times < TIMES TIMES < LOOP times < LOOP plus < times times < loop lt < LOOP lt < loop ---------------------------------------- (14) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (15) BOUNDS(n^1, INF) ---------------------------------------- (16) Obligation: Innermost TRS: Rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: PLUS, TIMES, times, LOOP, lt, plus, loop They will be analysed ascendingly in the following order: PLUS < TIMES times < TIMES TIMES < LOOP times < LOOP plus < times times < loop lt < LOOP lt < loop ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) Induction Base: PLUS(gen_0':s10_11(0), gen_0':s10_11(b)) ->_R^Omega(1) c5 Induction Step: PLUS(gen_0':s10_11(+(n617_11, 1)), gen_0':s10_11(b)) ->_R^Omega(1) c6(PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b))) ->_IH c6(gen_c5:c612_11(c618_11)) 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: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: lt, TIMES, times, LOOP, plus, loop They will be analysed ascendingly in the following order: times < TIMES TIMES < LOOP times < LOOP plus < times times < loop lt < LOOP lt < loop ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) -> true, rt in Omega(0) Induction Base: lt(gen_0':s10_11(0), gen_0':s10_11(+(1, 0))) ->_R^Omega(0) true Induction Step: lt(gen_0':s10_11(+(n1303_11, 1)), gen_0':s10_11(+(1, +(n1303_11, 1)))) ->_R^Omega(0) lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) ->_IH true 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: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) -> true, rt in Omega(0) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: plus, TIMES, times, LOOP, loop They will be analysed ascendingly in the following order: times < TIMES TIMES < LOOP times < LOOP plus < times times < loop ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: plus(gen_0':s10_11(n1689_11), gen_0':s10_11(b)) -> gen_0':s10_11(+(n1689_11, b)), rt in Omega(0) Induction Base: plus(gen_0':s10_11(0), gen_0':s10_11(b)) ->_R^Omega(0) gen_0':s10_11(b) Induction Step: plus(gen_0':s10_11(+(n1689_11, 1)), gen_0':s10_11(b)) ->_R^Omega(0) s(plus(gen_0':s10_11(n1689_11), gen_0':s10_11(b))) ->_IH s(gen_0':s10_11(+(b, c1690_11))) 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: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) -> true, rt in Omega(0) plus(gen_0':s10_11(n1689_11), gen_0':s10_11(b)) -> gen_0':s10_11(+(n1689_11, b)), rt in Omega(0) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: times, TIMES, LOOP, loop They will be analysed ascendingly in the following order: times < TIMES TIMES < LOOP times < LOOP times < loop ---------------------------------------- (23) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: times(gen_0':s10_11(n2936_11), gen_0':s10_11(b)) -> gen_0':s10_11(*(n2936_11, b)), rt in Omega(0) Induction Base: times(gen_0':s10_11(0), gen_0':s10_11(b)) ->_R^Omega(0) 0' Induction Step: times(gen_0':s10_11(+(n2936_11, 1)), gen_0':s10_11(b)) ->_R^Omega(0) plus(gen_0':s10_11(b), times(gen_0':s10_11(n2936_11), gen_0':s10_11(b))) ->_IH plus(gen_0':s10_11(b), gen_0':s10_11(*(c2937_11, b))) ->_L^Omega(0) gen_0':s10_11(+(b, *(n2936_11, b))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (24) Obligation: Innermost TRS: Rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) -> true, rt in Omega(0) plus(gen_0':s10_11(n1689_11), gen_0':s10_11(b)) -> gen_0':s10_11(+(n1689_11, b)), rt in Omega(0) times(gen_0':s10_11(n2936_11), gen_0':s10_11(b)) -> gen_0':s10_11(*(n2936_11, b)), rt in Omega(0) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: TIMES, LOOP, loop They will be analysed ascendingly in the following order: TIMES < LOOP ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: TIMES(gen_0':s10_11(n4472_11), gen_0':s10_11(b)) -> *13_11, rt in Omega(b*n4472_11 + n4472_11) Induction Base: TIMES(gen_0':s10_11(0), gen_0':s10_11(b)) Induction Step: TIMES(gen_0':s10_11(+(n4472_11, 1)), gen_0':s10_11(b)) ->_R^Omega(1) c4(PLUS(gen_0':s10_11(b), times(gen_0':s10_11(n4472_11), gen_0':s10_11(b))), TIMES(gen_0':s10_11(n4472_11), gen_0':s10_11(b))) ->_L^Omega(0) c4(PLUS(gen_0':s10_11(b), gen_0':s10_11(*(n4472_11, b))), TIMES(gen_0':s10_11(n4472_11), gen_0':s10_11(b))) ->_L^Omega(1 + b) c4(gen_c5:c612_11(b), TIMES(gen_0':s10_11(n4472_11), gen_0':s10_11(*(n4472_11, b)))) ->_IH c4(gen_c5:c612_11(*(n4472_11, b)), *13_11) We have rt in Omega(n^2) and sz in O(n). Thus, we have irc_R in Omega(n^2). ---------------------------------------- (26) Complex Obligation (BEST) ---------------------------------------- (27) Obligation: Proved the lower bound n^2 for the following obligation: Innermost TRS: Rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) -> true, rt in Omega(0) plus(gen_0':s10_11(n1689_11), gen_0':s10_11(b)) -> gen_0':s10_11(+(n1689_11, b)), rt in Omega(0) times(gen_0':s10_11(n2936_11), gen_0':s10_11(b)) -> gen_0':s10_11(*(n2936_11, b)), rt in Omega(0) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: TIMES, LOOP, loop They will be analysed ascendingly in the following order: TIMES < LOOP ---------------------------------------- (28) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (29) BOUNDS(n^2, INF) ---------------------------------------- (30) Obligation: Innermost TRS: Rules: LT(0', s(z0)) -> c LT(z0, 0') -> c1 LT(s(z0), s(z1)) -> c2(LT(z0, z1)) TIMES(0', z0) -> c3 TIMES(s(z0), z1) -> c4(PLUS(z1, times(z0, z1)), TIMES(z0, z1)) PLUS(0', z0) -> c5 PLUS(s(z0), z1) -> c6(PLUS(z0, z1)) FAC(z0) -> c7(LOOP(z0, s(0'), s(0'))) LOOP(z0, z1, z2) -> c8(IF(lt(z0, z1), z0, z1, z2), LT(z0, z1)) IF(false, z0, z1, z2) -> c9(LOOP(z0, s(z1), times(z2, s(z1))), TIMES(z2, s(z1))) IF(true, z0, z1, z2) -> c10 lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) times(0', z0) -> 0' times(s(z0), z1) -> plus(z1, times(z0, z1)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) fac(z0) -> loop(z0, s(0'), s(0')) loop(z0, z1, z2) -> if(lt(z0, z1), z0, z1, z2) if(false, z0, z1, z2) -> loop(z0, s(z1), times(z2, s(z1))) if(true, z0, z1, z2) -> z2 Types: LT :: 0':s -> 0':s -> c:c1:c2 0' :: 0':s s :: 0':s -> 0':s c :: c:c1:c2 c1 :: c:c1:c2 c2 :: c:c1:c2 -> c:c1:c2 TIMES :: 0':s -> 0':s -> c3:c4 c3 :: c3:c4 c4 :: c5:c6 -> c3:c4 -> c3:c4 PLUS :: 0':s -> 0':s -> c5:c6 times :: 0':s -> 0':s -> 0':s c5 :: c5:c6 c6 :: c5:c6 -> c5:c6 FAC :: 0':s -> c7 c7 :: c8 -> c7 LOOP :: 0':s -> 0':s -> 0':s -> c8 c8 :: c9:c10 -> c:c1:c2 -> c8 IF :: false:true -> 0':s -> 0':s -> 0':s -> c9:c10 lt :: 0':s -> 0':s -> false:true false :: false:true c9 :: c8 -> c3:c4 -> c9:c10 true :: false:true c10 :: c9:c10 plus :: 0':s -> 0':s -> 0':s fac :: 0':s -> 0':s loop :: 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c1:c21_11 :: c:c1:c2 hole_0':s2_11 :: 0':s hole_c3:c43_11 :: c3:c4 hole_c5:c64_11 :: c5:c6 hole_c75_11 :: c7 hole_c86_11 :: c8 hole_c9:c107_11 :: c9:c10 hole_false:true8_11 :: false:true gen_c:c1:c29_11 :: Nat -> c:c1:c2 gen_0':s10_11 :: Nat -> 0':s gen_c3:c411_11 :: Nat -> c3:c4 gen_c5:c612_11 :: Nat -> c5:c6 Lemmas: LT(gen_0':s10_11(n14_11), gen_0':s10_11(+(1, n14_11))) -> gen_c:c1:c29_11(n14_11), rt in Omega(1 + n14_11) PLUS(gen_0':s10_11(n617_11), gen_0':s10_11(b)) -> gen_c5:c612_11(n617_11), rt in Omega(1 + n617_11) lt(gen_0':s10_11(n1303_11), gen_0':s10_11(+(1, n1303_11))) -> true, rt in Omega(0) plus(gen_0':s10_11(n1689_11), gen_0':s10_11(b)) -> gen_0':s10_11(+(n1689_11, b)), rt in Omega(0) times(gen_0':s10_11(n2936_11), gen_0':s10_11(b)) -> gen_0':s10_11(*(n2936_11, b)), rt in Omega(0) TIMES(gen_0':s10_11(n4472_11), gen_0':s10_11(b)) -> *13_11, rt in Omega(b*n4472_11 + n4472_11) Generator Equations: gen_c:c1:c29_11(0) <=> c gen_c:c1:c29_11(+(x, 1)) <=> c2(gen_c:c1:c29_11(x)) gen_0':s10_11(0) <=> 0' gen_0':s10_11(+(x, 1)) <=> s(gen_0':s10_11(x)) gen_c3:c411_11(0) <=> c3 gen_c3:c411_11(+(x, 1)) <=> c4(c5, gen_c3:c411_11(x)) gen_c5:c612_11(0) <=> c5 gen_c5:c612_11(+(x, 1)) <=> c6(gen_c5:c612_11(x)) The following defined symbols remain to be analysed: LOOP, loop