fix: use getElem instead of get in the statements of hash map lemmas (#7418)

This PR renames several hash map lemmas (`get` -> `getElem`) and uses
`m[k]?` instead of `get? m k` (and also for `get!` and `get`).

BREAKING CHANGE: While many lemmas were renamed and the lemma with the
old signature was simply deprecated, some lemmas were changed without
renaming them. They now use the `getElem` variants instead of `get`.

---------

Co-authored-by: Paul Reichert <6992158+datokrat@users.noreply.github.com>
This commit is contained in:
Paul Reichert 2025-03-10 14:31:30 +01:00 committed by GitHub
parent cdfec6971f
commit 2ac0e4c061
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 96 additions and 49 deletions

View file

@ -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 : β → β} :

View file

@ -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) :