WORST_CASE(Omega(n^1),O(n^2)) proof of input_Xjo8G4TaaE.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, n^2). (0) CpxTRS (1) CpxTrsToCdtProof [UPPER BOUND(ID), 4 ms] (2) CdtProblem (3) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CdtProblem (5) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxRelTRS (11) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CpxWeightedTrs (13) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (14) CpxTypedWeightedTrs (15) CompletionProof [UPPER BOUND(ID), 0 ms] (16) CpxTypedWeightedCompleteTrs (17) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (18) CpxRNTS (19) CompleteCoflocoProof [FINISHED, 46.7 s] (20) BOUNDS(1, n^2) (21) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 0 ms] (22) CdtProblem (23) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CpxRelTRS (25) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (26) CpxRelTRS (27) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (28) typed CpxTrs (29) OrderProof [LOWER BOUND(ID), 5 ms] (30) typed CpxTrs (31) RewriteLemmaProof [LOWER BOUND(ID), 414 ms] (32) BEST (33) proven lower bound (34) LowerBoundPropagationProof [FINISHED, 0 ms] (35) BOUNDS(n^1, INF) (36) typed CpxTrs (37) RewriteLemmaProof [LOWER BOUND(ID), 135 ms] (38) typed CpxTrs (39) RewriteLemmaProof [LOWER BOUND(ID), 88 ms] (40) typed CpxTrs (41) RewriteLemmaProof [LOWER BOUND(ID), 5 ms] (42) typed CpxTrs (43) RewriteLemmaProof [LOWER BOUND(ID), 13 ms] (44) typed CpxTrs (45) RewriteLemmaProof [LOWER BOUND(ID), 0 ms] (46) typed CpxTrs (47) RewriteLemmaProof [LOWER BOUND(ID), 16 ms] (48) typed CpxTrs (49) RewriteLemmaProof [LOWER BOUND(ID), 50 ms] (50) typed CpxTrs (51) RewriteLemmaProof [LOWER BOUND(ID), 34 ms] (52) typed CpxTrs (53) RewriteLemmaProof [LOWER BOUND(ID), 5773 ms] (54) typed CpxTrs (55) RewriteLemmaProof [LOWER BOUND(ID), 1443 ms] (56) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: fstsplit(0, x) -> nil fstsplit(s(n), nil) -> nil fstsplit(s(n), cons(h, t)) -> cons(h, fstsplit(n, t)) sndsplit(0, x) -> x sndsplit(s(n), nil) -> nil sndsplit(s(n), cons(h, t)) -> sndsplit(n, t) empty(nil) -> true empty(cons(h, t)) -> false leq(0, m) -> true leq(s(n), 0) -> false leq(s(n), s(m)) -> leq(n, m) length(nil) -> 0 length(cons(h, t)) -> s(length(t)) app(nil, x) -> x app(cons(h, t), x) -> cons(h, app(t, x)) map_f(pid, nil) -> nil map_f(pid, cons(h, t)) -> app(f(pid, h), map_f(pid, t)) process(store, m) -> if1(store, m, leq(m, length(store))) if1(store, m, true) -> if2(store, m, empty(fstsplit(m, store))) if1(store, m, false) -> if3(store, m, empty(fstsplit(m, app(map_f(self, nil), store)))) if2(store, m, false) -> process(app(map_f(self, nil), sndsplit(m, store)), m) if3(store, m, false) -> process(sndsplit(m, app(map_f(self, nil), store)), m) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) S tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, process_2, if1_3, if2_3, if3_3 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, EMPTY_1, LEQ_2, LENGTH_1, APP_2, MAP_F_2, PROCESS_2, IF1_3, IF2_3, IF3_3 Compound Symbols: c, c1, c2_1, c3, c4, c5_1, c6, c7, c8, c9, c10_1, c11, c12_1, c13, c14_1, c15, c16_2, c17_3, c18_3, c19_5, c20_3, c21_3, c22_4 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 11 trailing nodes: FSTSPLIT(s(z0), nil) -> c1 APP(nil, z0) -> c13 LENGTH(nil) -> c11 SNDSPLIT(0, z0) -> c3 LEQ(0, z0) -> c8 EMPTY(nil) -> c6 FSTSPLIT(0, z0) -> c EMPTY(cons(z0, z1)) -> c7 LEQ(s(z0), 0) -> c9 SNDSPLIT(s(z0), nil) -> c4 MAP_F(z0, nil) -> c15 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, process_2, if1_3, if2_3, if3_3 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, MAP_F_2, PROCESS_2, IF1_3, IF2_3, IF3_3 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c16_2, c17_3, c18_3, c19_5, c20_3, c21_3, c22_4 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 6 trailing tuple parts ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, process_2, if1_3, if2_3, if3_3 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, PROCESS_2, IF2_3, MAP_F_2, IF1_3, IF3_3 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c17_3, c21_3, c16_1, c18_2, c19_3, c20_2, c22_3 ---------------------------------------- (7) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) Tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) S tuples: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) K tuples:none Defined Rule Symbols: leq_2, length_1, app_2, map_f_2, sndsplit_2, empty_1, fstsplit_2 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, LEQ_2, LENGTH_1, APP_2, PROCESS_2, IF2_3, MAP_F_2, IF1_3, IF3_3 Compound Symbols: c2_1, c5_1, c10_1, c12_1, c14_1, c17_3, c21_3, c16_1, c18_2, c19_3, c20_2, c22_3 ---------------------------------------- (9) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (10) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^2). The TRS R consists of the following rules: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) The (relative) TRS S consists of the following rules: leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) Rewrite Strategy: INNERMOST ---------------------------------------- (11) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (12) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^2). The TRS R consists of the following rules: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) [1] SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) [1] LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) [1] LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) [1] APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) [1] PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) [1] IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) [1] MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) [1] IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) [1] IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) [1] IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) [1] IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) [1] leq(0, z0) -> true [0] leq(s(z0), 0) -> false [0] leq(s(z0), s(z1)) -> leq(z0, z1) [0] length(nil) -> 0 [0] length(cons(z0, z1)) -> s(length(z1)) [0] app(nil, z0) -> z0 [0] app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) [0] map_f(z0, nil) -> nil [0] sndsplit(0, z0) -> z0 [0] sndsplit(s(z0), nil) -> nil [0] sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) [0] empty(nil) -> true [0] empty(cons(z0, z1)) -> false [0] fstsplit(0, z0) -> nil [0] fstsplit(s(z0), nil) -> nil [0] fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) [0] Rewrite Strategy: INNERMOST ---------------------------------------- (13) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (14) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) [1] SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) [1] LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) [1] LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) [1] APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) [1] PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) [1] IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) [1] MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) [1] IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) [1] IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) [1] IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) [1] IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) [1] leq(0, z0) -> true [0] leq(s(z0), 0) -> false [0] leq(s(z0), s(z1)) -> leq(z0, z1) [0] length(nil) -> 0 [0] length(cons(z0, z1)) -> s(length(z1)) [0] app(nil, z0) -> z0 [0] app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) [0] map_f(z0, nil) -> nil [0] sndsplit(0, z0) -> z0 [0] sndsplit(s(z0), nil) -> nil [0] sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) [0] empty(nil) -> true [0] empty(cons(z0, z1)) -> false [0] fstsplit(0, z0) -> nil [0] fstsplit(s(z0), nil) -> nil [0] fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) [0] The TRS has the following type information: FSTSPLIT :: s:0 -> cons:nil -> c2 s :: s:0 -> s:0 cons :: a -> cons:nil -> cons:nil c2 :: c2 -> c2 SNDSPLIT :: s:0 -> cons:nil -> c5 c5 :: c5 -> c5 LEQ :: s:0 -> s:0 -> c10 c10 :: c10 -> c10 LENGTH :: cons:nil -> c12 c12 :: c12 -> c12 APP :: cons:nil -> cons:nil -> c14 c14 :: c14 -> c14 PROCESS :: cons:nil -> s:0 -> c17 c17 :: c18:c19 -> c10 -> c12 -> c17 IF1 :: cons:nil -> s:0 -> false:true -> c18:c19 leq :: s:0 -> s:0 -> false:true length :: cons:nil -> s:0 IF2 :: cons:nil -> s:0 -> false:true -> c21:c20 false :: false:true c21 :: c17 -> c14 -> c5 -> c21:c20 app :: cons:nil -> cons:nil -> cons:nil map_f :: self -> cons:nil -> cons:nil self :: self nil :: cons:nil sndsplit :: s:0 -> cons:nil -> cons:nil MAP_F :: b -> cons:nil -> c16 c16 :: c16 -> c16 true :: false:true c18 :: c21:c20 -> c2 -> c18:c19 empty :: cons:nil -> false:true fstsplit :: s:0 -> cons:nil -> cons:nil c19 :: c22 -> c2 -> c14 -> c18:c19 IF3 :: cons:nil -> s:0 -> false:true -> c22 c20 :: c17 -> c14 -> c21:c20 c22 :: c17 -> c5 -> c14 -> c22 0 :: s:0 Rewrite Strategy: INNERMOST ---------------------------------------- (15) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: leq(v0, v1) -> null_leq [0] length(v0) -> null_length [0] app(v0, v1) -> null_app [0] map_f(v0, v1) -> null_map_f [0] sndsplit(v0, v1) -> null_sndsplit [0] empty(v0) -> null_empty [0] fstsplit(v0, v1) -> null_fstsplit [0] FSTSPLIT(v0, v1) -> null_FSTSPLIT [0] SNDSPLIT(v0, v1) -> null_SNDSPLIT [0] LEQ(v0, v1) -> null_LEQ [0] LENGTH(v0) -> null_LENGTH [0] APP(v0, v1) -> null_APP [0] IF2(v0, v1, v2) -> null_IF2 [0] MAP_F(v0, v1) -> null_MAP_F [0] IF1(v0, v1, v2) -> null_IF1 [0] IF3(v0, v1, v2) -> null_IF3 [0] And the following fresh constants: null_leq, null_length, null_app, null_map_f, null_sndsplit, null_empty, null_fstsplit, null_FSTSPLIT, null_SNDSPLIT, null_LEQ, null_LENGTH, null_APP, null_IF2, null_MAP_F, null_IF1, null_IF3, const, const1, const2 ---------------------------------------- (16) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) [1] SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) [1] LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) [1] LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) [1] APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) [1] PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) [1] IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) [1] MAP_F(z0, cons(z1, z2)) -> c16(MAP_F(z0, z2)) [1] IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), FSTSPLIT(z1, z0)) [1] IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) [1] IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0))) [1] IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0)) [1] leq(0, z0) -> true [0] leq(s(z0), 0) -> false [0] leq(s(z0), s(z1)) -> leq(z0, z1) [0] length(nil) -> 0 [0] length(cons(z0, z1)) -> s(length(z1)) [0] app(nil, z0) -> z0 [0] app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) [0] map_f(z0, nil) -> nil [0] sndsplit(0, z0) -> z0 [0] sndsplit(s(z0), nil) -> nil [0] sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) [0] empty(nil) -> true [0] empty(cons(z0, z1)) -> false [0] fstsplit(0, z0) -> nil [0] fstsplit(s(z0), nil) -> nil [0] fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) [0] leq(v0, v1) -> null_leq [0] length(v0) -> null_length [0] app(v0, v1) -> null_app [0] map_f(v0, v1) -> null_map_f [0] sndsplit(v0, v1) -> null_sndsplit [0] empty(v0) -> null_empty [0] fstsplit(v0, v1) -> null_fstsplit [0] FSTSPLIT(v0, v1) -> null_FSTSPLIT [0] SNDSPLIT(v0, v1) -> null_SNDSPLIT [0] LEQ(v0, v1) -> null_LEQ [0] LENGTH(v0) -> null_LENGTH [0] APP(v0, v1) -> null_APP [0] IF2(v0, v1, v2) -> null_IF2 [0] MAP_F(v0, v1) -> null_MAP_F [0] IF1(v0, v1, v2) -> null_IF1 [0] IF3(v0, v1, v2) -> null_IF3 [0] The TRS has the following type information: FSTSPLIT :: s:0:null_length -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> c2:null_FSTSPLIT s :: s:0:null_length -> s:0:null_length cons :: a -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit c2 :: c2:null_FSTSPLIT -> c2:null_FSTSPLIT SNDSPLIT :: s:0:null_length -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> c5:null_SNDSPLIT c5 :: c5:null_SNDSPLIT -> c5:null_SNDSPLIT LEQ :: s:0:null_length -> s:0:null_length -> c10:null_LEQ c10 :: c10:null_LEQ -> c10:null_LEQ LENGTH :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> c12:null_LENGTH c12 :: c12:null_LENGTH -> c12:null_LENGTH APP :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> c14:null_APP c14 :: c14:null_APP -> c14:null_APP PROCESS :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> s:0:null_length -> c17 c17 :: c18:c19:null_IF1 -> c10:null_LEQ -> c12:null_LENGTH -> c17 IF1 :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> s:0:null_length -> false:true:null_leq:null_empty -> c18:c19:null_IF1 leq :: s:0:null_length -> s:0:null_length -> false:true:null_leq:null_empty length :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> s:0:null_length IF2 :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> s:0:null_length -> false:true:null_leq:null_empty -> c21:c20:null_IF2 false :: false:true:null_leq:null_empty c21 :: c17 -> c14:null_APP -> c5:null_SNDSPLIT -> c21:c20:null_IF2 app :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit map_f :: self -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit self :: self nil :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit sndsplit :: s:0:null_length -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit MAP_F :: b -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> c16:null_MAP_F c16 :: c16:null_MAP_F -> c16:null_MAP_F true :: false:true:null_leq:null_empty c18 :: c21:c20:null_IF2 -> c2:null_FSTSPLIT -> c18:c19:null_IF1 empty :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> false:true:null_leq:null_empty fstsplit :: s:0:null_length -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit c19 :: c22:null_IF3 -> c2:null_FSTSPLIT -> c14:null_APP -> c18:c19:null_IF1 IF3 :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit -> s:0:null_length -> false:true:null_leq:null_empty -> c22:null_IF3 c20 :: c17 -> c14:null_APP -> c21:c20:null_IF2 c22 :: c17 -> c5:null_SNDSPLIT -> c14:null_APP -> c22:null_IF3 0 :: s:0:null_length null_leq :: false:true:null_leq:null_empty null_length :: s:0:null_length null_app :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit null_map_f :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit null_sndsplit :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit null_empty :: false:true:null_leq:null_empty null_fstsplit :: cons:nil:null_app:null_map_f:null_sndsplit:null_fstsplit null_FSTSPLIT :: c2:null_FSTSPLIT null_SNDSPLIT :: c5:null_SNDSPLIT null_LEQ :: c10:null_LEQ null_LENGTH :: c12:null_LENGTH null_APP :: c14:null_APP null_IF2 :: c21:c20:null_IF2 null_MAP_F :: c16:null_MAP_F null_IF1 :: c18:c19:null_IF1 null_IF3 :: c22:null_IF3 const :: a const1 :: c17 const2 :: b Rewrite Strategy: INNERMOST ---------------------------------------- (17) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: false => 1 self => 0 nil => 0 true => 2 0 => 0 null_leq => 0 null_length => 0 null_app => 0 null_map_f => 0 null_sndsplit => 0 null_empty => 0 null_fstsplit => 0 null_FSTSPLIT => 0 null_SNDSPLIT => 0 null_LEQ => 0 null_LENGTH => 0 null_APP => 0 null_IF2 => 0 null_MAP_F => 0 null_IF1 => 0 null_IF3 => 0 const => 0 const1 => 0 const2 => 0 ---------------------------------------- (18) Obligation: Complexity RNTS consisting of the following rules: APP(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 APP(z, z') -{ 1 }-> 1 + APP(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 FSTSPLIT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 FSTSPLIT(z, z') -{ 1 }-> 1 + FSTSPLIT(z0, z2) :|: z1 >= 0, z' = 1 + z1 + z2, z = 1 + z0, z0 >= 0, z2 >= 0 IF1(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 IF1(z, z', z'') -{ 1 }-> 1 + IF2(z0, z1, empty(fstsplit(z1, z0))) + FSTSPLIT(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z'' = 2 IF1(z, z', z'') -{ 1 }-> 1 + IF3(z0, z1, empty(fstsplit(z1, app(map_f(0, 0), z0)))) + FSTSPLIT(z1, app(map_f(0, 0), z0)) + APP(map_f(0, 0), z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z'' = 1 IF2(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 IF2(z, z', z'') -{ 1 }-> 1 + PROCESS(app(map_f(0, 0), sndsplit(z1, z0)), z1) + APP(map_f(0, 0), sndsplit(z1, z0)) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z'' = 1 IF2(z, z', z'') -{ 1 }-> 1 + PROCESS(app(map_f(0, 0), sndsplit(z1, z0)), z1) + APP(map_f(0, 0), sndsplit(z1, z0)) + SNDSPLIT(z1, z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z'' = 1 IF3(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 IF3(z, z', z'') -{ 1 }-> 1 + PROCESS(sndsplit(z1, app(map_f(0, 0), z0)), z1) + SNDSPLIT(z1, app(map_f(0, 0), z0)) + APP(map_f(0, 0), z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0, z'' = 1 LENGTH(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 LENGTH(z) -{ 1 }-> 1 + LENGTH(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 LEQ(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 LEQ(z, z') -{ 1 }-> 1 + LEQ(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 MAP_F(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 MAP_F(z, z') -{ 1 }-> 1 + MAP_F(z0, z2) :|: z = z0, z1 >= 0, z' = 1 + z1 + z2, z0 >= 0, z2 >= 0 PROCESS(z, z') -{ 1 }-> 1 + IF1(z0, z1, leq(z1, length(z0))) + LEQ(z1, length(z0)) + LENGTH(z0) :|: z = z0, z1 >= 0, z' = z1, z0 >= 0 SNDSPLIT(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 SNDSPLIT(z, z') -{ 1 }-> 1 + SNDSPLIT(z0, z2) :|: z1 >= 0, z' = 1 + z1 + z2, z = 1 + z0, z0 >= 0, z2 >= 0 app(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 app(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 app(z, z') -{ 0 }-> 1 + z0 + app(z1, z2) :|: z1 >= 0, z' = z2, z0 >= 0, z = 1 + z0 + z1, z2 >= 0 empty(z) -{ 0 }-> 2 :|: z = 0 empty(z) -{ 0 }-> 1 :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 empty(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 fstsplit(z, z') -{ 0 }-> 0 :|: z0 >= 0, z = 0, z' = z0 fstsplit(z, z') -{ 0 }-> 0 :|: z = 1 + z0, z0 >= 0, z' = 0 fstsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 fstsplit(z, z') -{ 0 }-> 1 + z1 + fstsplit(z0, z2) :|: z1 >= 0, z' = 1 + z1 + z2, z = 1 + z0, z0 >= 0, z2 >= 0 length(z) -{ 0 }-> 0 :|: z = 0 length(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 length(z) -{ 0 }-> 1 + length(z1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 leq(z, z') -{ 0 }-> leq(z0, z1) :|: z1 >= 0, z = 1 + z0, z0 >= 0, z' = 1 + z1 leq(z, z') -{ 0 }-> 2 :|: z0 >= 0, z = 0, z' = z0 leq(z, z') -{ 0 }-> 1 :|: z = 1 + z0, z0 >= 0, z' = 0 leq(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 map_f(z, z') -{ 0 }-> 0 :|: z = z0, z0 >= 0, z' = 0 map_f(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 sndsplit(z, z') -{ 0 }-> z0 :|: z0 >= 0, z = 0, z' = z0 sndsplit(z, z') -{ 0 }-> sndsplit(z0, z2) :|: z1 >= 0, z' = 1 + z1 + z2, z = 1 + z0, z0 >= 0, z2 >= 0 sndsplit(z, z') -{ 0 }-> 0 :|: z = 1 + z0, z0 >= 0, z' = 0 sndsplit(z, z') -{ 0 }-> 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (19) CompleteCoflocoProof (FINISHED) Transformed the RNTS (where only complete derivations are relevant) into cost relations for CoFloCo: eq(start(V1, V, V19),0,[fun(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun1(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun2(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun3(V1, Out)],[V1 >= 0]). eq(start(V1, V, V19),0,[fun4(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun5(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun7(V1, V, V19, Out)],[V1 >= 0,V >= 0,V19 >= 0]). eq(start(V1, V, V19),0,[fun9(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun6(V1, V, V19, Out)],[V1 >= 0,V >= 0,V19 >= 0]). eq(start(V1, V, V19),0,[fun10(V1, V, V19, Out)],[V1 >= 0,V >= 0,V19 >= 0]). eq(start(V1, V, V19),0,[leq(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[length(V1, Out)],[V1 >= 0]). eq(start(V1, V, V19),0,[app(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[fun8(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[sndsplit(V1, V, Out)],[V1 >= 0,V >= 0]). eq(start(V1, V, V19),0,[empty(V1, Out)],[V1 >= 0]). eq(start(V1, V, V19),0,[fstsplit(V1, V, Out)],[V1 >= 0,V >= 0]). eq(fun(V1, V, Out),1,[fun(V3, V4, Ret1)],[Out = 1 + Ret1,V2 >= 0,V = 1 + V2 + V4,V1 = 1 + V3,V3 >= 0,V4 >= 0]). eq(fun1(V1, V, Out),1,[fun1(V7, V5, Ret11)],[Out = 1 + Ret11,V6 >= 0,V = 1 + V5 + V6,V1 = 1 + V7,V7 >= 0,V5 >= 0]). eq(fun2(V1, V, Out),1,[fun2(V9, V8, Ret12)],[Out = 1 + Ret12,V8 >= 0,V1 = 1 + V9,V9 >= 0,V = 1 + V8]). eq(fun3(V1, Out),1,[fun3(V11, Ret13)],[Out = 1 + Ret13,V11 >= 0,V10 >= 0,V1 = 1 + V10 + V11]). eq(fun4(V1, V, Out),1,[fun4(V12, V14, Ret14)],[Out = 1 + Ret14,V12 >= 0,V = V14,V13 >= 0,V1 = 1 + V12 + V13,V14 >= 0]). eq(fun5(V1, V, Out),1,[length(V16, Ret00121),leq(V15, Ret00121, Ret0012),fun6(V16, V15, Ret0012, Ret001),length(V16, Ret011),fun2(V15, Ret011, Ret01),fun3(V16, Ret15)],[Out = 1 + Ret001 + Ret01 + Ret15,V1 = V16,V15 >= 0,V = V15,V16 >= 0]). eq(fun7(V1, V, V19, Out),1,[fun8(0, 0, Ret00100),sndsplit(V17, V18, Ret00101),app(Ret00100, Ret00101, Ret0010),fun5(Ret0010, V17, Ret0011),fun8(0, 0, Ret010),sndsplit(V17, V18, Ret0111),fun4(Ret010, Ret0111, Ret012),fun1(V17, V18, Ret16)],[Out = 1 + Ret0011 + Ret012 + Ret16,V1 = V18,V17 >= 0,V = V17,V18 >= 0,V19 = 1]). eq(fun9(V1, V, Out),1,[fun9(V22, V21, Ret17)],[Out = 1 + Ret17,V1 = V22,V20 >= 0,V = 1 + V20 + V21,V22 >= 0,V21 >= 0]). eq(fun6(V1, V, V19, Out),1,[fstsplit(V23, V24, Ret0120),empty(Ret0120, Ret0121),fun7(V24, V23, Ret0121, Ret013),fun(V23, V24, Ret18)],[Out = 1 + Ret013 + Ret18,V1 = V24,V23 >= 0,V = V23,V24 >= 0,V19 = 2]). eq(fun6(V1, V, V19, Out),1,[fun8(0, 0, Ret0012010),app(Ret0012010, V25, Ret001201),fstsplit(V26, Ret001201, Ret00120),empty(Ret00120, Ret00122),fun10(V25, V26, Ret00122, Ret0013),fun8(0, 0, Ret0110),app(Ret0110, V25, Ret0112),fun(V26, Ret0112, Ret014),fun8(0, 0, Ret10),fun4(Ret10, V25, Ret19)],[Out = 1 + Ret0013 + Ret014 + Ret19,V1 = V25,V26 >= 0,V = V26,V25 >= 0,V19 = 1]). eq(fun7(V1, V, V19, Out),1,[fun8(0, 0, Ret0100),sndsplit(V28, V27, Ret0101),app(Ret0100, Ret0101, Ret0102),fun5(Ret0102, V28, Ret015),fun8(0, 0, Ret101),sndsplit(V28, V27, Ret111),fun4(Ret101, Ret111, Ret110)],[Out = 1 + Ret015 + Ret110,V1 = V27,V28 >= 0,V = V28,V27 >= 0,V19 = 1]). eq(fun10(V1, V, V19, Out),1,[fun8(0, 0, Ret001010),app(Ret001010, V30, Ret001011),sndsplit(V29, Ret001011, Ret00102),fun5(Ret00102, V29, Ret0014),fun8(0, 0, Ret01101),app(Ret01101, V30, Ret0113),fun1(V29, Ret0113, Ret016),fun8(0, 0, Ret102),fun4(Ret102, V30, Ret112)],[Out = 1 + Ret0014 + Ret016 + Ret112,V1 = V30,V29 >= 0,V = V29,V30 >= 0,V19 = 1]). eq(leq(V1, V, Out),0,[],[Out = 2,V31 >= 0,V1 = 0,V = V31]). eq(leq(V1, V, Out),0,[],[Out = 1,V1 = 1 + V32,V32 >= 0,V = 0]). eq(leq(V1, V, Out),0,[leq(V34, V33, Ret)],[Out = Ret,V33 >= 0,V1 = 1 + V34,V34 >= 0,V = 1 + V33]). eq(length(V1, Out),0,[],[Out = 0,V1 = 0]). eq(length(V1, Out),0,[length(V35, Ret113)],[Out = 1 + Ret113,V35 >= 0,V36 >= 0,V1 = 1 + V35 + V36]). eq(app(V1, V, Out),0,[],[Out = V37,V37 >= 0,V1 = 0,V = V37]). eq(app(V1, V, Out),0,[app(V40, V38, Ret114)],[Out = 1 + Ret114 + V39,V40 >= 0,V = V38,V39 >= 0,V1 = 1 + V39 + V40,V38 >= 0]). eq(fun8(V1, V, Out),0,[],[Out = 0,V1 = V41,V41 >= 0,V = 0]). eq(sndsplit(V1, V, Out),0,[],[Out = V42,V42 >= 0,V1 = 0,V = V42]). eq(sndsplit(V1, V, Out),0,[],[Out = 0,V1 = 1 + V43,V43 >= 0,V = 0]). eq(sndsplit(V1, V, Out),0,[sndsplit(V45, V44, Ret2)],[Out = Ret2,V46 >= 0,V = 1 + V44 + V46,V1 = 1 + V45,V45 >= 0,V44 >= 0]). eq(empty(V1, Out),0,[],[Out = 2,V1 = 0]). eq(empty(V1, Out),0,[],[Out = 1,V48 >= 0,V47 >= 0,V1 = 1 + V47 + V48]). eq(fstsplit(V1, V, Out),0,[],[Out = 0,V49 >= 0,V1 = 0,V = V49]). eq(fstsplit(V1, V, Out),0,[],[Out = 0,V1 = 1 + V50,V50 >= 0,V = 0]). eq(fstsplit(V1, V, Out),0,[fstsplit(V52, V51, Ret115)],[Out = 1 + Ret115 + V53,V53 >= 0,V = 1 + V51 + V53,V1 = 1 + V52,V52 >= 0,V51 >= 0]). eq(leq(V1, V, Out),0,[],[Out = 0,V55 >= 0,V54 >= 0,V1 = V55,V = V54]). eq(length(V1, Out),0,[],[Out = 0,V56 >= 0,V1 = V56]). eq(app(V1, V, Out),0,[],[Out = 0,V58 >= 0,V57 >= 0,V1 = V58,V = V57]). eq(fun8(V1, V, Out),0,[],[Out = 0,V59 >= 0,V60 >= 0,V1 = V59,V = V60]). eq(sndsplit(V1, V, Out),0,[],[Out = 0,V61 >= 0,V62 >= 0,V1 = V61,V = V62]). eq(empty(V1, Out),0,[],[Out = 0,V63 >= 0,V1 = V63]). eq(fstsplit(V1, V, Out),0,[],[Out = 0,V65 >= 0,V64 >= 0,V1 = V65,V = V64]). eq(fun(V1, V, Out),0,[],[Out = 0,V66 >= 0,V67 >= 0,V1 = V66,V = V67]). eq(fun1(V1, V, Out),0,[],[Out = 0,V68 >= 0,V69 >= 0,V1 = V68,V = V69]). eq(fun2(V1, V, Out),0,[],[Out = 0,V70 >= 0,V71 >= 0,V1 = V70,V = V71]). eq(fun3(V1, Out),0,[],[Out = 0,V72 >= 0,V1 = V72]). eq(fun4(V1, V, Out),0,[],[Out = 0,V74 >= 0,V73 >= 0,V1 = V74,V = V73]). eq(fun7(V1, V, V19, Out),0,[],[Out = 0,V76 >= 0,V19 = V77,V75 >= 0,V1 = V76,V = V75,V77 >= 0]). eq(fun9(V1, V, Out),0,[],[Out = 0,V79 >= 0,V78 >= 0,V1 = V79,V = V78]). eq(fun6(V1, V, V19, Out),0,[],[Out = 0,V82 >= 0,V19 = V80,V81 >= 0,V1 = V82,V = V81,V80 >= 0]). eq(fun10(V1, V, V19, Out),0,[],[Out = 0,V85 >= 0,V19 = V83,V84 >= 0,V1 = V85,V = V84,V83 >= 0]). input_output_vars(fun(V1,V,Out),[V1,V],[Out]). input_output_vars(fun1(V1,V,Out),[V1,V],[Out]). input_output_vars(fun2(V1,V,Out),[V1,V],[Out]). input_output_vars(fun3(V1,Out),[V1],[Out]). input_output_vars(fun4(V1,V,Out),[V1,V],[Out]). input_output_vars(fun5(V1,V,Out),[V1,V],[Out]). input_output_vars(fun7(V1,V,V19,Out),[V1,V,V19],[Out]). input_output_vars(fun9(V1,V,Out),[V1,V],[Out]). input_output_vars(fun6(V1,V,V19,Out),[V1,V,V19],[Out]). input_output_vars(fun10(V1,V,V19,Out),[V1,V,V19],[Out]). input_output_vars(leq(V1,V,Out),[V1,V],[Out]). input_output_vars(length(V1,Out),[V1],[Out]). input_output_vars(app(V1,V,Out),[V1,V],[Out]). input_output_vars(fun8(V1,V,Out),[V1,V],[Out]). input_output_vars(sndsplit(V1,V,Out),[V1,V],[Out]). input_output_vars(empty(V1,Out),[V1],[Out]). input_output_vars(fstsplit(V1,V,Out),[V1,V],[Out]). CoFloCo proof output: Preprocessing Cost Relations ===================================== #### Computed strongly connected components 0. recursive : [app/3] 1. non_recursive : [empty/2] 2. recursive : [fstsplit/3] 3. recursive : [fun/3] 4. recursive : [fun1/3] 5. recursive : [fun4/3] 6. recursive : [fun2/3] 7. recursive : [fun3/2] 8. non_recursive : [fun8/3] 9. recursive : [sndsplit/3] 10. recursive : [length/2] 11. recursive : [leq/3] 12. recursive [non_tail] : [fun10/4,fun5/3,fun6/4,fun7/4] 13. recursive : [fun9/3] 14. non_recursive : [start/3] #### Obtained direct recursion through partial evaluation 0. SCC is partially evaluated into app/3 1. SCC is partially evaluated into empty/2 2. SCC is partially evaluated into fstsplit/3 3. SCC is partially evaluated into fun/3 4. SCC is partially evaluated into fun1/3 5. SCC is partially evaluated into fun4/3 6. SCC is partially evaluated into fun2/3 7. SCC is partially evaluated into fun3/2 8. SCC is partially evaluated into fun8/3 9. SCC is partially evaluated into sndsplit/3 10. SCC is partially evaluated into length/2 11. SCC is partially evaluated into leq/3 12. SCC is partially evaluated into fun5/3 13. SCC is partially evaluated into fun9/3 14. SCC is partially evaluated into start/3 Control-Flow Refinement of Cost Relations ===================================== ### Specialization of cost equations app/3 * CE 27 is refined into CE [61] * CE 25 is refined into CE [62] * CE 26 is refined into CE [63] ### Cost equations --> "Loop" of app/3 * CEs [63] --> Loop 35 * CEs [61] --> Loop 36 * CEs [62] --> Loop 37 ### Ranking functions of CR app(V1,V,Out) * RF of phase [35]: [V1] #### Partial ranking functions of CR app(V1,V,Out) * Partial RF of phase [35]: - RF of loop [35:1]: V1 ### Specialization of cost equations empty/2 * CE 32 is refined into CE [64] * CE 33 is refined into CE [65] * CE 31 is refined into CE [66] ### Cost equations --> "Loop" of empty/2 * CEs [64] --> Loop 38 * CEs [65] --> Loop 39 * CEs [66] --> Loop 40 ### Ranking functions of CR empty(V1,Out) #### Partial ranking functions of CR empty(V1,Out) ### Specialization of cost equations fstsplit/3 * CE 28 is refined into CE [67] * CE 29 is refined into CE [68] * CE 30 is refined into CE [69] ### Cost equations --> "Loop" of fstsplit/3 * CEs [69] --> Loop 41 * CEs [67,68] --> Loop 42 ### Ranking functions of CR fstsplit(V1,V,Out) * RF of phase [41]: [V,V1] #### Partial ranking functions of CR fstsplit(V1,V,Out) * Partial RF of phase [41]: - RF of loop [41:1]: V V1 ### Specialization of cost equations fun/3 * CE 48 is refined into CE [70] * CE 47 is refined into CE [71] ### Cost equations --> "Loop" of fun/3 * CEs [71] --> Loop 43 * CEs [70] --> Loop 44 ### Ranking functions of CR fun(V1,V,Out) * RF of phase [43]: [V,V1] #### Partial ranking functions of CR fun(V1,V,Out) * Partial RF of phase [43]: - RF of loop [43:1]: V V1 ### Specialization of cost equations fun1/3 * CE 44 is refined into CE [72] * CE 43 is refined into CE [73] ### Cost equations --> "Loop" of fun1/3 * CEs [73] --> Loop 45 * CEs [72] --> Loop 46 ### Ranking functions of CR fun1(V1,V,Out) * RF of phase [45]: [V,V1] #### Partial ranking functions of CR fun1(V1,V,Out) * Partial RF of phase [45]: - RF of loop [45:1]: V V1 ### Specialization of cost equations fun4/3 * CE 46 is refined into CE [74] * CE 45 is refined into CE [75] ### Cost equations --> "Loop" of fun4/3 * CEs [75] --> Loop 47 * CEs [74] --> Loop 48 ### Ranking functions of CR fun4(V1,V,Out) * RF of phase [47]: [V1] #### Partial ranking functions of CR fun4(V1,V,Out) * Partial RF of phase [47]: - RF of loop [47:1]: V1 ### Specialization of cost equations fun2/3 * CE 50 is refined into CE [76] * CE 49 is refined into CE [77] ### Cost equations --> "Loop" of fun2/3 * CEs [77] --> Loop 49 * CEs [76] --> Loop 50 ### Ranking functions of CR fun2(V1,V,Out) * RF of phase [49]: [V,V1] #### Partial ranking functions of CR fun2(V1,V,Out) * Partial RF of phase [49]: - RF of loop [49:1]: V V1 ### Specialization of cost equations fun3/2 * CE 52 is refined into CE [78] * CE 51 is refined into CE [79] ### Cost equations --> "Loop" of fun3/2 * CEs [79] --> Loop 51 * CEs [78] --> Loop 52 ### Ranking functions of CR fun3(V1,Out) * RF of phase [51]: [V1] #### Partial ranking functions of CR fun3(V1,Out) * Partial RF of phase [51]: - RF of loop [51:1]: V1 ### Specialization of cost equations fun8/3 * CE 24 is refined into CE [80] ### Cost equations --> "Loop" of fun8/3 * CEs [80] --> Loop 53 ### Ranking functions of CR fun8(V1,V,Out) #### Partial ranking functions of CR fun8(V1,V,Out) ### Specialization of cost equations sndsplit/3 * CE 35 is refined into CE [81] * CE 34 is refined into CE [82] * CE 36 is refined into CE [83] ### Cost equations --> "Loop" of sndsplit/3 * CEs [83] --> Loop 54 * CEs [81] --> Loop 55 * CEs [82] --> Loop 56 ### Ranking functions of CR sndsplit(V1,V,Out) * RF of phase [54]: [V,V1] #### Partial ranking functions of CR sndsplit(V1,V,Out) * Partial RF of phase [54]: - RF of loop [54:1]: V V1 ### Specialization of cost equations length/2 * CE 59 is refined into CE [84] * CE 60 is refined into CE [85] ### Cost equations --> "Loop" of length/2 * CEs [85] --> Loop 57 * CEs [84] --> Loop 58 ### Ranking functions of CR length(V1,Out) * RF of phase [57]: [V1] #### Partial ranking functions of CR length(V1,Out) * Partial RF of phase [57]: - RF of loop [57:1]: V1 ### Specialization of cost equations leq/3 * CE 58 is refined into CE [86] * CE 56 is refined into CE [87] * CE 55 is refined into CE [88] * CE 57 is refined into CE [89] ### Cost equations --> "Loop" of leq/3 * CEs [89] --> Loop 59 * CEs [86] --> Loop 60 * CEs [87] --> Loop 61 * CEs [88] --> Loop 62 ### Ranking functions of CR leq(V1,V,Out) * RF of phase [59]: [V,V1] #### Partial ranking functions of CR leq(V1,V,Out) * Partial RF of phase [59]: - RF of loop [59:1]: V V1 ### Specialization of cost equations fun5/3 * CE 37 is refined into CE [90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127] * CE 39 is refined into CE [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343] * CE 42 is refined into CE [344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407] * CE 38 is refined into CE [408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731] * CE 40 is refined into CE [732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923] * CE 41 is refined into CE [924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019] ### Cost equations --> "Loop" of fun5/3 * CEs [491,653,851,875] --> Loop 63 * CEs [473,485,487,489,490,497,509,635,647,649,651,652,659,671,839,845,847,849,850,863,869,871,873,874,983,995] --> Loop 64 * CEs [467,469,471,472,479,481,483,484,486,488,493,495,496,503,505,507,508,515,629,631,633,634,641,643,645,646,648,650,655,657,658,665,667,669,670,677,833,835,837,838,841,843,844,846,848,857,859,861,862,865,867,868,870,872,977,979,981,982,989,991,993,994] --> Loop 65 * CEs [463,465,466,468,470,475,477,478,480,482,492,494,499,501,502,504,506,511,513,514,625,627,628,630,632,637,639,640,642,644,654,656,661,663,664,666,668,673,675,676,829,831,832,834,836,840,842,853,855,856,858,860,864,866,973,975,976,978,980,985,987,988,990,992] --> Loop 66 * CEs [462,464,474,476,498,500,510,512,624,626,636,638,660,662,672,674,828,830,852,854,972,974,984,986] --> Loop 67 * CEs [437,545,599,707,755,779,803,827,899,923] --> Loop 68 * CEs [419,431,433,435,436,443,455,527,539,541,543,544,551,563,581,593,595,597,598,605,617,689,701,703,705,706,713,725,743,749,751,753,754,767,773,775,777,778,791,797,799,801,802,815,821,823,825,826,887,893,895,897,898,911,917,919,921,922,935,947,959,971,1007,1019] --> Loop 69 * CEs [413,415,417,418,425,427,429,430,432,434,439,441,442,449,451,453,454,461,521,523,525,526,533,535,537,538,540,542,547,549,550,557,559,561,562,569,575,577,579,580,587,589,591,592,594,596,601,603,604,611,613,615,616,623,683,685,687,688,695,697,699,700,702,704,709,711,712,719,721,723,724,731,737,739,741,742,745,747,748,750,752,761,763,765,766,769,771,772,774,776,785,787,789,790,793,795,796,798,800,809,811,813,814,817,819,820,822,824,881,883,885,886,889,891,892,894,896,905,907,909,910,913,915,916,918,920,929,931,933,934,941,943,945,946,953,955,957,958,965,967,969,970,1001,1003,1005,1006,1013,1015,1017,1018] --> Loop 70 * CEs [409,411,412,414,416,421,423,424,426,428,438,440,445,447,448,450,452,457,459,460,517,519,520,522,524,529,531,532,534,536,546,548,553,555,556,558,560,565,567,568,571,573,574,576,578,583,585,586,588,590,600,602,607,609,610,612,614,619,621,622,679,681,682,684,686,691,693,694,696,698,708,710,715,717,718,720,722,727,729,730,733,735,736,738,740,744,746,757,759,760,762,764,768,770,781,783,784,786,788,792,794,805,807,808,810,812,816,818,877,879,880,882,884,888,890,901,903,904,906,908,912,914,925,927,928,930,932,937,939,940,942,944,949,951,952,954,956,961,963,964,966,968,997,999,1000,1002,1004,1009,1011,1012,1014,1016] --> Loop 71 * CEs [408,410,420,422,444,446,456,458,516,518,528,530,552,554,564,566,570,572,582,584,606,608,618,620,678,680,690,692,714,716,726,728,732,734,756,758,780,782,804,806,876,878,900,902,924,926,936,938,948,950,960,962,996,998,1008,1010] --> Loop 72 * CEs [139,157,175,193,211,229,247,265,283,301,319,337,371,383,395,407] --> Loop 73 * CEs [133,135,137,138,145,151,153,155,156,163,169,171,173,174,181,187,189,191,192,199,205,207,209,210,217,223,225,227,228,235,241,243,245,246,253,259,261,263,264,271,277,279,281,282,289,295,297,299,300,307,313,315,317,318,325,331,333,335,336,343,365,367,369,370,377,379,381,382,389,391,393,394,401,403,405,406] --> Loop 74 * CEs [129,131,141,143,147,149,159,161,165,167,177,179,183,185,195,197,201,203,213,215,219,221,231,233] --> Loop 75 * CEs [99,105,115,121,127,132,134,136,144,150,152,154,162,168,170,172,180,186,188,190,198,204,206,208,216,222,224,226,234,237,239,240,242,244,249,251,252,255,257,258,260,262,267,269,270,273,275,276,278,280,285,287,288,291,293,294,296,298,303,305,306,309,311,312,314,316,321,323,324,327,329,330,332,334,339,341,342,361,363,364,366,368,373,375,376,378,380,385,387,388,390,392,397,399,400,402,404] --> Loop 76 * CEs [128,130,140,142,146,148,158,160,164,166,176,178,182,184,194,196,200,202,212,214,218,220,230,232,236,238,248,250,254,256,266,268,272,274,284,286,290,292,302,304,308,310,320,322,326,328,338,340,360,362,372,374,384,386,396,398] --> Loop 77 * CEs [345,347,349,351,353,355,357,359] --> Loop 78 * CEs [91,93,95,97,98,101,103,104,107,109,111,113,114,117,119,120,123,125,126] --> Loop 79 * CEs [344,346,348,350,352,354,356,358] --> Loop 80 * CEs [90,92,94,96,100,102,106,108,110,112,116,118,122,124] --> Loop 81 ### Ranking functions of CR fun5(V1,V,Out) * RF of phase [63,64,65,66,67]: [V1,V1-V+1] #### Partial ranking functions of CR fun5(V1,V,Out) * Partial RF of phase [63,64,65,66,67]: - RF of loop [63:1,64:1,65:1,66:1,67:1]: V1 V1-V+1 ### Specialization of cost equations fun9/3 * CE 54 is refined into CE [1020] * CE 53 is refined into CE [1021] ### Cost equations --> "Loop" of fun9/3 * CEs [1021] --> Loop 82 * CEs [1020] --> Loop 83 ### Ranking functions of CR fun9(V1,V,Out) * RF of phase [82]: [V] #### Partial ranking functions of CR fun9(V1,V,Out) * Partial RF of phase [82]: - RF of loop [82:1]: V ### Specialization of cost equations start/3 * CE 4 is refined into CE [1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157] * CE 5 is refined into CE [1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225] * CE 6 is refined into CE [1226,1227,1228,1229,1230,1231,1232,1233] * CE 1 is refined into CE [1234] * CE 2 is refined into CE [1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369] * CE 3 is refined into CE [1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387] * CE 7 is refined into CE [1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439] * CE 8 is refined into CE [1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525] * CE 9 is refined into CE [1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586] * CE 10 is refined into CE [1587,1588] * CE 11 is refined into CE [1589,1590] * CE 12 is refined into CE [1591,1592] * CE 13 is refined into CE [1593,1594] * CE 14 is refined into CE [1595,1596] * CE 15 is refined into CE [1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609] * CE 16 is refined into CE [1610,1611] * CE 17 is refined into CE [1612,1613,1614,1615,1616] * CE 18 is refined into CE [1617,1618] * CE 19 is refined into CE [1619,1620,1621,1622] * CE 20 is refined into CE [1623] * CE 21 is refined into CE [1624,1625,1626] * CE 22 is refined into CE [1627,1628,1629] * CE 23 is refined into CE [1630,1631] ### Cost equations --> "Loop" of start/3 * CEs [1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233] --> Loop 84 * CEs [1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1403,1404,1405,1406,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1455,1456,1457,1458,1459,1460,1461,1462,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1581,1582,1583,1584,1585,1586] --> Loop 85 * CEs [1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1407,1408,1409,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1463,1464,1465,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1575,1576,1577,1578,1579,1580,1597,1598,1613] --> Loop 86 * CEs [1234,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631] --> Loop 87 ### Ranking functions of CR start(V1,V,V19) #### Partial ranking functions of CR start(V1,V,V19) Computing Bounds ===================================== #### Cost of chains of app(V1,V,Out): * Chain [[35],37]: 0 with precondition: [V+V1=Out,V1>=1,V>=0] * Chain [[35],36]: 0 with precondition: [V>=0,Out>=1,V1>=Out] * Chain [37]: 0 with precondition: [V1=0,V=Out,V>=0] * Chain [36]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of empty(V1,Out): * Chain [40]: 0 with precondition: [V1=0,Out=2] * Chain [39]: 0 with precondition: [Out=0,V1>=0] * Chain [38]: 0 with precondition: [Out=1,V1>=1] #### Cost of chains of fstsplit(V1,V,Out): * Chain [[41],42]: 0 with precondition: [V1>=1,Out>=1,V>=Out] * Chain [42]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun(V1,V,Out): * Chain [[43],44]: 1*it(43)+0 Such that:it(43) =< Out with precondition: [Out>=1,V1>=Out,V>=Out] * Chain [44]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun1(V1,V,Out): * Chain [[45],46]: 1*it(45)+0 Such that:it(45) =< Out with precondition: [Out>=1,V1>=Out,V>=Out] * Chain [46]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun4(V1,V,Out): * Chain [[47],48]: 1*it(47)+0 Such that:it(47) =< V1 with precondition: [V>=0,Out>=1,V1>=Out] * Chain [48]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun2(V1,V,Out): * Chain [[49],50]: 1*it(49)+0 Such that:it(49) =< Out with precondition: [Out>=1,V1>=Out,V>=Out] * Chain [50]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun3(V1,Out): * Chain [[51],52]: 1*it(51)+0 Such that:it(51) =< V1 with precondition: [Out>=1,V1>=Out] * Chain [52]: 0 with precondition: [Out=0,V1>=0] #### Cost of chains of fun8(V1,V,Out): * Chain [53]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of sndsplit(V1,V,Out): * Chain [[54],56]: 0 with precondition: [V1>=1,Out>=0,V>=Out+V1] * Chain [[54],55]: 0 with precondition: [Out=0,V1>=1,V>=1] * Chain [56]: 0 with precondition: [V1=0,V=Out,V>=0] * Chain [55]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of length(V1,Out): * Chain [[57],58]: 0 with precondition: [Out>=1,V1>=Out] * Chain [58]: 0 with precondition: [Out=0,V1>=0] #### Cost of chains of leq(V1,V,Out): * Chain [[59],62]: 0 with precondition: [Out=2,V1>=1,V>=V1] * Chain [[59],61]: 0 with precondition: [Out=1,V>=1,V1>=V+1] * Chain [[59],60]: 0 with precondition: [Out=0,V1>=1,V>=1] * Chain [62]: 0 with precondition: [V1=0,Out=2,V>=0] * Chain [61]: 0 with precondition: [V=0,Out=1,V1>=1] * Chain [60]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of fun5(V1,V,Out): * Chain [[63,64,65,66,67],81]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+1 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(77) =< V1 it(63) =< aux(77) it(64) =< aux(77) it(65) =< aux(77) it(66) =< aux(77) it(67) =< aux(77) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(77) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(77) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(77) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(77) aux(62) =< aux(77) s(302) =< it(63)*aux(77) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=4,V1>=V] * Chain [[63,64,65,66,67],79]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+15*s(315)+4*s(319)+1 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(79) =< V aux(80) =< V1 s(315) =< aux(80) s(319) =< aux(79) it(63) =< aux(80) it(64) =< aux(80) it(65) =< aux(80) it(66) =< aux(80) it(67) =< aux(80) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(80) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(80) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(80) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(80) aux(62) =< aux(80) s(302) =< it(63)*aux(80) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=5,V1>=V+1] * Chain [[63,64,65,66,67],77]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+2 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(81) =< V1 it(63) =< aux(81) it(64) =< aux(81) it(65) =< aux(81) it(66) =< aux(81) it(67) =< aux(81) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(81) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(81) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(81) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(81) aux(62) =< aux(81) s(302) =< it(63)*aux(81) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=5,V1>=V] * Chain [[63,64,65,66,67],76]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+65*s(334)+37*s(342)+2 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(87) =< V aux(88) =< V1 s(334) =< aux(88) s(342) =< aux(87) it(63) =< aux(88) it(64) =< aux(88) it(65) =< aux(88) it(66) =< aux(88) it(67) =< aux(88) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(88) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(88) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(88) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(88) aux(62) =< aux(88) s(302) =< it(63)*aux(88) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=6,V1>=V+1] * Chain [[63,64,65,66,67],75]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+24*s(436)+2 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(90) =< V1 s(436) =< aux(90) it(63) =< aux(90) it(64) =< aux(90) it(65) =< aux(90) it(66) =< aux(90) it(67) =< aux(90) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(90) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(90) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(90) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(90) aux(62) =< aux(90) s(302) =< it(63)*aux(90) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=6,V1>=V+1] * Chain [[63,64,65,66,67],74]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+120*s(460)+32*s(467)+2 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(144) =< V aux(145) =< V1 s(460) =< aux(145) s(467) =< aux(144) it(63) =< aux(145) it(64) =< aux(145) it(65) =< aux(145) it(66) =< aux(145) it(67) =< aux(145) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(145) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(145) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(145) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(145) aux(62) =< aux(145) s(302) =< it(63)*aux(145) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=7,V1>=V+1] * Chain [[63,64,65,66,67],73]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+14*s(612)+34*s(613)+2 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(163) =< V aux(164) =< V1 s(613) =< aux(164) s(612) =< aux(163) it(63) =< aux(164) it(64) =< aux(164) it(65) =< aux(164) it(66) =< aux(164) it(67) =< aux(164) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(164) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(164) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(164) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(164) aux(62) =< aux(164) s(302) =< it(63)*aux(164) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=8,V1>=V+1] * Chain [[63,64,65,66,67],72,81]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+4 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(165) =< V1 it(63) =< aux(165) it(64) =< aux(165) it(65) =< aux(165) it(66) =< aux(165) it(67) =< aux(165) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(165) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(165) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(165) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(165) aux(62) =< aux(165) s(302) =< it(63)*aux(165) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=7,V1>=V+1] * Chain [[63,64,65,66,67],72,77]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+5 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(166) =< V1 it(63) =< aux(166) it(64) =< aux(166) it(65) =< aux(166) it(66) =< aux(166) it(67) =< aux(166) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(166) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(166) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(166) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(166) aux(62) =< aux(166) s(302) =< it(63)*aux(166) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=8,V1>=V+1] * Chain [[63,64,65,66,67],71,81]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+104*s(660)+48*s(742)+4 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(168) =< V aux(169) =< V1 s(660) =< aux(169) s(742) =< aux(168) it(63) =< aux(169) it(64) =< aux(169) it(65) =< aux(169) it(66) =< aux(169) it(67) =< aux(169) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(169) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(169) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(169) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(169) aux(62) =< aux(169) s(302) =< it(63)*aux(169) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=8,V1>=V+1] * Chain [[63,64,65,66,67],71,77]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+104*s(660)+48*s(742)+5 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(168) =< V aux(170) =< V1 s(660) =< aux(170) s(742) =< aux(168) it(63) =< aux(170) it(64) =< aux(170) it(65) =< aux(170) it(66) =< aux(170) it(67) =< aux(170) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(170) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(170) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(170) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(170) aux(62) =< aux(170) s(302) =< it(63)*aux(170) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=9,V1>=V+1] * Chain [[63,64,65,66,67],70,81]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+192*s(812)+108*s(956)+4 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(274) =< V aux(275) =< V1 s(812) =< aux(275) s(956) =< aux(274) it(63) =< aux(275) it(64) =< aux(275) it(65) =< aux(275) it(66) =< aux(275) it(67) =< aux(275) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(275) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(275) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(275) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(275) aux(62) =< aux(275) s(302) =< it(63)*aux(275) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=9,V1>=V+1] * Chain [[63,64,65,66,67],70,77]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+192*s(812)+108*s(956)+5 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(274) =< V aux(276) =< V1 s(812) =< aux(276) s(956) =< aux(274) it(63) =< aux(276) it(64) =< aux(276) it(65) =< aux(276) it(66) =< aux(276) it(67) =< aux(276) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(276) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(276) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(276) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(276) aux(62) =< aux(276) s(302) =< it(63)*aux(276) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=10,V1>=V+1] * Chain [[63,64,65,66,67],69,81]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+114*s(1112)+78*s(1196)+4 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(342) =< V aux(343) =< V1 s(1112) =< aux(343) s(1196) =< aux(342) it(63) =< aux(343) it(64) =< aux(343) it(65) =< aux(343) it(66) =< aux(343) it(67) =< aux(343) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(343) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(343) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(343) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(343) aux(62) =< aux(343) s(302) =< it(63)*aux(343) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=10,V1>=V+1] * Chain [[63,64,65,66,67],69,77]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+114*s(1112)+78*s(1196)+5 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(342) =< V aux(344) =< V1 s(1112) =< aux(344) s(1196) =< aux(342) it(63) =< aux(344) it(64) =< aux(344) it(65) =< aux(344) it(66) =< aux(344) it(67) =< aux(344) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(344) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(344) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(344) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(344) aux(62) =< aux(344) s(302) =< it(63)*aux(344) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=11,V1>=V+1] * Chain [[63,64,65,66,67],68,81]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+22*s(1304)+18*s(1320)+4 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(356) =< V aux(357) =< V1 s(1304) =< aux(357) s(1320) =< aux(356) it(63) =< aux(357) it(64) =< aux(357) it(65) =< aux(357) it(66) =< aux(357) it(67) =< aux(357) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(357) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(357) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(357) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(357) aux(62) =< aux(357) s(302) =< it(63)*aux(357) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=11,V1>=V+1] * Chain [[63,64,65,66,67],68,77]: 3*it(63)+3*it(64)+3*it(65)+3*it(66)+3*it(67)+12*s(299)+4*s(300)+56*s(303)+22*s(304)+84*s(307)+40*s(308)+24*s(311)+40*s(312)+22*s(1304)+18*s(1320)+5 Such that:aux(66) =< V1-V+1 aux(68) =< V1+V aux(70) =< V1+2*V aux(72) =< V1+3*V aux(74) =< V1+4*V aux(356) =< V aux(358) =< V1 s(1304) =< aux(358) s(1320) =< aux(356) it(63) =< aux(358) it(64) =< aux(358) it(65) =< aux(358) it(66) =< aux(358) it(67) =< aux(358) it(63) =< aux(66) it(64) =< aux(66) it(65) =< aux(66) it(66) =< aux(66) it(67) =< aux(66) it(67) =< aux(68) s(313) =< aux(68) s(313) =< aux(358) it(66) =< aux(70) it(67) =< aux(70) s(309) =< aux(70) s(309) =< aux(358) it(65) =< aux(72) it(66) =< aux(72) it(67) =< aux(72) s(305) =< aux(72) s(305) =< aux(358) it(64) =< aux(74) it(65) =< aux(74) it(66) =< aux(74) it(67) =< aux(74) s(301) =< aux(74) s(301) =< aux(358) aux(62) =< aux(358) s(302) =< it(63)*aux(358) s(314) =< it(66)*aux(62) s(310) =< it(65)*aux(62) s(306) =< it(64)*aux(62) s(311) =< s(314) s(312) =< s(313) s(308) =< s(310) s(307) =< s(309) s(304) =< s(306) s(303) =< s(305) s(300) =< s(302) s(299) =< s(301) with precondition: [V>=1,Out>=12,V1>=V+1] * Chain [81]: 1 with precondition: [Out=1,V1>=0,V>=0] * Chain [80]: 2 with precondition: [V=0,Out=2,V1>=0] * Chain [79]: 15*s(315)+4*s(319)+1 Such that:aux(78) =< V1 aux(79) =< V s(315) =< aux(78) s(319) =< aux(79) with precondition: [V>=0,Out>=2,V1+1>=Out] * Chain [78]: 8*s(1344)+2 Such that:aux(359) =< V1 s(1344) =< aux(359) with precondition: [V=0,Out>=3,V1+2>=Out] * Chain [77]: 2 with precondition: [Out=2,V1>=0,V>=1] * Chain [76]: 65*s(334)+37*s(342)+2 Such that:aux(86) =< V1 aux(87) =< V s(334) =< aux(86) s(342) =< aux(87) with precondition: [V>=1,Out>=3,2*V1+1>=Out,V+V1+1>=Out] * Chain [75]: 24*s(436)+2 Such that:aux(89) =< V1 s(436) =< aux(89) with precondition: [V>=1,Out>=3,V1+2>=Out] * Chain [74]: 120*s(460)+32*s(467)+2 Such that:aux(143) =< V1 aux(144) =< V s(460) =< aux(143) s(467) =< aux(144) with precondition: [V>=1,Out>=4,2*V1+2>=Out,V+V1+2>=Out] * Chain [73]: 14*s(612)+34*s(613)+2 Such that:aux(162) =< V1 aux(163) =< V s(613) =< aux(162) s(612) =< aux(163) with precondition: [V>=1,Out>=5,3*V1+2>=Out,V1+2*V+2>=Out] * Chain [72,81]: 4 with precondition: [Out=4,V1>=1,V>=1] * Chain [72,77]: 5 with precondition: [Out=5,V1>=1,V>=1] * Chain [71,81]: 104*s(660)+48*s(742)+4 Such that:aux(167) =< V1 aux(168) =< V s(660) =< aux(167) s(742) =< aux(168) with precondition: [V>=1,Out>=5,V1+4>=Out] * Chain [71,77]: 104*s(660)+48*s(742)+5 Such that:aux(167) =< V1 aux(168) =< V s(660) =< aux(167) s(742) =< aux(168) with precondition: [V>=1,Out>=6,V1+5>=Out] * Chain [70,81]: 192*s(812)+108*s(956)+4 Such that:aux(273) =< V1 aux(274) =< V s(812) =< aux(273) s(956) =< aux(274) with precondition: [V>=1,Out>=6,2*V1+4>=Out,V+V1+4>=Out] * Chain [70,77]: 192*s(812)+108*s(956)+5 Such that:aux(273) =< V1 aux(274) =< V s(812) =< aux(273) s(956) =< aux(274) with precondition: [V>=1,Out>=7,2*V1+5>=Out,V+V1+5>=Out] * Chain [69,81]: 114*s(1112)+78*s(1196)+4 Such that:aux(341) =< V1 aux(342) =< V s(1112) =< aux(341) s(1196) =< aux(342) with precondition: [V>=1,Out>=7,3*V1+4>=Out,V1+2*V+4>=Out] * Chain [69,77]: 114*s(1112)+78*s(1196)+5 Such that:aux(341) =< V1 aux(342) =< V s(1112) =< aux(341) s(1196) =< aux(342) with precondition: [V>=1,Out>=8,3*V1+5>=Out,V1+2*V+5>=Out] * Chain [68,81]: 22*s(1304)+18*s(1320)+4 Such that:aux(355) =< V1 aux(356) =< V s(1304) =< aux(355) s(1320) =< aux(356) with precondition: [V>=1,Out>=8,4*V1+4>=Out,V1+3*V+4>=Out] * Chain [68,77]: 22*s(1304)+18*s(1320)+5 Such that:aux(355) =< V1 aux(356) =< V s(1304) =< aux(355) s(1320) =< aux(356) with precondition: [V>=1,Out>=9,4*V1+5>=Out,V1+3*V+5>=Out] #### Cost of chains of fun9(V1,V,Out): * Chain [[82],83]: 1*it(82)+0 Such that:it(82) =< V with precondition: [V1>=0,Out>=1,V>=Out] * Chain [83]: 0 with precondition: [Out=0,V1>=0,V>=0] #### Cost of chains of start(V1,V,V19): * Chain [87]: 1186*s(1907)+2246*s(1910)+51*s(1937)+51*s(1938)+51*s(1939)+51*s(1940)+51*s(1941)+408*s(1951)+680*s(1952)+680*s(1953)+1428*s(1954)+374*s(1955)+952*s(1956)+68*s(1957)+204*s(1958)+5 Such that:s(1929) =< V1-V+1 s(1930) =< V1+V s(1931) =< V1+2*V s(1932) =< V1+3*V s(1933) =< V1+4*V aux(376) =< V1 aux(377) =< V s(1910) =< aux(376) s(1907) =< aux(377) s(1937) =< aux(376) s(1938) =< aux(376) s(1939) =< aux(376) s(1940) =< aux(376) s(1941) =< aux(376) s(1937) =< s(1929) s(1938) =< s(1929) s(1939) =< s(1929) s(1940) =< s(1929) s(1941) =< s(1929) s(1941) =< s(1930) s(1942) =< s(1930) s(1942) =< aux(376) s(1940) =< s(1931) s(1941) =< s(1931) s(1943) =< s(1931) s(1943) =< aux(376) s(1939) =< s(1932) s(1940) =< s(1932) s(1941) =< s(1932) s(1944) =< s(1932) s(1944) =< aux(376) s(1938) =< s(1933) s(1939) =< s(1933) s(1940) =< s(1933) s(1941) =< s(1933) s(1945) =< s(1933) s(1945) =< aux(376) s(1946) =< aux(376) s(1947) =< s(1937)*aux(376) s(1948) =< s(1940)*s(1946) s(1949) =< s(1939)*s(1946) s(1950) =< s(1938)*s(1946) s(1951) =< s(1948) s(1952) =< s(1942) s(1953) =< s(1949) s(1954) =< s(1943) s(1955) =< s(1950) s(1956) =< s(1944) s(1957) =< s(1947) s(1958) =< s(1945) with precondition: [V1>=0] * Chain [86]: 146*s(1977)+3 Such that:aux(378) =< V1 s(1977) =< aux(378) with precondition: [V=0,V1>=0] * Chain [85]: 21417*s(2014)+4*s(2016)+40392*s(2040)+918*s(2215)+918*s(2216)+918*s(2217)+918*s(2218)+918*s(2219)+7344*s(2229)+12240*s(2230)+12240*s(2231)+25704*s(2232)+6732*s(2233)+17136*s(2234)+1224*s(2235)+3672*s(2236)+7 Such that:aux(453) =< V1 aux(454) =< V1-2*V+1 aux(455) =< V1-V aux(456) =< V1+V aux(457) =< V1+2*V aux(458) =< V1+3*V aux(459) =< V s(2016) =< aux(453) s(2014) =< aux(459) s(2040) =< aux(455) s(2215) =< aux(455) s(2216) =< aux(455) s(2217) =< aux(455) s(2218) =< aux(455) s(2219) =< aux(455) s(2215) =< aux(454) s(2216) =< aux(454) s(2217) =< aux(454) s(2218) =< aux(454) s(2219) =< aux(454) s(2219) =< aux(453) s(2220) =< aux(453) s(2220) =< aux(455) s(2218) =< aux(456) s(2219) =< aux(456) s(2221) =< aux(456) s(2221) =< aux(455) s(2217) =< aux(457) s(2218) =< aux(457) s(2219) =< aux(457) s(2222) =< aux(457) s(2222) =< aux(455) s(2216) =< aux(458) s(2217) =< aux(458) s(2218) =< aux(458) s(2219) =< aux(458) s(2223) =< aux(458) s(2223) =< aux(455) s(2224) =< aux(455) s(2225) =< s(2215)*aux(455) s(2226) =< s(2218)*s(2224) s(2227) =< s(2217)*s(2224) s(2228) =< s(2216)*s(2224) s(2229) =< s(2226) s(2230) =< s(2220) s(2231) =< s(2227) s(2232) =< s(2221) s(2233) =< s(2228) s(2234) =< s(2222) s(2235) =< s(2225) s(2236) =< s(2223) with precondition: [V19=1,V1>=0,V>=0] * Chain [84]: 14354*s(3293)+4*s(3295)+26928*s(3343)+612*s(3510)+612*s(3511)+612*s(3512)+612*s(3513)+612*s(3514)+4896*s(3524)+8160*s(3525)+8160*s(3526)+17136*s(3527)+4488*s(3528)+11424*s(3529)+816*s(3530)+2448*s(3531)+7 Such that:aux(544) =< V1 aux(545) =< V1-2*V+1 aux(546) =< V1-V aux(547) =< V1+V aux(548) =< V1+2*V aux(549) =< V1+3*V aux(550) =< V s(3295) =< aux(544) s(3293) =< aux(550) s(3343) =< aux(546) s(3510) =< aux(546) s(3511) =< aux(546) s(3512) =< aux(546) s(3513) =< aux(546) s(3514) =< aux(546) s(3510) =< aux(545) s(3511) =< aux(545) s(3512) =< aux(545) s(3513) =< aux(545) s(3514) =< aux(545) s(3514) =< aux(544) s(3515) =< aux(544) s(3515) =< aux(546) s(3513) =< aux(547) s(3514) =< aux(547) s(3516) =< aux(547) s(3516) =< aux(546) s(3512) =< aux(548) s(3513) =< aux(548) s(3514) =< aux(548) s(3517) =< aux(548) s(3517) =< aux(546) s(3511) =< aux(549) s(3512) =< aux(549) s(3513) =< aux(549) s(3514) =< aux(549) s(3518) =< aux(549) s(3518) =< aux(546) s(3519) =< aux(546) s(3520) =< s(3510)*aux(546) s(3521) =< s(3513)*s(3519) s(3522) =< s(3512)*s(3519) s(3523) =< s(3511)*s(3519) s(3524) =< s(3521) s(3525) =< s(3515) s(3526) =< s(3522) s(3527) =< s(3516) s(3528) =< s(3523) s(3529) =< s(3517) s(3530) =< s(3520) s(3531) =< s(3518) with precondition: [V19=2,V1>=0,V>=0] Closed-form bounds of start(V1,V,V19): ------------------------------------- * Chain [87] with precondition: [V1>=0] - Upper bound: 2501*V1+5+1530*V1*V1+nat(V)*1186+nat(V1+V)*680+nat(V1+2*V)*1428+nat(V1+3*V)*952+nat(V1+4*V)*204 - Complexity: n^2 * Chain [86] with precondition: [V=0,V1>=0] - Upper bound: 146*V1+3 - Complexity: n * Chain [85] with precondition: [V19=1,V1>=0,V>=0] - Upper bound: 58756*V1+92409*V+7+nat(V1-V)*44982+nat(V1-V)*27540*nat(V1-V) - Complexity: n^2 * Chain [84] with precondition: [V19=2,V1>=0,V>=0] - Upper bound: 39172*V1+61682*V+7+nat(V1-V)*29988+nat(V1-V)*18360*nat(V1-V) - Complexity: n^2 ### Maximum cost of start(V1,V,V19): 2355*V1+2+nat(V)*1186+nat(V1+V)*680+nat(V1+2*V)*1428+nat(V1+3*V)*952+max([1530*V1*V1+nat(V1+4*V)*204,5663*V1+2+nat(V)*13168+nat(V1+V)*16456+nat(V1+2*V)*9996+nat(V1+3*V)*1496+nat(V1-V)*29988+nat(V1-V)*18360*nat(V1-V)+(nat(V)*7063+4080*V1+nat(V1+V)*8568+nat(V1+2*V)*5712+nat(V1+3*V)*1224+nat(V1-V)*14994+nat(V1-V)*9180*nat(V1-V))])+(146*V1+3) Asymptotic class: n^2 * Total analysis performed in 43218 ms. ---------------------------------------- (20) BOUNDS(1, n^2) ---------------------------------------- (21) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (22) Obligation: Complexity Dependency Tuples Problem Rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) S tuples: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) K tuples:none Defined Rule Symbols: fstsplit_2, sndsplit_2, empty_1, leq_2, length_1, app_2, map_f_2, process_2, if1_3, if2_3, if3_3 Defined Pair Symbols: FSTSPLIT_2, SNDSPLIT_2, EMPTY_1, LEQ_2, LENGTH_1, APP_2, MAP_F_2, PROCESS_2, IF1_3, IF2_3, IF3_3 Compound Symbols: c, c1, c2_1, c3, c4, c5_1, c6, c7, c8, c9, c10_1, c11, c12_1, c13, c14_1, c15, c16_2, c17_3, c18_3, c19_5, c20_3, c21_3, c22_4 ---------------------------------------- (23) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (24) 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: FSTSPLIT(0, z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0, z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0, z0) -> c8 LEQ(s(z0), 0) -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) The (relative) TRS S consists of the following rules: fstsplit(0, z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0, z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0, z0) -> true leq(s(z0), 0) -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0 length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Rewrite Strategy: INNERMOST ---------------------------------------- (25) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (26) 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: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) The (relative) TRS S consists of the following rules: fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Rewrite Strategy: INNERMOST ---------------------------------------- (27) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (28) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 ---------------------------------------- (29) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: FSTSPLIT, SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: FSTSPLIT < PROCESS SNDSPLIT < PROCESS LEQ < PROCESS LENGTH < PROCESS APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (30) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: FSTSPLIT, SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: FSTSPLIT < PROCESS SNDSPLIT < PROCESS LEQ < PROCESS LENGTH < PROCESS APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (31) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) Induction Base: FSTSPLIT(gen_0':s19_23(0), gen_nil:cons:f20_23(0)) ->_R^Omega(1) c Induction Step: FSTSPLIT(gen_0':s19_23(+(n27_23, 1)), gen_nil:cons:f20_23(+(n27_23, 1))) ->_R^Omega(1) c2(FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23))) ->_IH c2(gen_c:c1:c218_23(c28_23)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (32) Complex Obligation (BEST) ---------------------------------------- (33) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: FSTSPLIT, SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: FSTSPLIT < PROCESS SNDSPLIT < PROCESS LEQ < PROCESS LENGTH < PROCESS APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (34) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (35) BOUNDS(n^1, INF) ---------------------------------------- (36) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: SNDSPLIT, LEQ, LENGTH, APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: SNDSPLIT < PROCESS LEQ < PROCESS LENGTH < PROCESS APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (37) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) Induction Base: SNDSPLIT(gen_0':s19_23(0), gen_nil:cons:f20_23(0)) ->_R^Omega(1) c3 Induction Step: SNDSPLIT(gen_0':s19_23(+(n869_23, 1)), gen_nil:cons:f20_23(+(n869_23, 1))) ->_R^Omega(1) c5(SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23))) ->_IH c5(gen_c3:c4:c521_23(c870_23)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (38) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: LEQ, LENGTH, APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: LEQ < PROCESS LENGTH < PROCESS APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (39) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) Induction Base: LEQ(gen_0':s19_23(0), gen_0':s19_23(0)) ->_R^Omega(1) c8 Induction Step: LEQ(gen_0':s19_23(+(n1820_23, 1)), gen_0':s19_23(+(n1820_23, 1))) ->_R^Omega(1) c10(LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23))) ->_IH c10(gen_c8:c9:c1022_23(c1821_23)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (40) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: LENGTH, APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: LENGTH < PROCESS APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (41) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) Induction Base: LENGTH(gen_nil:cons:f20_23(0)) ->_R^Omega(1) c11 Induction Step: LENGTH(gen_nil:cons:f20_23(+(n2743_23, 1))) ->_R^Omega(1) c12(LENGTH(gen_nil:cons:f20_23(n2743_23))) ->_IH c12(gen_c11:c1223_23(c2744_23)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (42) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: APP, MAP_F, map_f, PROCESS, leq, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: APP < MAP_F APP < PROCESS map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (43) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) Induction Base: APP(gen_nil:cons:f20_23(0), gen_nil:cons:f20_23(b)) ->_R^Omega(1) c13 Induction Step: APP(gen_nil:cons:f20_23(+(n3357_23, 1)), gen_nil:cons:f20_23(b)) ->_R^Omega(1) c14(APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b))) ->_IH c14(gen_c13:c1424_23(c3358_23)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (44) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: leq, MAP_F, map_f, PROCESS, length, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process leq < PROCESS length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS leq < process length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (45) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) Induction Base: leq(gen_0':s19_23(0), gen_0':s19_23(0)) ->_R^Omega(0) true Induction Step: leq(gen_0':s19_23(+(n4577_23, 1)), gen_0':s19_23(+(n4577_23, 1))) ->_R^Omega(0) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) ->_IH true We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (46) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: length, MAP_F, map_f, PROCESS, fstsplit, app, sndsplit, process They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process length < PROCESS fstsplit < PROCESS app < PROCESS sndsplit < PROCESS length < process fstsplit < process app < process sndsplit < process ---------------------------------------- (47) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: length(gen_nil:cons:f20_23(n5104_23)) -> gen_0':s19_23(n5104_23), rt in Omega(0) Induction Base: length(gen_nil:cons:f20_23(0)) ->_R^Omega(0) 0' Induction Step: length(gen_nil:cons:f20_23(+(n5104_23, 1))) ->_R^Omega(0) s(length(gen_nil:cons:f20_23(n5104_23))) ->_IH s(gen_0':s19_23(c5105_23)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (48) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) length(gen_nil:cons:f20_23(n5104_23)) -> gen_0':s19_23(n5104_23), rt in Omega(0) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: fstsplit, MAP_F, map_f, PROCESS, app, sndsplit, process They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process fstsplit < PROCESS app < PROCESS sndsplit < PROCESS fstsplit < process app < process sndsplit < process ---------------------------------------- (49) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: fstsplit(gen_0':s19_23(n5594_23), gen_nil:cons:f20_23(n5594_23)) -> gen_nil:cons:f20_23(n5594_23), rt in Omega(0) Induction Base: fstsplit(gen_0':s19_23(0), gen_nil:cons:f20_23(0)) ->_R^Omega(0) nil Induction Step: fstsplit(gen_0':s19_23(+(n5594_23, 1)), gen_nil:cons:f20_23(+(n5594_23, 1))) ->_R^Omega(0) cons(hole_a4_23, fstsplit(gen_0':s19_23(n5594_23), gen_nil:cons:f20_23(n5594_23))) ->_IH cons(hole_a4_23, gen_nil:cons:f20_23(c5595_23)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (50) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) length(gen_nil:cons:f20_23(n5104_23)) -> gen_0':s19_23(n5104_23), rt in Omega(0) fstsplit(gen_0':s19_23(n5594_23), gen_nil:cons:f20_23(n5594_23)) -> gen_nil:cons:f20_23(n5594_23), rt in Omega(0) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: app, MAP_F, map_f, PROCESS, sndsplit, process They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < PROCESS map_f < PROCESS app < map_f map_f < process app < PROCESS sndsplit < PROCESS app < process sndsplit < process ---------------------------------------- (51) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: app(gen_nil:cons:f20_23(n6549_23), gen_nil:cons:f20_23(b)) -> gen_nil:cons:f20_23(+(n6549_23, b)), rt in Omega(0) Induction Base: app(gen_nil:cons:f20_23(0), gen_nil:cons:f20_23(b)) ->_R^Omega(0) gen_nil:cons:f20_23(b) Induction Step: app(gen_nil:cons:f20_23(+(n6549_23, 1)), gen_nil:cons:f20_23(b)) ->_R^Omega(0) cons(hole_a4_23, app(gen_nil:cons:f20_23(n6549_23), gen_nil:cons:f20_23(b))) ->_IH cons(hole_a4_23, gen_nil:cons:f20_23(+(b, c6550_23))) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (52) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) length(gen_nil:cons:f20_23(n5104_23)) -> gen_0':s19_23(n5104_23), rt in Omega(0) fstsplit(gen_0':s19_23(n5594_23), gen_nil:cons:f20_23(n5594_23)) -> gen_nil:cons:f20_23(n5594_23), rt in Omega(0) app(gen_nil:cons:f20_23(n6549_23), gen_nil:cons:f20_23(b)) -> gen_nil:cons:f20_23(+(n6549_23, b)), rt in Omega(0) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: map_f, MAP_F, PROCESS, sndsplit, process They will be analysed ascendingly in the following order: map_f < MAP_F MAP_F < PROCESS map_f < PROCESS map_f < process sndsplit < PROCESS sndsplit < process ---------------------------------------- (53) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: map_f(self, gen_nil:cons:f20_23(+(1, n8842_23))) -> *26_23, rt in Omega(0) Induction Base: map_f(self, gen_nil:cons:f20_23(+(1, 0))) Induction Step: map_f(self, gen_nil:cons:f20_23(+(1, +(n8842_23, 1)))) ->_R^Omega(0) app(f(self, hole_a4_23), map_f(self, gen_nil:cons:f20_23(+(1, n8842_23)))) ->_IH app(f(self, hole_a4_23), *26_23) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (54) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) length(gen_nil:cons:f20_23(n5104_23)) -> gen_0':s19_23(n5104_23), rt in Omega(0) fstsplit(gen_0':s19_23(n5594_23), gen_nil:cons:f20_23(n5594_23)) -> gen_nil:cons:f20_23(n5594_23), rt in Omega(0) app(gen_nil:cons:f20_23(n6549_23), gen_nil:cons:f20_23(b)) -> gen_nil:cons:f20_23(+(n6549_23, b)), rt in Omega(0) map_f(self, gen_nil:cons:f20_23(+(1, n8842_23))) -> *26_23, rt in Omega(0) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: MAP_F, PROCESS, sndsplit, process They will be analysed ascendingly in the following order: MAP_F < PROCESS sndsplit < PROCESS sndsplit < process ---------------------------------------- (55) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: sndsplit(gen_0':s19_23(n64485_23), gen_nil:cons:f20_23(n64485_23)) -> gen_nil:cons:f20_23(0), rt in Omega(0) Induction Base: sndsplit(gen_0':s19_23(0), gen_nil:cons:f20_23(0)) ->_R^Omega(0) gen_nil:cons:f20_23(0) Induction Step: sndsplit(gen_0':s19_23(+(n64485_23, 1)), gen_nil:cons:f20_23(+(n64485_23, 1))) ->_R^Omega(0) sndsplit(gen_0':s19_23(n64485_23), gen_nil:cons:f20_23(n64485_23)) ->_IH gen_nil:cons:f20_23(0) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (56) Obligation: Innermost TRS: Rules: FSTSPLIT(0', z0) -> c FSTSPLIT(s(z0), nil) -> c1 FSTSPLIT(s(z0), cons(z1, z2)) -> c2(FSTSPLIT(z0, z2)) SNDSPLIT(0', z0) -> c3 SNDSPLIT(s(z0), nil) -> c4 SNDSPLIT(s(z0), cons(z1, z2)) -> c5(SNDSPLIT(z0, z2)) EMPTY(nil) -> c6 EMPTY(cons(z0, z1)) -> c7 LEQ(0', z0) -> c8 LEQ(s(z0), 0') -> c9 LEQ(s(z0), s(z1)) -> c10(LEQ(z0, z1)) LENGTH(nil) -> c11 LENGTH(cons(z0, z1)) -> c12(LENGTH(z1)) APP(nil, z0) -> c13 APP(cons(z0, z1), z2) -> c14(APP(z1, z2)) MAP_F(z0, nil) -> c15 MAP_F(z0, cons(z1, z2)) -> c16(APP(f(z0, z1), map_f(z0, z2)), MAP_F(z0, z2)) PROCESS(z0, z1) -> c17(IF1(z0, z1, leq(z1, length(z0))), LEQ(z1, length(z0)), LENGTH(z0)) IF1(z0, z1, true) -> c18(IF2(z0, z1, empty(fstsplit(z1, z0))), EMPTY(fstsplit(z1, z0)), FSTSPLIT(z1, z0)) IF1(z0, z1, false) -> c19(IF3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))), EMPTY(fstsplit(z1, app(map_f(self, nil), z0))), FSTSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) IF2(z0, z1, false) -> c20(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), MAP_F(self, nil)) IF2(z0, z1, false) -> c21(PROCESS(app(map_f(self, nil), sndsplit(z1, z0)), z1), APP(map_f(self, nil), sndsplit(z1, z0)), SNDSPLIT(z1, z0)) IF3(z0, z1, false) -> c22(PROCESS(sndsplit(z1, app(map_f(self, nil), z0)), z1), SNDSPLIT(z1, app(map_f(self, nil), z0)), APP(map_f(self, nil), z0), MAP_F(self, nil)) fstsplit(0', z0) -> nil fstsplit(s(z0), nil) -> nil fstsplit(s(z0), cons(z1, z2)) -> cons(z1, fstsplit(z0, z2)) sndsplit(0', z0) -> z0 sndsplit(s(z0), nil) -> nil sndsplit(s(z0), cons(z1, z2)) -> sndsplit(z0, z2) empty(nil) -> true empty(cons(z0, z1)) -> false leq(0', z0) -> true leq(s(z0), 0') -> false leq(s(z0), s(z1)) -> leq(z0, z1) length(nil) -> 0' length(cons(z0, z1)) -> s(length(z1)) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) map_f(z0, nil) -> nil map_f(z0, cons(z1, z2)) -> app(f(z0, z1), map_f(z0, z2)) process(z0, z1) -> if1(z0, z1, leq(z1, length(z0))) if1(z0, z1, true) -> if2(z0, z1, empty(fstsplit(z1, z0))) if1(z0, z1, false) -> if3(z0, z1, empty(fstsplit(z1, app(map_f(self, nil), z0)))) if2(z0, z1, false) -> process(app(map_f(self, nil), sndsplit(z1, z0)), z1) if3(z0, z1, false) -> process(sndsplit(z1, app(map_f(self, nil), z0)), z1) Types: FSTSPLIT :: 0':s -> nil:cons:f -> c:c1:c2 0' :: 0':s c :: c:c1:c2 s :: 0':s -> 0':s nil :: nil:cons:f c1 :: c:c1:c2 cons :: a -> nil:cons:f -> nil:cons:f c2 :: c:c1:c2 -> c:c1:c2 SNDSPLIT :: 0':s -> nil:cons:f -> c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 EMPTY :: nil:cons:f -> c6:c7 c6 :: c6:c7 c7 :: c6:c7 LEQ :: 0':s -> 0':s -> c8:c9:c10 c8 :: c8:c9:c10 c9 :: c8:c9:c10 c10 :: c8:c9:c10 -> c8:c9:c10 LENGTH :: nil:cons:f -> c11:c12 c11 :: c11:c12 c12 :: c11:c12 -> c11:c12 APP :: nil:cons:f -> nil:cons:f -> c13:c14 c13 :: c13:c14 c14 :: c13:c14 -> c13:c14 MAP_F :: self -> nil:cons:f -> c15:c16 c15 :: c15:c16 c16 :: c13:c14 -> c15:c16 -> c15:c16 f :: self -> a -> nil:cons:f map_f :: self -> nil:cons:f -> nil:cons:f PROCESS :: nil:cons:f -> 0':s -> c17 c17 :: c18:c19 -> c8:c9:c10 -> c11:c12 -> c17 IF1 :: nil:cons:f -> 0':s -> true:false -> c18:c19 leq :: 0':s -> 0':s -> true:false length :: nil:cons:f -> 0':s true :: true:false c18 :: c20:c21 -> c6:c7 -> c:c1:c2 -> c18:c19 IF2 :: nil:cons:f -> 0':s -> true:false -> c20:c21 empty :: nil:cons:f -> true:false fstsplit :: 0':s -> nil:cons:f -> nil:cons:f false :: true:false c19 :: c22 -> c6:c7 -> c:c1:c2 -> c13:c14 -> c15:c16 -> c18:c19 IF3 :: nil:cons:f -> 0':s -> true:false -> c22 app :: nil:cons:f -> nil:cons:f -> nil:cons:f self :: self c20 :: c17 -> c13:c14 -> c15:c16 -> c20:c21 sndsplit :: 0':s -> nil:cons:f -> nil:cons:f c21 :: c17 -> c13:c14 -> c3:c4:c5 -> c20:c21 c22 :: c17 -> c3:c4:c5 -> c13:c14 -> c15:c16 -> c22 process :: nil:cons:f -> 0':s -> process:if1:if2:if3 if1 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if2 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 if3 :: nil:cons:f -> 0':s -> true:false -> process:if1:if2:if3 hole_c:c1:c21_23 :: c:c1:c2 hole_0':s2_23 :: 0':s hole_nil:cons:f3_23 :: nil:cons:f hole_a4_23 :: a hole_c3:c4:c55_23 :: c3:c4:c5 hole_c6:c76_23 :: c6:c7 hole_c8:c9:c107_23 :: c8:c9:c10 hole_c11:c128_23 :: c11:c12 hole_c13:c149_23 :: c13:c14 hole_c15:c1610_23 :: c15:c16 hole_self11_23 :: self hole_c1712_23 :: c17 hole_c18:c1913_23 :: c18:c19 hole_true:false14_23 :: true:false hole_c20:c2115_23 :: c20:c21 hole_c2216_23 :: c22 hole_process:if1:if2:if317_23 :: process:if1:if2:if3 gen_c:c1:c218_23 :: Nat -> c:c1:c2 gen_0':s19_23 :: Nat -> 0':s gen_nil:cons:f20_23 :: Nat -> nil:cons:f gen_c3:c4:c521_23 :: Nat -> c3:c4:c5 gen_c8:c9:c1022_23 :: Nat -> c8:c9:c10 gen_c11:c1223_23 :: Nat -> c11:c12 gen_c13:c1424_23 :: Nat -> c13:c14 gen_c15:c1625_23 :: Nat -> c15:c16 Lemmas: FSTSPLIT(gen_0':s19_23(n27_23), gen_nil:cons:f20_23(n27_23)) -> gen_c:c1:c218_23(n27_23), rt in Omega(1 + n27_23) SNDSPLIT(gen_0':s19_23(n869_23), gen_nil:cons:f20_23(n869_23)) -> gen_c3:c4:c521_23(n869_23), rt in Omega(1 + n869_23) LEQ(gen_0':s19_23(n1820_23), gen_0':s19_23(n1820_23)) -> gen_c8:c9:c1022_23(n1820_23), rt in Omega(1 + n1820_23) LENGTH(gen_nil:cons:f20_23(n2743_23)) -> gen_c11:c1223_23(n2743_23), rt in Omega(1 + n2743_23) APP(gen_nil:cons:f20_23(n3357_23), gen_nil:cons:f20_23(b)) -> gen_c13:c1424_23(n3357_23), rt in Omega(1 + n3357_23) leq(gen_0':s19_23(n4577_23), gen_0':s19_23(n4577_23)) -> true, rt in Omega(0) length(gen_nil:cons:f20_23(n5104_23)) -> gen_0':s19_23(n5104_23), rt in Omega(0) fstsplit(gen_0':s19_23(n5594_23), gen_nil:cons:f20_23(n5594_23)) -> gen_nil:cons:f20_23(n5594_23), rt in Omega(0) app(gen_nil:cons:f20_23(n6549_23), gen_nil:cons:f20_23(b)) -> gen_nil:cons:f20_23(+(n6549_23, b)), rt in Omega(0) map_f(self, gen_nil:cons:f20_23(+(1, n8842_23))) -> *26_23, rt in Omega(0) sndsplit(gen_0':s19_23(n64485_23), gen_nil:cons:f20_23(n64485_23)) -> gen_nil:cons:f20_23(0), rt in Omega(0) Generator Equations: gen_c:c1:c218_23(0) <=> c gen_c:c1:c218_23(+(x, 1)) <=> c2(gen_c:c1:c218_23(x)) gen_0':s19_23(0) <=> 0' gen_0':s19_23(+(x, 1)) <=> s(gen_0':s19_23(x)) gen_nil:cons:f20_23(0) <=> nil gen_nil:cons:f20_23(+(x, 1)) <=> cons(hole_a4_23, gen_nil:cons:f20_23(x)) gen_c3:c4:c521_23(0) <=> c3 gen_c3:c4:c521_23(+(x, 1)) <=> c5(gen_c3:c4:c521_23(x)) gen_c8:c9:c1022_23(0) <=> c8 gen_c8:c9:c1022_23(+(x, 1)) <=> c10(gen_c8:c9:c1022_23(x)) gen_c11:c1223_23(0) <=> c11 gen_c11:c1223_23(+(x, 1)) <=> c12(gen_c11:c1223_23(x)) gen_c13:c1424_23(0) <=> c13 gen_c13:c1424_23(+(x, 1)) <=> c14(gen_c13:c1424_23(x)) gen_c15:c1625_23(0) <=> c15 gen_c15:c1625_23(+(x, 1)) <=> c16(c13, gen_c15:c1625_23(x)) The following defined symbols remain to be analysed: PROCESS, process