diff --git a/src/Std/Data/HashMap/Lemmas.lean b/src/Std/Data/HashMap/Lemmas.lean index 79d92e9899..8a88c85898 100644 --- a/src/Std/Data/HashMap/Lemmas.lean +++ b/src/Std/Data/HashMap/Lemmas.lean @@ -1432,34 +1432,34 @@ variable {m : HashMap α β} theorem isEmpty_alter_eq_isEmpty_erase [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} : - (alter m k f).isEmpty = ((m.erase k).isEmpty && (f (get? m k)).isNone) := + (alter m k f).isEmpty = ((m.erase k).isEmpty && (f m[k]?).isNone) := DHashMap.Const.isEmpty_alter_eq_isEmpty_erase @[simp] theorem isEmpty_alter [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} : - (alter m k f).isEmpty = ((m.isEmpty || (m.size == 1 && m.contains k)) && (f (get? m k)).isNone) := + (alter m k f).isEmpty = ((m.isEmpty || (m.size == 1 && m.contains k)) && (f m[k]?).isNone) := DHashMap.Const.isEmpty_alter theorem contains_alter [EquivBEq α] [LawfulHashable α] {k k': α} {f : Option β → Option β} : - (alter m k f).contains k' = if k == k' then (f (get? m k)).isSome else m.contains k' := + (alter m k f).contains k' = if k == k' then (f m[k]?).isSome else m.contains k' := DHashMap.Const.contains_alter theorem mem_alter [EquivBEq α] [LawfulHashable α] {k k': α} {f : Option β → Option β} : - k' ∈ alter m k f ↔ if k == k' then (f (get? m k)).isSome = true else k' ∈ m := + k' ∈ alter m k f ↔ if k == k' then (f m[k]?).isSome = true else k' ∈ m := DHashMap.Const.mem_alter theorem mem_alter_of_beq [EquivBEq α] [LawfulHashable α] {k k': α} {f : Option β → Option β} - (h : k == k') : k' ∈ alter m k f ↔ (f (get? m k)).isSome := + (h : k == k') : k' ∈ alter m k f ↔ (f m[k]?).isSome := DHashMap.Const.mem_alter_of_beq h @[simp] theorem contains_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} : - (alter m k f).contains k = (f (get? m k)).isSome := + (alter m k f).contains k = (f m[k]?).isSome := DHashMap.Const.contains_alter_self @[simp] theorem mem_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} : - k ∈ alter m k f ↔ (f (get? m k)).isSome := + k ∈ alter m k f ↔ (f m[k]?).isSome := DHashMap.Const.mem_alter_self theorem contains_alter_of_beq_eq_false [EquivBEq α] [LawfulHashable α] {k k' : α} @@ -1482,22 +1482,22 @@ theorem size_alter [LawfulBEq α] {k : α} {f : Option β → Option β} : DHashMap.Const.size_alter theorem size_alter_eq_add_one [LawfulBEq α] {k : α} {f : Option β → Option β} - (h : k ∉ m) (h' : (f (get? m k)).isSome) : + (h : k ∉ m) (h' : (f m[k]?).isSome) : (alter m k f).size = m.size + 1 := DHashMap.Const.size_alter_eq_add_one h h' theorem size_alter_eq_sub_one [LawfulBEq α] {k : α} {f : Option β → Option β} - (h : k ∈ m) (h' : (f (get? m k)).isNone) : + (h : k ∈ m) (h' : (f m[k]?).isNone) : (alter m k f).size = m.size - 1 := DHashMap.Const.size_alter_eq_sub_one h h' theorem size_alter_eq_self_of_not_mem [LawfulBEq α] {k : α} {f : Option β → Option β} - (h : k ∉ m) (h' : (f (get? m k)).isNone) : + (h : k ∉ m) (h' : (f m[k]?).isNone) : (alter m k f).size = m.size := DHashMap.Const.size_alter_eq_self_of_not_mem h h' theorem size_alter_eq_self_of_mem [LawfulBEq α] {k : α} {f : Option β → Option β} - (h : k ∈ m) (h' : (f (get? m k)).isSome) : + (h : k ∈ m) (h' : (f m[k]?).isSome) : (alter m k f).size = m.size := DHashMap.Const.size_alter_eq_self_of_mem h h' @@ -1544,7 +1544,7 @@ theorem getElem_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option f m[k]? |>.get h' else haveI h' : k' ∈ m := mem_alter_of_beq_eq_false (Bool.not_eq_true _ ▸ heq) |>.mp h - get m k' h' := + m[k']'h' := DHashMap.Const.get_alter @[deprecated getElem_alter (since := "2025-02-09")] @@ -1562,7 +1562,7 @@ theorem get_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β @[simp] theorem getElem_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} {h : k ∈ alter m k f} : - haveI h' : (f (get? m k)).isSome := mem_alter_self.mp h + haveI h' : (f m[k]?).isSome := mem_alter_self.mp h (alter m k f)[k] = (f m[k]?).get h' := DHashMap.Const.get_alter_self @@ -1604,7 +1604,7 @@ theorem getD_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} {f : Option β → Option β} : getD (alter m k f) k' fallback = if k == k' then - f (get? m k) |>.getD fallback + f m[k]? |>.getD fallback else getD m k' fallback := DHashMap.Const.getD_alter @@ -1612,32 +1612,32 @@ theorem getD_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} @[simp] theorem getD_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} {f : Option β → Option β} : - getD (alter m k f) k fallback = (f (get? m k)).getD fallback := + getD (alter m k f) k fallback = (f m[k]?).getD fallback := DHashMap.Const.getD_alter_self theorem getKey?_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} : (alter m k f).getKey? k' = if k == k' then - if (f (get? m k)).isSome then some k else none + if (f m[k]?).isSome then some k else none else m.getKey? k' := DHashMap.Const.getKey?_alter theorem getKey?_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} : - (alter m k f).getKey? k = if (f (get? m k)).isSome then some k else none := + (alter m k f).getKey? k = if (f m[k]?).isSome then some k else none := DHashMap.Const.getKey?_alter_self theorem getKey!_alter [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} {f : Option β → Option β} : (alter m k f).getKey! k' = if k == k' then - if (f (get? m k)).isSome then k else default + if (f m[k]?).isSome then k else default else m.getKey! k' := DHashMap.Const.getKey!_alter theorem getKey!_alter_self [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} {f : Option β → Option β} : - (alter m k f).getKey! k = if (f (get? m k)).isSome then k else default := + (alter m k f).getKey! k = if (f m[k]?).isSome then k else default := DHashMap.Const.getKey!_alter_self theorem getKey_alter [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} @@ -1660,14 +1660,14 @@ theorem getKeyD_alter [EquivBEq α] [LawfulHashable α] {k k' fallback : α} {f : Option β → Option β} : (alter m k f).getKeyD k' fallback = if k == k' then - if (f (get? m k)).isSome then k else fallback + if (f m[k]?).isSome then k else fallback else m.getKeyD k' fallback := DHashMap.Const.getKeyD_alter theorem getKeyD_alter_self [EquivBEq α] [LawfulHashable α] [Inhabited α] {k fallback : α} {f : Option β → Option β} : - (alter m k f).getKeyD k fallback = if (f (get? m k)).isSome then k else fallback := + (alter m k f).getKeyD k fallback = if (f m[k]?).isSome then k else fallback := DHashMap.Const.getKeyD_alter_self end Alter @@ -1699,7 +1699,7 @@ theorem size_modify [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} : theorem getElem?_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} : (modify m k f)[k']? = if k == k' then - m[k]? |>.map f + m[k]?.map f else m[k']? := DHashMap.Const.get?_modify @@ -1763,7 +1763,7 @@ theorem get_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {f : β → theorem getElem!_modify [EquivBEq α] [LawfulHashable α] {k k' : α} [Inhabited β] {f : β → β} : (modify m k f)[k']! = if k == k' then - m[k]? |>.map f |>.get! + m[k]?.map f |>.get! else m[k']! := DHashMap.Const.get!_modify @@ -1790,14 +1790,14 @@ theorem get!_modify_self [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited theorem getD_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} {f : β → β} : getD (modify m k f) k' fallback = if k == k' then - get? m k |>.map f |>.getD fallback + m[k]?.map f |>.getD fallback else getD m k' fallback := DHashMap.Const.getD_modify @[simp] theorem getD_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} {f : β → β} : - getD (modify m k f) k fallback = ((get? m k).map f).getD fallback := + getD (modify m k f) k fallback = (m[k]?.map f).getD fallback := DHashMap.Const.getD_modify_self theorem getKey?_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} : diff --git a/src/Std/Data/HashMap/RawLemmas.lean b/src/Std/Data/HashMap/RawLemmas.lean index 8f339fc62a..de2db730dd 100644 --- a/src/Std/Data/HashMap/RawLemmas.lean +++ b/src/Std/Data/HashMap/RawLemmas.lean @@ -1457,35 +1457,35 @@ section Alter theorem isEmpty_alter_eq_isEmpty_erase [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} (h : m.WF) : - (alter m k f).isEmpty = ((m.erase k).isEmpty && (f (get? m k)).isNone) := + (alter m k f).isEmpty = ((m.erase k).isEmpty && (f m[k]?).isNone) := DHashMap.Raw.Const.isEmpty_alter_eq_isEmpty_erase h.out @[simp] theorem isEmpty_alter [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} (h : m.WF) : - (alter m k f).isEmpty = ((m.isEmpty || (m.size == 1 && m.contains k)) && (f (get? m k)).isNone) := + (alter m k f).isEmpty = ((m.isEmpty || (m.size == 1 && m.contains k)) && (f m[k]?).isNone) := DHashMap.Raw.Const.isEmpty_alter h.out theorem contains_alter [EquivBEq α] [LawfulHashable α] {k k': α} {f : Option β → Option β} (h : m.WF) : (alter m k f).contains k' = - if k == k' then (f (get? m k)).isSome else m.contains k' := + if k == k' then (f m[k]?).isSome else m.contains k' := DHashMap.Raw.Const.contains_alter h.out theorem mem_alter [EquivBEq α] [LawfulHashable α] {k k': α} {f : Option β → Option β} (h : m.WF) : - k' ∈ alter m k f ↔ if k == k' then (f (get? m k)).isSome = true else k' ∈ m := + k' ∈ alter m k f ↔ if k == k' then (f m[k]?).isSome = true else k' ∈ m := DHashMap.Raw.Const.mem_alter h.out theorem mem_alter_of_beq [EquivBEq α] [LawfulHashable α] {k k': α} {f : Option β → Option β} - (h : m.WF) (he : k == k') : k' ∈ alter m k f ↔ (f (get? m k)).isSome := + (h : m.WF) (he : k == k') : k' ∈ alter m k f ↔ (f m[k]?).isSome := DHashMap.Raw.Const.mem_alter_of_beq h.out he @[simp] theorem contains_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} - (h : m.WF) : (alter m k f).contains k = (f (get? m k)).isSome := + (h : m.WF) : (alter m k f).contains k = (f m[k]?).isSome := DHashMap.Raw.Const.contains_alter_self h.out @[simp] theorem mem_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} - (h : m.WF) : k ∈ alter m k f ↔ (f (get? m k)).isSome := + (h : m.WF) : k ∈ alter m k f ↔ (f m[k]?).isSome := DHashMap.Raw.Const.mem_alter_self h.out theorem contains_alter_of_beq_eq_false [EquivBEq α] [LawfulHashable α] {k k' : α} @@ -1499,30 +1499,30 @@ theorem mem_alter_of_beq_eq_false [EquivBEq α] [LawfulHashable α] {k k' : α} theorem size_alter [LawfulBEq α] {k : α} {f : Option β → Option β} (h : m.WF) : (alter m k f).size = - if k ∈ m ∧ (f (get? m k)).isNone then + if k ∈ m ∧ (f m[k]?).isNone then m.size - 1 - else if k ∉ m ∧ (f (get? m k)).isSome then + else if k ∉ m ∧ (f m[k]?).isSome then m.size + 1 else m.size := DHashMap.Raw.Const.size_alter h.out theorem size_alter_eq_add_one [LawfulBEq α] {k : α} {f : Option β → Option β} (h : m.WF) - (h₁ : k ∉ m) (h₂ : (f (get? m k)).isSome) : + (h₁ : k ∉ m) (h₂ : (f m[k]?).isSome) : (alter m k f).size = m.size + 1 := DHashMap.Raw.Const.size_alter_eq_add_one h.out h₁ h₂ theorem size_alter_eq_sub_one [LawfulBEq α] {k : α} {f : Option β → Option β} (h : m.WF) - (h₁ : k ∈ m) (h₂ : (f (get? m k)).isNone) : + (h₁ : k ∈ m) (h₂ : (f m[k]?).isNone) : (alter m k f).size = m.size - 1 := DHashMap.Raw.Const.size_alter_eq_sub_one h.out h₁ h₂ theorem size_alter_eq_self_of_not_mem [LawfulBEq α] {k : α} {f : Option β → Option β} (h : m.WF) - (h₁ : k ∉ m) (h₂ : (f (get? m k)).isNone) : (alter m k f).size = m.size := + (h₁ : k ∉ m) (h₂ : (f m[k]?).isNone) : (alter m k f).size = m.size := DHashMap.Raw.Const.size_alter_eq_self_of_not_mem h.out h₁ h₂ theorem size_alter_eq_self_of_mem [LawfulBEq α] {k : α} {f : Option β → Option β} (h : m.WF) - (h₁ : k ∈ m) (h₂ : (f (get? m k)).isSome) : (alter m k f).size = m.size := + (h₁ : k ∈ m) (h₂ : (f m[k]?).isSome) : (alter m k f).size = m.size := DHashMap.Raw.Const.size_alter_eq_self_of_mem h.out h₁ h₂ theorem size_alter_le_size [LawfulBEq α] {k : α} {f : Option β → Option β} (h : m.WF) : @@ -1568,7 +1568,7 @@ theorem getElem_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option f m[k]? |>.get h' else haveI h' : k' ∈ m := mem_alter_of_beq_eq_false h (Bool.not_eq_true _ ▸ heq) |>.mp hc - get m k' h' := + m[k']'h' := DHashMap.Raw.Const.get_alter h.out (hc := hc) @[deprecated getElem_alter (since := "2025-02-09")] @@ -1627,7 +1627,7 @@ theorem get!_alter_self [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited β theorem getD_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} {f : Option β → Option β} (h : m.WF) : getD (alter m k f) k' fallback = if k == k' then - f (get? m k) |>.getD fallback + f m[k]? |>.getD fallback else getD m k' fallback := DHashMap.Raw.Const.getD_alter h.out @@ -1635,32 +1635,32 @@ theorem getD_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} @[simp] theorem getD_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} {f : Option β → Option β} (h : m.WF) : - getD (alter m k f) k fallback = (f (get? m k)).getD fallback := + getD (alter m k f) k fallback = (f m[k]?).getD fallback := DHashMap.Raw.Const.getD_alter_self h.out theorem getKey?_alter [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} (h : m.WF) : (alter m k f).getKey? k' = if k == k' then - if (f (get? m k)).isSome then some k else none + if (f m[k]?).isSome then some k else none else m.getKey? k' := DHashMap.Raw.Const.getKey?_alter h.out theorem getKey?_alter_self [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} - (h : m.WF) : (alter m k f).getKey? k = if (f (get? m k)).isSome then some k else none := + (h : m.WF) : (alter m k f).getKey? k = if (f m[k]?).isSome then some k else none := DHashMap.Raw.Const.getKey?_alter_self h.out theorem getKey!_alter [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} {f : Option β → Option β} (h : m.WF) : (alter m k f).getKey! k' = if k == k' then - if (f (get? m k)).isSome then k else default + if (f m[k]?).isSome then k else default else m.getKey! k' := DHashMap.Raw.Const.getKey!_alter h.out theorem getKey!_alter_self [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} {f : Option β → Option β} (h : m.WF) : - (alter m k f).getKey! k = if (f (get? m k)).isSome then k else default := + (alter m k f).getKey! k = if (f m[k]?).isSome then k else default := DHashMap.Raw.Const.getKey!_alter_self h.out theorem getKey_alter [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} @@ -1682,14 +1682,14 @@ theorem getKey_alter_self [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : theorem getKeyD_alter [EquivBEq α] [LawfulHashable α] {k k' fallback : α} {f : Option β → Option β} (h : m.WF) : (alter m k f).getKeyD k' fallback = if k == k' then - if (f (get? m k)).isSome then k else fallback + if (f m[k]?).isSome then k else fallback else m.getKeyD k' fallback := DHashMap.Raw.Const.getKeyD_alter h.out theorem getKeyD_alter_self [EquivBEq α] [LawfulHashable α] [Inhabited α] {k fallback : α} {f : Option β → Option β} (h : m.WF) : - (alter m k f).getKeyD k fallback = if (f (get? m k)).isSome then k else fallback := + (alter m k f).getKeyD k fallback = if (f m[k]?).isSome then k else fallback := DHashMap.Raw.Const.getKeyD_alter_self h.out end Alter @@ -1716,6 +1716,15 @@ theorem size_modify [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} ( (modify m k f).size = m.size := DHashMap.Raw.Const.size_modify h.out +theorem getElem?_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} (h : m.WF) : + (modify m k f)[k']? = + if k == k' then + m[k]?.map f + else + m[k']? := + DHashMap.Raw.Const.get?_modify h.out + +@[deprecated getElem?_modify (since := "2025-03-07")] theorem get?_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} (h : m.WF) : get? (modify m k f) k' = if k == k' then @@ -1725,10 +1734,27 @@ theorem get?_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β DHashMap.Raw.Const.get?_modify h.out @[simp] +theorem getElem?_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} (h : m.WF) : + (modify m k f)[k]? = m[k]?.map f := + DHashMap.Raw.Const.get?_modify_self h.out + +@[deprecated getElem?_modify_self (since := "2025-03-07")] theorem get?_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} (h : m.WF) : get? (modify m k f) k = (get? m k).map f := DHashMap.Raw.Const.get?_modify_self h.out +theorem getElem_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} + (h : m.WF) {hc : k' ∈ modify m k f} : + (modify m k f)[k']'hc = + if heq : k == k' then + haveI h' : k ∈ m := mem_congr h heq |>.mpr <| mem_modify h |>.mp hc + f (m[k]'h') + else + haveI h' : k' ∈ m := mem_modify h |>.mp hc + m[k']'h' := by + simpa only [← get_eq_getElem] using DHashMap.Raw.Const.get_modify h.out + +@[deprecated getElem_modify (since := "2025-03-07")] theorem get_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} (h : m.WF) {hc : k' ∈ modify m k f} : get (modify m k f) k' hc = @@ -1741,12 +1767,28 @@ theorem get_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} DHashMap.Raw.Const.get_modify h.out @[simp] +theorem getElem_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} (h : m.WF) + {hc : k ∈ modify m k f} : + haveI h' : k ∈ m := mem_modify h |>.mp hc + (modify m k f)[k]'hc = f (m[k]'h') := by + simpa only [← get_eq_getElem] using DHashMap.Raw.Const.get_modify_self h.out + +@[deprecated getElem_modify_self (since := "2025-03-07")] theorem get_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} (h : m.WF) {hc : k ∈ modify m k f} : haveI h' : k ∈ m := mem_modify h |>.mp hc get (modify m k f) k hc = f (get m k h') := DHashMap.Raw.Const.get_modify_self h.out +theorem getElem!_modify [EquivBEq α] [LawfulHashable α] {k k' : α} [Inhabited β] {f : β → β} + (h : m.WF) : (modify m k f)[k']! = + if k == k' then + m[k]?.map f |>.get! + else + m[k']! := + DHashMap.Raw.Const.get!_modify h.out + +@[deprecated getElem!_modify (since := "2025-03-07")] theorem get!_modify [EquivBEq α] [LawfulHashable α] {k k' : α} [Inhabited β] {f : β → β} (h : m.WF) : get! (modify m k f) k' = if k == k' then @@ -1756,6 +1798,11 @@ theorem get!_modify [EquivBEq α] [LawfulHashable α] {k k' : α} [Inhabited β] DHashMap.Raw.Const.get!_modify h.out @[simp] +theorem getElem!_modify_self [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited β] {f : β → β} + (h : m.WF) : (modify m k f)[k]! = (m[k]?.map f).get! := + DHashMap.Raw.Const.get!_modify_self h.out + +@[deprecated getElem!_modify_self (since := "2025-03-07")] theorem get!_modify_self [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited β] {f : β → β} (h : m.WF) : get! (modify m k f) k = ((get? m k).map f).get! := DHashMap.Raw.Const.get!_modify_self h.out @@ -1763,14 +1810,14 @@ theorem get!_modify_self [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited theorem getD_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} {f : β → β} (h : m.WF) : getD (modify m k f) k' fallback = if k == k' then - get? m k |>.map f |>.getD fallback + m[k]?.map f |>.getD fallback else getD m k' fallback := DHashMap.Raw.Const.getD_modify h.out @[simp] theorem getD_modify_self [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} {f : β → β} (h : m.WF) : - getD (modify m k f) k fallback = ((get? m k).map f).getD fallback := + getD (modify m k f) k fallback = (m[k]?.map f).getD fallback := DHashMap.Raw.Const.getD_modify_self h.out theorem getKey?_modify [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} (h : m.WF) :