Skip to content

Commit 2e8a7b5

Browse files
committed
feat(Algorithms/Lean/MergeSort): relate mergeSort to List.mergeSort
1 parent d780a2a commit 2e8a7b5

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

Cslib/Algorithms/Lean/MergeSort/MergeSort.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Authors: Sorrachai Yingchareonthawornhcai
77
module
88

99
public import Cslib.Algorithms.Lean.TimeM
10+
public import Mathlib.Data.List.Sort
1011
public import Mathlib.Data.Nat.Cast.Order.Ring
1112
public import Mathlib.Data.Nat.Lattice
1213
public import Mathlib.Data.Nat.Log
@@ -110,6 +111,16 @@ theorem mergeSort_perm (xs : List α) : ⟪mergeSort xs⟫ ~ xs := by
110111
theorem 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+
113124
end Correctness
114125

115126
section TimeComplexity

0 commit comments

Comments
 (0)