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,16 @@ 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+ @ [simp, grind =]
116+ theorem ret_mergeSort (xs : List α) :
117+ ⟪mergeSort xs⟫ = xs.mergeSort (· ≤ ·) := by
118+ have hsorted₁ : (⟪mergeSort xs⟫).SortedLE := by
119+ simpa [List.sortedLE_iff_pairwise] using mergeSort_sorted xs
120+ have hsorted₂ : (xs.mergeSort (· ≤ ·)).SortedLE := List.sortedLE_mergeSort
121+ exact List.Perm.eq_of_sortedLE hsorted₁ hsorted₂
122+ ((mergeSort_perm xs).trans (List.mergeSort_perm xs (· ≤ ·)).symm)
123+
113124end Correctness
114125
115126section TimeComplexity
You can’t perform that action at this time.
0 commit comments