WORST_CASE(Omega(n^1),?) proof of input_GU0mc4Kkc5.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), 9 ms] (10) typed CpxTrs (11) RewriteLemmaProof [LOWER BOUND(ID), 271 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), 118 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 30 ms] (20) typed CpxTrs (21) RewriteLemmaProof [LOWER BOUND(ID), 43 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: plus(0, y) -> y plus(s(x), y) -> s(plus(x, y)) lt(0, s(y)) -> true lt(x, 0) -> false lt(s(x), s(y)) -> lt(x, y) fib(x) -> fibiter(x, 0, 0, s(0)) fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) if(false, b, c, x, y) -> x if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, 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: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0, 0, s(0)) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Tuples: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0, s(z0)) -> c2 LT(z0, 0) -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0, 0, s(0))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) S tuples: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0, s(z0)) -> c2 LT(z0, 0) -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0, 0, s(0))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) K tuples:none Defined Rule Symbols: plus_2, lt_2, fib_1, fibiter_4, if_5 Defined Pair Symbols: PLUS_2, LT_2, FIB_1, FIBITER_4, IF_5 Compound Symbols: c, c1_1, c2, c3, c4_1, c5_1, c6_2, c7, c8_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: PLUS(0, z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0, s(z0)) -> c2 LT(z0, 0) -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0, 0, s(0))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) The (relative) TRS S consists of the following rules: plus(0, z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0, s(z0)) -> true lt(z0, 0) -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0, 0, s(0)) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) 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: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) The (relative) TRS S consists of the following rules: plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Rewrite Strategy: INNERMOST ---------------------------------------- (7) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (8) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 ---------------------------------------- (9) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: PLUS, LT, FIBITER, lt, plus, fibiter They will be analysed ascendingly in the following order: PLUS < FIBITER LT < FIBITER lt < FIBITER plus < FIBITER lt < fibiter plus < fibiter ---------------------------------------- (10) Obligation: Innermost TRS: Rules: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 Generator Equations: gen_c:c18_9(0) <=> c gen_c:c18_9(+(x, 1)) <=> c1(gen_c:c18_9(x)) gen_0':s9_9(0) <=> 0' gen_0':s9_9(+(x, 1)) <=> s(gen_0':s9_9(x)) gen_c2:c3:c410_9(0) <=> c2 gen_c2:c3:c410_9(+(x, 1)) <=> c4(gen_c2:c3:c410_9(x)) The following defined symbols remain to be analysed: PLUS, LT, FIBITER, lt, plus, fibiter They will be analysed ascendingly in the following order: PLUS < FIBITER LT < FIBITER lt < FIBITER plus < FIBITER lt < fibiter plus < fibiter ---------------------------------------- (11) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: PLUS(gen_0':s9_9(n12_9), gen_0':s9_9(b)) -> gen_c:c18_9(n12_9), rt in Omega(1 + n12_9) Induction Base: PLUS(gen_0':s9_9(0), gen_0':s9_9(b)) ->_R^Omega(1) c Induction Step: PLUS(gen_0':s9_9(+(n12_9, 1)), gen_0':s9_9(b)) ->_R^Omega(1) c1(PLUS(gen_0':s9_9(n12_9), gen_0':s9_9(b))) ->_IH c1(gen_c:c18_9(c13_9)) 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)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 Generator Equations: gen_c:c18_9(0) <=> c gen_c:c18_9(+(x, 1)) <=> c1(gen_c:c18_9(x)) gen_0':s9_9(0) <=> 0' gen_0':s9_9(+(x, 1)) <=> s(gen_0':s9_9(x)) gen_c2:c3:c410_9(0) <=> c2 gen_c2:c3:c410_9(+(x, 1)) <=> c4(gen_c2:c3:c410_9(x)) The following defined symbols remain to be analysed: PLUS, LT, FIBITER, lt, plus, fibiter They will be analysed ascendingly in the following order: PLUS < FIBITER LT < FIBITER lt < FIBITER plus < FIBITER lt < fibiter plus < fibiter ---------------------------------------- (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)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 Lemmas: PLUS(gen_0':s9_9(n12_9), gen_0':s9_9(b)) -> gen_c:c18_9(n12_9), rt in Omega(1 + n12_9) Generator Equations: gen_c:c18_9(0) <=> c gen_c:c18_9(+(x, 1)) <=> c1(gen_c:c18_9(x)) gen_0':s9_9(0) <=> 0' gen_0':s9_9(+(x, 1)) <=> s(gen_0':s9_9(x)) gen_c2:c3:c410_9(0) <=> c2 gen_c2:c3:c410_9(+(x, 1)) <=> c4(gen_c2:c3:c410_9(x)) The following defined symbols remain to be analysed: LT, FIBITER, lt, plus, fibiter They will be analysed ascendingly in the following order: LT < FIBITER lt < FIBITER plus < FIBITER lt < fibiter plus < fibiter ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LT(gen_0':s9_9(n503_9), gen_0':s9_9(+(1, n503_9))) -> gen_c2:c3:c410_9(n503_9), rt in Omega(1 + n503_9) Induction Base: LT(gen_0':s9_9(0), gen_0':s9_9(+(1, 0))) ->_R^Omega(1) c2 Induction Step: LT(gen_0':s9_9(+(n503_9, 1)), gen_0':s9_9(+(1, +(n503_9, 1)))) ->_R^Omega(1) c4(LT(gen_0':s9_9(n503_9), gen_0':s9_9(+(1, n503_9)))) ->_IH c4(gen_c2:c3:c410_9(c504_9)) 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: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 Lemmas: PLUS(gen_0':s9_9(n12_9), gen_0':s9_9(b)) -> gen_c:c18_9(n12_9), rt in Omega(1 + n12_9) LT(gen_0':s9_9(n503_9), gen_0':s9_9(+(1, n503_9))) -> gen_c2:c3:c410_9(n503_9), rt in Omega(1 + n503_9) Generator Equations: gen_c:c18_9(0) <=> c gen_c:c18_9(+(x, 1)) <=> c1(gen_c:c18_9(x)) gen_0':s9_9(0) <=> 0' gen_0':s9_9(+(x, 1)) <=> s(gen_0':s9_9(x)) gen_c2:c3:c410_9(0) <=> c2 gen_c2:c3:c410_9(+(x, 1)) <=> c4(gen_c2:c3:c410_9(x)) The following defined symbols remain to be analysed: lt, FIBITER, plus, fibiter They will be analysed ascendingly in the following order: lt < FIBITER plus < FIBITER lt < fibiter plus < fibiter ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lt(gen_0':s9_9(n1133_9), gen_0':s9_9(+(1, n1133_9))) -> true, rt in Omega(0) Induction Base: lt(gen_0':s9_9(0), gen_0':s9_9(+(1, 0))) ->_R^Omega(0) true Induction Step: lt(gen_0':s9_9(+(n1133_9, 1)), gen_0':s9_9(+(1, +(n1133_9, 1)))) ->_R^Omega(0) lt(gen_0':s9_9(n1133_9), gen_0':s9_9(+(1, n1133_9))) ->_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: PLUS(0', z0) -> c PLUS(s(z0), z1) -> c1(PLUS(z0, z1)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 Lemmas: PLUS(gen_0':s9_9(n12_9), gen_0':s9_9(b)) -> gen_c:c18_9(n12_9), rt in Omega(1 + n12_9) LT(gen_0':s9_9(n503_9), gen_0':s9_9(+(1, n503_9))) -> gen_c2:c3:c410_9(n503_9), rt in Omega(1 + n503_9) lt(gen_0':s9_9(n1133_9), gen_0':s9_9(+(1, n1133_9))) -> true, rt in Omega(0) Generator Equations: gen_c:c18_9(0) <=> c gen_c:c18_9(+(x, 1)) <=> c1(gen_c:c18_9(x)) gen_0':s9_9(0) <=> 0' gen_0':s9_9(+(x, 1)) <=> s(gen_0':s9_9(x)) gen_c2:c3:c410_9(0) <=> c2 gen_c2:c3:c410_9(+(x, 1)) <=> c4(gen_c2:c3:c410_9(x)) The following defined symbols remain to be analysed: plus, FIBITER, fibiter They will be analysed ascendingly in the following order: plus < FIBITER plus < fibiter ---------------------------------------- (21) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: plus(gen_0':s9_9(n1481_9), gen_0':s9_9(b)) -> gen_0':s9_9(+(n1481_9, b)), rt in Omega(0) Induction Base: plus(gen_0':s9_9(0), gen_0':s9_9(b)) ->_R^Omega(0) gen_0':s9_9(b) Induction Step: plus(gen_0':s9_9(+(n1481_9, 1)), gen_0':s9_9(b)) ->_R^Omega(0) s(plus(gen_0':s9_9(n1481_9), gen_0':s9_9(b))) ->_IH s(gen_0':s9_9(+(b, c1482_9))) 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)) LT(0', s(z0)) -> c2 LT(z0, 0') -> c3 LT(s(z0), s(z1)) -> c4(LT(z0, z1)) FIB(z0) -> c5(FIBITER(z0, 0', 0', s(0'))) FIBITER(z0, z1, z2, z3) -> c6(IF(lt(z1, z0), z0, z1, z2, z3), LT(z1, z0)) IF(false, z0, z1, z2, z3) -> c7 IF(true, z0, z1, z2, z3) -> c8(FIBITER(z0, s(z1), z3, plus(z2, z3)), PLUS(z2, z3)) plus(0', z0) -> z0 plus(s(z0), z1) -> s(plus(z0, z1)) lt(0', s(z0)) -> true lt(z0, 0') -> false lt(s(z0), s(z1)) -> lt(z0, z1) fib(z0) -> fibiter(z0, 0', 0', s(0')) fibiter(z0, z1, z2, z3) -> if(lt(z1, z0), z0, z1, z2, z3) if(false, z0, z1, z2, z3) -> z2 if(true, z0, z1, z2, z3) -> fibiter(z0, s(z1), z3, plus(z2, z3)) Types: PLUS :: 0':s -> 0':s -> c:c1 0' :: 0':s c :: c:c1 s :: 0':s -> 0':s c1 :: c:c1 -> c:c1 LT :: 0':s -> 0':s -> c2:c3:c4 c2 :: c2:c3:c4 c3 :: c2:c3:c4 c4 :: c2:c3:c4 -> c2:c3:c4 FIB :: 0':s -> c5 c5 :: c6 -> c5 FIBITER :: 0':s -> 0':s -> 0':s -> 0':s -> c6 c6 :: c7:c8 -> c2:c3:c4 -> c6 IF :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> c7:c8 lt :: 0':s -> 0':s -> false:true false :: false:true c7 :: c7:c8 true :: false:true c8 :: c6 -> c:c1 -> c7:c8 plus :: 0':s -> 0':s -> 0':s fib :: 0':s -> 0':s fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s if :: false:true -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s hole_c:c11_9 :: c:c1 hole_0':s2_9 :: 0':s hole_c2:c3:c43_9 :: c2:c3:c4 hole_c54_9 :: c5 hole_c65_9 :: c6 hole_c7:c86_9 :: c7:c8 hole_false:true7_9 :: false:true gen_c:c18_9 :: Nat -> c:c1 gen_0':s9_9 :: Nat -> 0':s gen_c2:c3:c410_9 :: Nat -> c2:c3:c4 Lemmas: PLUS(gen_0':s9_9(n12_9), gen_0':s9_9(b)) -> gen_c:c18_9(n12_9), rt in Omega(1 + n12_9) LT(gen_0':s9_9(n503_9), gen_0':s9_9(+(1, n503_9))) -> gen_c2:c3:c410_9(n503_9), rt in Omega(1 + n503_9) lt(gen_0':s9_9(n1133_9), gen_0':s9_9(+(1, n1133_9))) -> true, rt in Omega(0) plus(gen_0':s9_9(n1481_9), gen_0':s9_9(b)) -> gen_0':s9_9(+(n1481_9, b)), rt in Omega(0) Generator Equations: gen_c:c18_9(0) <=> c gen_c:c18_9(+(x, 1)) <=> c1(gen_c:c18_9(x)) gen_0':s9_9(0) <=> 0' gen_0':s9_9(+(x, 1)) <=> s(gen_0':s9_9(x)) gen_c2:c3:c410_9(0) <=> c2 gen_c2:c3:c410_9(+(x, 1)) <=> c4(gen_c2:c3:c410_9(x)) The following defined symbols remain to be analysed: FIBITER, fibiter