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:
parent
cdfec6971f
commit
2ac0e4c061
2 changed files with 96 additions and 49 deletions
|
|
@ -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 : β → β} :
|
||||
|
|
|
|||
|
|
@ -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) :
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue