File tree Expand file tree Collapse file tree
Cslib/Algorithms/Lean/MergeSort Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ Authors: Sorrachai Yingchareonthawornhcai
77module
88
99public import Cslib.Algorithms.Lean.TimeM
10+ public import Mathlib.Data.List.Sort
1011public import Mathlib.Data.Nat.Cast.Order.Ring
1112public import Mathlib.Data.Nat.Lattice
1213public import Mathlib.Data.Nat.Log
@@ -110,6 +111,15 @@ theorem mergeSort_perm (xs : List α) : ⟪mergeSort xs⟫ ~ xs := by
110111theorem mergeSort_correct (xs : List α) : IsSorted ⟪mergeSort xs⟫ ∧ ⟪mergeSort xs⟫ ~ xs :=
111112 ⟨mergeSort_sorted xs, mergeSort_perm xs⟩
112113
114+ /-- the timed merge sort computes the same sorted list as list merge sort -/
115+ theorem mergeSort_eq_list_mergeSort (xs : List α) :
116+ ⟪mergeSort xs⟫ = xs.mergeSort (· ≤ ·) := by
117+ have hsorted₁ : (⟪mergeSort xs⟫).SortedLE := by
118+ simpa [List.sortedLE_iff_pairwise] using mergeSort_sorted xs
119+ have hsorted₂ : (xs.mergeSort (· ≤ ·)).SortedLE := List.sortedLE_mergeSort
120+ exact List.Perm.eq_of_sortedLE hsorted₁ hsorted₂
121+ ((mergeSort_perm xs).trans (List.mergeSort_perm xs (· ≤ ·)).symm)
122+
113123end Correctness
114124
115125section TimeComplexity
You can’t perform that action at this time.
0 commit comments