Documentation

Std.Data.DHashMap.Lemmas

Dependent hash map lemmas #

This file contains lemmas about Std.DHashMap. Most of the lemmas require EquivBEq α and LawfulHashable α for the key type α. The easiest way to obtain these instances is to provide an instance of LawfulBEq α.

@[simp]
theorem Std.DHashMap.isEmpty_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {c : Nat} :
@[simp]
theorem Std.DHashMap.isEmpty_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} :
@[simp]
theorem Std.DHashMap.isEmpty_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
theorem Std.DHashMap.mem_iff_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {a : α} :
@[simp]
theorem Std.DHashMap.contains_iff_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {a : α} :
@[simp]
theorem Std.DHashMap.contains_eq_false_iff_not_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {k : α} :
theorem Std.DHashMap.contains_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a b : α} (hab : (a == b) = true) :
theorem Std.DHashMap.mem_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a b : α} (hab : (a == b) = true) :
a ∈ m ↔ b ∈ m
@[simp]
theorem Std.DHashMap.contains_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.not_mem_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.contains_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a : α} :
@[simp]
theorem Std.DHashMap.not_mem_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a : α} :
theorem Std.DHashMap.contains_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
theorem Std.DHashMap.not_mem_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
m.isEmpty = true → ¬a ∈ m
theorem Std.DHashMap.isEmpty_eq_false_iff_exists_contains_eq_true {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
theorem Std.DHashMap.isEmpty_eq_false_iff_exists_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
theorem Std.DHashMap.isEmpty_iff_forall_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
m.isEmpty = true ↔ ∀ (a : α), m.contains a = false
theorem Std.DHashMap.isEmpty_iff_forall_not_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
m.isEmpty = true ↔ ∀ (a : α), ¬a ∈ m
@[simp]
theorem Std.DHashMap.insert_eq_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {p : (a : α) × β a} :
@[simp]
theorem Std.DHashMap.singleton_eq_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {p : (a : α) × β a} :
@[simp]
theorem Std.DHashMap.contains_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
(m.insert k v).contains a = (k == a || m.contains a)
@[simp]
theorem Std.DHashMap.mem_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
a ∈ m.insert k v ↔ (k == a) = true ∨ a ∈ m
theorem Std.DHashMap.contains_of_contains_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
(m.insert k v).contains a = true → (k == a) = false → m.contains a = true
theorem Std.DHashMap.mem_of_mem_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
a ∈ m.insert k v → (k == a) = false → a ∈ m
theorem Std.DHashMap.contains_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insert k v).contains k = true
theorem Std.DHashMap.mem_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
k ∈ m.insert k v
@[simp]
theorem Std.DHashMap.size_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {c : Nat} :
@[simp]
theorem Std.DHashMap.size_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} :
theorem Std.DHashMap.isEmpty_eq_size_eq_zero {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
m.isEmpty = (m.size == 0)
@[simp]
theorem Std.DHashMap.toList_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {c : Nat} :
@[simp]
theorem Std.DHashMap.toList_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} :
@[simp]
theorem Std.DHashMap.Const.toList_emptyWithCapacity {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {c : Nat} {β : Type v} :
@[simp]
theorem Std.DHashMap.Const.toList_empty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} :
@[simp]
theorem Std.DHashMap.keys_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {c : Nat} :
@[simp]
theorem Std.DHashMap.keys_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} :
@[simp]
theorem Std.DHashMap.Const.values_emptyWithCapacity {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {c : Nat} {β : Type v} :
@[simp]
theorem Std.DHashMap.Const.values_empty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} :
theorem Std.DHashMap.size_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insert k v).size = if k ∈ m then m.size else m.size + 1
theorem Std.DHashMap.size_le_size_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
m.size ≤ (m.insert k v).size
theorem Std.DHashMap.size_insert_le {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insert k v).size ≤ m.size + 1
@[simp]
theorem Std.DHashMap.erase_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {k : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.erase_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {k : α} :
@[simp]
theorem Std.DHashMap.isEmpty_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m.erase k).isEmpty = (m.isEmpty || m.size == 1 && m.contains k)
@[simp]
theorem Std.DHashMap.contains_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} :
(m.erase k).contains a = (!k == a && m.contains a)
@[simp]
theorem Std.DHashMap.mem_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} :
a ∈ m.erase k ↔ (k == a) = false ∧ a ∈ m
theorem Std.DHashMap.contains_of_contains_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} :
(m.erase k).contains a = true → m.contains a = true
theorem Std.DHashMap.mem_of_mem_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} :
a ∈ m.erase k → a ∈ m
theorem Std.DHashMap.size_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m.erase k).size = if k ∈ m then m.size - 1 else m.size
theorem Std.DHashMap.size_erase_le {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m.erase k).size ≤ m.size
theorem Std.DHashMap.size_le_size_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
m.size ≤ (m.erase k).size + 1
@[simp]
theorem Std.DHashMap.containsThenInsert_fst {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {k : α} {v : β k} :
@[simp]
theorem Std.DHashMap.containsThenInsert_snd {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {k : α} {v : β k} :
@[simp]
theorem Std.DHashMap.containsThenInsertIfNew_fst {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {k : α} {v : β k} :
@[simp]
theorem Std.DHashMap.containsThenInsertIfNew_snd {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {k : α} {v : β k} :
@[simp]
theorem Std.DHashMap.get?_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.get?_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {a : α} :
theorem Std.DHashMap.get?_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
m.isEmpty = true → m.get? a = none
theorem Std.DHashMap.get?_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a k : α} {v : β k} :
(m.insert k v).get? a = if h : (k == a) = true then some (cast ⋯ v) else m.get? a
@[simp]
theorem Std.DHashMap.get?_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
(m.insert k v).get? k = some v
theorem Std.DHashMap.contains_eq_isSome_get? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
m.contains a = (m.get? a).isSome
@[simp]
theorem Std.DHashMap.isSome_get?_eq_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
(m.get? a).isSome = m.contains a
theorem Std.DHashMap.mem_iff_isSome_get? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
a ∈ m ↔ (m.get? a).isSome = true
@[simp]
theorem Std.DHashMap.isSome_get?_iff_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
(m.get? a).isSome = true ↔ a ∈ m
theorem Std.DHashMap.get?_eq_some_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
m.get? k = some v ↔ ∃ (h : k ∈ m), m.get k h = v
theorem Std.DHashMap.get?_eq_none_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
m.contains a = false → m.get? a = none
theorem Std.DHashMap.get?_eq_none {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} :
¬a ∈ m → m.get? a = none
theorem Std.DHashMap.get?_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} :
(m.erase k).get? a = if (k == a) = true then none else m.get? a
@[simp]
theorem Std.DHashMap.get?_erase_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} :
(m.erase k).get? k = none
@[simp]
theorem Std.DHashMap.Const.get?_emptyWithCapacity {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.Const.get?_empty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {a : α} :
theorem Std.DHashMap.Const.get?_of_isEmpty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
m.isEmpty = true → get? m a = none
theorem Std.DHashMap.Const.get?_insert {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β} :
get? (m.insert k v) a = if (k == a) = true then some v else get? m a
@[simp]
theorem Std.DHashMap.Const.get?_insert_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
get? (m.insert k v) k = some v
theorem Std.DHashMap.Const.contains_eq_isSome_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
m.contains a = (get? m a).isSome
@[simp]
theorem Std.DHashMap.Const.isSome_get?_eq_contains {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
(get? m a).isSome = m.contains a
theorem Std.DHashMap.Const.mem_iff_isSome_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
a ∈ m ↔ (get? m a).isSome = true
@[simp]
theorem Std.DHashMap.Const.isSome_get?_iff_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
(get? m a).isSome = true ↔ a ∈ m
theorem Std.DHashMap.Const.get?_eq_some_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
get? m k = some v ↔ ∃ (h : k ∈ m), get m k h = v
theorem Std.DHashMap.Const.get?_eq_none_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
m.contains a = false → get? m a = none
theorem Std.DHashMap.Const.get?_eq_none {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} :
¬a ∈ m → get? m a = none
theorem Std.DHashMap.Const.get?_erase {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} :
get? (m.erase k) a = if (k == a) = true then none else get? m a
@[simp]
theorem Std.DHashMap.Const.get?_erase_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
get? (m.erase k) k = none
theorem Std.DHashMap.Const.get?_eq_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {a : α} :
get? m a = m.get? a
theorem Std.DHashMap.Const.get?_congr {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a b : α} (hab : (a == b) = true) :
get? m a = get? m b
theorem Std.DHashMap.get_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {v : β k} {h₁ : a ∈ m.insert k v} :
(m.insert k v).get a h₁ = if h₂ : (k == a) = true then cast ⋯ v else m.get a ⋯
@[simp]
theorem Std.DHashMap.get_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
(m.insert k v).get k ⋯ = v
theorem Std.DHashMap.toList_insert_perm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insert k v).toList.Perm (⟨k, v⟩ :: List.filter (fun (x : (a : α) × β a) => decide ¬(k == x.fst) = true) m.toList)
theorem Std.DHashMap.Const.toList_insert_perm {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
(toList (m.insert k v)).Perm ((k, v) :: List.filter (fun (x : α × β) => decide ¬(k == x.fst) = true) (toList m))
theorem Std.DHashMap.keys_insertIfNew_perm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insertIfNew k v).keys.Perm (if k ∈ m then m.keys else k :: m.keys)
@[simp]
theorem Std.DHashMap.get_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {h' : a ∈ m.erase k} :
(m.erase k).get a h' = m.get a ⋯
theorem Std.DHashMap.get?_eq_some_get {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} (h : a ∈ m) :
m.get? a = some (m.get a h)
theorem Std.DHashMap.get_eq_get_get? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {h : a ∈ m} :
m.get a h = (m.get? a).get ⋯
theorem Std.DHashMap.get_get? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {h : (m.get? a).isSome = true} :
(m.get? a).get h = m.get a ⋯
theorem Std.DHashMap.Const.get_insert {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β} {h₁ : a ∈ m.insert k v} :
get (m.insert k v) a h₁ = if h₂ : (k == a) = true then v else get m a ⋯
@[simp]
theorem Std.DHashMap.Const.get_insert_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
get (m.insert k v) k ⋯ = v
@[simp]
theorem Std.DHashMap.Const.get_erase {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {h' : a ∈ m.erase k} :
get (m.erase k) a h' = get m a ⋯
theorem Std.DHashMap.Const.get?_eq_some_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} (h : a ∈ m) :
get? m a = some (get m a h)
theorem Std.DHashMap.Const.get_eq_get_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {h : a ∈ m} :
get m a h = (get? m a).get ⋯
theorem Std.DHashMap.Const.get_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {h : (get? m a).isSome = true} :
(get? m a).get h = get m a ⋯
theorem Std.DHashMap.Const.get_eq_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {a : α} {h : a ∈ m} :
get m a h = m.get a h
theorem Std.DHashMap.Const.get_congr {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a b : α} (hab : (a == b) = true) {h' : a ∈ m} :
get m a h' = get m b ⋯
@[simp]
theorem Std.DHashMap.get!_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {a : α} [Inhabited (β a)] {c : Nat} :
@[simp]
theorem Std.DHashMap.get!_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {a : α} [Inhabited (β a)] :
theorem Std.DHashMap.get!_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
theorem Std.DHashMap.get!_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} [Inhabited (β a)] {v : β k} :
(m.insert k v).get! a = if h : (k == a) = true then cast ⋯ v else m.get! a
@[simp]
theorem Std.DHashMap.get!_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] {b : β a} :
(m.insert a b).get! a = b
theorem Std.DHashMap.get!_eq_default_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
theorem Std.DHashMap.get!_eq_default {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
¬a ∈ m → m.get! a = default
theorem Std.DHashMap.get!_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} [Inhabited (β a)] :
(m.erase k).get! a = if (k == a) = true then default else m.get! a
@[simp]
theorem Std.DHashMap.get!_erase_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] :
theorem Std.DHashMap.get?_eq_some_get!_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
m.contains a = true → m.get? a = some (m.get! a)
theorem Std.DHashMap.get?_eq_some_get! {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
a ∈ m → m.get? a = some (m.get! a)
theorem Std.DHashMap.get!_eq_get!_get? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
m.get! a = (m.get? a).get!
theorem Std.DHashMap.get_eq_get! {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] {h : a ∈ m} :
m.get a h = m.get! a
@[simp]
theorem Std.DHashMap.Const.get!_emptyWithCapacity {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [Inhabited β] {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.Const.get!_empty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [Inhabited β] {a : α} :
theorem Std.DHashMap.Const.get!_of_isEmpty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
theorem Std.DHashMap.Const.get!_insert {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k a : α} {v : β} :
get! (m.insert k v) a = if (k == a) = true then v else get! m a
@[simp]
theorem Std.DHashMap.Const.get!_insert_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} {v : β} :
get! (m.insert k v) k = v
theorem Std.DHashMap.Const.get!_eq_default_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
theorem Std.DHashMap.Const.get!_eq_default {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
¬a ∈ m → get! m a = default
theorem Std.DHashMap.Const.get!_erase {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k a : α} :
get! (m.erase k) a = if (k == a) = true then default else get! m a
@[simp]
theorem Std.DHashMap.Const.get!_erase_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} :
theorem Std.DHashMap.Const.get?_eq_some_get!_of_contains {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
m.contains a = true → get? m a = some (get! m a)
theorem Std.DHashMap.Const.get?_eq_some_get! {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
a ∈ m → get? m a = some (get! m a)
theorem Std.DHashMap.Const.get!_eq_get!_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
get! m a = (get? m a).get!
theorem Std.DHashMap.Const.get_eq_get! {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} {h : a ∈ m} :
get m a h = get! m a
theorem Std.DHashMap.Const.get!_eq_get! {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] [Inhabited β] {a : α} :
get! m a = m.get! a
theorem Std.DHashMap.Const.get!_congr {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a b : α} (hab : (a == b) = true) :
get! m a = get! m b
@[simp]
theorem Std.DHashMap.getD_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {a : α} {fallback : β a} {c : Nat} :
(emptyWithCapacity c).getD a fallback = fallback
@[simp]
theorem Std.DHashMap.getD_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {a : α} {fallback : β a} :
∅.getD a fallback = fallback
theorem Std.DHashMap.getD_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} :
m.isEmpty = true → m.getD a fallback = fallback
theorem Std.DHashMap.getD_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {fallback : β a} {v : β k} :
(m.insert k v).getD a fallback = if h : (k == a) = true then cast ⋯ v else m.getD a fallback
@[simp]
theorem Std.DHashMap.getD_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {fallback v : β k} :
(m.insert k v).getD k fallback = v
theorem Std.DHashMap.getD_eq_fallback_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} :
m.contains a = false → m.getD a fallback = fallback
theorem Std.DHashMap.getD_eq_fallback {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} :
¬a ∈ m → m.getD a fallback = fallback
theorem Std.DHashMap.getD_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {fallback : β a} :
(m.erase k).getD a fallback = if (k == a) = true then fallback else m.getD a fallback
@[simp]
theorem Std.DHashMap.getD_erase_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} :
(m.erase k).getD k fallback = fallback
theorem Std.DHashMap.get?_eq_some_getD_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} :
m.contains a = true → m.get? a = some (m.getD a fallback)
theorem Std.DHashMap.get?_eq_some_getD {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} :
a ∈ m → m.get? a = some (m.getD a fallback)
theorem Std.DHashMap.getD_eq_getD_get? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} :
m.getD a fallback = (m.get? a).getD fallback
theorem Std.DHashMap.get_eq_getD {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} {fallback : β a} {h : a ∈ m} :
m.get a h = m.getD a fallback
theorem Std.DHashMap.get!_eq_getD_default {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {a : α} [Inhabited (β a)] :
m.get! a = m.getD a default
@[simp]
theorem Std.DHashMap.Const.getD_emptyWithCapacity {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {a : α} {fallback : β} {c : Nat} :
getD (emptyWithCapacity c) a fallback = fallback
@[simp]
theorem Std.DHashMap.Const.getD_empty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {a : α} {fallback : β} :
getD ∅ a fallback = fallback
theorem Std.DHashMap.Const.getD_of_isEmpty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} :
m.isEmpty = true → getD m a fallback = fallback
theorem Std.DHashMap.Const.getD_insert {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {fallback v : β} :
getD (m.insert k v) a fallback = if (k == a) = true then v else getD m a fallback
@[simp]
theorem Std.DHashMap.Const.getD_insert_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback v : β} :
getD (m.insert k v) k fallback = v
theorem Std.DHashMap.Const.getD_eq_fallback_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} :
m.contains a = false → getD m a fallback = fallback
theorem Std.DHashMap.Const.getD_eq_fallback {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} :
¬a ∈ m → getD m a fallback = fallback
theorem Std.DHashMap.Const.getD_erase {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {fallback : β} :
getD (m.erase k) a fallback = if (k == a) = true then fallback else getD m a fallback
@[simp]
theorem Std.DHashMap.Const.getD_erase_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} :
getD (m.erase k) k fallback = fallback
theorem Std.DHashMap.Const.get?_eq_some_getD_of_contains {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} :
m.contains a = true → get? m a = some (getD m a fallback)
theorem Std.DHashMap.Const.get?_eq_some_getD {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} :
a ∈ m → get? m a = some (getD m a fallback)
theorem Std.DHashMap.Const.getD_eq_getD_get? {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} :
getD m a fallback = (get? m a).getD fallback
theorem Std.DHashMap.Const.get_eq_getD {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a : α} {fallback : β} {h : a ∈ m} :
get m a h = getD m a fallback
theorem Std.DHashMap.Const.get!_eq_getD_default {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {a : α} :
get! m a = getD m a default
theorem Std.DHashMap.Const.getD_eq_getD {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {a : α} {fallback : β} :
getD m a fallback = m.getD a fallback
theorem Std.DHashMap.Const.getD_congr {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {a b : α} {fallback : β} (hab : (a == b) = true) :
getD m a fallback = getD m b fallback
@[simp]
theorem Std.DHashMap.getKey?_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.getKey?_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a : α} :
theorem Std.DHashMap.getKey?_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
theorem Std.DHashMap.getKey?_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a k : α} {v : β k} :
(m.insert k v).getKey? a = if (k == a) = true then some k else m.getKey? a
@[simp]
theorem Std.DHashMap.getKey?_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insert k v).getKey? k = some k
theorem Std.DHashMap.contains_eq_isSome_getKey? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
@[simp]
theorem Std.DHashMap.isSome_getKey?_eq_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
theorem Std.DHashMap.mem_iff_isSome_getKey? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
@[simp]
theorem Std.DHashMap.isSome_getKey?_iff_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
theorem Std.DHashMap.mem_of_getKey?_eq_some {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k k' : α} (h : m.getKey? k = some k') :
k' ∈ m
theorem Std.DHashMap.getKey?_eq_some_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k k' : α} :
m.getKey? k = some k' ↔ ∃ (h : k ∈ m), m.getKey k h = k'
theorem Std.DHashMap.getKey?_eq_none_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
theorem Std.DHashMap.getKey?_eq_none {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} :
¬a ∈ m → m.getKey? a = none
theorem Std.DHashMap.getKey?_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} :
(m.erase k).getKey? a = if (k == a) = true then none else m.getKey? a
@[simp]
theorem Std.DHashMap.getKey?_erase_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
theorem Std.DHashMap.getKey?_beq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
Option.all (fun (x : α) => x == k) (m.getKey? k) = true
theorem Std.DHashMap.getKey?_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k k' : α} (h : (k == k') = true) :
m.getKey? k = m.getKey? k'
theorem Std.DHashMap.getKey?_eq_some_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} (h : m.contains k = true) :
m.getKey? k = some k
theorem Std.DHashMap.getKey?_eq_some {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} (h : k ∈ m) :
m.getKey? k = some k
theorem Std.DHashMap.getKey_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} {h₁ : a ∈ m.insert k v} :
(m.insert k v).getKey a h₁ = if h₂ : (k == a) = true then k else m.getKey a ⋯
@[simp]
theorem Std.DHashMap.getKey_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insert k v).getKey k ⋯ = k
@[simp]
theorem Std.DHashMap.getKey_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {h' : a ∈ m.erase k} :
(m.erase k).getKey a h' = m.getKey a ⋯
theorem Std.DHashMap.getKey?_eq_some_getKey {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} (h : a ∈ m) :
m.getKey? a = some (m.getKey a h)
theorem Std.DHashMap.getKey_eq_get_getKey? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} {h : a ∈ m} :
m.getKey a h = (m.getKey? a).get ⋯
@[simp]
theorem Std.DHashMap.get_getKey? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a : α} {h : (m.getKey? a).isSome = true} :
(m.getKey? a).get h = m.getKey a ⋯
theorem Std.DHashMap.getKey_beq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (h : k ∈ m) :
(m.getKey k h == k) = true
theorem Std.DHashMap.getKey_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k₁ k₂ : α} (h : (k₁ == k₂) = true) (h₁ : k₁ ∈ m) :
m.getKey k₁ h₁ = m.getKey k₂ ⋯
@[simp]
theorem Std.DHashMap.getKey_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} (h : k ∈ m) :
m.getKey k h = k
@[simp]
theorem Std.DHashMap.getKey!_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [Inhabited α] {a : α} {c : Nat} :
@[simp]
theorem Std.DHashMap.getKey!_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [Inhabited α] {a : α} :
theorem Std.DHashMap.getKey!_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
theorem Std.DHashMap.getKey!_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k a : α} {v : β k} :
(m.insert k v).getKey! a = if (k == a) = true then k else m.getKey! a
@[simp]
theorem Std.DHashMap.getKey!_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} {b : β a} :
(m.insert a b).getKey! a = a
theorem Std.DHashMap.getKey!_eq_default_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
theorem Std.DHashMap.getKey!_eq_default {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
¬a ∈ m → m.getKey! a = default
theorem Std.DHashMap.getKey!_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k a : α} :
@[simp]
theorem Std.DHashMap.getKey!_erase_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} :
theorem Std.DHashMap.getKey?_eq_some_getKey!_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
m.contains a = true → m.getKey? a = some (m.getKey! a)
theorem Std.DHashMap.getKey?_eq_some_getKey! {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
a ∈ m → m.getKey? a = some (m.getKey! a)
theorem Std.DHashMap.getKey!_eq_get!_getKey? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
m.getKey! a = (m.getKey? a).get!
theorem Std.DHashMap.getKey_eq_getKey! {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} {h : a ∈ m} :
m.getKey a h = m.getKey! a
theorem Std.DHashMap.getKey!_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} (h : (k == k') = true) :
m.getKey! k = m.getKey! k'
theorem Std.DHashMap.getKey!_eq_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k : α} (h : m.contains k = true) :
m.getKey! k = k
theorem Std.DHashMap.getKey!_eq_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k : α} (h : k ∈ m) :
m.getKey! k = k
@[simp]
theorem Std.DHashMap.getKeyD_emptyWithCapacity {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a fallback : α} {c : Nat} :
(emptyWithCapacity c).getKeyD a fallback = fallback
@[simp]
theorem Std.DHashMap.getKeyD_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {a fallback : α} :
∅.getKeyD a fallback = fallback
theorem Std.DHashMap.getKeyD_of_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} :
m.isEmpty = true → m.getKeyD a fallback = fallback
theorem Std.DHashMap.getKeyD_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a fallback : α} {v : β k} :
(m.insert k v).getKeyD a fallback = if (k == a) = true then k else m.getKeyD a fallback
@[simp]
theorem Std.DHashMap.getKeyD_insert_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} {v : β k} :
(m.insert k v).getKeyD k fallback = k
theorem Std.DHashMap.getKeyD_eq_fallback_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} :
m.contains a = false → m.getKeyD a fallback = fallback
theorem Std.DHashMap.getKeyD_eq_fallback {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} :
¬a ∈ m → m.getKeyD a fallback = fallback
theorem Std.DHashMap.getKeyD_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a fallback : α} :
(m.erase k).getKeyD a fallback = if (k == a) = true then fallback else m.getKeyD a fallback
@[simp]
theorem Std.DHashMap.getKeyD_erase_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} :
(m.erase k).getKeyD k fallback = fallback
theorem Std.DHashMap.getKey?_eq_some_getKeyD_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} :
m.contains a = true → m.getKey? a = some (m.getKeyD a fallback)
theorem Std.DHashMap.getKey?_eq_some_getKeyD {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} :
a ∈ m → m.getKey? a = some (m.getKeyD a fallback)
theorem Std.DHashMap.getKeyD_eq_getD_getKey? {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} :
m.getKeyD a fallback = (m.getKey? a).getD fallback
theorem Std.DHashMap.getKey_eq_getKeyD {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {a fallback : α} {h : a ∈ m} :
m.getKey a h = m.getKeyD a fallback
theorem Std.DHashMap.getKey!_eq_getKeyD_default {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {a : α} :
theorem Std.DHashMap.getKeyD_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k k' fallback : α} (h : (k == k') = true) :
m.getKeyD k fallback = m.getKeyD k' fallback
theorem Std.DHashMap.getKeyD_eq_of_contains {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k fallback : α} (h : m.contains k = true) :
m.getKeyD k fallback = k
theorem Std.DHashMap.getKeyD_eq_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k fallback : α} (h : k ∈ m) :
m.getKeyD k fallback = k
@[simp]
theorem Std.DHashMap.isEmpty_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
@[simp]
theorem Std.DHashMap.contains_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
(m.insertIfNew k v).contains a = (k == a || m.contains a)
@[simp]
theorem Std.DHashMap.mem_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
a ∈ m.insertIfNew k v ↔ (k == a) = true ∨ a ∈ m
theorem Std.DHashMap.contains_insertIfNew_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
theorem Std.DHashMap.mem_insertIfNew_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
theorem Std.DHashMap.contains_of_contains_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
(m.insertIfNew k v).contains a = true → (k == a) = false → m.contains a = true
theorem Std.DHashMap.mem_of_mem_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
a ∈ m.insertIfNew k v → (k == a) = false → a ∈ m
theorem Std.DHashMap.contains_of_contains_insertIfNew' {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
(m.insertIfNew k v).contains a = true → ¬((k == a) = true ∧ m.contains k = false) → m.contains a = true

This is a restatement of contains_of_contains_insertIfNew that is written to exactly match the proof obligation in the statement of get_insertIfNew.

theorem Std.DHashMap.mem_of_mem_insertIfNew' {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
a ∈ m.insertIfNew k v → ¬((k == a) = true ∧ ¬k ∈ m) → a ∈ m

This is a restatement of mem_of_mem_insertIfNew that is written to exactly match the proof obligation in the statement of get_insertIfNew.

theorem Std.DHashMap.size_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insertIfNew k v).size = if k ∈ m then m.size else m.size + 1
theorem Std.DHashMap.size_le_size_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
theorem Std.DHashMap.size_insertIfNew_le {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β k} :
(m.insertIfNew k v).size ≤ m.size + 1
theorem Std.DHashMap.get?_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {v : β k} :
(m.insertIfNew k v).get? a = if h : (k == a) = true ∧ ¬k ∈ m then some (cast ⋯ v) else m.get? a
theorem Std.DHashMap.get_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {v : β k} {h₁ : a ∈ m.insertIfNew k v} :
(m.insertIfNew k v).get a h₁ = if h₂ : (k == a) = true ∧ ¬k ∈ m then cast ⋯ v else m.get a ⋯
theorem Std.DHashMap.get!_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} [Inhabited (β a)] {v : β k} :
(m.insertIfNew k v).get! a = if h : (k == a) = true ∧ ¬k ∈ m then cast ⋯ v else m.get! a
theorem Std.DHashMap.getD_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k a : α} {fallback : β a} {v : β k} :
(m.insertIfNew k v).getD a fallback = if h : (k == a) = true ∧ ¬k ∈ m then cast ⋯ v else m.getD a fallback
theorem Std.DHashMap.Const.get?_insertIfNew {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β} :
get? (m.insertIfNew k v) a = if (k == a) = true ∧ ¬k ∈ m then some v else get? m a
theorem Std.DHashMap.Const.get_insertIfNew {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β} {h₁ : a ∈ m.insertIfNew k v} :
get (m.insertIfNew k v) a h₁ = if h₂ : (k == a) = true ∧ ¬k ∈ m then v else get m a ⋯
theorem Std.DHashMap.Const.get!_insertIfNew {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k a : α} {v : β} :
get! (m.insertIfNew k v) a = if (k == a) = true ∧ ¬k ∈ m then v else get! m a
theorem Std.DHashMap.Const.getD_insertIfNew {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k a : α} {fallback v : β} :
getD (m.insertIfNew k v) a fallback = if (k == a) = true ∧ ¬k ∈ m then v else getD m a fallback
theorem Std.DHashMap.getKey?_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} :
(m.insertIfNew k v).getKey? a = if (k == a) = true ∧ ¬k ∈ m then some k else m.getKey? a
theorem Std.DHashMap.getKey_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a : α} {v : β k} {h₁ : a ∈ m.insertIfNew k v} :
(m.insertIfNew k v).getKey a h₁ = if h₂ : (k == a) = true ∧ ¬k ∈ m then k else m.getKey a ⋯
theorem Std.DHashMap.getKey!_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k a : α} {v : β k} :
(m.insertIfNew k v).getKey! a = if (k == a) = true ∧ ¬k ∈ m then k else m.getKey! a
theorem Std.DHashMap.getKeyD_insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k a fallback : α} {v : β k} :
(m.insertIfNew k v).getKeyD a fallback = if (k == a) = true ∧ ¬k ∈ m then k else m.getKeyD a fallback
@[simp]
theorem Std.DHashMap.getThenInsertIfNew?_fst {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
@[simp]
theorem Std.DHashMap.getThenInsertIfNew?_snd {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
theorem Std.DHashMap.mem_of_get_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} {w : k ∈ m} :
m.get k w = v → k ∈ m
@[simp]
theorem Std.DHashMap.Const.getThenInsertIfNew?_fst {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {k : α} {v : β} :
@[simp]
theorem Std.DHashMap.Const.getThenInsertIfNew?_snd {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {k : α} {v : β} :
@[simp]
theorem Std.DHashMap.length_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.isEmpty_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.contains_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
@[simp]
theorem Std.DHashMap.mem_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} :
k ∈ m.keys ↔ k ∈ m
theorem Std.DHashMap.mem_of_mem_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (h : k ∈ m.keys) :
k ∈ m
theorem Std.DHashMap.distinct_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
List.Pairwise (fun (a b : α) => (a == b) = false) m.keys
theorem Std.DHashMap.nodup_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.toArray_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
@[simp]
theorem Std.DHashMap.toList_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
@[simp]
theorem Std.DHashMap.size_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.isEmpty_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.contains_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
@[simp]
theorem Std.DHashMap.mem_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} :
theorem Std.DHashMap.forall_mem_keysArray_iff_forall_mem_getKey {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {p : α → Prop} :
(∀ (k : α), k ∈ m.keysArray → p k) ↔ ∀ (k : α) (h : k ∈ m), p (m.getKey k h)
theorem Std.DHashMap.contains_of_mem_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (h' : k ∈ m.keysArray) :
@[simp]
theorem Std.DHashMap.map_fst_toList_eq_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.length_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.isEmpty_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.mem_toList_iff_get?_eq_some {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
⟨k, v⟩ ∈ m.toList ↔ m.get? k = some v
theorem Std.DHashMap.find?_toList_eq_some_iff_get?_eq_some {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
List.find? (fun (x : (a : α) × β a) => x.fst == k) m.toList = some ⟨k, v⟩ ↔ m.get? k = some v
theorem Std.DHashMap.find?_toList_eq_none_iff_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
List.find? (fun (x : (a : α) × β a) => x.fst == k) m.toList = none ↔ m.contains k = false
@[simp]
theorem Std.DHashMap.find?_toList_eq_none_iff_not_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
List.find? (fun (x : (a : α) × β a) => x.fst == k) m.toList = none ↔ ¬k ∈ m
theorem Std.DHashMap.distinct_keys_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) m.toList
@[simp]
theorem Std.DHashMap.Const.map_fst_toList_eq_keys {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.Const.length_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.Const.isEmpty_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.Const.mem_toList_iff_get?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {k : α} {v : β} :
(k, v) ∈ toList m ↔ get? m k = some v
@[simp]
theorem Std.DHashMap.Const.mem_toList_iff_getKey?_eq_some_and_get?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
(k, v) ∈ toList m ↔ m.getKey? k = some k ∧ get? m k = some v
theorem Std.DHashMap.Const.get?_eq_some_iff_exists_beq_and_mem_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
get? m k = some v ↔ ∃ (k' : α), (k == k') = true ∧ (k', v) ∈ toList m
theorem Std.DHashMap.Const.find?_toList_eq_some_iff_getKey?_eq_some_and_get?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {v : β} :
List.find? (fun (a : α × β) => a.fst == k) (toList m) = some (k', v) ↔ m.getKey? k = some k' ∧ get? m k = some v
theorem Std.DHashMap.Const.find?_toList_eq_none_iff_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
List.find? (fun (x : α × β) => x.fst == k) (toList m) = none ↔ m.contains k = false
@[simp]
theorem Std.DHashMap.Const.find?_toList_eq_none_iff_not_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
List.find? (fun (x : α × β) => x.fst == k) (toList m) = none ↔ ¬k ∈ m
theorem Std.DHashMap.Const.distinct_keys_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) (toList m)
@[simp]
theorem Std.DHashMap.toArray_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
@[simp]
theorem Std.DHashMap.toList_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
@[simp]
theorem Std.DHashMap.map_fst_toArray_eq_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.size_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.isEmpty_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
theorem Std.DHashMap.mem_toArray_iff_get?_eq_some {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
theorem Std.DHashMap.find?_toArray_eq_some_iff_get?_eq_some {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {v : β k} :
Array.find? (fun (x : (a : α) × β a) => x.fst == k) m.toArray = some ⟨k, v⟩ ↔ m.get? k = some v
theorem Std.DHashMap.find?_toArray_eq_none_iff_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
Array.find? (fun (x : (a : α) × β a) => x.fst == k) m.toArray = none ↔ m.contains k = false
@[simp]
theorem Std.DHashMap.Const.toArray_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} :
@[simp]
theorem Std.DHashMap.Const.toList_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} :
@[simp]
theorem Std.DHashMap.Const.map_fst_toArray_eq_keysArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.Const.size_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
@[simp]
theorem Std.DHashMap.Const.isEmpty_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
theorem Std.DHashMap.Const.mem_toArray_iff_get?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {k : α} {v : β} :
(k, v) ∈ toArray m ↔ get? m k = some v
theorem Std.DHashMap.Const.get?_eq_some_iff_exists_beq_and_mem_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
get? m k = some v ↔ ∃ (k' : α), (k == k') = true ∧ (k', v) ∈ toArray m
theorem Std.DHashMap.Const.find?_toArray_eq_some_iff_getKey?_eq_some_and_get?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {v : β} :
Array.find? (fun (a : α × β) => a.fst == k) (toArray m) = some (k', v) ↔ m.getKey? k = some k' ∧ get? m k = some v
theorem Std.DHashMap.Const.find?_toArray_eq_none_iff_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
Array.find? (fun (x : α × β) => x.fst == k) (toArray m) = none ↔ m.contains k = false
theorem Std.DHashMap.Const.mem_toArray_iff_getKey?_eq_some_and_get?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
(k, v) ∈ toArray m ↔ m.getKey? k = some k ∧ get? m k = some v
theorem Std.DHashMap.foldM_eq_foldlM_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : δ → (a : α) → β a → m' δ} {init : δ} :
foldM f init m = List.foldlM (fun (a : δ) (b : (a : α) × β a) => f a b.fst b.snd) init m.toList
theorem Std.DHashMap.fold_eq_foldl_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {f : δ → (a : α) → β a → δ} {init : δ} :
fold f init m = List.foldl (fun (a : δ) (b : (a : α) × β a) => f a b.fst b.snd) init m.toList
@[simp]
theorem Std.DHashMap.forM_eq_forM {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : (a : α) → β a → m' PUnit} :
forM f m = ForM.forM m fun (a : (a : α) × β a) => f a.fst a.snd
theorem Std.DHashMap.forM_eq_forM_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : (a : α) × β a → m' PUnit} :
@[simp]
theorem Std.DHashMap.forIn_eq_forIn {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : (a : α) → β a → δ → m' (ForInStep δ)} {init : δ} :
forIn f init m = ForIn.forIn m init fun (a : (a : α) × β a) (b : δ) => f a.fst a.snd b
theorem Std.DHashMap.forIn_eq_forIn_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : (a : α) × β a → δ → m' (ForInStep δ)} {init : δ} :
ForIn.forIn m init f = ForIn.forIn m.toList init f
theorem Std.DHashMap.foldM_eq_foldlM_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : δ → α → m' δ} {init : δ} :
foldM (fun (d : δ) (a : α) (x : β a) => f d a) init m = List.foldlM f init m.keys
theorem Std.DHashMap.fold_eq_foldl_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {f : δ → α → δ} {init : δ} :
fold (fun (d : δ) (a : α) (x : β a) => f d a) init m = List.foldl f init m.keys
theorem Std.DHashMap.forM_eq_forM_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : α → m' PUnit} :
(ForM.forM m fun (a : (a : α) × β a) => f a.fst) = m.keys.forM f
theorem Std.DHashMap.forIn_eq_forIn_keys {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : α → δ → m' (ForInStep δ)} {init : δ} :
(ForIn.forIn m init fun (a : (a : α) × β a) (d : δ) => f a.fst d) = ForIn.forIn m.keys init f
theorem Std.DHashMap.Const.foldM_eq_foldlM_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : δ → α → β → m' δ} {init : δ} :
foldM f init m = List.foldlM (fun (a : δ) (b : α × β) => f a b.fst b.snd) init (toList m)
theorem Std.DHashMap.Const.fold_eq_foldl_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {β : Type v} {m : DHashMap α fun (x : α) => β} {f : δ → α → β → δ} {init : δ} :
fold f init m = List.foldl (fun (a : δ) (b : α × β) => f a b.fst b.snd) init (toList m)
theorem Std.DHashMap.Const.forM_eq_forMUncurried {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : α → β → m' PUnit} :
forM f m = forMUncurried (fun (a : α × β) => f a.fst a.snd) m
theorem Std.DHashMap.Const.forMUncurried_eq_forM_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : α × β → m' PUnit} :
theorem Std.DHashMap.Const.forIn_eq_forInUncurried {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : α → β → δ → m' (ForInStep δ)} {init : δ} :
forIn f init m = forInUncurried (fun (a : α × β) (b : δ) => f a.fst a.snd b) init m
theorem Std.DHashMap.Const.forInUncurried_eq_forIn_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : α × β → δ → m' (ForInStep δ)} {init : δ} :
forInUncurried f init m = ForIn.forIn (toList m) init f
theorem Std.DHashMap.foldM_eq_foldlM_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : δ → (a : α) → β a → m' δ} {init : δ} :
foldM f init m = Array.foldlM (fun (a : δ) (b : (a : α) × β a) => f a b.fst b.snd) init m.toArray
theorem Std.DHashMap.fold_eq_foldl_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {f : δ → (a : α) → β a → δ} {init : δ} :
fold f init m = Array.foldl (fun (a : δ) (b : (a : α) × β a) => f a b.fst b.snd) init m.toArray
theorem Std.DHashMap.forM_eq_forM_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : (a : α) → β a → m' PUnit} :
forM f m = Array.forM (fun (a : (a : α) × β a) => f a.fst a.snd) m.toArray
theorem Std.DHashMap.forIn_eq_forIn_toArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : (a : α) → β a → δ → m' (ForInStep δ)} {init : δ} :
forIn f init m = ForIn.forIn m.toArray init fun (a : (a : α) × β a) (b : δ) => f a.fst a.snd b
theorem Std.DHashMap.foldM_eq_foldlM_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : δ → α → m' δ} {init : δ} :
foldM (fun (d : δ) (a : α) (x : β a) => f d a) init m = Array.foldlM f init m.keysArray
theorem Std.DHashMap.fold_eq_foldl_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {f : δ → α → δ} {init : δ} :
fold (fun (d : δ) (a : α) (x : β a) => f d a) init m = Array.foldl f init m.keysArray
theorem Std.DHashMap.forM_eq_forM_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : α → m' PUnit} :
forM (fun (a : α) (x : β a) => f a) m = Array.forM f m.keysArray
theorem Std.DHashMap.forIn_eq_forIn_keysArray {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {δ : Type w} {m' : Type w → Type w'} [Monad m'] [LawfulMonad m'] {f : α → δ → m' (ForInStep δ)} {init : δ} :
forIn (fun (a : α) (x : β a) (d : δ) => f a d) init m = ForIn.forIn m.keysArray init f
theorem Std.DHashMap.Const.foldM_eq_foldlM_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : δ → α → β → m' δ} {init : δ} :
foldM f init m = Array.foldlM (fun (a : δ) (b : α × β) => f a b.fst b.snd) init (toArray m)
theorem Std.DHashMap.Const.fold_eq_foldl_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {β : Type v} {m : DHashMap α fun (x : α) => β} {f : δ → α → β → δ} {init : δ} :
fold f init m = Array.foldl (fun (a : δ) (b : α × β) => f a b.fst b.snd) init (toArray m)
theorem Std.DHashMap.Const.forM_eq_forM_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : α → β → m' PUnit} :
forM f m = Array.forM (fun (a : α × β) => f a.fst a.snd) (toArray m)
theorem Std.DHashMap.Const.forIn_eq_forIn_toArray {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {δ : Type w} {m' : Type w → Type w'} {β : Type v} {m : DHashMap α fun (x : α) => β} [Monad m'] [LawfulMonad m'] {f : α → β → δ → m' (ForInStep δ)} {init : δ} :
forIn f init m = ForIn.forIn (toArray m) init fun (a : α × β) (b : δ) => f a.fst a.snd b
@[simp]
theorem Std.DHashMap.any_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {p : (a : α) → β a → Bool} :
(m.toList.any fun (x : (a : α) × β a) => p x.fst x.snd) = m.any p
theorem Std.DHashMap.any_eq_true_iff_exists_mem_get {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {p : (a : α) → β a → Bool} :
m.any p = true ↔ ∃ (a : α), ∃ (h : a ∈ m), p a (m.get a h) = true
theorem Std.DHashMap.any_eq_false_iff_forall_mem_get {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {p : (a : α) → β a → Bool} :
m.any p = false ↔ ∀ (a : α) (h : a ∈ m), p a (m.get a h) = false
@[simp]
theorem Std.DHashMap.all_toList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {p : (a : α) → β a → Bool} :
(m.toList.all fun (x : (a : α) × β a) => p x.fst x.snd) = m.all p
theorem Std.DHashMap.all_eq_not_any_not {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {p : (a : α) → β a → Bool} :
m.all p = !m.any fun (a : α) (b : β a) => !p a b
theorem Std.DHashMap.any_eq_not_all_not {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {p : (a : α) → β a → Bool} :
m.any p = !m.all fun (a : α) (b : β a) => !p a b
theorem Std.DHashMap.all_eq_true_iff_forall_mem_get {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {p : (a : α) → β a → Bool} :
m.all p = true ↔ ∀ (a : α) (h : a ∈ m), p a (m.get a h) = true
theorem Std.DHashMap.all_eq_false_iff_exists_mem_get {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {p : (a : α) → β a → Bool} :
m.all p = false ↔ ∃ (a : α), ∃ (h : a ∈ m), p a (m.get a h) = false
@[simp]
theorem Std.DHashMap.Const.any_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {p : α → β → Bool} :
((toList m).any fun (x : α × β) => p x.fst x.snd) = m.any p
theorem Std.DHashMap.Const.any_eq_true_iff_exists_mem_getKey_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulHashable α] [EquivBEq α] {p : α → β → Bool} :
m.any p = true ↔ ∃ (a : α), ∃ (h : a ∈ m), p (m.getKey a h) (get m a h) = true
theorem Std.DHashMap.Const.any_eq_true_iff_exists_mem_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {p : α → β → Bool} :
m.any p = true ↔ ∃ (a : α), ∃ (h : a ∈ m), p a (get m a h) = true
theorem Std.DHashMap.Const.any_eq_false_iff_forall_mem_getKey_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulHashable α] [EquivBEq α] {p : α → β → Bool} :
m.any p = false ↔ ∀ (a : α) (h : a ∈ m), p (m.getKey a h) (get m a h) = false
theorem Std.DHashMap.Const.any_eq_false_iff_forall_mem_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {p : α → β → Bool} :
m.any p = false ↔ ∀ (a : α) (h : a ∈ m), p a (get m a h) = false
@[simp]
theorem Std.DHashMap.Const.all_toList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {p : α → β → Bool} :
((toList m).all fun (x : α × β) => p x.fst x.snd) = m.all p
theorem Std.DHashMap.Const.all_eq_true_iff_forall_mem_getKey_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {p : α → β → Bool} :
m.all p = true ↔ ∀ (a : α) (h : a ∈ m), p (m.getKey a h) (get m a h) = true
theorem Std.DHashMap.Const.all_eq_true_iff_forall_mem_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {p : α → β → Bool} :
m.all p = true ↔ ∀ (a : α) (h : a ∈ m), p a (get m a h) = true
theorem Std.DHashMap.Const.all_eq_false_iff_exists_mem_getKey_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {p : α → β → Bool} :
m.all p = false ↔ ∃ (a : α), ∃ (h : a ∈ m), p (m.getKey a h) (get m a h) = false
theorem Std.DHashMap.Const.all_eq_false_iff_exists_mem_get {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {p : α → β → Bool} :
m.all p = false ↔ ∃ (a : α), ∃ (h : a ∈ m), p a (get m a h) = false
theorem Std.DHashMap.Const.any_keys {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulHashable α] [EquivBEq α] {p : α → Bool} :
m.keys.any p = m.any fun (a : α) (x : β) => p a
theorem Std.DHashMap.Const.all_keys {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulHashable α] [EquivBEq α] {p : α → Bool} :
m.keys.all p = m.all fun (a : α) (x : β) => p a
@[simp]
theorem Std.DHashMap.insertMany_nil {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
@[simp]
theorem Std.DHashMap.insertMany_list_singleton {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {k : α} {v : β k} :
theorem Std.DHashMap.insertMany_cons {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {l : List ((a : α) × β a)} {k : α} {v : β k} :
m.insertMany (⟨k, v⟩ :: l) = (m.insert k v).insertMany l
theorem Std.DHashMap.insertMany_append {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {l₁ l₂ : List ((a : α) × β a)} :
m.insertMany (l₁ ++ l₂) = (m.insertMany l₁).insertMany l₂
theorem Std.DHashMap.insertMany_ind {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {ρ : Type w} [ForIn Id ρ ((a : α) × β a)] {motive : DHashMap α β → Prop} (m : DHashMap α β) (l : ρ) (init : motive m) (insert : ∀ (m : DHashMap α β) (a : α) (b : β a), motive m → motive (m.insert a b)) :
motive (m.insertMany l)
@[simp]
theorem Std.DHashMap.contains_insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} :
@[simp]
theorem Std.DHashMap.mem_insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} :
theorem Std.DHashMap.mem_of_mem_insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} (mem : k ∈ m.insertMany l) (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
k ∈ m
theorem Std.DHashMap.mem_insertMany_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {ρ : Type w} [ForIn Id ρ ((a : α) × β a)] [EquivBEq α] [LawfulHashable α] {l : ρ} {k : α} (h : k ∈ m) :
theorem Std.DHashMap.get?_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
(m.insertMany l).get? k = m.get? k
theorem Std.DHashMap.get?_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) :
(m.insertMany l).get? k' = some (cast ⋯ v)
theorem Std.DHashMap.get_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) {h : k ∈ m.insertMany l} :
(m.insertMany l).get k h = m.get k ⋯
theorem Std.DHashMap.get_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) {h : k' ∈ m.insertMany l} :
(m.insertMany l).get k' h = cast ⋯ v
theorem Std.DHashMap.get!_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} [Inhabited (β k)] (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
(m.insertMany l).get! k = m.get! k
theorem Std.DHashMap.get!_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} [Inhabited (β k')] (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) :
(m.insertMany l).get! k' = cast ⋯ v
theorem Std.DHashMap.getD_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} {fallback : β k} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
(m.insertMany l).getD k fallback = m.getD k fallback
theorem Std.DHashMap.getD_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} {fallback : β k'} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) :
(m.insertMany l).getD k' fallback = cast ⋯ v
theorem Std.DHashMap.getKey?_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
theorem Std.DHashMap.getKey?_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) :
theorem Std.DHashMap.getKey_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) {h : k ∈ m.insertMany l} :
(m.insertMany l).getKey k h = m.getKey k ⋯
theorem Std.DHashMap.getKey_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) {h : k' ∈ m.insertMany l} :
(m.insertMany l).getKey k' h = k
theorem Std.DHashMap.getKey!_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
theorem Std.DHashMap.getKey!_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) :
(m.insertMany l).getKey! k' = k
theorem Std.DHashMap.getKeyD_insertMany_list_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k fallback : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
(m.insertMany l).getKeyD k fallback = m.getKeyD k fallback
theorem Std.DHashMap.getKeyD_insertMany_list_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k k' fallback : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) :
(m.insertMany l).getKeyD k' fallback = k
theorem Std.DHashMap.size_insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) :
(∀ (a : α), a ∈ m → (List.map Sigma.fst l).contains a = false) → (m.insertMany l).size = m.size + l.length
theorem Std.DHashMap.size_le_size_insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} :
theorem Std.DHashMap.size_le_size_insertMany {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {ρ : Type w} [ForIn Id ρ ((a : α) × β a)] [EquivBEq α] [LawfulHashable α] {l : ρ} :
theorem Std.DHashMap.size_insertMany_list_le {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} :
@[simp]
theorem Std.DHashMap.isEmpty_insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} :
theorem Std.DHashMap.isEmpty_of_isEmpty_insertMany {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {ρ : Type w} [ForIn Id ρ ((a : α) × β a)] [EquivBEq α] [LawfulHashable α] {l : ρ} :
theorem Std.DHashMap.Equiv.beq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] [(k : α) → BEq (β k)] [∀ (k : α), ReflBEq (β k)] (h : m₁.Equiv m₂) :
(m₁ == m₂) = true
theorem Std.DHashMap.equiv_of_beq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] [(k : α) → BEq (β k)] [∀ (k : α), LawfulBEq (β k)] (h : (m₁ == m₂) = true) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.beq_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] [(k : α) → BEq (β k)] {m₃ m₄ : DHashMap α β} (w₁ : m₁.Equiv m₃) (w₂ : m₂.Equiv m₄) :
(m₁ == m₂) = (m₃ == m₄)
theorem Std.DHashMap.Const.Equiv.beq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [BEq β] [EquivBEq α] [LawfulHashable α] [ReflBEq β] (h : m₁.Equiv m₂) :
Const.beq m₁ m₂ = true
theorem Std.DHashMap.Const.equiv_of_beq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [BEq β] [LawfulBEq α] [LawfulBEq β] (h : beq m₁ m₂ = true) :
m₁.Equiv m₂
theorem Std.DHashMap.Const.Equiv.beq_congr {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [BEq β] [EquivBEq α] [LawfulHashable α] {m₃ m₄ : DHashMap α fun (x : α) => β} (w₁ : m₁.Equiv m₃) (w₂ : m₂.Equiv m₄) :
Const.beq m₁ m₂ = Const.beq m₃ m₄
@[simp]
theorem Std.DHashMap.union_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} :
m₁.union m₂ = m₁ ∪ m₂
@[simp]
theorem Std.DHashMap.contains_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m₁ ∪ m₂).contains k = (m₁.contains k || m₂.contains k)
theorem Std.DHashMap.mem_union_of_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₁ → k ∈ m₁ ∪ m₂
theorem Std.DHashMap.mem_union_of_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₂ → k ∈ m₁ ∪ m₂
@[simp]
theorem Std.DHashMap.mem_union_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₁ ∪ m₂ ↔ k ∈ m₁ ∨ k ∈ m₂
theorem Std.DHashMap.mem_of_mem_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₁ ∪ m₂ → ¬k ∈ m₂ → k ∈ m₁
theorem Std.DHashMap.mem_of_mem_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₁ ∪ m₂ → ¬k ∈ m₁ → k ∈ m₂
theorem Std.DHashMap.Equiv.union_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv : m₁.Equiv m₂) :
(m₁ ∪ m₃).Equiv (m₂ ∪ m₃)
theorem Std.DHashMap.Equiv.union_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv : m₂.Equiv m₃) :
(m₁ ∪ m₂).Equiv (m₁ ∪ m₃)
theorem Std.DHashMap.union_insert_right_equiv_insert_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {p : (a : α) × β a} :
(m₁ ∪ m₂.insert p.fst p.snd).Equiv ((m₁ ∪ m₂).insert p.fst p.snd)
theorem Std.DHashMap.Equiv.union_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ m₄ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv₁ : m₁.Equiv m₃) (equiv₂ : m₂.Equiv m₄) :
(m₁ ∪ m₂).Equiv (m₃ ∪ m₄)
@[deprecated Std.DHashMap.union_insert_right_equiv_insert_union (since := "2025-11-03")]
theorem Std.DHashMap.union_insert_right_equiv_union_insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {p : (a : α) × β a} :
(m₁ ∪ m₂.insert p.fst p.snd).Equiv ((m₁ ∪ m₂).insert p.fst p.snd)
theorem Std.DHashMap.get?_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} :
(m₁ ∪ m₂).get? k = (m₂.get? k).or (m₁.get? k)
theorem Std.DHashMap.get?_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∪ m₂).get? k = m₂.get? k
theorem Std.DHashMap.get?_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∪ m₂).get? k = m₁.get? k
theorem Std.DHashMap.get_union_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (mem : k ∈ m₂) :
(m₁ ∪ m₂).get k ⋯ = m₂.get k mem
theorem Std.DHashMap.get_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₁) {h' : k ∈ m₁ ∪ m₂} :
(m₁ ∪ m₂).get k h' = m₂.get k ⋯
theorem Std.DHashMap.get_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₂) {h' : k ∈ m₁ ∪ m₂} :
(m₁ ∪ m₂).get k h' = m₁.get k ⋯
theorem Std.DHashMap.getD_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} :
(m₁ ∪ m₂).getD k fallback = m₂.getD k (m₁.getD k fallback)
theorem Std.DHashMap.getD_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (not_mem : ¬k ∈ m₁) :
(m₁ ∪ m₂).getD k fallback = m₂.getD k fallback
theorem Std.DHashMap.getD_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (not_mem : ¬k ∈ m₂) :
(m₁ ∪ m₂).getD k fallback = m₁.getD k fallback
theorem Std.DHashMap.get!_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] :
(m₁ ∪ m₂).get! k = m₂.getD k (m₁.get! k)
theorem Std.DHashMap.get!_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (not_mem : ¬k ∈ m₁) :
(m₁ ∪ m₂).get! k = m₂.get! k
theorem Std.DHashMap.get!_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (not_mem : ¬k ∈ m₂) :
(m₁ ∪ m₂).get! k = m₁.get! k
theorem Std.DHashMap.getKey?_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m₁ ∪ m₂).getKey? k = (m₂.getKey? k).or (m₁.getKey? k)
theorem Std.DHashMap.getKey?_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∪ m₂).getKey? k = m₂.getKey? k
theorem Std.DHashMap.getKey?_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∪ m₂).getKey? k = m₁.getKey? k
theorem Std.DHashMap.getKey_union_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : k ∈ m₂) :
(m₁ ∪ m₂).getKey k ⋯ = m₂.getKey k mem
theorem Std.DHashMap.getKey_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) {h' : k ∈ m₁ ∪ m₂} :
(m₁ ∪ m₂).getKey k h' = m₂.getKey k ⋯
theorem Std.DHashMap.getKey_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) {h' : k ∈ m₁ ∪ m₂} :
(m₁ ∪ m₂).getKey k h' = m₁.getKey k ⋯
theorem Std.DHashMap.getKeyD_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} :
(m₁ ∪ m₂).getKeyD k fallback = m₂.getKeyD k (m₁.getKeyD k fallback)
theorem Std.DHashMap.getKeyD_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∪ m₂).getKeyD k fallback = m₂.getKeyD k fallback
theorem Std.DHashMap.getKeyD_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∪ m₂).getKeyD k fallback = m₁.getKeyD k fallback
theorem Std.DHashMap.getKey!_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} :
(m₁ ∪ m₂).getKey! k = m₂.getKeyD k (m₁.getKey! k)
theorem Std.DHashMap.getKey!_union_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [Inhabited α] [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∪ m₂).getKey! k = m₂.getKey! k
theorem Std.DHashMap.getKey!_union_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [Inhabited α] [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∪ m₂).getKey! k = m₁.getKey! k
theorem Std.DHashMap.size_union_of_not_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(∀ (a : α), a ∈ m₁ → ¬a ∈ m₂) → (m₁ ∪ m₂).size = m₁.size + m₂.size
theorem Std.DHashMap.size_left_le_size_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
m₁.size ≤ (m₁ ∪ m₂).size
theorem Std.DHashMap.size_right_le_size_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
m₂.size ≤ (m₁ ∪ m₂).size
theorem Std.DHashMap.size_union_le_size_add_size {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ ∪ m₂).size ≤ m₁.size + m₂.size
@[simp]
theorem Std.DHashMap.isEmpty_union {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ ∪ m₂).isEmpty = (m₁.isEmpty && m₂.isEmpty)
theorem Std.DHashMap.Const.get?_union {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
get? (m₁.union m₂) k = (get? m₂ k).or (get? m₁ k)
theorem Std.DHashMap.Const.get?_union_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
get? (m₁.union m₂) k = get? m₂ k
theorem Std.DHashMap.Const.get?_union_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
get? (m₁.union m₂) k = get? m₁ k
theorem Std.DHashMap.Const.get_union_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : m₂.contains k = true) :
get (m₁.union m₂) k ⋯ = get m₂ k mem
theorem Std.DHashMap.Const.get_union_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) {h' : k ∈ m₁.union m₂} :
get (m₁.union m₂) k h' = get m₂ k ⋯
theorem Std.DHashMap.Const.get_union_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) {h' : k ∈ m₁.union m₂} :
get (m₁.union m₂) k h' = get m₁ k ⋯
theorem Std.DHashMap.Const.getD_union {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} :
getD (m₁.union m₂) k fallback = getD m₂ k (getD m₁ k fallback)
theorem Std.DHashMap.Const.getD_union_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (not_mem : ¬k ∈ m₁) :
getD (m₁.union m₂) k fallback = getD m₂ k fallback
theorem Std.DHashMap.Const.getD_union_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (not_mem : ¬k ∈ m₂) :
getD (m₁.union m₂) k fallback = getD m₁ k fallback
theorem Std.DHashMap.Const.get!_union {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} :
get! (m₁.union m₂) k = getD m₂ k (get! m₁ k)
theorem Std.DHashMap.Const.get!_union_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (not_mem : ¬k ∈ m₁) :
get! (m₁.union m₂) k = get! m₂ k
theorem Std.DHashMap.Const.get!_union_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (not_mem : ¬k ∈ m₂) :
get! (m₁.union m₂) k = get! m₁ k
@[simp]
theorem Std.DHashMap.inter_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} :
m₁.inter m₂ = m₁ ∩ m₂
@[simp]
theorem Std.DHashMap.contains_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m₁ ∩ m₂).contains k = (m₁.contains k && m₂.contains k)
@[simp]
theorem Std.DHashMap.mem_inter_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₁ ∩ m₂ ↔ k ∈ m₁ ∧ k ∈ m₂
theorem Std.DHashMap.not_mem_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
¬k ∈ m₁ ∩ m₂
theorem Std.DHashMap.not_mem_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
¬k ∈ m₁ ∩ m₂
theorem Std.DHashMap.Equiv.inter_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv : m₁.Equiv m₂) :
(m₁ ∩ m₃).Equiv (m₂ ∩ m₃)
theorem Std.DHashMap.Equiv.inter_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv : m₂.Equiv m₃) :
(m₁ ∩ m₂).Equiv (m₁ ∩ m₃)
theorem Std.DHashMap.Equiv.inter_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ m₄ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv₁ : m₁.Equiv m₃) (equiv₂ : m₂.Equiv m₄) :
(m₁ ∩ m₂).Equiv (m₃ ∩ m₄)
theorem Std.DHashMap.get?_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} :
(m₁ ∩ m₂).get? k = if k ∈ m₂ then m₁.get? k else none
theorem Std.DHashMap.get?_inter_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (mem : k ∈ m₂) :
(m₁ ∩ m₂).get? k = m₁.get? k
theorem Std.DHashMap.get?_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∩ m₂).get? k = none
theorem Std.DHashMap.get?_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∩ m₂).get? k = none
@[simp]
theorem Std.DHashMap.get_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {h_mem : k ∈ m₁ ∩ m₂} :
(m₁ ∩ m₂).get k h_mem = m₁.get k ⋯
theorem Std.DHashMap.getD_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} :
(m₁ ∩ m₂).getD k fallback = if k ∈ m₂ then m₁.getD k fallback else fallback
theorem Std.DHashMap.getD_inter_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (mem : k ∈ m₂) :
(m₁ ∩ m₂).getD k fallback = m₁.getD k fallback
theorem Std.DHashMap.getD_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (not_mem : ¬k ∈ m₂) :
(m₁ ∩ m₂).getD k fallback = fallback
theorem Std.DHashMap.getD_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (not_mem : ¬k ∈ m₁) :
(m₁ ∩ m₂).getD k fallback = fallback
theorem Std.DHashMap.get!_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] :
(m₁ ∩ m₂).get! k = if k ∈ m₂ then m₁.get! k else default
theorem Std.DHashMap.get!_inter_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (mem : k ∈ m₂) :
(m₁ ∩ m₂).get! k = m₁.get! k
theorem Std.DHashMap.get!_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (not_mem : ¬k ∈ m₂) :
(m₁ ∩ m₂).get! k = default
theorem Std.DHashMap.get!_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (not_mem : ¬k ∈ m₁) :
(m₁ ∩ m₂).get! k = default
theorem Std.DHashMap.getKey?_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m₁ ∩ m₂).getKey? k = if k ∈ m₂ then m₁.getKey? k else none
theorem Std.DHashMap.getKey?_inter_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : k ∈ m₂) :
(m₁ ∩ m₂).getKey? k = m₁.getKey? k
theorem Std.DHashMap.getKey?_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∩ m₂).getKey? k = none
theorem Std.DHashMap.getKey?_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∩ m₂).getKey? k = none
@[simp]
theorem Std.DHashMap.getKey_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {h_mem : k ∈ m₁ ∩ m₂} :
(m₁ ∩ m₂).getKey k h_mem = m₁.getKey k ⋯
theorem Std.DHashMap.getKeyD_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} :
(m₁ ∩ m₂).getKeyD k fallback = if k ∈ m₂ then m₁.getKeyD k fallback else fallback
theorem Std.DHashMap.getKeyD_inter_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (mem : k ∈ m₂) :
(m₁ ∩ m₂).getKeyD k fallback = m₁.getKeyD k fallback
theorem Std.DHashMap.getKeyD_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∩ m₂).getKeyD k fallback = fallback
theorem Std.DHashMap.getKeyD_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∩ m₂).getKeyD k fallback = fallback
theorem Std.DHashMap.getKey!_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} :
(m₁ ∩ m₂).getKey! k = if k ∈ m₂ then m₁.getKey! k else default
theorem Std.DHashMap.getKey!_inter_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (mem : k ∈ m₂) :
(m₁ ∩ m₂).getKey! k = m₁.getKey! k
theorem Std.DHashMap.getKey!_inter_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ ∩ m₂).getKey! k = default
theorem Std.DHashMap.getKey!_inter_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ ∩ m₂).getKey! k = default
theorem Std.DHashMap.size_inter_le_size_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ ∩ m₂).size ≤ m₁.size
theorem Std.DHashMap.size_inter_le_size_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ ∩ m₂).size ≤ m₂.size
theorem Std.DHashMap.size_inter_eq_size_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : ∀ (a : α), a ∈ m₁ → a ∈ m₂) :
(m₁ ∩ m₂).size = m₁.size
theorem Std.DHashMap.size_inter_eq_size_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : ∀ (a : α), a ∈ m₂ → a ∈ m₁) :
(m₁ ∩ m₂).size = m₂.size
theorem Std.DHashMap.size_add_size_eq_size_union_add_size_inter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
m₁.size + m₂.size = (m₁ ∪ m₂).size + (m₁ ∩ m₂).size
@[simp]
theorem Std.DHashMap.isEmpty_inter_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : m₁.isEmpty = true) :
(m₁ ∩ m₂).isEmpty = true
@[simp]
theorem Std.DHashMap.isEmpty_inter_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : m₂.isEmpty = true) :
(m₁ ∩ m₂).isEmpty = true
theorem Std.DHashMap.isEmpty_inter_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ ∩ m₂).isEmpty = true ↔ ∀ (k : α), k ∈ m₁ → ¬k ∈ m₂
theorem Std.DHashMap.Const.get?_inter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
get? (m₁.inter m₂) k = if k ∈ m₂ then get? m₁ k else none
theorem Std.DHashMap.Const.get?_inter_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : k ∈ m₂) :
get? (m₁.inter m₂) k = get? m₁ k
theorem Std.DHashMap.Const.get?_inter_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
get? (m₁.inter m₂) k = none
theorem Std.DHashMap.Const.get?_inter_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
get? (m₁.inter m₂) k = none
@[simp]
theorem Std.DHashMap.Const.get_inter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {h_mem : k ∈ m₁ ∩ m₂} :
get (m₁.inter m₂) k h_mem = get m₁ k ⋯
theorem Std.DHashMap.Const.getD_inter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} :
getD (m₁.inter m₂) k fallback = if k ∈ m₂ then getD m₁ k fallback else fallback
theorem Std.DHashMap.Const.getD_inter_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (mem : k ∈ m₂) :
getD (m₁.inter m₂) k fallback = getD m₁ k fallback
theorem Std.DHashMap.Const.getD_inter_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (not_mem : ¬k ∈ m₂) :
getD (m₁.inter m₂) k fallback = fallback
theorem Std.DHashMap.Const.getD_inter_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (not_mem : ¬k ∈ m₁) :
getD (m₁.inter m₂) k fallback = fallback
theorem Std.DHashMap.Const.get!_inter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} :
get! (m₁.inter m₂) k = if k ∈ m₂ then get! m₁ k else default
theorem Std.DHashMap.Const.get!_inter_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (mem : k ∈ m₂) :
get! (m₁.inter m₂) k = get! m₁ k
theorem Std.DHashMap.Const.get!_inter_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (not_mem : ¬k ∈ m₂) :
get! (m₁.inter m₂) k = default
theorem Std.DHashMap.Const.get!_inter_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (not_mem : ¬k ∈ m₁) :
get! (m₁.inter m₂) k = default
@[simp]
theorem Std.DHashMap.diff_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} :
m₁.diff m₂ = m₁ \ m₂
@[simp]
theorem Std.DHashMap.contains_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m₁ \ m₂).contains k = (m₁.contains k && !m₂.contains k)
@[simp]
theorem Std.DHashMap.mem_diff_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
k ∈ m₁ \ m₂ ↔ k ∈ m₁ ∧ ¬k ∈ m₂
theorem Std.DHashMap.not_mem_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
¬k ∈ m₁ \ m₂
theorem Std.DHashMap.not_mem_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : k ∈ m₂) :
¬k ∈ m₁ \ m₂
theorem Std.DHashMap.Equiv.diff_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv : m₁.Equiv m₂) :
(m₁ \ m₃).Equiv (m₂ \ m₃)
theorem Std.DHashMap.Equiv.diff_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv : m₂.Equiv m₃) :
(m₁ \ m₂).Equiv (m₁ \ m₃)
theorem Std.DHashMap.Equiv.diff_congr {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ m₄ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (equiv₁ : m₁.Equiv m₃) (equiv₂ : m₂.Equiv m₄) :
(m₁ \ m₂).Equiv (m₃ \ m₄)
theorem Std.DHashMap.get?_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} :
(m₁ \ m₂).get? k = if k ∈ m₂ then none else m₁.get? k
theorem Std.DHashMap.get?_diff_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ \ m₂).get? k = m₁.get? k
theorem Std.DHashMap.get?_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ \ m₂).get? k = none
theorem Std.DHashMap.get?_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (mem : k ∈ m₂) :
(m₁ \ m₂).get? k = none
@[simp]
theorem Std.DHashMap.get_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {h_mem : k ∈ m₁ \ m₂} :
(m₁ \ m₂).get k h_mem = m₁.get k ⋯
theorem Std.DHashMap.getD_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} :
(m₁ \ m₂).getD k fallback = if k ∈ m₂ then fallback else m₁.getD k fallback
theorem Std.DHashMap.getD_diff_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (not_mem : ¬k ∈ m₂) :
(m₁ \ m₂).getD k fallback = m₁.getD k fallback
theorem Std.DHashMap.getD_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (mem : k ∈ m₂) :
(m₁ \ m₂).getD k fallback = fallback
theorem Std.DHashMap.getD_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (not_mem : ¬k ∈ m₁) :
(m₁ \ m₂).getD k fallback = fallback
theorem Std.DHashMap.get!_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] :
(m₁ \ m₂).get! k = if k ∈ m₂ then default else m₁.get! k
theorem Std.DHashMap.get!_diff_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (not_mem : ¬k ∈ m₂) :
(m₁ \ m₂).get! k = m₁.get! k
theorem Std.DHashMap.get!_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (mem : k ∈ m₂) :
(m₁ \ m₂).get! k = default
theorem Std.DHashMap.get!_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (not_mem : ¬k ∈ m₁) :
(m₁ \ m₂).get! k = default
theorem Std.DHashMap.getKey?_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} :
(m₁ \ m₂).getKey? k = if k ∈ m₂ then none else m₁.getKey? k
theorem Std.DHashMap.getKey?_diff_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ \ m₂).getKey? k = m₁.getKey? k
theorem Std.DHashMap.getKey?_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ \ m₂).getKey? k = none
theorem Std.DHashMap.getKey?_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : k ∈ m₂) :
(m₁ \ m₂).getKey? k = none
@[simp]
theorem Std.DHashMap.getKey_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} {h_mem : k ∈ m₁ \ m₂} :
(m₁ \ m₂).getKey k h_mem = m₁.getKey k ⋯
theorem Std.DHashMap.getKeyD_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} :
(m₁ \ m₂).getKeyD k fallback = if k ∈ m₂ then fallback else m₁.getKeyD k fallback
theorem Std.DHashMap.getKeyD_diff_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (not_mem : ¬k ∈ m₂) :
(m₁ \ m₂).getKeyD k fallback = m₁.getKeyD k fallback
theorem Std.DHashMap.getKeyD_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (mem : k ∈ m₂) :
(m₁ \ m₂).getKeyD k fallback = fallback
theorem Std.DHashMap.getKeyD_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (not_mem : ¬k ∈ m₁) :
(m₁ \ m₂).getKeyD k fallback = fallback
theorem Std.DHashMap.getKey!_diff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} :
(m₁ \ m₂).getKey! k = if k ∈ m₂ then default else m₁.getKey! k
theorem Std.DHashMap.getKey!_diff_of_not_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (not_mem : ¬k ∈ m₂) :
(m₁ \ m₂).getKey! k = m₁.getKey! k
theorem Std.DHashMap.getKey!_diff_of_mem_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (mem : k ∈ m₂) :
(m₁ \ m₂).getKey! k = default
theorem Std.DHashMap.getKey!_diff_of_not_mem_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (not_mem : ¬k ∈ m₁) :
(m₁ \ m₂).getKey! k = default
theorem Std.DHashMap.size_diff_le_size_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ \ m₂).size ≤ m₁.size
theorem Std.DHashMap.size_diff_eq_size_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : ∀ (a : α), a ∈ m₁ → ¬a ∈ m₂) :
(m₁ \ m₂).size = m₁.size
theorem Std.DHashMap.size_diff_add_size_inter_eq_size_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ \ m₂).size + (m₁ ∩ m₂).size = m₁.size
@[simp]
theorem Std.DHashMap.isEmpty_diff_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : m₁.isEmpty = true) :
(m₁ \ m₂).isEmpty = true
theorem Std.DHashMap.isEmpty_diff_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
(m₁ \ m₂).isEmpty = true ↔ ∀ (k : α), k ∈ m₁ → k ∈ m₂
theorem Std.DHashMap.Const.get?_diff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} :
get? (m₁.diff m₂) k = if k ∈ m₂ then none else get? m₁ k
theorem Std.DHashMap.Const.get?_diff_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₂) :
get? (m₁.diff m₂) k = get? m₁ k
theorem Std.DHashMap.Const.get?_diff_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (not_mem : ¬k ∈ m₁) :
get? (m₁.diff m₂) k = none
theorem Std.DHashMap.Const.get?_diff_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (mem : k ∈ m₂) :
get? (m₁.diff m₂) k = none
@[simp]
theorem Std.DHashMap.Const.get_diff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {h_mem : k ∈ m₁ \ m₂} :
get (m₁.diff m₂) k h_mem = get m₁ k ⋯
theorem Std.DHashMap.Const.getD_diff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} :
getD (m₁.diff m₂) k fallback = if k ∈ m₂ then fallback else getD m₁ k fallback
theorem Std.DHashMap.Const.getD_diff_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (not_mem : ¬k ∈ m₂) :
getD (m₁.diff m₂) k fallback = getD m₁ k fallback
theorem Std.DHashMap.Const.getD_diff_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (mem : k ∈ m₂) :
getD (m₁.diff m₂) k fallback = fallback
theorem Std.DHashMap.Const.getD_diff_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (not_mem : ¬k ∈ m₁) :
getD (m₁.diff m₂) k fallback = fallback
theorem Std.DHashMap.Const.get!_diff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} :
get! (m₁.diff m₂) k = if k ∈ m₂ then default else get! m₁ k
theorem Std.DHashMap.Const.get!_diff_of_not_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (not_mem : ¬k ∈ m₂) :
get! (m₁.diff m₂) k = get! m₁ k
theorem Std.DHashMap.Const.get!_diff_of_mem_right {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (mem : k ∈ m₂) :
get! (m₁.diff m₂) k = default
theorem Std.DHashMap.Const.get!_diff_of_not_mem_left {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (not_mem : ¬k ∈ m₁) :
get! (m₁.diff m₂) k = default
@[simp]
theorem Std.DHashMap.Const.insertMany_nil {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} :
@[simp]
theorem Std.DHashMap.Const.insertMany_list_singleton {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {k : α} {v : β} :
theorem Std.DHashMap.Const.insertMany_cons {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {l : List (α × β)} {k : α} {v : β} :
insertMany m ((k, v) :: l) = insertMany (m.insert k v) l
theorem Std.DHashMap.Const.insertMany_append {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {l₁ l₂ : List (α × β)} :
insertMany m (l₁ ++ l₂) = insertMany (insertMany m l₁) l₂
theorem Std.DHashMap.Const.insertMany_ind {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {ρ : Type w} [ForIn Id ρ (α × β)] {motive : (DHashMap α fun (x : α) => β) → Prop} (m : DHashMap α fun (x : α) => β) (l : ρ) (init : motive m) (insert : ∀ (m : DHashMap α fun (x : α) => β) (a : α) (b : β), motive m → motive (m.insert a b)) :
motive (insertMany m l)
@[simp]
theorem Std.DHashMap.Const.contains_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} :
@[simp]
theorem Std.DHashMap.Const.mem_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} :
theorem Std.DHashMap.Const.mem_of_mem_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (mem : k ∈ insertMany m l) (contains_eq_false : (List.map Prod.fst l).contains k = false) :
k ∈ m
theorem Std.DHashMap.Const.mem_insertMany_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {ρ : Type w} [ForIn Id ρ (α × β)] [EquivBEq α] [LawfulHashable α] {l : ρ} {k : α} (h : k ∈ m) :
theorem Std.DHashMap.Const.getKey?_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
theorem Std.DHashMap.Const.getKey?_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) :
theorem Std.DHashMap.Const.getKey_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) {h : k ∈ insertMany m l} :
(insertMany m l).getKey k h = m.getKey k ⋯
theorem Std.DHashMap.Const.getKey_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) {h : k' ∈ insertMany m l} :
(insertMany m l).getKey k' h = k
theorem Std.DHashMap.Const.getKey!_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
theorem Std.DHashMap.Const.getKey!_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) :
(insertMany m l).getKey! k' = k
theorem Std.DHashMap.Const.getKeyD_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k fallback : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
(insertMany m l).getKeyD k fallback = m.getKeyD k fallback
theorem Std.DHashMap.Const.getKeyD_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' fallback : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) :
(insertMany m l).getKeyD k' fallback = k
theorem Std.DHashMap.Const.size_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) :
(∀ (a : α), a ∈ m → (List.map Prod.fst l).contains a = false) → (insertMany m l).size = m.size + l.length
theorem Std.DHashMap.Const.size_le_size_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} :
theorem Std.DHashMap.Const.size_le_size_insertMany {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {ρ : Type w} [ForIn Id ρ (α × β)] [EquivBEq α] [LawfulHashable α] {l : ρ} :
theorem Std.DHashMap.Const.size_insertMany_list_le {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} :
@[simp]
theorem Std.DHashMap.Const.isEmpty_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} :
theorem Std.DHashMap.Const.isEmpty_of_isEmpty_insertMany {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {ρ : Type w} [ForIn Id ρ (α × β)] [EquivBEq α] [LawfulHashable α] {l : ρ} :
theorem Std.DHashMap.Const.get?_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
get? (insertMany m l) k = get? m k
theorem Std.DHashMap.Const.get?_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) :
get? (insertMany m l) k' = some v
theorem Std.DHashMap.Const.get?_insertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} :
get? (insertMany m l) k = (List.findSomeRev? (fun (x : α × β) => match x with | (a, b) => if (a == k) = true then some b else none) l).or (get? m k)
theorem Std.DHashMap.Const.get_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) {h : k ∈ insertMany m l} :
get (insertMany m l) k h = get m k ⋯
theorem Std.DHashMap.Const.get_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) {h : k' ∈ insertMany m l} :
get (insertMany m l) k' h = v
theorem Std.DHashMap.Const.get!_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
get! (insertMany m l) k = get! m k
theorem Std.DHashMap.Const.get!_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) :
get! (insertMany m l) k' = v
theorem Std.DHashMap.Const.getD_insertMany_list_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} {fallback : β} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
getD (insertMany m l) k fallback = getD m k fallback
theorem Std.DHashMap.Const.getD_insertMany_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v fallback : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) :
getD (insertMany m l) k' fallback = v
@[simp]
theorem Std.DHashMap.Const.insertManyIfNewUnit_nil {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} :
@[simp]
theorem Std.DHashMap.Const.insertManyIfNewUnit_list_singleton {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {k : α} :
theorem Std.DHashMap.Const.insertManyIfNewUnit_cons {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {l : List α} {k : α} :
theorem Std.DHashMap.Const.insertManyIfNewUnit_ind {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {ρ : Type w} [ForIn Id ρ α] {motive : (DHashMap α fun (x : α) => Unit) → Prop} (m : DHashMap α fun (x : α) => Unit) (l : ρ) (init : motive m) (insert : ∀ (m : DHashMap α fun (x : α) => Unit) (a : α), motive m → motive (m.insertIfNew a ())) :
motive (insertManyIfNewUnit m l)
@[simp]
theorem Std.DHashMap.Const.contains_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} :
@[simp]
theorem Std.DHashMap.Const.mem_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} :
theorem Std.DHashMap.Const.mem_of_mem_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} (contains_eq_false : l.contains k = false) :
theorem Std.DHashMap.Const.mem_insertManyIfNewUnit_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {ρ : Type w} [ForIn Id ρ α] [EquivBEq α] [LawfulHashable α] {l : ρ} {k : α} (h : k ∈ m) :
theorem Std.DHashMap.Const.getKey?_insertManyIfNewUnit_list_of_not_mem_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} (not_mem : ¬k ∈ m) (contains_eq_false : l.contains k = false) :
theorem Std.DHashMap.Const.getKey?_insertManyIfNewUnit_list_of_not_mem_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k k' : α} (k_beq : (k == k') = true) (not_mem : ¬k ∈ m) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) :
theorem Std.DHashMap.Const.getKey?_insertManyIfNewUnit_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} (h' : k ∈ m) :
theorem Std.DHashMap.Const.getKey_insertManyIfNewUnit_list_of_not_mem_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k k' : α} (k_beq : (k == k') = true) (not_mem : ¬k ∈ m) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) {h : k' ∈ insertManyIfNewUnit m l} :
theorem Std.DHashMap.Const.getKey_insertManyIfNewUnit_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} (mem : k ∈ m) {h : k ∈ insertManyIfNewUnit m l} :
theorem Std.DHashMap.Const.getKey!_insertManyIfNewUnit_list_of_not_mem_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List α} {k : α} (not_mem : ¬k ∈ m) (contains_eq_false : l.contains k = false) :
theorem Std.DHashMap.Const.getKey!_insertManyIfNewUnit_list_of_not_mem_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List α} {k k' : α} (k_beq : (k == k') = true) (not_mem : ¬k ∈ m) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) :
theorem Std.DHashMap.Const.getKey!_insertManyIfNewUnit_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List α} {k : α} (mem : k ∈ m) :
theorem Std.DHashMap.Const.getKeyD_insertManyIfNewUnit_list_of_not_mem_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k fallback : α} (not_mem : ¬k ∈ m) (contains_eq_false : l.contains k = false) :
(insertManyIfNewUnit m l).getKeyD k fallback = fallback
theorem Std.DHashMap.Const.getKeyD_insertManyIfNewUnit_list_of_not_mem_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k k' fallback : α} (k_beq : (k == k') = true) (not_mem : ¬k ∈ m) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) :
(insertManyIfNewUnit m l).getKeyD k' fallback = k
theorem Std.DHashMap.Const.getKeyD_insertManyIfNewUnit_list_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k fallback : α} (mem : k ∈ m) :
(insertManyIfNewUnit m l).getKeyD k fallback = m.getKeyD k fallback
theorem Std.DHashMap.Const.size_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) :
(∀ (a : α), a ∈ m → l.contains a = false) → (insertManyIfNewUnit m l).size = m.size + l.length
theorem Std.DHashMap.Const.size_le_size_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} :
theorem Std.DHashMap.Const.size_le_size_insertManyIfNewUnit {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {ρ : Type w} [ForIn Id ρ α] [EquivBEq α] [LawfulHashable α] {l : ρ} :
theorem Std.DHashMap.Const.size_insertManyIfNewUnit_list_le {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} :
@[simp]
theorem Std.DHashMap.Const.isEmpty_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} :
theorem Std.DHashMap.Const.isEmpty_of_isEmpty_insertManyIfNewUnit {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {ρ : Type w} [ForIn Id ρ α] [EquivBEq α] [LawfulHashable α] {l : ρ} :
theorem Std.DHashMap.Const.get?_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} :
theorem Std.DHashMap.Const.get_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {l : List α} {k : α} {h : k ∈ insertManyIfNewUnit m l} :
theorem Std.DHashMap.Const.get!_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {l : List α} {k : α} :
theorem Std.DHashMap.Const.getD_insertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α fun (x : α) => Unit} {l : List α} {k : α} {fallback : Unit} :
getD (insertManyIfNewUnit m l) k fallback = ()
@[simp]
theorem Std.DHashMap.ofArray_eq_ofList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} (a : Array ((a : α) × β a)) :
@[simp]
theorem Std.DHashMap.ofList_nil {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} :
@[simp]
theorem Std.DHashMap.ofList_singleton {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {k : α} {v : β k} :
theorem Std.DHashMap.ofList_cons {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {k : α} {v : β k} {tl : List ((a : α) × β a)} :
ofList (⟨k, v⟩ :: tl) = (∅.insert k v).insertMany tl
theorem Std.DHashMap.ofList_eq_insertMany_empty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {l : List ((a : α) × β a)} :
@[simp]
theorem Std.DHashMap.contains_ofList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} :
@[simp]
theorem Std.DHashMap.mem_ofList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} :
theorem Std.DHashMap.get?_ofList_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
theorem Std.DHashMap.get?_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) :
(ofList l).get? k' = some (cast ⋯ v)
theorem Std.DHashMap.get_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) {h : k' ∈ ofList l} :
(ofList l).get k' h = cast ⋯ v
theorem Std.DHashMap.get!_ofList_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} [Inhabited (β k)] (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
theorem Std.DHashMap.get!_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} [Inhabited (β k')] (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) :
(ofList l).get! k' = cast ⋯ v
theorem Std.DHashMap.getD_ofList_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k : α} {fallback : β k} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
(ofList l).getD k fallback = fallback
theorem Std.DHashMap.getD_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) {v : β k} {fallback : β k'} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : ⟨k, v⟩ ∈ l) :
(ofList l).getD k' fallback = cast ⋯ v
theorem Std.DHashMap.getKey?_ofList_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
theorem Std.DHashMap.getKey?_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) :
(ofList l).getKey? k' = some k
theorem Std.DHashMap.getKey_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) {h : k' ∈ ofList l} :
(ofList l).getKey k' h = k
theorem Std.DHashMap.getKey!_ofList_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List ((a : α) × β a)} {k : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
theorem Std.DHashMap.getKey!_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List ((a : α) × β a)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) :
(ofList l).getKey! k' = k
theorem Std.DHashMap.getKeyD_ofList_of_contains_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k fallback : α} (contains_eq_false : (List.map Sigma.fst l).contains k = false) :
(ofList l).getKeyD k fallback = fallback
theorem Std.DHashMap.getKeyD_ofList_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} {k k' fallback : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Sigma.fst l) :
(ofList l).getKeyD k' fallback = k
theorem Std.DHashMap.size_ofList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} (distinct : List.Pairwise (fun (a b : (a : α) × β a) => (a.fst == b.fst) = false) l) :
theorem Std.DHashMap.size_ofList_le {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} :
@[simp]
theorem Std.DHashMap.isEmpty_ofList {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List ((a : α) × β a)} :
@[simp]
theorem Std.DHashMap.Const.ofArray_eq_ofList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} (a : Array (α × β)) :
@[simp]
theorem Std.DHashMap.Const.ofList_nil {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} :
@[simp]
theorem Std.DHashMap.Const.ofList_singleton {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {k : α} {v : β} :
theorem Std.DHashMap.Const.ofList_cons {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {k : α} {v : β} {tl : List (α × β)} :
ofList ((k, v) :: tl) = insertMany (∅.insert k v) tl
theorem Std.DHashMap.Const.ofList_eq_insertMany_empty {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {l : List (α × β)} :
@[simp]
theorem Std.DHashMap.Const.contains_ofList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} :
@[simp]
theorem Std.DHashMap.Const.mem_ofList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} :
theorem Std.DHashMap.Const.get?_ofList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
theorem Std.DHashMap.Const.get?_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) :
get? (ofList l) k' = some v
theorem Std.DHashMap.Const.get_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) {h : k' ∈ ofList l} :
get (ofList l) k' h = v
theorem Std.DHashMap.Const.get!_ofList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} [Inhabited β] (contains_eq_false : (List.map Prod.fst l).contains k = false) :
theorem Std.DHashMap.Const.get!_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v : β} [Inhabited β] (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) :
get! (ofList l) k' = v
theorem Std.DHashMap.Const.getD_ofList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} {fallback : β} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
getD (ofList l) k fallback = fallback
theorem Std.DHashMap.Const.getD_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) {v fallback : β} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : (k, v) ∈ l) :
getD (ofList l) k' fallback = v
theorem Std.DHashMap.Const.getKey?_ofList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
theorem Std.DHashMap.Const.getKey?_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) :
(ofList l).getKey? k' = some k
theorem Std.DHashMap.Const.getKey_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) {h : k' ∈ ofList l} :
(ofList l).getKey k' h = k
theorem Std.DHashMap.Const.getKey!_ofList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List (α × β)} {k : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
theorem Std.DHashMap.Const.getKey!_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List (α × β)} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) :
(ofList l).getKey! k' = k
theorem Std.DHashMap.Const.getKeyD_ofList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k fallback : α} (contains_eq_false : (List.map Prod.fst l).contains k = false) :
(ofList l).getKeyD k fallback = fallback
theorem Std.DHashMap.Const.getKeyD_ofList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} {k k' fallback : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) (mem : k ∈ List.map Prod.fst l) :
(ofList l).getKeyD k' fallback = k
theorem Std.DHashMap.Const.size_ofList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} (distinct : List.Pairwise (fun (a b : α × β) => (a.fst == b.fst) = false) l) :
theorem Std.DHashMap.Const.size_ofList_le {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} :
@[simp]
theorem Std.DHashMap.Const.isEmpty_ofList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} [EquivBEq α] [LawfulHashable α] {l : List (α × β)} :
@[simp]
theorem Std.DHashMap.Const.unitOfArray_eq_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} (a : Array α) :
@[simp]
theorem Std.DHashMap.Const.unitOfList_nil {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} :
@[simp]
theorem Std.DHashMap.Const.unitOfList_singleton {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {k : α} :
theorem Std.DHashMap.Const.unitOfList_cons {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {hd : α} {tl : List α} :
@[simp]
theorem Std.DHashMap.Const.contains_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} :
@[simp]
theorem Std.DHashMap.Const.mem_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} :
theorem Std.DHashMap.Const.getKey?_unitOfList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} (contains_eq_false : l.contains k = false) :
theorem Std.DHashMap.Const.getKey?_unitOfList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) :
theorem Std.DHashMap.Const.getKey_unitOfList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) {h : k' ∈ unitOfList l} :
(unitOfList l).getKey k' h = k
theorem Std.DHashMap.Const.getKey!_unitOfList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List α} {k : α} (contains_eq_false : l.contains k = false) :
theorem Std.DHashMap.Const.getKey!_unitOfList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] [Inhabited α] {l : List α} {k k' : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) :
theorem Std.DHashMap.Const.getKeyD_unitOfList_of_contains_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k fallback : α} (contains_eq_false : l.contains k = false) :
(unitOfList l).getKeyD k fallback = fallback
theorem Std.DHashMap.Const.getKeyD_unitOfList_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k k' fallback : α} (k_beq : (k == k') = true) (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) (mem : k ∈ l) :
(unitOfList l).getKeyD k' fallback = k
theorem Std.DHashMap.Const.size_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} (distinct : List.Pairwise (fun (a b : α) => (a == b) = false) l) :
theorem Std.DHashMap.Const.size_unitOfList_le {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} :
@[simp]
theorem Std.DHashMap.Const.isEmpty_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} :
@[simp]
theorem Std.DHashMap.Const.get?_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {l : List α} {k : α} :
@[simp]
theorem Std.DHashMap.Const.get_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {l : List α} {k : α} {h : k ∈ unitOfList l} :
get (unitOfList l) k h = ()
@[simp]
theorem Std.DHashMap.Const.get!_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {l : List α} {k : α} :
@[simp]
theorem Std.DHashMap.Const.getD_unitOfList {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {l : List α} {k : α} {fallback : Unit} :
getD (unitOfList l) k fallback = ()
theorem Std.DHashMap.isEmpty_alter_eq_isEmpty_erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).isEmpty = ((m.erase k).isEmpty && (f (m.get? k)).isNone)
@[simp]
theorem Std.DHashMap.isEmpty_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).isEmpty = ((m.isEmpty || m.size == 1 && m.contains k) && (f (m.get? k)).isNone)
theorem Std.DHashMap.contains_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).contains k' = if (k == k') = true then (f (m.get? k)).isSome else m.contains k'
theorem Std.DHashMap.mem_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} :
k' ∈ m.alter k f ↔ if (k == k') = true then (f (m.get? k)).isSome = true else k' ∈ m
theorem Std.DHashMap.mem_alter_of_beq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} (h : (k == k') = true) :
k' ∈ m.alter k f ↔ (f (m.get? k)).isSome = true
@[simp]
theorem Std.DHashMap.contains_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).contains k = (f (m.get? k)).isSome
@[simp]
theorem Std.DHashMap.mem_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
k ∈ m.alter k f ↔ (f (m.get? k)).isSome = true
theorem Std.DHashMap.contains_alter_of_beq_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} (h : (k == k') = false) :
(m.alter k f).contains k' = m.contains k'
theorem Std.DHashMap.mem_alter_of_beq_eq_false {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} (h : (k == k') = false) :
k' ∈ m.alter k f ↔ k' ∈ m
theorem Std.DHashMap.size_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).size = if k ∈ m ∧ (f (m.get? k)).isNone = true then m.size - 1 else if ¬k ∈ m ∧ (f (m.get? k)).isSome = true then m.size + 1 else m.size
theorem Std.DHashMap.size_alter_eq_add_one {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} (h : ¬k ∈ m) (h' : (f (m.get? k)).isSome = true) :
(m.alter k f).size = m.size + 1
theorem Std.DHashMap.size_alter_eq_sub_one {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} (h : k ∈ m) (h' : (f (m.get? k)).isNone = true) :
(m.alter k f).size = m.size - 1
theorem Std.DHashMap.size_alter_eq_self_of_not_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} (h : ¬k ∈ m) (h' : (f (m.get? k)).isNone = true) :
(m.alter k f).size = m.size
theorem Std.DHashMap.size_alter_eq_self_of_mem {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} (h : k ∈ m) (h' : (f (m.get? k)).isSome = true) :
(m.alter k f).size = m.size
theorem Std.DHashMap.size_alter_le_size {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).size ≤ m.size + 1
theorem Std.DHashMap.size_le_size_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
m.size - 1 ≤ (m.alter k f).size
theorem Std.DHashMap.get?_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).get? k' = if h : (k == k') = true then cast ⋯ (f (m.get? k)) else m.get? k'
@[simp]
theorem Std.DHashMap.get?_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).get? k = f (m.get? k)
theorem Std.DHashMap.get_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} {h : k' ∈ m.alter k f} :
(m.alter k f).get k' h = if heq : (k == k') = true then cast ⋯ ((f (m.get? k)).get ⋯) else m.get k' ⋯
@[simp]
theorem Std.DHashMap.get_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} {h : k ∈ m.alter k f} :
(m.alter k f).get k h = (f (m.get? k)).get ⋯
theorem Std.DHashMap.get!_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} [hi : Inhabited (β k')] {f : Option (β k) → Option (β k)} :
(m.alter k f).get! k' = if heq : (k == k') = true then (Option.map (cast ⋯) (f (m.get? k))).get! else m.get! k'
@[simp]
theorem Std.DHashMap.get!_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] {f : Option (β k) → Option (β k)} :
(m.alter k f).get! k = (f (m.get? k)).get!
theorem Std.DHashMap.getD_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {fallback : β k'} {f : Option (β k) → Option (β k)} :
(m.alter k f).getD k' fallback = if heq : (k == k') = true then (Option.map (cast ⋯) (f (m.get? k))).getD fallback else m.getD k' fallback
@[simp]
theorem Std.DHashMap.getD_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} {f : Option (β k) → Option (β k)} :
(m.alter k f).getD k fallback = (f (m.get? k)).getD fallback
theorem Std.DHashMap.getKey?_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).getKey? k' = if (k == k') = true then if (f (m.get? k)).isSome = true then some k else none else m.getKey? k'
theorem Std.DHashMap.getKey?_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).getKey? k = if (f (m.get? k)).isSome = true then some k else none
theorem Std.DHashMap.getKey!_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k k' : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).getKey! k' = if (k == k') = true then if (f (m.get? k)).isSome = true then k else default else m.getKey! k'
theorem Std.DHashMap.getKey!_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).getKey! k = if (f (m.get? k)).isSome = true then k else default
theorem Std.DHashMap.getKey_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k : α} {f : Option (β k) → Option (β k)} {h : k ∈ m.alter k f} :
(m.alter k f).getKey k h = k
theorem Std.DHashMap.getKeyD_alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' fallback : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).getKeyD k' fallback = if (k == k') = true then if (f (m.get? k)).isSome = true then k else fallback else m.getKeyD k' fallback
@[simp]
theorem Std.DHashMap.getKeyD_alter_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k fallback : α} {f : Option (β k) → Option (β k)} :
(m.alter k f).getKeyD k fallback = if (f (m.get? k)).isSome = true then k else fallback
theorem Std.DHashMap.Const.isEmpty_alter_eq_isEmpty_erase {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
(alter m k f).isEmpty = ((m.erase k).isEmpty && (f (get? m k)).isNone)
@[simp]
theorem Std.DHashMap.Const.isEmpty_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
(alter m k f).isEmpty = ((m.isEmpty || m.size == 1 && m.contains k) && (f (get? m k)).isNone)
theorem Std.DHashMap.Const.contains_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} :
(alter m k f).contains k' = if (k == k') = true then (f (get? m k)).isSome else m.contains k'
theorem Std.DHashMap.Const.mem_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} :
k' ∈ alter m k f ↔ if (k == k') = true then (f (get? m k)).isSome = true else k' ∈ m
theorem Std.DHashMap.Const.mem_alter_of_beq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} (h : (k == k') = true) :
k' ∈ alter m k f ↔ (f (get? m k)).isSome = true
@[simp]
theorem Std.DHashMap.Const.contains_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
(alter m k f).contains k = (f (get? m k)).isSome
@[simp]
theorem Std.DHashMap.Const.mem_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
k ∈ alter m k f ↔ (f (get? m k)).isSome = true
theorem Std.DHashMap.Const.contains_alter_of_beq_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} (h : (k == k') = false) :
(alter m k f).contains k' = m.contains k'
theorem Std.DHashMap.Const.mem_alter_of_beq_eq_false {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} (h : (k == k') = false) :
k' ∈ alter m k f ↔ k' ∈ m
theorem Std.DHashMap.Const.size_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
(alter m k f).size = if k ∈ m ∧ (f (get? m k)).isNone = true then m.size - 1 else if ¬k ∈ m ∧ (f (get? m k)).isSome = true then m.size + 1 else m.size
theorem Std.DHashMap.Const.size_alter_eq_add_one {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} (h : ¬k ∈ m) (h' : (f (get? m k)).isSome = true) :
(alter m k f).size = m.size + 1
theorem Std.DHashMap.Const.size_alter_eq_sub_one {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} (h : k ∈ m) (h' : (f (get? m k)).isNone = true) :
(alter m k f).size = m.size - 1
theorem Std.DHashMap.Const.size_alter_eq_self_of_not_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} (h : ¬k ∈ m) (h' : (f (get? m k)).isNone = true) :
(alter m k f).size = m.size
theorem Std.DHashMap.Const.size_alter_eq_self_of_mem {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} (h : k ∈ m) (h' : (f (get? m k)).isSome = true) :
(alter m k f).size = m.size
theorem Std.DHashMap.Const.size_alter_le_size {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
(alter m k f).size ≤ m.size + 1
theorem Std.DHashMap.Const.size_le_size_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
m.size - 1 ≤ (alter m k f).size
theorem Std.DHashMap.Const.get?_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} :
get? (alter m k f) k' = if (k == k') = true then f (get? m k) else get? m k'
@[simp]
theorem Std.DHashMap.Const.get?_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
get? (alter m k f) k = f (get? m k)
theorem Std.DHashMap.Const.get_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} {h : k' ∈ alter m k f} :
get (alter m k f) k' h = if heq : (k == k') = true then (f (get? m k)).get ⋯ else get m k' ⋯
@[simp]
theorem Std.DHashMap.Const.get_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} {h : k ∈ alter m k f} :
get (alter m k f) k h = (f (get? m k)).get ⋯
theorem Std.DHashMap.Const.get!_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} [Inhabited β] {f : Option β → Option β} :
get! (alter m k f) k' = if (k == k') = true then (f (get? m k)).get! else get! m k'
@[simp]
theorem Std.DHashMap.Const.get!_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited β] {f : Option β → Option β} :
get! (alter m k f) k = (f (get? m k)).get!
theorem Std.DHashMap.Const.getD_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} {f : Option β → Option β} :
getD (alter m k f) k' fallback = if (k == k') = true then (f (get? m k)).getD fallback else getD m k' fallback
@[simp]
theorem Std.DHashMap.Const.getD_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} {f : Option β → Option β} :
getD (alter m k f) k fallback = (f (get? m k)).getD fallback
theorem Std.DHashMap.Const.getKey?_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : Option β → Option β} :
(alter m k f).getKey? k' = if (k == k') = true then if (f (get? m k)).isSome = true then some k else none else m.getKey? k'
theorem Std.DHashMap.Const.getKey?_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : Option β → Option β} :
(alter m k f).getKey? k = if (f (get? m k)).isSome = true then some k else none
theorem Std.DHashMap.Const.getKey!_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} {f : Option β → Option β} :
(alter m k f).getKey! k' = if (k == k') = true then if (f (get? m k)).isSome = true then k else default else m.getKey! k'
theorem Std.DHashMap.Const.getKey!_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} {f : Option β → Option β} :
(alter m k f).getKey! k = if (f (get? m k)).isSome = true then k else default
theorem Std.DHashMap.Const.getKey_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} {f : Option β → Option β} {h : k' ∈ alter m k f} :
(alter m k f).getKey k' h = if heq : (k == k') = true then k else m.getKey k' ⋯
@[simp]
theorem Std.DHashMap.Const.getKey_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} {f : Option β → Option β} {h : k ∈ alter m k f} :
(alter m k f).getKey k h = k
theorem Std.DHashMap.Const.getKeyD_alter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' fallback : α} {f : Option β → Option β} :
(alter m k f).getKeyD k' fallback = if (k == k') = true then if (f (get? m k)).isSome = true then k else fallback else m.getKeyD k' fallback
theorem Std.DHashMap.Const.getKeyD_alter_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k fallback : α} {f : Option β → Option β} :
(alter m k f).getKeyD k fallback = if (f (get? m k)).isSome = true then k else fallback
@[simp]
theorem Std.DHashMap.isEmpty_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : β k → β k} :
@[simp]
theorem Std.DHashMap.contains_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : β k → β k} :
(m.modify k f).contains k' = m.contains k'
@[simp]
theorem Std.DHashMap.mem_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : β k → β k} :
k' ∈ m.modify k f ↔ k' ∈ m
@[simp]
theorem Std.DHashMap.size_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : β k → β k} :
(m.modify k f).size = m.size
theorem Std.DHashMap.get?_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : β k → β k} :
(m.modify k f).get? k' = if h : (k == k') = true then cast ⋯ (Option.map f (m.get? k)) else m.get? k'
@[simp]
theorem Std.DHashMap.get?_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : β k → β k} :
(m.modify k f).get? k = Option.map f (m.get? k)
theorem Std.DHashMap.get_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : β k → β k} (h : k' ∈ m.modify k f) :
(m.modify k f).get k' h = if heq : (k == k') = true then cast ⋯ (f (m.get k ⋯)) else m.get k' ⋯
@[simp]
theorem Std.DHashMap.get_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : β k → β k} {h : k ∈ m.modify k f} :
(m.modify k f).get k h = f (m.get k ⋯)
theorem Std.DHashMap.get!_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} [hi : Inhabited (β k')] {f : β k → β k} :
(m.modify k f).get! k' = if heq : (k == k') = true then (Option.map (cast ⋯) (Option.map f (m.get? k))).get! else m.get! k'
@[simp]
theorem Std.DHashMap.get!_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] {f : β k → β k} :
(m.modify k f).get! k = (Option.map f (m.get? k)).get!
theorem Std.DHashMap.getD_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {fallback : β k'} {f : β k → β k} :
(m.modify k f).getD k' fallback = if heq : (k == k') = true then (Option.map (cast ⋯) (Option.map f (m.get? k))).getD fallback else m.getD k' fallback
@[simp]
theorem Std.DHashMap.getD_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} {f : β k → β k} :
(m.modify k f).getD k fallback = (Option.map f (m.get? k)).getD fallback
theorem Std.DHashMap.getKey?_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' : α} {f : β k → β k} :
(m.modify k f).getKey? k' = if (k == k') = true then if k ∈ m then some k else none else m.getKey? k'
theorem Std.DHashMap.getKey?_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k : α} {f : β k → β k} :
(m.modify k f).getKey? k = if k ∈ m then some k else none
theorem Std.DHashMap.getKey!_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k k' : α} {f : β k → β k} :
(m.modify k f).getKey! k' = if (k == k') = true then if k ∈ m then k else default else m.getKey! k'
theorem Std.DHashMap.getKey!_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k : α} {f : β k → β k} :
(m.modify k f).getKey! k = if k ∈ m then k else default
@[simp]
theorem Std.DHashMap.getKey_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k : α} {f : β k → β k} {h : k ∈ m.modify k f} :
(m.modify k f).getKey k h = k
theorem Std.DHashMap.getKeyD_modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {k k' fallback : α} {f : β k → β k} :
(m.modify k f).getKeyD k' fallback = if (k == k') = true then if k ∈ m then k else fallback else m.getKeyD k' fallback
theorem Std.DHashMap.getKeyD_modify_self {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {k fallback : α} {f : β k → β k} :
(m.modify k f).getKeyD k fallback = if k ∈ m then k else fallback
@[simp]
theorem Std.DHashMap.Const.isEmpty_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} :
@[simp]
theorem Std.DHashMap.Const.contains_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} :
(modify m k f).contains k' = m.contains k'
@[simp]
theorem Std.DHashMap.Const.mem_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} :
k' ∈ modify m k f ↔ k' ∈ m
@[simp]
theorem Std.DHashMap.Const.size_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} :
(modify m k f).size = m.size
theorem Std.DHashMap.Const.get?_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} :
get? (modify m k f) k' = if (k == k') = true then Option.map f (get? m k) else get? m k'
@[simp]
theorem Std.DHashMap.Const.get?_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} :
get? (modify m k f) k = Option.map f (get? m k)
theorem Std.DHashMap.Const.get_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} {h : k' ∈ modify m k f} :
get (modify m k f) k' h = if heq : (k == k') = true then f (get m k ⋯) else get m k' ⋯
@[simp]
theorem Std.DHashMap.Const.get_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} {h : k ∈ modify m k f} :
get (modify m k f) k h = f (get m k ⋯)
theorem Std.DHashMap.Const.get!_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} [Inhabited β] {f : β → β} :
get! (modify m k f) k' = if (k == k') = true then (Option.map f (get? m k)).get! else get! m k'
@[simp]
theorem Std.DHashMap.Const.get!_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} [Inhabited β] {f : β → β} :
get! (modify m k f) k = (Option.map f (get? m k)).get!
theorem Std.DHashMap.Const.getD_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {fallback : β} {f : β → β} :
getD (modify m k f) k' fallback = if (k == k') = true then (Option.map f (get? m k)).getD fallback else getD m k' fallback
@[simp]
theorem Std.DHashMap.Const.getD_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} {f : β → β} :
getD (modify m k f) k fallback = (Option.map f (get? m k)).getD fallback
theorem Std.DHashMap.Const.getKey?_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' : α} {f : β → β} :
(modify m k f).getKey? k' = if (k == k') = true then if k ∈ m then some k else none else m.getKey? k'
theorem Std.DHashMap.Const.getKey?_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {f : β → β} :
(modify m k f).getKey? k = if k ∈ m then some k else none
theorem Std.DHashMap.Const.getKey!_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} {f : β → β} :
(modify m k f).getKey! k' = if (k == k') = true then if k ∈ m then k else default else m.getKey! k'
theorem Std.DHashMap.Const.getKey!_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} {f : β → β} :
(modify m k f).getKey! k = if k ∈ m then k else default
theorem Std.DHashMap.Const.getKey_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k k' : α} {f : β → β} {h : k' ∈ modify m k f} :
(modify m k f).getKey k' h = if (k == k') = true then k else m.getKey k' ⋯
@[simp]
theorem Std.DHashMap.Const.getKey_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} {f : β → β} {h : k ∈ modify m k f} :
(modify m k f).getKey k h = k
theorem Std.DHashMap.Const.getKeyD_modify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k k' fallback : α} {f : β → β} :
(modify m k f).getKeyD k' fallback = if (k == k') = true then if k ∈ m then k else fallback else m.getKeyD k' fallback
theorem Std.DHashMap.Const.getKeyD_modify_self {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k fallback : α} {f : β → β} :
(modify m k f).getKeyD k fallback = if k ∈ m then k else fallback
@[simp]
theorem Std.DHashMap.Equiv.refl {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} (m : DHashMap α β) :
m.Equiv m
theorem Std.DHashMap.Equiv.rfl {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
m.Equiv m
theorem Std.DHashMap.Equiv.symm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} :
m₁.Equiv m₂ → m₂.Equiv m₁
theorem Std.DHashMap.Equiv.trans {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} :
m₁.Equiv m₂ → m₂.Equiv m₃ → m₁.Equiv m₃
instance Std.DHashMap.Equiv.instTrans {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} :
Equations
theorem Std.DHashMap.Equiv.comm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} :
m₁.Equiv m₂ ↔ m₂.Equiv m₁
theorem Std.DHashMap.Equiv.congr_left {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} (h : m₁.Equiv m₂) :
m₁.Equiv m₃ ↔ m₂.Equiv m₃
theorem Std.DHashMap.Equiv.congr_right {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ m₃ : DHashMap α β} (h : m₁.Equiv m₂) :
m₃.Equiv m₁ ↔ m₃.Equiv m₂
theorem Std.DHashMap.Equiv.isEmpty_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : m₁.Equiv m₂) :
m₁.isEmpty = m₂.isEmpty
theorem Std.DHashMap.Equiv.size_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (h : m₁.Equiv m₂) :
m₁.size = m₂.size
theorem Std.DHashMap.Equiv.contains_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (h : m₁.Equiv m₂) :
m₁.contains k = m₂.contains k
theorem Std.DHashMap.Equiv.mem_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (h : m₁.Equiv m₂) :
k ∈ m₁ ↔ k ∈ m₂
theorem Std.DHashMap.Equiv.toList_perm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} (h : m₁.Equiv m₂) :
m₁.toList.Perm m₂.toList
theorem Std.DHashMap.Equiv.of_toList_perm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} (h : m₁.toList.Perm m₂.toList) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.keys_perm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} (h : m₁.Equiv m₂) :
m₁.keys.Perm m₂.keys
theorem Std.DHashMap.Equiv.get?_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (h : m₁.Equiv m₂) :
m₁.get? k = m₂.get? k
theorem Std.DHashMap.Equiv.get_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} (hk : k ∈ m₁) (h : m₁.Equiv m₂) :
m₁.get k hk = m₂.get k ⋯
theorem Std.DHashMap.Equiv.get!_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} [Inhabited (β k)] (h : m₁.Equiv m₂) :
m₁.get! k = m₂.get! k
theorem Std.DHashMap.Equiv.getD_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] {k : α} {fallback : β k} (h : m₁.Equiv m₂) :
m₁.getD k fallback = m₂.getD k fallback
theorem Std.DHashMap.Equiv.getKey?_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (h : m₁.Equiv m₂) :
m₁.getKey? k = m₂.getKey? k
theorem Std.DHashMap.Equiv.getKey_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k : α} (hk : k ∈ m₁) (h : m₁.Equiv m₂) :
m₁.getKey k hk = m₂.getKey k ⋯
theorem Std.DHashMap.Equiv.getKey!_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} (h : m₁.Equiv m₂) :
m₁.getKey! k = m₂.getKey! k
theorem Std.DHashMap.Equiv.getKeyD_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] {k fallback : α} (h : m₁.Equiv m₂) :
m₁.getKeyD k fallback = m₂.getKeyD k fallback
theorem Std.DHashMap.Equiv.insert {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (k : α) (v : β k) (h : m₁.Equiv m₂) :
(m₁.insert k v).Equiv (m₂.insert k v)
theorem Std.DHashMap.Equiv.erase {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (k : α) (h : m₁.Equiv m₂) :
(m₁.erase k).Equiv (m₂.erase k)
theorem Std.DHashMap.Equiv.insertIfNew {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (k : α) (v : β k) (h : m₁.Equiv m₂) :
(m₁.insertIfNew k v).Equiv (m₂.insertIfNew k v)
theorem Std.DHashMap.Equiv.insertMany_list {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] (l : List ((a : α) × β a)) (h : m₁.Equiv m₂) :
(m₁.insertMany l).Equiv (m₂.insertMany l)
theorem Std.DHashMap.Equiv.alter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] (k : α) (f : Option (β k) → Option (β k)) (h : m₁.Equiv m₂) :
(m₁.alter k f).Equiv (m₂.alter k f)
theorem Std.DHashMap.Equiv.modify {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] (k : α) (f : β k → β k) (h : m₁.Equiv m₂) :
(m₁.modify k f).Equiv (m₂.modify k f)
theorem Std.DHashMap.Equiv.filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} (f : (a : α) → β a → Bool) (h : m₁.Equiv m₂) :
theorem Std.DHashMap.Equiv.map {α : Type u} {β : α → Type v} {γ : α → Type w} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} (f : (a : α) → β a → γ a) (h : m₁.Equiv m₂) :
(DHashMap.map f m₁).Equiv (DHashMap.map f m₂)
theorem Std.DHashMap.Equiv.filterMap {α : Type u} {β : α → Type v} {γ : α → Type w} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} (f : (a : α) → β a → Option (γ a)) (h : m₁.Equiv m₂) :
theorem Std.DHashMap.Equiv.of_forall_get?_eq {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [LawfulBEq α] (h : ∀ (k : α), m₁.get? k = m₂.get? k) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.constToList_perm {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} (h : m₁.Equiv m₂) :
theorem Std.DHashMap.Equiv.of_constToList_perm {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} (h : (Const.toList m₁).Perm (Const.toList m₂)) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.of_keys_unit_perm {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α fun (x : α) => Unit} (h : m₁.keys.Perm m₂.keys) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.constGet?_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (h : m₁.Equiv m₂) :
Const.get? m₁ k = Const.get? m₂ k
theorem Std.DHashMap.Equiv.constGet_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} (hk : k ∈ m₁) (h : m₁.Equiv m₂) :
Const.get m₁ k hk = Const.get m₂ k ⋯
theorem Std.DHashMap.Equiv.constGet!_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {k : α} (h : m₁.Equiv m₂) :
Const.get! m₁ k = Const.get! m₂ k
theorem Std.DHashMap.Equiv.constGetD_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {k : α} {fallback : β} (h : m₁.Equiv m₂) :
Const.getD m₁ k fallback = Const.getD m₂ k fallback
theorem Std.DHashMap.Equiv.constInsertMany_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] (l : List (α × β)) (h : m₁.Equiv m₂) :
theorem Std.DHashMap.Equiv.constInsertManyIfNewUnit_list {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {m₁ m₂ : DHashMap α fun (x : α) => Unit} (l : List α) (h : m₁.Equiv m₂) :
theorem Std.DHashMap.Equiv.constAlter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] (k : α) (f : Option β → Option β) (h : m₁.Equiv m₂) :
(Const.alter m₁ k f).Equiv (Const.alter m₂ k f)
theorem Std.DHashMap.Equiv.constModify {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] (k : α) (f : β → β) (h : m₁.Equiv m₂) :
(Const.modify m₁ k f).Equiv (Const.modify m₂ k f)
theorem Std.DHashMap.Equiv.of_forall_getKey_eq_of_forall_constGet?_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] (hk : ∀ (k : α) (hk : k ∈ m₁) (hk' : k ∈ m₂), m₁.getKey k hk = m₂.getKey k hk') (hv : ∀ (k : α), Const.get? m₁ k = Const.get? m₂ k) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.of_forall_constGet?_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [LawfulBEq α] (hv : ∀ (k : α), Const.get? m₁ k = Const.get? m₂ k) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.of_forall_getKey?_unit_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {m₁ m₂ : DHashMap α fun (x : α) => Unit} (h : ∀ (k : α), m₁.getKey? k = m₂.getKey? k) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.of_forall_contains_unit_eq {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {m₁ m₂ : DHashMap α fun (x : α) => Unit} (h : ∀ (k : α), m₁.contains k = m₂.contains k) :
m₁.Equiv m₂
theorem Std.DHashMap.Equiv.of_forall_mem_unit_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [LawfulBEq α] {m₁ m₂ : DHashMap α fun (x : α) => Unit} (h : ∀ (k : α), k ∈ m₁ ↔ k ∈ m₂) :
m₁.Equiv m₂
def Std.DHashMap.isSetoid (α : Type u_1) (β : α → Type u_2) [BEq α] [Hashable α] :

Internal implementation detail of the hash map.

Equations
Instances For
    @[simp]
    theorem Std.DHashMap.equiv_emptyWithCapacity_iff_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {c : Nat} :
    @[simp]
    theorem Std.DHashMap.equiv_empty_iff_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
    @[simp]
    theorem Std.DHashMap.emptyWithCapacity_equiv_iff_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {c : Nat} :
    @[simp]
    theorem Std.DHashMap.empty_equiv_iff_isEmpty {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
    theorem Std.DHashMap.equiv_iff_toList_perm {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m₁ m₂ : DHashMap α β} [EquivBEq α] [LawfulHashable α] :
    m₁.Equiv m₂ ↔ m₁.toList.Perm m₂.toList
    theorem Std.DHashMap.Const.equiv_iff_toList_perm {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m₁ m₂ : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] :
    m₁.Equiv m₂ ↔ (toList m₁).Perm (toList m₂)
    theorem Std.DHashMap.Const.equiv_iff_keys_unit_perm {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} [EquivBEq α] [LawfulHashable α] {m₁ m₂ : DHashMap α fun (x : α) => Unit} :
    m₁.Equiv m₂ ↔ m₁.keys.Perm m₂.keys
    theorem Std.DHashMap.toList_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} {f : (a : α) → β a → Option (γ a)} :
    (filterMap f m).toList.Perm (List.filterMap (fun (p : (a : α) × β a) => Option.map (fun (x : γ p.fst) => ⟨p.fst, x⟩) (f p.fst p.snd)) m.toList)
    theorem Std.DHashMap.isEmpty_filterMap_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} :
    (filterMap f m).isEmpty = true ↔ ∀ (k : α) (h : k ∈ m), f k (m.get k h) = none
    theorem Std.DHashMap.isEmpty_filterMap_eq_false_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} :
    (filterMap f m).isEmpty = false ↔ ∃ (k : α), ∃ (h : k ∈ m), (f k (m.get k h)).isSome = true
    theorem Std.DHashMap.contains_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    (filterMap f m).contains k = Option.any (fun (x : β k) => (f k x).isSome) (m.get? k)
    theorem Std.DHashMap.mem_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    k ∈ filterMap f m ↔ ∃ (h : k ∈ m), (f k (m.get k h)).isSome = true
    theorem Std.DHashMap.contains_of_contains_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    theorem Std.DHashMap.mem_of_mem_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    k ∈ filterMap f m → k ∈ m
    theorem Std.DHashMap.size_filterMap_le_size {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Option (γ a)} :
    theorem Std.DHashMap.size_filterMap_eq_size_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} :
    (filterMap f m).size = m.size ↔ ∀ (a : α) (h : a ∈ m), (f a (m.get a h)).isSome = true
    @[simp]
    theorem Std.DHashMap.get?_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    (filterMap f m).get? k = (m.get? k).bind (f k)
    theorem Std.DHashMap.isSome_apply_of_mem_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} (h' : k ∈ filterMap f m) :
    (f k (m.get k ⋯)).isSome = true
    @[simp]
    theorem Std.DHashMap.get_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} {h' : k ∈ filterMap f m} :
    (filterMap f m).get k h' = (f k (m.get k ⋯)).get ⋯
    @[simp]
    theorem Std.DHashMap.get!_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} [Inhabited (γ k)] :
    (filterMap f m).get! k = ((m.get? k).bind (f k)).get!
    @[simp]
    theorem Std.DHashMap.getD_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} {fallback : γ k} :
    (filterMap f m).getD k fallback = ((m.get? k).bind (f k)).getD fallback
    theorem Std.DHashMap.getKey?_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    (filterMap f m).getKey? k = (m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => (f x (m.get x ⋯)).isSome
    @[simp]
    theorem Std.DHashMap.getKey_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Option (γ a)} {k : α} {h' : k ∈ filterMap f m} :
    (filterMap f m).getKey k h' = m.getKey k ⋯
    theorem Std.DHashMap.getKey!_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] [Inhabited α] {f : (a : α) → β a → Option (γ a)} {k : α} :
    (filterMap f m).getKey! k = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => (f x (m.get x ⋯)).isSome).get!
    theorem Std.DHashMap.getKeyD_filterMap {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → Option (γ a)} {k fallback : α} :
    (filterMap f m).getKeyD k fallback = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => (f x (m.get x ⋯)).isSome).getD fallback
    theorem Std.DHashMap.Const.isEmpty_filterMap_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} :
    (filterMap f m).isEmpty = true ↔ ∀ (k : α) (h : k ∈ m), f (m.getKey k h) (get m k h) = none
    theorem Std.DHashMap.Const.isEmpty_filterMap_eq_false_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} :
    (filterMap f m).isEmpty = false ↔ ∃ (k : α), ∃ (h : k ∈ m), (f (m.getKey k h) (get m k h)).isSome = true
    theorem Std.DHashMap.Const.mem_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k : α} :
    k ∈ filterMap f m ↔ ∃ (h : k ∈ m), (f (m.getKey k h) (get m k h)).isSome = true
    theorem Std.DHashMap.Const.size_filterMap_eq_size_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} :
    (filterMap f m).size = m.size ↔ ∀ (k : α) (h : k ∈ m), (f (m.getKey k h) (get m k h)).isSome = true
    @[simp]
    theorem Std.DHashMap.Const.get?_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k : α} :
    get? (filterMap f m) k = (get? m k).pbind fun (x : β) (h' : get? m k = some x) => f (m.getKey k ⋯) x
    theorem Std.DHashMap.Const.get?_filterMap' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → Option γ} {k : α} :
    get? (filterMap f m) k = (get? m k).bind fun (x : β) => f k x

    Simpler variant of get?_filterMap when LawfulBEq is available.

    theorem Std.DHashMap.Const.get?_filterMap_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k k' : α} (h : m.getKey? k = some k') :
    get? (filterMap f m) k = (get? m k).bind (f k')
    theorem Std.DHashMap.Const.isSome_apply_of_mem_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k : α} (h : k ∈ filterMap f m) :
    (f (m.getKey k ⋯) (get m k ⋯)).isSome = true
    @[simp]
    theorem Std.DHashMap.Const.get_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k : α} {h : k ∈ filterMap f m} :
    get (filterMap f m) k h = (f (m.getKey k ⋯) (get m k ⋯)).get ⋯
    theorem Std.DHashMap.Const.get_filterMap' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → Option γ} {k : α} {h : k ∈ filterMap f m} :
    get (filterMap f m) k h = (f k (get m k ⋯)).get ⋯

    Simpler variant of get_filterMap when LawfulBEq is available.

    theorem Std.DHashMap.Const.get!_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited γ] {f : α → β → Option γ} {k : α} :
    get! (filterMap f m) k = ((get? m k).pbind fun (x : β) (h' : get? m k = some x) => f (m.getKey k ⋯) x).get!
    theorem Std.DHashMap.Const.get!_filterMap' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] [Inhabited γ] {f : α → β → Option γ} {k : α} :
    get! (filterMap f m) k = ((get? m k).bind (f k)).get!

    Simpler variant of get!_filterMap when LawfulBEq is available.

    theorem Std.DHashMap.Const.get!_filterMap_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited γ] {f : α → β → Option γ} {k k' : α} (h : m.getKey? k = some k') :
    get! (filterMap f m) k = ((get? m k).bind (f k')).get!
    theorem Std.DHashMap.Const.getD_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k : α} {fallback : γ} :
    getD (filterMap f m) k fallback = ((get? m k).pbind fun (x : β) (h' : get? m k = some x) => f (m.getKey k ⋯) x).getD fallback
    theorem Std.DHashMap.Const.getD_filterMap' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → Option γ} {k : α} {fallback : γ} :
    getD (filterMap f m) k fallback = ((get? m k).bind (f k)).getD fallback

    Simpler variant of getD_filterMap when LawfulBEq is available.

    theorem Std.DHashMap.Const.getD_filterMap_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
    getD (filterMap f m) k fallback = ((get? m k).bind (f k')).getD fallback
    theorem Std.DHashMap.Const.toList_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} {f : α → β → Option γ} :
    (toList (filterMap (fun (k : α) (v : β) => f k v) m)).Perm (List.filterMap (fun (p : α × β) => Option.map (fun (x : γ) => (p.fst, x)) (f p.fst p.snd)) (toList m))
    theorem Std.DHashMap.Const.getKey?_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k : α} :
    (filterMap f m).getKey? k = (m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => (f x (get m x ⋯)).isSome
    theorem Std.DHashMap.Const.getKey!_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {f : α → β → Option γ} {k : α} :
    (filterMap f m).getKey! k = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => (f x (get m x ⋯)).isSome).get!
    theorem Std.DHashMap.Const.getKeyD_filterMap {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Option γ} {k fallback : α} :
    (filterMap f m).getKeyD k fallback = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => (f x (get m x ⋯)).isSome).getD fallback
    theorem Std.DHashMap.filterMap_equiv_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {f : (a : α) → β a → Bool} :
    (filterMap (fun (k : α) => Option.guard fun (v : β k) => f k v) m).Equiv (filter f m)
    theorem Std.DHashMap.toList_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {f : (a : α) → β a → Bool} :
    (filter f m).toList.Perm (List.filter (fun (p : (a : α) × β a) => f p.fst p.snd) m.toList)
    theorem Std.DHashMap.keys_filter_key {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {f : α → Bool} :
    (filter (fun (k : α) (x : β k) => f k) m).keys.Perm (List.filter f m.keys)
    theorem Std.DHashMap.isEmpty_filter_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} :
    (filter f m).isEmpty = true ↔ ∀ (k : α) (h : k ∈ m), f k (m.get k h) = false
    theorem Std.DHashMap.isEmpty_filter_eq_false_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} :
    (filter f m).isEmpty = false ↔ ∃ (k : α), ∃ (h : k ∈ m), f k (m.get k h) = true
    theorem Std.DHashMap.isEmpty_filter_key_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} :
    (filter (fun (a : α) (x : β a) => f a) m).isEmpty = true ↔ ∀ (k : α) (h : k ∈ m), f (m.getKey k h) = false
    theorem Std.DHashMap.isEmpty_filter_key_eq_false_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} :
    (filter (fun (a : α) (x : β a) => f a) m).isEmpty = false ↔ ∃ (k : α), ∃ (h : k ∈ m), f (m.getKey k h) = true
    theorem Std.DHashMap.contains_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} :
    (filter f m).contains k = Option.any (f k) (m.get? k)
    theorem Std.DHashMap.mem_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} :
    k ∈ filter f m ↔ ∃ (h : k ∈ m), f k (m.get k h) = true
    theorem Std.DHashMap.mem_filter_key {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} {k : α} :
    k ∈ filter (fun (a : α) (x : β a) => f a) m ↔ ∃ (h : k ∈ m), f (m.getKey k h) = true
    theorem Std.DHashMap.contains_of_contains_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Bool} {k : α} :
    (filter f m).contains k = true → m.contains k = true
    theorem Std.DHashMap.mem_of_mem_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Bool} {k : α} :
    k ∈ filter f m → k ∈ m
    theorem Std.DHashMap.size_filter_le_size {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Bool} :
    theorem Std.DHashMap.size_filter_eq_size_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} :
    (filter f m).size = m.size ↔ ∀ (k : α) (h : k ∈ m), f k (m.get k h) = true
    theorem Std.DHashMap.filter_equiv_self_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} :
    (filter f m).Equiv m ↔ ∀ (k : α) (h : k ∈ m), f k (m.get k h) = true
    theorem Std.DHashMap.filter_key_equiv_self_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} :
    (filter (fun (k : α) (x : β k) => f k) m).Equiv m ↔ ∀ (k : α) (h : k ∈ m), f (m.getKey k h) = true
    theorem Std.DHashMap.size_filter_key_eq_size_iff {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} :
    (filter (fun (k : α) (x : β k) => f k) m).size = m.size ↔ ∀ (k : α) (h : k ∈ m), f (m.getKey k h) = true
    @[simp]
    theorem Std.DHashMap.get?_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} :
    (filter f m).get? k = Option.filter (f k) (m.get? k)
    @[simp]
    theorem Std.DHashMap.get_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} {h' : k ∈ filter f m} :
    (filter f m).get k h' = m.get k ⋯
    theorem Std.DHashMap.get!_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} [Inhabited (β k)] :
    (filter f m).get! k = (Option.filter (f k) (m.get? k)).get!
    theorem Std.DHashMap.getD_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} {fallback : β k} :
    (filter f m).getD k fallback = (Option.filter (f k) (m.get? k)).getD fallback
    theorem Std.DHashMap.keys_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} :
    (filter f m).keys.Perm (List.filter (fun (x : { x : α // x ∈ m.keys }) => match x with | ⟨x, h'⟩ => f x (m.get x ⋯)) m.keys.attach).unattach
    theorem Std.DHashMap.getKey?_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k : α} :
    (filter f m).getKey? k = (m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => f x (m.get x ⋯)
    theorem Std.DHashMap.getKey?_filter_key {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} {k : α} :
    (filter (fun (k : α) (x : β k) => f k) m).getKey? k = Option.filter f (m.getKey? k)
    @[simp]
    theorem Std.DHashMap.getKey_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → Bool} {k : α} {h' : k ∈ filter f m} :
    (filter f m).getKey k h' = m.getKey k ⋯
    theorem Std.DHashMap.getKey!_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] [Inhabited α] {f : (a : α) → β a → Bool} {k : α} :
    (filter f m).getKey! k = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => f x (m.get x ⋯)).get!
    theorem Std.DHashMap.getKey!_filter_key {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {f : α → Bool} {k : α} :
    (filter (fun (k : α) (x : β k) => f k) m).getKey! k = (Option.filter f (m.getKey? k)).get!
    theorem Std.DHashMap.getKeyD_filter {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [LawfulBEq α] {f : (a : α) → β a → Bool} {k fallback : α} :
    (filter f m).getKeyD k fallback = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => f x (m.get x ⋯)).getD fallback
    theorem Std.DHashMap.getKeyD_filter_key {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} [EquivBEq α] [LawfulHashable α] {f : α → Bool} {k fallback : α} :
    (filter (fun (k : α) (x : β k) => f k) m).getKeyD k fallback = (Option.filter f (m.getKey? k)).getD fallback
    theorem Std.DHashMap.Const.isEmpty_filter_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} :
    (filter f m).isEmpty = true ↔ ∀ (k : α) (h : k ∈ m), f (m.getKey k h) (get m k h) = false
    theorem Std.DHashMap.Const.isEmpty_filter_eq_false_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} :
    (filter f m).isEmpty = false ↔ ∃ (k : α), ∃ (h : k ∈ m), f (m.getKey k h) (get m k h) = true
    theorem Std.DHashMap.Const.mem_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k : α} :
    k ∈ filter f m ↔ ∃ (h' : k ∈ m), f (m.getKey k h') (get m k h') = true
    theorem Std.DHashMap.Const.size_filter_le_size {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} :
    theorem Std.DHashMap.Const.size_filter_eq_size_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} :
    (filter f m).size = m.size ↔ ∀ (a : α) (h : a ∈ m), f (m.getKey a h) (get m a h) = true
    theorem Std.DHashMap.Const.filter_equiv_self_iff {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} :
    (filter f m).Equiv m ↔ ∀ (k : α) (h : k ∈ m), f (m.getKey k h) (get m k h) = true
    theorem Std.DHashMap.Const.get?_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k : α} :
    get? (filter f m) k = (get? m k).pfilter fun (x : β) (h' : get? m k = some x) => f (m.getKey k ⋯) x
    @[simp]
    theorem Std.DHashMap.Const.get?_filter' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → Bool} {k : α} :
    get? (filter f m) k = Option.filter (f k) (get? m k)

    Simpler variant of get?_filter when LawfulBEq is available.

    theorem Std.DHashMap.Const.get?_filter_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k k' : α} :
    m.getKey? k = some k' → get? (filter f m) k = Option.filter (fun (x : β) => f k' x) (get? m k)
    @[simp]
    theorem Std.DHashMap.Const.get_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k : α} {h' : k ∈ filter f m} :
    get (filter f m) k h' = get m k ⋯
    theorem Std.DHashMap.Const.get!_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {f : α → β → Bool} {k : α} :
    get! (filter f m) k = ((get? m k).pfilter fun (x : β) (h' : get? m k = some x) => f (m.getKey k ⋯) x).get!
    theorem Std.DHashMap.Const.get!_filter' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] [Inhabited β] {f : α → β → Bool} {k : α} :
    get! (filter f m) k = (Option.filter (f k) (get? m k)).get!

    Simpler variant of get!_filter when LawfulBEq is available.

    theorem Std.DHashMap.Const.get!_filter_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited β] {f : α → β → Bool} {k k' : α} :
    m.getKey? k = some k' → get! (filter f m) k = (Option.filter (fun (x : β) => f k' x) (get? m k)).get!
    theorem Std.DHashMap.Const.getD_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k : α} {fallback : β} :
    getD (filter f m) k fallback = ((get? m k).pfilter fun (x : β) (h' : get? m k = some x) => f (m.getKey k ⋯) x).getD fallback
    theorem Std.DHashMap.Const.getD_filter' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → Bool} {k : α} {fallback : β} :
    getD (filter f m) k fallback = (Option.filter (f k) (get? m k)).getD fallback

    Simpler variant of getD_filter when LawfulBEq is available.

    theorem Std.DHashMap.Const.getD_filter_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k k' : α} {fallback : β} :
    m.getKey? k = some k' → getD (filter f m) k fallback = (Option.filter (fun (x : β) => f k' x) (get? m k)).getD fallback
    theorem Std.DHashMap.Const.toList_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} {f : α → β → Bool} :
    (toList (filter f m)).Perm (List.filter (fun (p : α × β) => f p.fst p.snd) (toList m))
    theorem Std.DHashMap.Const.keys_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} :
    (filter f m).keys.Perm (List.filter (fun (x : { x : α // x ∈ m.keys }) => match x with | ⟨x, h'⟩ => f x (get m x ⋯)) m.keys.attach).unattach
    theorem Std.DHashMap.Const.getKey?_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k : α} :
    (filter f m).getKey? k = (m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => f x (get m x ⋯)
    theorem Std.DHashMap.Const.getKey!_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited α] {f : α → β → Bool} {k : α} :
    (filter f m).getKey! k = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => f x (get m x ⋯)).get!
    theorem Std.DHashMap.Const.getKeyD_filter {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → Bool} {k fallback : α} :
    (filter f m).getKeyD k fallback = ((m.getKey? k).pfilter fun (x : α) (h' : m.getKey? k = some x) => f x (get m x ⋯)).getD fallback
    theorem Std.DHashMap.map_id_equiv {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} :
    (map (fun (x : α) (v : β x) => v) m).Equiv m
    theorem Std.DHashMap.map_map_equiv {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} {δ : α → Type w'} {f : (a : α) → β a → γ a} {g : (a : α) → γ a → δ a} :
    (map g (map f m)).Equiv (map (fun (k : α) (v : β k) => g k (f k v)) m)
    theorem Std.DHashMap.toList_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} {f : (a : α) → β a → γ a} :
    (map f m).toList.Perm (List.map (fun (p : (a : α) × β a) => ⟨p.fst, f p.fst p.snd⟩) m.toList)
    theorem Std.DHashMap.keys_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} {f : (a : α) → β a → γ a} :
    (map f m).keys.Perm m.keys
    theorem Std.DHashMap.filterMap_equiv_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} :
    (filterMap (fun (k : α) (v : β k) => some (f k v)) m).Equiv (map f m)
    @[simp]
    theorem Std.DHashMap.isEmpty_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} :
    theorem Std.DHashMap.contains_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k : α} :
    (map f m).contains k = m.contains k
    theorem Std.DHashMap.contains_of_contains_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k : α} :
    (map f m).contains k = true → m.contains k = true
    @[simp]
    theorem Std.DHashMap.mem_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k : α} :
    k ∈ map f m ↔ k ∈ m
    theorem Std.DHashMap.mem_of_mem_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k : α} :
    k ∈ map f m → k ∈ m
    @[simp]
    theorem Std.DHashMap.size_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} :
    (map f m).size = m.size
    @[simp]
    theorem Std.DHashMap.get?_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → γ a} {k : α} :
    (map f m).get? k = Option.map (f k) (m.get? k)
    @[simp]
    theorem Std.DHashMap.get_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → γ a} {k : α} {h' : k ∈ map f m} :
    (map f m).get k h' = f k (m.get k ⋯)
    theorem Std.DHashMap.get!_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → γ a} {k : α} [Inhabited (γ k)] :
    (map f m).get! k = (Option.map (f k) (m.get? k)).get!
    theorem Std.DHashMap.getD_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [LawfulBEq α] {f : (a : α) → β a → γ a} {k : α} {fallback : γ k} :
    (map f m).getD k fallback = (Option.map (f k) (m.get? k)).getD fallback
    @[simp]
    theorem Std.DHashMap.getKey?_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k : α} :
    (map f m).getKey? k = m.getKey? k
    @[simp]
    theorem Std.DHashMap.getKey_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k : α} {h' : k ∈ map f m} :
    (map f m).getKey k h' = m.getKey k ⋯
    @[simp]
    theorem Std.DHashMap.getKey!_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] [Inhabited α] {f : (a : α) → β a → γ a} {k : α} :
    (map f m).getKey! k = m.getKey! k
    @[simp]
    theorem Std.DHashMap.getKeyD_map {α : Type u} {β : α → Type v} {x✝ : BEq α} {x✝¹ : Hashable α} {m : DHashMap α β} {γ : α → Type w} [EquivBEq α] [LawfulHashable α] {f : (a : α) → β a → γ a} {k fallback : α} :
    (map f m).getKeyD k fallback = m.getKeyD k fallback
    @[simp]
    theorem Std.DHashMap.Const.get?_map {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → γ} {k : α} :
    get? (map f m) k = Option.map (f k) (get? m k)
    @[simp]
    theorem Std.DHashMap.Const.get?_map' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → γ} {k : α} :
    get? (map f m) k = Option.pmap (fun (v : β) (h' : k ∈ m) => f (m.getKey k h') v) (get? m k) ⋯

    Variant of get?_map that holds with EquivBEq (i.e. without LawfulBEq).

    theorem Std.DHashMap.Const.get?_map_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
    get? (map f m) k = Option.map (f k') (get? m k)
    @[simp]
    theorem Std.DHashMap.Const.get_map {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → γ} {k : α} {h' : k ∈ map f m} :
    get (map f m) k h' = f k (get m k ⋯)
    @[simp]
    theorem Std.DHashMap.Const.get_map' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → γ} {k : α} {h' : k ∈ map f m} :
    get (map f m) k h' = f (m.getKey k ⋯) (get m k ⋯)

    Variant of get_map that holds with EquivBEq (i.e. without LawfulBEq).

    theorem Std.DHashMap.Const.get!_map {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] [Inhabited γ] {f : α → β → γ} {k : α} :
    get! (map f m) k = (Option.map (f k) (get? m k)).get!
    theorem Std.DHashMap.Const.get!_map' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited γ] {f : α → β → γ} {k : α} :
    get! (map f m) k = (Option.pmap (fun (v : β) (h : k ∈ m) => f (m.getKey k h) v) (get? m k) ⋯).get!

    Variant of get!_map that holds with EquivBEq (i.e. without LawfulBEq).

    theorem Std.DHashMap.Const.get!_map_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited γ] {f : α → β → γ} {k k' : α} (h : m.getKey? k = some k') :
    get! (map f m) k = (Option.map (f k') (get? m k)).get!
    theorem Std.DHashMap.Const.getD_map {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [LawfulBEq α] {f : α → β → γ} {k : α} {fallback : γ} :
    getD (map f m) k fallback = (Option.map (f k) (get? m k)).getD fallback
    theorem Std.DHashMap.Const.getD_map' {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] {f : α → β → γ} {k : α} {fallback : γ} :
    getD (map f m) k fallback = (Option.pmap (fun (v : β) (h : k ∈ m) => f (m.getKey k h) v) (get? m k) ⋯).getD fallback

    Variant of getD_map that holds with EquivBEq (i.e. without LawfulBEq).

    theorem Std.DHashMap.Const.getD_map_of_getKey?_eq_some {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} [EquivBEq α] [LawfulHashable α] [Inhabited γ] {f : α → β → γ} {k k' : α} {fallback : γ} (h : m.getKey? k = some k') :
    getD (map f m) k fallback = (Option.map (f k') (get? m k)).getD fallback
    theorem Std.DHashMap.Const.toList_map {α : Type u} {x✝ : BEq α} {x✝¹ : Hashable α} {β : Type v} {γ : Type w} {m : DHashMap α fun (x : α) => β} {f : α → β → γ} :
    (toList (map f m)).Perm (List.map (fun (p : α × β) => (p.fst, f p.fst p.snd)) (toList m))