/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), O(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 CpxTRS could be proven to be BOUNDS(n^1, n^1). (0) CpxTRS (1) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (2) CpxTRS (3) CpxTrsMatchBoundsTAProof [FINISHED, 40 ms] (4) BOUNDS(1, n^1) (5) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CpxTRS (7) SlicingProof [LOWER BOUND(ID), 0 ms] (8) CpxTRS (9) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (10) typed CpxTrs (11) OrderProof [LOWER BOUND(ID), 0 ms] (12) typed CpxTrs (13) RewriteLemmaProof [LOWER BOUND(ID), 313 ms] (14) BEST (15) proven lower bound (16) LowerBoundPropagationProof [FINISHED, 0 ms] (17) BOUNDS(n^1, INF) (18) typed CpxTrs (19) RewriteLemmaProof [LOWER BOUND(ID), 51 ms] (20) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). The TRS R consists of the following rules: group3(@l) -> group3#1(@l) group3#1(::(@x, @xs)) -> group3#2(@xs, @x) group3#1(nil) -> nil group3#2(::(@y, @ys), @x) -> group3#3(@ys, @x, @y) group3#2(nil, @x) -> nil group3#3(::(@z, @zs), @x, @y) -> ::(tuple#3(@x, @y, @z), group3(@zs)) group3#3(nil, @x, @y) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@x, @xs), @l2, @l3) -> zip3#2(@l2, @l3, @x, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@y, @ys), @l3, @x, @xs) -> zip3#3(@l3, @x, @xs, @y, @ys) zip3#2(nil, @l3, @x, @xs) -> nil zip3#3(::(@z, @zs), @x, @xs, @y, @ys) -> ::(tuple#3(@x, @y, @z), zip3(@xs, @ys, @zs)) zip3#3(nil, @x, @xs, @y, @ys) -> nil S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (1) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (2) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^1). The TRS R consists of the following rules: group3(@l) -> group3#1(@l) group3#1(::(@x, @xs)) -> group3#2(@xs, @x) group3#1(nil) -> nil group3#2(::(@y, @ys), @x) -> group3#3(@ys, @x, @y) group3#2(nil, @x) -> nil group3#3(::(@z, @zs), @x, @y) -> ::(tuple#3(@x, @y, @z), group3(@zs)) group3#3(nil, @x, @y) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@x, @xs), @l2, @l3) -> zip3#2(@l2, @l3, @x, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@y, @ys), @l3, @x, @xs) -> zip3#3(@l3, @x, @xs, @y, @ys) zip3#2(nil, @l3, @x, @xs) -> nil zip3#3(::(@z, @zs), @x, @xs, @y, @ys) -> ::(tuple#3(@x, @y, @z), zip3(@xs, @ys, @zs)) zip3#3(nil, @x, @xs, @y, @ys) -> nil S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (3) CpxTrsMatchBoundsTAProof (FINISHED) A linear upper bound on the runtime complexity of the TRS R could be shown with a Match-Bound[TAB_LEFTLINEAR,TAB_NONLEFTLINEAR] (for contructor-based start-terms) of 2. The compatible tree automaton used to show the Match-Boundedness (for constructor-based start-terms) is represented by: final states : [1, 2, 3, 4, 5, 6, 7, 8] transitions: ::0(0, 0) -> 0 nil0() -> 0 tuple#30(0, 0, 0) -> 0 group30(0) -> 1 group3#10(0) -> 2 group3#20(0, 0) -> 3 group3#30(0, 0, 0) -> 4 zip30(0, 0, 0) -> 5 zip3#10(0, 0, 0) -> 6 zip3#20(0, 0, 0, 0) -> 7 zip3#30(0, 0, 0, 0, 0) -> 8 group3#11(0) -> 1 group3#21(0, 0) -> 2 nil1() -> 2 group3#31(0, 0, 0) -> 3 nil1() -> 3 tuple#31(0, 0, 0) -> 9 group31(0) -> 10 ::1(9, 10) -> 4 nil1() -> 4 zip3#11(0, 0, 0) -> 5 zip3#21(0, 0, 0, 0) -> 6 nil1() -> 6 zip3#31(0, 0, 0, 0, 0) -> 7 nil1() -> 7 zip31(0, 0, 0) -> 11 ::1(9, 11) -> 8 nil1() -> 8 group3#12(0) -> 10 group3#21(0, 0) -> 1 nil1() -> 1 group3#31(0, 0, 0) -> 2 ::1(9, 10) -> 3 zip3#12(0, 0, 0) -> 11 zip3#21(0, 0, 0, 0) -> 5 nil1() -> 5 zip3#31(0, 0, 0, 0, 0) -> 6 ::1(9, 11) -> 7 group3#31(0, 0, 0) -> 1 ::1(9, 10) -> 2 zip3#31(0, 0, 0, 0, 0) -> 5 ::1(9, 11) -> 6 group3#21(0, 0) -> 10 nil1() -> 10 zip3#21(0, 0, 0, 0) -> 11 nil1() -> 11 group3#31(0, 0, 0) -> 10 ::1(9, 10) -> 1 zip3#31(0, 0, 0, 0, 0) -> 11 ::1(9, 11) -> 5 ::1(9, 10) -> 10 ::1(9, 11) -> 11 ---------------------------------------- (4) BOUNDS(1, n^1) ---------------------------------------- (5) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (6) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: group3(@l) -> group3#1(@l) group3#1(::(@x, @xs)) -> group3#2(@xs, @x) group3#1(nil) -> nil group3#2(::(@y, @ys), @x) -> group3#3(@ys, @x, @y) group3#2(nil, @x) -> nil group3#3(::(@z, @zs), @x, @y) -> ::(tuple#3(@x, @y, @z), group3(@zs)) group3#3(nil, @x, @y) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@x, @xs), @l2, @l3) -> zip3#2(@l2, @l3, @x, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@y, @ys), @l3, @x, @xs) -> zip3#3(@l3, @x, @xs, @y, @ys) zip3#2(nil, @l3, @x, @xs) -> nil zip3#3(::(@z, @zs), @x, @xs, @y, @ys) -> ::(tuple#3(@x, @y, @z), zip3(@xs, @ys, @zs)) zip3#3(nil, @x, @xs, @y, @ys) -> nil S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (7) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: ::/0 group3#2/1 group3#3/1 group3#3/2 tuple#3/0 tuple#3/1 tuple#3/2 zip3#2/2 zip3#3/1 zip3#3/3 ---------------------------------------- (8) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: group3(@l) -> group3#1(@l) group3#1(::(@xs)) -> group3#2(@xs) group3#1(nil) -> nil group3#2(::(@ys)) -> group3#3(@ys) group3#2(nil) -> nil group3#3(::(@zs)) -> ::(group3(@zs)) group3#3(nil) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@xs), @l2, @l3) -> zip3#2(@l2, @l3, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@ys), @l3, @xs) -> zip3#3(@l3, @xs, @ys) zip3#2(nil, @l3, @xs) -> nil zip3#3(::(@zs), @xs, @ys) -> ::(zip3(@xs, @ys, @zs)) zip3#3(nil, @xs, @ys) -> nil S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (9) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (10) Obligation: Innermost TRS: Rules: group3(@l) -> group3#1(@l) group3#1(::(@xs)) -> group3#2(@xs) group3#1(nil) -> nil group3#2(::(@ys)) -> group3#3(@ys) group3#2(nil) -> nil group3#3(::(@zs)) -> ::(group3(@zs)) group3#3(nil) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@xs), @l2, @l3) -> zip3#2(@l2, @l3, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@ys), @l3, @xs) -> zip3#3(@l3, @xs, @ys) zip3#2(nil, @l3, @xs) -> nil zip3#3(::(@zs), @xs, @ys) -> ::(zip3(@xs, @ys, @zs)) zip3#3(nil, @xs, @ys) -> nil Types: group3 :: :::nil -> :::nil group3#1 :: :::nil -> :::nil :: :: :::nil -> :::nil group3#2 :: :::nil -> :::nil nil :: :::nil group3#3 :: :::nil -> :::nil zip3 :: :::nil -> :::nil -> :::nil -> :::nil zip3#1 :: :::nil -> :::nil -> :::nil -> :::nil zip3#2 :: :::nil -> :::nil -> :::nil -> :::nil zip3#3 :: :::nil -> :::nil -> :::nil -> :::nil hole_:::nil1_0 :: :::nil gen_:::nil2_0 :: Nat -> :::nil ---------------------------------------- (11) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: group3, group3#1, group3#2, group3#3, zip3, zip3#1, zip3#2, zip3#3 They will be analysed ascendingly in the following order: group3 = group3#1 group3 = group3#2 group3 = group3#3 group3#1 = group3#2 group3#1 = group3#3 group3#2 = group3#3 zip3 = zip3#1 zip3 = zip3#2 zip3 = zip3#3 zip3#1 = zip3#2 zip3#1 = zip3#3 zip3#2 = zip3#3 ---------------------------------------- (12) Obligation: Innermost TRS: Rules: group3(@l) -> group3#1(@l) group3#1(::(@xs)) -> group3#2(@xs) group3#1(nil) -> nil group3#2(::(@ys)) -> group3#3(@ys) group3#2(nil) -> nil group3#3(::(@zs)) -> ::(group3(@zs)) group3#3(nil) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@xs), @l2, @l3) -> zip3#2(@l2, @l3, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@ys), @l3, @xs) -> zip3#3(@l3, @xs, @ys) zip3#2(nil, @l3, @xs) -> nil zip3#3(::(@zs), @xs, @ys) -> ::(zip3(@xs, @ys, @zs)) zip3#3(nil, @xs, @ys) -> nil Types: group3 :: :::nil -> :::nil group3#1 :: :::nil -> :::nil :: :: :::nil -> :::nil group3#2 :: :::nil -> :::nil nil :: :::nil group3#3 :: :::nil -> :::nil zip3 :: :::nil -> :::nil -> :::nil -> :::nil zip3#1 :: :::nil -> :::nil -> :::nil -> :::nil zip3#2 :: :::nil -> :::nil -> :::nil -> :::nil zip3#3 :: :::nil -> :::nil -> :::nil -> :::nil hole_:::nil1_0 :: :::nil gen_:::nil2_0 :: Nat -> :::nil Generator Equations: gen_:::nil2_0(0) <=> nil gen_:::nil2_0(+(x, 1)) <=> ::(gen_:::nil2_0(x)) The following defined symbols remain to be analysed: zip3#1, group3, group3#1, group3#2, group3#3, zip3, zip3#2, zip3#3 They will be analysed ascendingly in the following order: group3 = group3#1 group3 = group3#2 group3 = group3#3 group3#1 = group3#2 group3#1 = group3#3 group3#2 = group3#3 zip3 = zip3#1 zip3 = zip3#2 zip3 = zip3#3 zip3#1 = zip3#2 zip3#1 = zip3#3 zip3#2 = zip3#3 ---------------------------------------- (13) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: zip3#1(gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0)) -> gen_:::nil2_0(n4_0), rt in Omega(1 + n4_0) Induction Base: zip3#1(gen_:::nil2_0(0), gen_:::nil2_0(0), gen_:::nil2_0(0)) ->_R^Omega(1) nil Induction Step: zip3#1(gen_:::nil2_0(+(n4_0, 1)), gen_:::nil2_0(+(n4_0, 1)), gen_:::nil2_0(+(n4_0, 1))) ->_R^Omega(1) zip3#2(gen_:::nil2_0(+(n4_0, 1)), gen_:::nil2_0(+(n4_0, 1)), gen_:::nil2_0(n4_0)) ->_R^Omega(1) zip3#3(gen_:::nil2_0(+(1, n4_0)), gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0)) ->_R^Omega(1) ::(zip3(gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0))) ->_R^Omega(1) ::(zip3#1(gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0))) ->_IH ::(gen_:::nil2_0(c5_0)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (14) Complex Obligation (BEST) ---------------------------------------- (15) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: group3(@l) -> group3#1(@l) group3#1(::(@xs)) -> group3#2(@xs) group3#1(nil) -> nil group3#2(::(@ys)) -> group3#3(@ys) group3#2(nil) -> nil group3#3(::(@zs)) -> ::(group3(@zs)) group3#3(nil) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@xs), @l2, @l3) -> zip3#2(@l2, @l3, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@ys), @l3, @xs) -> zip3#3(@l3, @xs, @ys) zip3#2(nil, @l3, @xs) -> nil zip3#3(::(@zs), @xs, @ys) -> ::(zip3(@xs, @ys, @zs)) zip3#3(nil, @xs, @ys) -> nil Types: group3 :: :::nil -> :::nil group3#1 :: :::nil -> :::nil :: :: :::nil -> :::nil group3#2 :: :::nil -> :::nil nil :: :::nil group3#3 :: :::nil -> :::nil zip3 :: :::nil -> :::nil -> :::nil -> :::nil zip3#1 :: :::nil -> :::nil -> :::nil -> :::nil zip3#2 :: :::nil -> :::nil -> :::nil -> :::nil zip3#3 :: :::nil -> :::nil -> :::nil -> :::nil hole_:::nil1_0 :: :::nil gen_:::nil2_0 :: Nat -> :::nil Generator Equations: gen_:::nil2_0(0) <=> nil gen_:::nil2_0(+(x, 1)) <=> ::(gen_:::nil2_0(x)) The following defined symbols remain to be analysed: zip3#1, group3, group3#1, group3#2, group3#3, zip3, zip3#2, zip3#3 They will be analysed ascendingly in the following order: group3 = group3#1 group3 = group3#2 group3 = group3#3 group3#1 = group3#2 group3#1 = group3#3 group3#2 = group3#3 zip3 = zip3#1 zip3 = zip3#2 zip3 = zip3#3 zip3#1 = zip3#2 zip3#1 = zip3#3 zip3#2 = zip3#3 ---------------------------------------- (16) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (17) BOUNDS(n^1, INF) ---------------------------------------- (18) Obligation: Innermost TRS: Rules: group3(@l) -> group3#1(@l) group3#1(::(@xs)) -> group3#2(@xs) group3#1(nil) -> nil group3#2(::(@ys)) -> group3#3(@ys) group3#2(nil) -> nil group3#3(::(@zs)) -> ::(group3(@zs)) group3#3(nil) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@xs), @l2, @l3) -> zip3#2(@l2, @l3, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@ys), @l3, @xs) -> zip3#3(@l3, @xs, @ys) zip3#2(nil, @l3, @xs) -> nil zip3#3(::(@zs), @xs, @ys) -> ::(zip3(@xs, @ys, @zs)) zip3#3(nil, @xs, @ys) -> nil Types: group3 :: :::nil -> :::nil group3#1 :: :::nil -> :::nil :: :: :::nil -> :::nil group3#2 :: :::nil -> :::nil nil :: :::nil group3#3 :: :::nil -> :::nil zip3 :: :::nil -> :::nil -> :::nil -> :::nil zip3#1 :: :::nil -> :::nil -> :::nil -> :::nil zip3#2 :: :::nil -> :::nil -> :::nil -> :::nil zip3#3 :: :::nil -> :::nil -> :::nil -> :::nil hole_:::nil1_0 :: :::nil gen_:::nil2_0 :: Nat -> :::nil Lemmas: zip3#1(gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0)) -> gen_:::nil2_0(n4_0), rt in Omega(1 + n4_0) Generator Equations: gen_:::nil2_0(0) <=> nil gen_:::nil2_0(+(x, 1)) <=> ::(gen_:::nil2_0(x)) The following defined symbols remain to be analysed: zip3#2, group3, group3#1, group3#2, group3#3, zip3, zip3#3 They will be analysed ascendingly in the following order: group3 = group3#1 group3 = group3#2 group3 = group3#3 group3#1 = group3#2 group3#1 = group3#3 group3#2 = group3#3 zip3 = zip3#1 zip3 = zip3#2 zip3 = zip3#3 zip3#1 = zip3#2 zip3#1 = zip3#3 zip3#2 = zip3#3 ---------------------------------------- (19) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: group3#1(gen_:::nil2_0(*(3, n929_0))) -> gen_:::nil2_0(n929_0), rt in Omega(1 + n929_0) Induction Base: group3#1(gen_:::nil2_0(*(3, 0))) ->_R^Omega(1) nil Induction Step: group3#1(gen_:::nil2_0(*(3, +(n929_0, 1)))) ->_R^Omega(1) group3#2(gen_:::nil2_0(+(2, *(3, n929_0)))) ->_R^Omega(1) group3#3(gen_:::nil2_0(+(1, *(3, n929_0)))) ->_R^Omega(1) ::(group3(gen_:::nil2_0(*(3, n929_0)))) ->_R^Omega(1) ::(group3#1(gen_:::nil2_0(*(3, n929_0)))) ->_IH ::(gen_:::nil2_0(c930_0)) 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: group3(@l) -> group3#1(@l) group3#1(::(@xs)) -> group3#2(@xs) group3#1(nil) -> nil group3#2(::(@ys)) -> group3#3(@ys) group3#2(nil) -> nil group3#3(::(@zs)) -> ::(group3(@zs)) group3#3(nil) -> nil zip3(@l1, @l2, @l3) -> zip3#1(@l1, @l2, @l3) zip3#1(::(@xs), @l2, @l3) -> zip3#2(@l2, @l3, @xs) zip3#1(nil, @l2, @l3) -> nil zip3#2(::(@ys), @l3, @xs) -> zip3#3(@l3, @xs, @ys) zip3#2(nil, @l3, @xs) -> nil zip3#3(::(@zs), @xs, @ys) -> ::(zip3(@xs, @ys, @zs)) zip3#3(nil, @xs, @ys) -> nil Types: group3 :: :::nil -> :::nil group3#1 :: :::nil -> :::nil :: :: :::nil -> :::nil group3#2 :: :::nil -> :::nil nil :: :::nil group3#3 :: :::nil -> :::nil zip3 :: :::nil -> :::nil -> :::nil -> :::nil zip3#1 :: :::nil -> :::nil -> :::nil -> :::nil zip3#2 :: :::nil -> :::nil -> :::nil -> :::nil zip3#3 :: :::nil -> :::nil -> :::nil -> :::nil hole_:::nil1_0 :: :::nil gen_:::nil2_0 :: Nat -> :::nil Lemmas: zip3#1(gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0), gen_:::nil2_0(n4_0)) -> gen_:::nil2_0(n4_0), rt in Omega(1 + n4_0) group3#1(gen_:::nil2_0(*(3, n929_0))) -> gen_:::nil2_0(n929_0), rt in Omega(1 + n929_0) Generator Equations: gen_:::nil2_0(0) <=> nil gen_:::nil2_0(+(x, 1)) <=> ::(gen_:::nil2_0(x)) The following defined symbols remain to be analysed: group3#2, group3, group3#3 They will be analysed ascendingly in the following order: group3 = group3#1 group3 = group3#2 group3 = group3#3 group3#1 = group3#2 group3#1 = group3#3 group3#2 = group3#3