WORST_CASE(Omega(n^1),O(n^1)) proof of input_spPKOFdbQ0.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^1). (0) CpxTRS (1) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (2) CdtProblem (3) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CdtProblem (5) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 96 ms] (8) CdtProblem (9) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 21 ms] (10) CdtProblem (11) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 19 ms] (12) CdtProblem (13) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (14) BOUNDS(1, 1) (15) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CdtProblem (17) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CpxRelTRS (19) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CpxRelTRS (21) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (22) typed CpxTrs (23) OrderProof [LOWER BOUND(ID), 16 ms] (24) typed CpxTrs (25) RewriteLemmaProof [LOWER BOUND(ID), 342 ms] (26) BEST (27) proven lower bound (28) LowerBoundPropagationProof [FINISHED, 0 ms] (29) BOUNDS(n^1, INF) (30) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^1). The TRS R consists of the following rules: msort(nil) -> nil msort(.(x, y)) -> .(min(x, y), msort(del(min(x, y), .(x, y)))) min(x, nil) -> x min(x, .(y, z)) -> if(<=(x, y), min(x, z), min(y, z)) del(x, nil) -> nil del(x, .(y, z)) -> if(=(x, y), z, .(y, del(x, z))) 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: msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) Tuples: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) K tuples:none Defined Rule Symbols: msort_1, min_2, del_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c, c1_1, c2_3, c3, c4_1, c5_1, c6, c7_1 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing nodes: MIN(z0, nil) -> c3 MSORT(nil) -> c DEL(z0, nil) -> c6 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) K tuples:none Defined Rule Symbols: msort_1, min_2, del_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c1_1, c2_3, c4_1, c5_1, c7_1 ---------------------------------------- (5) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) del(z0, nil) -> nil min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) K tuples:none Defined Rule Symbols: del_2, min_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c1_1, c2_3, c4_1, c5_1, c7_1 ---------------------------------------- (7) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) We considered the (Usable) Rules:none And the Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(.(x_1, x_2)) = [1] + x_1 + x_2 POL(<=(x_1, x_2)) = [1] + x_1 POL(=(x_1, x_2)) = 0 POL(DEL(x_1, x_2)) = 0 POL(MIN(x_1, x_2)) = 0 POL(MSORT(x_1)) = [1] POL(c1(x_1)) = x_1 POL(c2(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(del(x_1, x_2)) = [1] + x_1 + x_2 POL(if(x_1, x_2, x_3)) = x_1 + x_3 POL(min(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = [1] ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) del(z0, nil) -> nil min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples: MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) K tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) Defined Rule Symbols: del_2, min_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c1_1, c2_3, c4_1, c5_1, c7_1 ---------------------------------------- (9) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) We considered the (Usable) Rules: del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) And the Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(.(x_1, x_2)) = [1] + x_1 + x_2 POL(<=(x_1, x_2)) = [1] + x_1 + x_2 POL(=(x_1, x_2)) = 0 POL(DEL(x_1, x_2)) = 0 POL(MIN(x_1, x_2)) = x_1 + x_2 POL(MSORT(x_1)) = [1] + x_1 POL(c1(x_1)) = x_1 POL(c2(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(del(x_1, x_2)) = 0 POL(if(x_1, x_2, x_3)) = x_1 POL(min(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = 0 ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) del(z0, nil) -> nil min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples: DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) K tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) Defined Rule Symbols: del_2, min_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c1_1, c2_3, c4_1, c5_1, c7_1 ---------------------------------------- (11) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) We considered the (Usable) Rules: del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) And the Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(.(x_1, x_2)) = [1] + x_1 + x_2 POL(<=(x_1, x_2)) = [1] + x_1 + x_2 POL(=(x_1, x_2)) = 0 POL(DEL(x_1, x_2)) = x_2 POL(MIN(x_1, x_2)) = 0 POL(MSORT(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c2(x_1, x_2, x_3)) = x_1 + x_2 + x_3 POL(c4(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(del(x_1, x_2)) = 0 POL(if(x_1, x_2, x_3)) = x_1 POL(min(x_1, x_2)) = [1] + x_1 + x_2 POL(nil) = 0 ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) del(z0, nil) -> nil min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) Tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples:none K tuples: MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) Defined Rule Symbols: del_2, min_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c1_1, c2_3, c4_1, c5_1, c7_1 ---------------------------------------- (13) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (14) BOUNDS(1, 1) ---------------------------------------- (15) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (16) Obligation: Complexity Dependency Tuples Problem Rules: msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) Tuples: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) S tuples: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) K tuples:none Defined Rule Symbols: msort_1, min_2, del_2 Defined Pair Symbols: MSORT_1, MIN_2, DEL_2 Compound Symbols: c, c1_1, c2_3, c3, c4_1, c5_1, c6, c7_1 ---------------------------------------- (17) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (18) 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: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) The (relative) TRS S consists of the following rules: msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(=(z0, z1), z2, .(z1, del(z0, z2))) Rewrite Strategy: INNERMOST ---------------------------------------- (19) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (20) 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: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) The (relative) TRS S consists of the following rules: msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(='(z0, z1), z2, .(z1, del(z0, z2))) Rewrite Strategy: INNERMOST ---------------------------------------- (21) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (22) Obligation: Innermost TRS: Rules: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(='(z0, z1), z2, .(z1, del(z0, z2))) Types: MSORT :: nil:.:if -> c:c1:c2 nil :: nil:.:if c :: c:c1:c2 . :: nil:.:if -> nil:.:if -> nil:.:if c1 :: c3:c4:c5 -> c:c1:c2 MIN :: nil:.:if -> nil:.:if -> c3:c4:c5 c2 :: c:c1:c2 -> c6:c7 -> c3:c4:c5 -> c:c1:c2 del :: nil:.:if -> nil:.:if -> nil:.:if min :: nil:.:if -> nil:.:if -> nil:.:if DEL :: nil:.:if -> nil:.:if -> c6:c7 c3 :: c3:c4:c5 c4 :: c3:c4:c5 -> c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 c6 :: c6:c7 c7 :: c6:c7 -> c6:c7 msort :: nil:.:if -> nil:.:if if :: <=:=' -> nil:.:if -> nil:.:if -> nil:.:if <= :: nil:.:if -> nil:.:if -> <=:=' =' :: nil:.:if -> nil:.:if -> <=:=' hole_c:c1:c21_8 :: c:c1:c2 hole_nil:.:if2_8 :: nil:.:if hole_c3:c4:c53_8 :: c3:c4:c5 hole_c6:c74_8 :: c6:c7 hole_<=:='5_8 :: <=:=' gen_c:c1:c26_8 :: Nat -> c:c1:c2 gen_nil:.:if7_8 :: Nat -> nil:.:if gen_c3:c4:c58_8 :: Nat -> c3:c4:c5 gen_c6:c79_8 :: Nat -> c6:c7 ---------------------------------------- (23) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: MSORT, MIN, del, min, DEL, msort They will be analysed ascendingly in the following order: MIN < MSORT del < MSORT min < MSORT DEL < MSORT del < msort min < msort ---------------------------------------- (24) Obligation: Innermost TRS: Rules: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(='(z0, z1), z2, .(z1, del(z0, z2))) Types: MSORT :: nil:.:if -> c:c1:c2 nil :: nil:.:if c :: c:c1:c2 . :: nil:.:if -> nil:.:if -> nil:.:if c1 :: c3:c4:c5 -> c:c1:c2 MIN :: nil:.:if -> nil:.:if -> c3:c4:c5 c2 :: c:c1:c2 -> c6:c7 -> c3:c4:c5 -> c:c1:c2 del :: nil:.:if -> nil:.:if -> nil:.:if min :: nil:.:if -> nil:.:if -> nil:.:if DEL :: nil:.:if -> nil:.:if -> c6:c7 c3 :: c3:c4:c5 c4 :: c3:c4:c5 -> c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 c6 :: c6:c7 c7 :: c6:c7 -> c6:c7 msort :: nil:.:if -> nil:.:if if :: <=:=' -> nil:.:if -> nil:.:if -> nil:.:if <= :: nil:.:if -> nil:.:if -> <=:=' =' :: nil:.:if -> nil:.:if -> <=:=' hole_c:c1:c21_8 :: c:c1:c2 hole_nil:.:if2_8 :: nil:.:if hole_c3:c4:c53_8 :: c3:c4:c5 hole_c6:c74_8 :: c6:c7 hole_<=:='5_8 :: <=:=' gen_c:c1:c26_8 :: Nat -> c:c1:c2 gen_nil:.:if7_8 :: Nat -> nil:.:if gen_c3:c4:c58_8 :: Nat -> c3:c4:c5 gen_c6:c79_8 :: Nat -> c6:c7 Generator Equations: gen_c:c1:c26_8(0) <=> c gen_c:c1:c26_8(+(x, 1)) <=> c2(gen_c:c1:c26_8(x), c6, c3) gen_nil:.:if7_8(0) <=> nil gen_nil:.:if7_8(+(x, 1)) <=> .(nil, gen_nil:.:if7_8(x)) gen_c3:c4:c58_8(0) <=> c3 gen_c3:c4:c58_8(+(x, 1)) <=> c4(gen_c3:c4:c58_8(x)) gen_c6:c79_8(0) <=> c6 gen_c6:c79_8(+(x, 1)) <=> c7(gen_c6:c79_8(x)) The following defined symbols remain to be analysed: MIN, MSORT, del, min, DEL, msort They will be analysed ascendingly in the following order: MIN < MSORT del < MSORT min < MSORT DEL < MSORT del < msort min < msort ---------------------------------------- (25) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MIN(gen_nil:.:if7_8(a), gen_nil:.:if7_8(n11_8)) -> gen_c3:c4:c58_8(n11_8), rt in Omega(1 + n11_8) Induction Base: MIN(gen_nil:.:if7_8(a), gen_nil:.:if7_8(0)) ->_R^Omega(1) c3 Induction Step: MIN(gen_nil:.:if7_8(a), gen_nil:.:if7_8(+(n11_8, 1))) ->_R^Omega(1) c4(MIN(gen_nil:.:if7_8(a), gen_nil:.:if7_8(n11_8))) ->_IH c4(gen_c3:c4:c58_8(c12_8)) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (26) Complex Obligation (BEST) ---------------------------------------- (27) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(='(z0, z1), z2, .(z1, del(z0, z2))) Types: MSORT :: nil:.:if -> c:c1:c2 nil :: nil:.:if c :: c:c1:c2 . :: nil:.:if -> nil:.:if -> nil:.:if c1 :: c3:c4:c5 -> c:c1:c2 MIN :: nil:.:if -> nil:.:if -> c3:c4:c5 c2 :: c:c1:c2 -> c6:c7 -> c3:c4:c5 -> c:c1:c2 del :: nil:.:if -> nil:.:if -> nil:.:if min :: nil:.:if -> nil:.:if -> nil:.:if DEL :: nil:.:if -> nil:.:if -> c6:c7 c3 :: c3:c4:c5 c4 :: c3:c4:c5 -> c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 c6 :: c6:c7 c7 :: c6:c7 -> c6:c7 msort :: nil:.:if -> nil:.:if if :: <=:=' -> nil:.:if -> nil:.:if -> nil:.:if <= :: nil:.:if -> nil:.:if -> <=:=' =' :: nil:.:if -> nil:.:if -> <=:=' hole_c:c1:c21_8 :: c:c1:c2 hole_nil:.:if2_8 :: nil:.:if hole_c3:c4:c53_8 :: c3:c4:c5 hole_c6:c74_8 :: c6:c7 hole_<=:='5_8 :: <=:=' gen_c:c1:c26_8 :: Nat -> c:c1:c2 gen_nil:.:if7_8 :: Nat -> nil:.:if gen_c3:c4:c58_8 :: Nat -> c3:c4:c5 gen_c6:c79_8 :: Nat -> c6:c7 Generator Equations: gen_c:c1:c26_8(0) <=> c gen_c:c1:c26_8(+(x, 1)) <=> c2(gen_c:c1:c26_8(x), c6, c3) gen_nil:.:if7_8(0) <=> nil gen_nil:.:if7_8(+(x, 1)) <=> .(nil, gen_nil:.:if7_8(x)) gen_c3:c4:c58_8(0) <=> c3 gen_c3:c4:c58_8(+(x, 1)) <=> c4(gen_c3:c4:c58_8(x)) gen_c6:c79_8(0) <=> c6 gen_c6:c79_8(+(x, 1)) <=> c7(gen_c6:c79_8(x)) The following defined symbols remain to be analysed: MIN, MSORT, del, min, DEL, msort They will be analysed ascendingly in the following order: MIN < MSORT del < MSORT min < MSORT DEL < MSORT del < msort min < msort ---------------------------------------- (28) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (29) BOUNDS(n^1, INF) ---------------------------------------- (30) Obligation: Innermost TRS: Rules: MSORT(nil) -> c MSORT(.(z0, z1)) -> c1(MIN(z0, z1)) MSORT(.(z0, z1)) -> c2(MSORT(del(min(z0, z1), .(z0, z1))), DEL(min(z0, z1), .(z0, z1)), MIN(z0, z1)) MIN(z0, nil) -> c3 MIN(z0, .(z1, z2)) -> c4(MIN(z0, z2)) MIN(z0, .(z1, z2)) -> c5(MIN(z1, z2)) DEL(z0, nil) -> c6 DEL(z0, .(z1, z2)) -> c7(DEL(z0, z2)) msort(nil) -> nil msort(.(z0, z1)) -> .(min(z0, z1), msort(del(min(z0, z1), .(z0, z1)))) min(z0, nil) -> z0 min(z0, .(z1, z2)) -> if(<=(z0, z1), min(z0, z2), min(z1, z2)) del(z0, nil) -> nil del(z0, .(z1, z2)) -> if(='(z0, z1), z2, .(z1, del(z0, z2))) Types: MSORT :: nil:.:if -> c:c1:c2 nil :: nil:.:if c :: c:c1:c2 . :: nil:.:if -> nil:.:if -> nil:.:if c1 :: c3:c4:c5 -> c:c1:c2 MIN :: nil:.:if -> nil:.:if -> c3:c4:c5 c2 :: c:c1:c2 -> c6:c7 -> c3:c4:c5 -> c:c1:c2 del :: nil:.:if -> nil:.:if -> nil:.:if min :: nil:.:if -> nil:.:if -> nil:.:if DEL :: nil:.:if -> nil:.:if -> c6:c7 c3 :: c3:c4:c5 c4 :: c3:c4:c5 -> c3:c4:c5 c5 :: c3:c4:c5 -> c3:c4:c5 c6 :: c6:c7 c7 :: c6:c7 -> c6:c7 msort :: nil:.:if -> nil:.:if if :: <=:=' -> nil:.:if -> nil:.:if -> nil:.:if <= :: nil:.:if -> nil:.:if -> <=:=' =' :: nil:.:if -> nil:.:if -> <=:=' hole_c:c1:c21_8 :: c:c1:c2 hole_nil:.:if2_8 :: nil:.:if hole_c3:c4:c53_8 :: c3:c4:c5 hole_c6:c74_8 :: c6:c7 hole_<=:='5_8 :: <=:=' gen_c:c1:c26_8 :: Nat -> c:c1:c2 gen_nil:.:if7_8 :: Nat -> nil:.:if gen_c3:c4:c58_8 :: Nat -> c3:c4:c5 gen_c6:c79_8 :: Nat -> c6:c7 Lemmas: MIN(gen_nil:.:if7_8(a), gen_nil:.:if7_8(n11_8)) -> gen_c3:c4:c58_8(n11_8), rt in Omega(1 + n11_8) Generator Equations: gen_c:c1:c26_8(0) <=> c gen_c:c1:c26_8(+(x, 1)) <=> c2(gen_c:c1:c26_8(x), c6, c3) gen_nil:.:if7_8(0) <=> nil gen_nil:.:if7_8(+(x, 1)) <=> .(nil, gen_nil:.:if7_8(x)) gen_c3:c4:c58_8(0) <=> c3 gen_c3:c4:c58_8(+(x, 1)) <=> c4(gen_c3:c4:c58_8(x)) gen_c6:c79_8(0) <=> c6 gen_c6:c79_8(+(x, 1)) <=> c7(gen_c6:c79_8(x)) The following defined symbols remain to be analysed: del, MSORT, min, DEL, msort They will be analysed ascendingly in the following order: del < MSORT min < MSORT DEL < MSORT del < msort min < msort