Skip to content

Commit 4fd14a6

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

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

Cslib/Algorithms/Lean/MergeSort/MergeSort.lean

Lines changed: 10 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,15 @@ 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+
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+
113123
end Correctness
114124

115125
section TimeComplexity

0 commit comments

Comments
 (0)