/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), ?) proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 225 ms] (2) CpxRelTRS (3) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxRelTRS (5) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (6) typed CpxTrs (7) OrderProof [LOWER BOUND(ID), 0 ms] (8) typed CpxTrs (9) RewriteLemmaProof [LOWER BOUND(ID), 268 ms] (10) BEST (11) proven lower bound (12) LowerBoundPropagationProof [FINISHED, 0 ms] (13) BOUNDS(n^1, INF) (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 60 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 33 ms] (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 30 ms] (20) typed CpxTrs ---------------------------------------- (0) 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: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) 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^1, INF). The TRS R consists of the following rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) 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^1, INF). The TRS R consists of the following rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) The (relative) TRS S consists of the following rules: and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Rewrite Strategy: INNERMOST ---------------------------------------- (5) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (6) Obligation: Innermost TRS: Rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil ---------------------------------------- (7) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: @, gt0, gcd, eqList, lgth, monus They will be analysed ascendingly in the following order: @ < lgth gt0 < gcd eqList < gcd monus < gcd eqList < monus lgth < monus ---------------------------------------- (8) Obligation: Innermost TRS: Rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil Generator Equations: gen_Cons:Nil3_1(0) <=> Nil gen_Cons:Nil3_1(+(x, 1)) <=> Cons(Nil, gen_Cons:Nil3_1(x)) The following defined symbols remain to be analysed: @, gt0, gcd, eqList, lgth, monus They will be analysed ascendingly in the following order: @ < lgth gt0 < gcd eqList < gcd monus < gcd eqList < monus lgth < monus ---------------------------------------- (9) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: @(gen_Cons:Nil3_1(n5_1), gen_Cons:Nil3_1(b)) -> gen_Cons:Nil3_1(+(n5_1, b)), rt in Omega(1 + n5_1) Induction Base: @(gen_Cons:Nil3_1(0), gen_Cons:Nil3_1(b)) ->_R^Omega(1) gen_Cons:Nil3_1(b) Induction Step: @(gen_Cons:Nil3_1(+(n5_1, 1)), gen_Cons:Nil3_1(b)) ->_R^Omega(1) Cons(Nil, @(gen_Cons:Nil3_1(n5_1), gen_Cons:Nil3_1(b))) ->_IH Cons(Nil, gen_Cons:Nil3_1(+(b, c6_1))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (10) Complex Obligation (BEST) ---------------------------------------- (11) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil Generator Equations: gen_Cons:Nil3_1(0) <=> Nil gen_Cons:Nil3_1(+(x, 1)) <=> Cons(Nil, gen_Cons:Nil3_1(x)) The following defined symbols remain to be analysed: @, gt0, gcd, eqList, lgth, monus They will be analysed ascendingly in the following order: @ < lgth gt0 < gcd eqList < gcd monus < gcd eqList < monus lgth < monus ---------------------------------------- (12) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (13) BOUNDS(n^1, INF) ---------------------------------------- (14) Obligation: Innermost TRS: Rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil Lemmas: @(gen_Cons:Nil3_1(n5_1), gen_Cons:Nil3_1(b)) -> gen_Cons:Nil3_1(+(n5_1, b)), rt in Omega(1 + n5_1) Generator Equations: gen_Cons:Nil3_1(0) <=> Nil gen_Cons:Nil3_1(+(x, 1)) <=> Cons(Nil, gen_Cons:Nil3_1(x)) The following defined symbols remain to be analysed: gt0, gcd, eqList, lgth, monus They will be analysed ascendingly in the following order: gt0 < gcd eqList < gcd monus < gcd eqList < monus lgth < monus ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: gt0(gen_Cons:Nil3_1(+(1, n946_1)), gen_Cons:Nil3_1(n946_1)) -> True, rt in Omega(1 + n946_1) Induction Base: gt0(gen_Cons:Nil3_1(+(1, 0)), gen_Cons:Nil3_1(0)) ->_R^Omega(1) True Induction Step: gt0(gen_Cons:Nil3_1(+(1, +(n946_1, 1))), gen_Cons:Nil3_1(+(n946_1, 1))) ->_R^Omega(1) gt0(gen_Cons:Nil3_1(+(1, n946_1)), gen_Cons:Nil3_1(n946_1)) ->_IH True We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (16) Obligation: Innermost TRS: Rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil Lemmas: @(gen_Cons:Nil3_1(n5_1), gen_Cons:Nil3_1(b)) -> gen_Cons:Nil3_1(+(n5_1, b)), rt in Omega(1 + n5_1) gt0(gen_Cons:Nil3_1(+(1, n946_1)), gen_Cons:Nil3_1(n946_1)) -> True, rt in Omega(1 + n946_1) Generator Equations: gen_Cons:Nil3_1(0) <=> Nil gen_Cons:Nil3_1(+(x, 1)) <=> Cons(Nil, gen_Cons:Nil3_1(x)) The following defined symbols remain to be analysed: eqList, gcd, lgth, monus They will be analysed ascendingly in the following order: eqList < gcd monus < gcd eqList < monus lgth < monus ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: eqList(gen_Cons:Nil3_1(+(1, n1415_1)), gen_Cons:Nil3_1(n1415_1)) -> False, rt in Omega(1 + n1415_1) Induction Base: eqList(gen_Cons:Nil3_1(+(1, 0)), gen_Cons:Nil3_1(0)) ->_R^Omega(1) False Induction Step: eqList(gen_Cons:Nil3_1(+(1, +(n1415_1, 1))), gen_Cons:Nil3_1(+(n1415_1, 1))) ->_R^Omega(1) and(eqList(Nil, Nil), eqList(gen_Cons:Nil3_1(+(1, n1415_1)), gen_Cons:Nil3_1(n1415_1))) ->_R^Omega(1) and(True, eqList(gen_Cons:Nil3_1(+(1, n1415_1)), gen_Cons:Nil3_1(n1415_1))) ->_IH and(True, False) ->_R^Omega(0) False 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: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil Lemmas: @(gen_Cons:Nil3_1(n5_1), gen_Cons:Nil3_1(b)) -> gen_Cons:Nil3_1(+(n5_1, b)), rt in Omega(1 + n5_1) gt0(gen_Cons:Nil3_1(+(1, n946_1)), gen_Cons:Nil3_1(n946_1)) -> True, rt in Omega(1 + n946_1) eqList(gen_Cons:Nil3_1(+(1, n1415_1)), gen_Cons:Nil3_1(n1415_1)) -> False, rt in Omega(1 + n1415_1) Generator Equations: gen_Cons:Nil3_1(0) <=> Nil gen_Cons:Nil3_1(+(x, 1)) <=> Cons(Nil, gen_Cons:Nil3_1(x)) The following defined symbols remain to be analysed: lgth, gcd, monus They will be analysed ascendingly in the following order: monus < gcd lgth < monus ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: lgth(gen_Cons:Nil3_1(n2029_1)) -> gen_Cons:Nil3_1(n2029_1), rt in Omega(1 + n2029_1) Induction Base: lgth(gen_Cons:Nil3_1(0)) ->_R^Omega(1) Nil Induction Step: lgth(gen_Cons:Nil3_1(+(n2029_1, 1))) ->_R^Omega(1) @(Cons(Nil, Nil), lgth(gen_Cons:Nil3_1(n2029_1))) ->_IH @(Cons(Nil, Nil), gen_Cons:Nil3_1(c2030_1)) ->_L^Omega(2) gen_Cons:Nil3_1(+(+(0, 1), n2029_1)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (20) Obligation: Innermost TRS: Rules: @(Cons(x, xs), ys) -> Cons(x, @(xs, ys)) @(Nil, ys) -> ys gt0(Cons(x, xs), Nil) -> True gt0(Cons(x', xs'), Cons(x, xs)) -> gt0(xs', xs) gcd(Nil, Nil) -> Nil gcd(Nil, Cons(x, xs)) -> Nil gcd(Cons(x, xs), Nil) -> Nil gcd(Cons(x', xs'), Cons(x, xs)) -> gcd[Ite](eqList(Cons(x', xs'), Cons(x, xs)), Cons(x', xs'), Cons(x, xs)) lgth(Cons(x, xs)) -> @(Cons(Nil, Nil), lgth(xs)) eqList(Cons(x, xs), Cons(y, ys)) -> and(eqList(x, y), eqList(xs, ys)) eqList(Cons(x, xs), Nil) -> False eqList(Nil, Cons(y, ys)) -> False eqList(Nil, Nil) -> True lgth(Nil) -> Nil gt0(Nil, y) -> False monus(x, y) -> monus[Ite](eqList(lgth(y), Cons(Nil, Nil)), x, y) goal(x, y) -> gcd(x, y) and(False, False) -> False and(True, False) -> False and(False, True) -> False and(True, True) -> True monus[Ite](False, Cons(x', xs'), Cons(x, xs)) -> monus(xs', xs) monus[Ite](True, Cons(x, xs), y) -> xs gcd[Ite](False, x, y) -> gcd[False][Ite](gt0(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(x, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) Types: @ :: Cons:Nil -> Cons:Nil -> Cons:Nil Cons :: Cons:Nil -> Cons:Nil -> Cons:Nil Nil :: Cons:Nil gt0 :: Cons:Nil -> Cons:Nil -> True:False True :: True:False gcd :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil eqList :: Cons:Nil -> Cons:Nil -> True:False lgth :: Cons:Nil -> Cons:Nil and :: True:False -> True:False -> True:False False :: True:False monus :: Cons:Nil -> Cons:Nil -> Cons:Nil monus[Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil goal :: Cons:Nil -> Cons:Nil -> Cons:Nil gcd[False][Ite] :: True:False -> Cons:Nil -> Cons:Nil -> Cons:Nil hole_Cons:Nil1_1 :: Cons:Nil hole_True:False2_1 :: True:False gen_Cons:Nil3_1 :: Nat -> Cons:Nil Lemmas: @(gen_Cons:Nil3_1(n5_1), gen_Cons:Nil3_1(b)) -> gen_Cons:Nil3_1(+(n5_1, b)), rt in Omega(1 + n5_1) gt0(gen_Cons:Nil3_1(+(1, n946_1)), gen_Cons:Nil3_1(n946_1)) -> True, rt in Omega(1 + n946_1) eqList(gen_Cons:Nil3_1(+(1, n1415_1)), gen_Cons:Nil3_1(n1415_1)) -> False, rt in Omega(1 + n1415_1) lgth(gen_Cons:Nil3_1(n2029_1)) -> gen_Cons:Nil3_1(n2029_1), rt in Omega(1 + n2029_1) Generator Equations: gen_Cons:Nil3_1(0) <=> Nil gen_Cons:Nil3_1(+(x, 1)) <=> Cons(Nil, gen_Cons:Nil3_1(x)) The following defined symbols remain to be analysed: monus, gcd They will be analysed ascendingly in the following order: monus < gcd