958.18/291.58 WORST_CASE(Omega(n^1), ?) 958.18/291.59 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 958.18/291.59 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 958.18/291.59 958.18/291.59 958.18/291.59 The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 958.18/291.59 958.18/291.59 (0) CpxTRS 958.18/291.59 (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] 958.18/291.59 (2) CpxTRS 958.18/291.59 (3) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] 958.18/291.59 (4) typed CpxTrs 958.18/291.59 (5) OrderProof [LOWER BOUND(ID), 0 ms] 958.18/291.59 (6) typed CpxTrs 958.18/291.59 (7) RewriteLemmaProof [LOWER BOUND(ID), 301 ms] 958.18/291.59 (8) BEST 958.18/291.59 (9) proven lower bound 958.18/291.59 (10) LowerBoundPropagationProof [FINISHED, 0 ms] 958.18/291.59 (11) BOUNDS(n^1, INF) 958.18/291.59 (12) typed CpxTrs 958.18/291.59 (13) RewriteLemmaProof [LOWER BOUND(ID), 78 ms] 958.18/291.59 (14) typed CpxTrs 958.18/291.59 958.18/291.59 958.18/291.59 ---------------------------------------- 958.18/291.59 958.18/291.59 (0) 958.18/291.59 Obligation: 958.18/291.59 The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 958.18/291.59 958.18/291.59 958.18/291.59 The TRS R consists of the following rules: 958.18/291.59 958.18/291.59 plus(0, y) -> y 958.18/291.59 plus(s(x), y) -> s(plus(x, y)) 958.18/291.59 lt(0, s(y)) -> true 958.18/291.59 lt(x, 0) -> false 958.18/291.59 lt(s(x), s(y)) -> lt(x, y) 958.18/291.59 fib(x) -> fibiter(x, 0, 0, s(0)) 958.18/291.59 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.59 if(false, b, c, x, y) -> x 958.18/291.59 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.59 958.18/291.59 S is empty. 958.18/291.59 Rewrite Strategy: INNERMOST 958.18/291.59 ---------------------------------------- 958.18/291.59 958.18/291.59 (1) RenamingProof (BOTH BOUNDS(ID, ID)) 958.18/291.59 Renamed function symbols to avoid clashes with predefined symbol. 958.18/291.59 ---------------------------------------- 958.18/291.59 958.18/291.59 (2) 958.18/291.59 Obligation: 958.18/291.59 The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 958.18/291.59 958.18/291.59 958.18/291.59 The TRS R consists of the following rules: 958.18/291.59 958.18/291.59 plus(0', y) -> y 958.18/291.59 plus(s(x), y) -> s(plus(x, y)) 958.18/291.59 lt(0', s(y)) -> true 958.18/291.59 lt(x, 0') -> false 958.18/291.59 lt(s(x), s(y)) -> lt(x, y) 958.18/291.59 fib(x) -> fibiter(x, 0', 0', s(0')) 958.18/291.59 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.59 if(false, b, c, x, y) -> x 958.18/291.59 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.59 958.18/291.59 S is empty. 958.18/291.59 Rewrite Strategy: INNERMOST 958.18/291.59 ---------------------------------------- 958.18/291.59 958.18/291.59 (3) TypeInferenceProof (BOTH BOUNDS(ID, ID)) 958.18/291.60 Infered types. 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (4) 958.18/291.60 Obligation: 958.18/291.60 Innermost TRS: 958.18/291.60 Rules: 958.18/291.60 plus(0', y) -> y 958.18/291.60 plus(s(x), y) -> s(plus(x, y)) 958.18/291.60 lt(0', s(y)) -> true 958.18/291.60 lt(x, 0') -> false 958.18/291.60 lt(s(x), s(y)) -> lt(x, y) 958.18/291.60 fib(x) -> fibiter(x, 0', 0', s(0')) 958.18/291.60 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.60 if(false, b, c, x, y) -> x 958.18/291.60 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.60 958.18/291.60 Types: 958.18/291.60 plus :: 0':s -> 0':s -> 0':s 958.18/291.60 0' :: 0':s 958.18/291.60 s :: 0':s -> 0':s 958.18/291.60 lt :: 0':s -> 0':s -> true:false 958.18/291.60 true :: true:false 958.18/291.60 false :: true:false 958.18/291.60 fib :: 0':s -> 0':s 958.18/291.60 fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 hole_0':s1_0 :: 0':s 958.18/291.60 hole_true:false2_0 :: true:false 958.18/291.60 gen_0':s3_0 :: Nat -> 0':s 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (5) OrderProof (LOWER BOUND(ID)) 958.18/291.60 Heuristically decided to analyse the following defined symbols: 958.18/291.60 plus, lt, fibiter 958.18/291.60 958.18/291.60 They will be analysed ascendingly in the following order: 958.18/291.60 plus < fibiter 958.18/291.60 lt < fibiter 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (6) 958.18/291.60 Obligation: 958.18/291.60 Innermost TRS: 958.18/291.60 Rules: 958.18/291.60 plus(0', y) -> y 958.18/291.60 plus(s(x), y) -> s(plus(x, y)) 958.18/291.60 lt(0', s(y)) -> true 958.18/291.60 lt(x, 0') -> false 958.18/291.60 lt(s(x), s(y)) -> lt(x, y) 958.18/291.60 fib(x) -> fibiter(x, 0', 0', s(0')) 958.18/291.60 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.60 if(false, b, c, x, y) -> x 958.18/291.60 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.60 958.18/291.60 Types: 958.18/291.60 plus :: 0':s -> 0':s -> 0':s 958.18/291.60 0' :: 0':s 958.18/291.60 s :: 0':s -> 0':s 958.18/291.60 lt :: 0':s -> 0':s -> true:false 958.18/291.60 true :: true:false 958.18/291.60 false :: true:false 958.18/291.60 fib :: 0':s -> 0':s 958.18/291.60 fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 hole_0':s1_0 :: 0':s 958.18/291.60 hole_true:false2_0 :: true:false 958.18/291.60 gen_0':s3_0 :: Nat -> 0':s 958.18/291.60 958.18/291.60 958.18/291.60 Generator Equations: 958.18/291.60 gen_0':s3_0(0) <=> 0' 958.18/291.60 gen_0':s3_0(+(x, 1)) <=> s(gen_0':s3_0(x)) 958.18/291.60 958.18/291.60 958.18/291.60 The following defined symbols remain to be analysed: 958.18/291.60 plus, lt, fibiter 958.18/291.60 958.18/291.60 They will be analysed ascendingly in the following order: 958.18/291.60 plus < fibiter 958.18/291.60 lt < fibiter 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (7) RewriteLemmaProof (LOWER BOUND(ID)) 958.18/291.60 Proved the following rewrite lemma: 958.18/291.60 plus(gen_0':s3_0(n5_0), gen_0':s3_0(b)) -> gen_0':s3_0(+(n5_0, b)), rt in Omega(1 + n5_0) 958.18/291.60 958.18/291.60 Induction Base: 958.18/291.60 plus(gen_0':s3_0(0), gen_0':s3_0(b)) ->_R^Omega(1) 958.18/291.60 gen_0':s3_0(b) 958.18/291.60 958.18/291.60 Induction Step: 958.18/291.60 plus(gen_0':s3_0(+(n5_0, 1)), gen_0':s3_0(b)) ->_R^Omega(1) 958.18/291.60 s(plus(gen_0':s3_0(n5_0), gen_0':s3_0(b))) ->_IH 958.18/291.60 s(gen_0':s3_0(+(b, c6_0))) 958.18/291.60 958.18/291.60 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (8) 958.18/291.60 Complex Obligation (BEST) 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (9) 958.18/291.60 Obligation: 958.18/291.60 Proved the lower bound n^1 for the following obligation: 958.18/291.60 958.18/291.60 Innermost TRS: 958.18/291.60 Rules: 958.18/291.60 plus(0', y) -> y 958.18/291.60 plus(s(x), y) -> s(plus(x, y)) 958.18/291.60 lt(0', s(y)) -> true 958.18/291.60 lt(x, 0') -> false 958.18/291.60 lt(s(x), s(y)) -> lt(x, y) 958.18/291.60 fib(x) -> fibiter(x, 0', 0', s(0')) 958.18/291.60 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.60 if(false, b, c, x, y) -> x 958.18/291.60 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.60 958.18/291.60 Types: 958.18/291.60 plus :: 0':s -> 0':s -> 0':s 958.18/291.60 0' :: 0':s 958.18/291.60 s :: 0':s -> 0':s 958.18/291.60 lt :: 0':s -> 0':s -> true:false 958.18/291.60 true :: true:false 958.18/291.60 false :: true:false 958.18/291.60 fib :: 0':s -> 0':s 958.18/291.60 fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 hole_0':s1_0 :: 0':s 958.18/291.60 hole_true:false2_0 :: true:false 958.18/291.60 gen_0':s3_0 :: Nat -> 0':s 958.18/291.60 958.18/291.60 958.18/291.60 Generator Equations: 958.18/291.60 gen_0':s3_0(0) <=> 0' 958.18/291.60 gen_0':s3_0(+(x, 1)) <=> s(gen_0':s3_0(x)) 958.18/291.60 958.18/291.60 958.18/291.60 The following defined symbols remain to be analysed: 958.18/291.60 plus, lt, fibiter 958.18/291.60 958.18/291.60 They will be analysed ascendingly in the following order: 958.18/291.60 plus < fibiter 958.18/291.60 lt < fibiter 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (10) LowerBoundPropagationProof (FINISHED) 958.18/291.60 Propagated lower bound. 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (11) 958.18/291.60 BOUNDS(n^1, INF) 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (12) 958.18/291.60 Obligation: 958.18/291.60 Innermost TRS: 958.18/291.60 Rules: 958.18/291.60 plus(0', y) -> y 958.18/291.60 plus(s(x), y) -> s(plus(x, y)) 958.18/291.60 lt(0', s(y)) -> true 958.18/291.60 lt(x, 0') -> false 958.18/291.60 lt(s(x), s(y)) -> lt(x, y) 958.18/291.60 fib(x) -> fibiter(x, 0', 0', s(0')) 958.18/291.60 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.60 if(false, b, c, x, y) -> x 958.18/291.60 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.60 958.18/291.60 Types: 958.18/291.60 plus :: 0':s -> 0':s -> 0':s 958.18/291.60 0' :: 0':s 958.18/291.60 s :: 0':s -> 0':s 958.18/291.60 lt :: 0':s -> 0':s -> true:false 958.18/291.60 true :: true:false 958.18/291.60 false :: true:false 958.18/291.60 fib :: 0':s -> 0':s 958.18/291.60 fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 hole_0':s1_0 :: 0':s 958.18/291.60 hole_true:false2_0 :: true:false 958.18/291.60 gen_0':s3_0 :: Nat -> 0':s 958.18/291.60 958.18/291.60 958.18/291.60 Lemmas: 958.18/291.60 plus(gen_0':s3_0(n5_0), gen_0':s3_0(b)) -> gen_0':s3_0(+(n5_0, b)), rt in Omega(1 + n5_0) 958.18/291.60 958.18/291.60 958.18/291.60 Generator Equations: 958.18/291.60 gen_0':s3_0(0) <=> 0' 958.18/291.60 gen_0':s3_0(+(x, 1)) <=> s(gen_0':s3_0(x)) 958.18/291.60 958.18/291.60 958.18/291.60 The following defined symbols remain to be analysed: 958.18/291.60 lt, fibiter 958.18/291.60 958.18/291.60 They will be analysed ascendingly in the following order: 958.18/291.60 lt < fibiter 958.18/291.60 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (13) RewriteLemmaProof (LOWER BOUND(ID)) 958.18/291.60 Proved the following rewrite lemma: 958.18/291.60 lt(gen_0':s3_0(n542_0), gen_0':s3_0(+(1, n542_0))) -> true, rt in Omega(1 + n542_0) 958.18/291.60 958.18/291.60 Induction Base: 958.18/291.60 lt(gen_0':s3_0(0), gen_0':s3_0(+(1, 0))) ->_R^Omega(1) 958.18/291.60 true 958.18/291.60 958.18/291.60 Induction Step: 958.18/291.60 lt(gen_0':s3_0(+(n542_0, 1)), gen_0':s3_0(+(1, +(n542_0, 1)))) ->_R^Omega(1) 958.18/291.60 lt(gen_0':s3_0(n542_0), gen_0':s3_0(+(1, n542_0))) ->_IH 958.18/291.60 true 958.18/291.60 958.18/291.60 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). 958.18/291.60 ---------------------------------------- 958.18/291.60 958.18/291.60 (14) 958.18/291.60 Obligation: 958.18/291.60 Innermost TRS: 958.18/291.60 Rules: 958.18/291.60 plus(0', y) -> y 958.18/291.60 plus(s(x), y) -> s(plus(x, y)) 958.18/291.60 lt(0', s(y)) -> true 958.18/291.60 lt(x, 0') -> false 958.18/291.60 lt(s(x), s(y)) -> lt(x, y) 958.18/291.60 fib(x) -> fibiter(x, 0', 0', s(0')) 958.18/291.60 fibiter(b, c, x, y) -> if(lt(c, b), b, c, x, y) 958.18/291.60 if(false, b, c, x, y) -> x 958.18/291.60 if(true, b, c, x, y) -> fibiter(b, s(c), y, plus(x, y)) 958.18/291.60 958.18/291.60 Types: 958.18/291.60 plus :: 0':s -> 0':s -> 0':s 958.18/291.60 0' :: 0':s 958.18/291.60 s :: 0':s -> 0':s 958.18/291.60 lt :: 0':s -> 0':s -> true:false 958.18/291.60 true :: true:false 958.18/291.60 false :: true:false 958.18/291.60 fib :: 0':s -> 0':s 958.18/291.60 fibiter :: 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 if :: true:false -> 0':s -> 0':s -> 0':s -> 0':s -> 0':s 958.18/291.60 hole_0':s1_0 :: 0':s 958.18/291.60 hole_true:false2_0 :: true:false 958.18/291.60 gen_0':s3_0 :: Nat -> 0':s 958.18/291.60 958.18/291.60 958.18/291.60 Lemmas: 958.18/291.60 plus(gen_0':s3_0(n5_0), gen_0':s3_0(b)) -> gen_0':s3_0(+(n5_0, b)), rt in Omega(1 + n5_0) 958.18/291.60 lt(gen_0':s3_0(n542_0), gen_0':s3_0(+(1, n542_0))) -> true, rt in Omega(1 + n542_0) 958.18/291.60 958.18/291.60 958.18/291.60 Generator Equations: 958.18/291.60 gen_0':s3_0(0) <=> 0' 958.18/291.60 gen_0':s3_0(+(x, 1)) <=> s(gen_0':s3_0(x)) 958.18/291.60 958.18/291.60 958.18/291.60 The following defined symbols remain to be analysed: 958.18/291.60 fibiter 958.33/291.64 EOF