diff options
| author | Andreas Grois <andi@grois.info> | 2024-08-20 23:50:11 +0200 |
|---|---|---|
| committer | Andreas Grois <andi@grois.info> | 2024-08-20 23:50:11 +0200 |
| commit | 7df84f9a3e399587c65a149bf4247154d9b07cc7 (patch) | |
| tree | 035388c2093a1541c2da4e94eccbbd80e7098f0f | |
| parent | 7d5df252a6e885f8b1ffab49196e0a4cc4b0131a (diff) | |
heapRemoveAtReturnsElementAt
| -rw-r--r-- | BinaryHeap/CompleteTree/AdditionalProofs.lean | 1 | ||||
| -rw-r--r-- | BinaryHeap/CompleteTree/AdditionalProofs/HeapRemoveAt.lean | 29 |
2 files changed, 30 insertions, 0 deletions
diff --git a/BinaryHeap/CompleteTree/AdditionalProofs.lean b/BinaryHeap/CompleteTree/AdditionalProofs.lean index 3659fa4..4ab43f0 100644 --- a/BinaryHeap/CompleteTree/AdditionalProofs.lean +++ b/BinaryHeap/CompleteTree/AdditionalProofs.lean @@ -3,3 +3,4 @@ import BinaryHeap.CompleteTree.AdditionalProofs.HeapRemoveLast import BinaryHeap.CompleteTree.AdditionalProofs.HeapUpdateRoot import BinaryHeap.CompleteTree.AdditionalProofs.HeapPop import BinaryHeap.CompleteTree.AdditionalProofs.HeapUpdateAt +import BinaryHeap.CompleteTree.AdditionalProofs.HeapRemoveAt diff --git a/BinaryHeap/CompleteTree/AdditionalProofs/HeapRemoveAt.lean b/BinaryHeap/CompleteTree/AdditionalProofs/HeapRemoveAt.lean new file mode 100644 index 0000000..ca4299f --- /dev/null +++ b/BinaryHeap/CompleteTree/AdditionalProofs/HeapRemoveAt.lean @@ -0,0 +1,29 @@ +import BinaryHeap.CompleteTree.AdditionalProofs.HeapUpdateAt +import BinaryHeap.CompleteTree.AdditionalProofs.Get +import BinaryHeap.CompleteTree.AdditionalProofs.HeapPop +import BinaryHeap.CompleteTree.AdditionalProofs.HeapRemoveLast + +namespace BinaryHeap.CompleteTree.AdditionalProofs + +theorem heapRemoveAtReturnsElementAt {α : Type u} {n : Nat} (le : α → α → Bool) (heap : CompleteTree α (n+1)) (index : Fin (n+1)) : (heap.heapRemoveAt le index).snd = heap.get' index := by + unfold heapRemoveAt + if h₁ : index = 0 then + simp only [h₁, ↓reduceDIte] + rw[get_eq_get', ←Fin.zero_eta, ←get_zero_eq_root] + exact heapPopReturnsRoot heap le + else + simp only [h₁, ↓reduceDIte, ge_iff_le] + if h₂ : index = (Internal.heapRemoveLastWithIndex heap).2.snd then + simp only [h₂, ↓reduceDIte] + exact Eq.symm $ CompleteTree.AdditionalProofs.heapRemoveLastWithIndexReturnsItemAtIndex heap + else + if h₃ : (Internal.heapRemoveLastWithIndex heap).2.snd ≤ index then + simp only[h₂, h₃, ↓reduceDIte] + have h₄ := CompleteTree.AdditionalProofs.heapRemoveLastWithIndexRelationGt heap index $ Nat.lt_of_le_of_ne h₃ (Fin.val_ne_iff.mpr (Ne.symm h₂)) + rewrite[get_eq_get', ←h₄] + exact Eq.symm $ heapUpdateAtReturnsElementAt le _ _ _ _ + else + simp only[h₂, h₃, ↓reduceDIte] + have h₄ := CompleteTree.AdditionalProofs.heapRemoveLastWithIndexRelationLt heap index (Nat.gt_of_not_le h₃) + rewrite[get_eq_get', ←h₄] + exact Eq.symm $ heapUpdateAtReturnsElementAt le _ _ _ _ |
