This is an internal implementation file of the hash map. Users of the hash map should not rely on the contents of this file.
File contents: proof that all hash map operations preserve WFImp to show WF.out : WF → WFImp
@[simp]
@[simp]
theorem Std.DHashMap.Internal.computeSize_eq {α : Type u} {β : α → Type v} {buckets : Array (AssocList α β)} :
theorem Std.DHashMap.Internal.Raw.equiv_iff_toListModel_perm {α : Type u} {β : α → Type v} {m₁ m₂ : Raw α β} :
theorem Std.DHashMap.Internal.Raw.fold_eq {α : Type u} {β : α → Type v} {γ : Type w} {l : Raw α β} {f : γ → (a : α) → β a → γ} {init : γ} :
Raw.fold f init l = Array.foldl (fun (acc : γ) (l : AssocList α β) => AssocList.foldl f acc l) init l.buckets
theorem Std.DHashMap.Internal.Raw.fold_cons_key {α : Type u} {β : α → Type v} {l : Raw α β} {acc : List α} :
Raw.fold (fun (acc : List α) (k : α) (x : β k) => k :: acc) acc l = Internal.List.keys (toListModel l.buckets).reverse ++ acc
theorem Std.DHashMap.Internal.Raw.foldRev_eq {α : Type u} {β : α → Type v} {γ : Type w} {l : Raw α β} {f : γ → (a : α) → β a → γ} {init : γ} :
Raw.Internal.foldRev f init l = Array.foldr (fun (l : AssocList α β) (acc : γ) => AssocList.foldr (fun (a : α) (b : β a) (g : γ) => f g a b) acc l)
init l.buckets
theorem Std.DHashMap.Internal.Raw.foldRev_cons_apply {α : Type u} {β : α → Type v} {γ : Type w} {l : Raw α β} {acc : List γ} (f : (a : α) → β a → γ) :
Raw.Internal.foldRev (fun (acc : List γ) (k : α) (v : β k) => f k v :: acc) acc l = List.map (fun (p : (a : α) × β a) => f p.fst p.snd) (toListModel l.buckets) ++ acc
theorem Std.DHashMap.Internal.Raw.foldRev_cons {α : Type u} {β : α → Type v} {l : Raw α β} {acc : List ((a : α) × β a)} :
Raw.Internal.foldRev (fun (acc : List ((a : α) × β a)) (k : α) (v : β k) => ⟨k, v⟩ :: acc) acc l = toListModel l.buckets ++ acc
theorem Std.DHashMap.Internal.Raw.foldRev_cons_key {α : Type u} {β : α → Type v} {l : Raw α β} {acc : List α} :
Raw.Internal.foldRev (fun (acc : List α) (k : α) (x : β k) => k :: acc) acc l = Internal.List.keys (toListModel l.buckets) ++ acc
theorem Std.DHashMap.Internal.Raw.foldRev_cons_value {α : Type u} {β : Type v} {l : Raw α fun (x : α) => β} {acc : List β} :
Raw.Internal.foldRev (fun (acc : List β) (x : α) (v : β) => v :: acc) acc l = Internal.List.values (toListModel l.buckets) ++ acc
theorem Std.DHashMap.Internal.Raw.fold_push_key {α : Type u} {β : α → Type v} {l : Raw α β} {acc : Array α} :
Raw.fold (fun (acc : Array α) (k : α) (x : β k) => acc.push k) acc l = acc ++ (Internal.List.keys (toListModel l.buckets)).toArray
theorem Std.DHashMap.Internal.Raw.foldM_eq_foldlM_toListModel {α : Type u} {β : α → Type v} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : δ → (a : α) → β a → m δ} {init : δ} {b : Raw α β} :
Raw.foldM f init b = List.foldlM (fun (a : δ) (b : (a : α) × β a) => f a b.fst b.snd) init (toListModel b.buckets)
theorem Std.DHashMap.Internal.Raw.fold_eq_foldl_toListModel {α : Type u} {β : α → Type v} {γ : Type w} {l : Raw α β} {f : γ → (a : α) → β a → γ} {init : γ} :
Raw.fold f init l = List.foldl (fun (a : γ) (b : (a : α) × β a) => f a b.fst b.snd) init (toListModel l.buckets)
theorem Std.DHashMap.Internal.Raw.foldRevM_eq_foldrM_toListModel {α : Type u} {β : α → Type v} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : δ → (a : α) → β a → m δ} {init : δ} {b : Raw α β} :
Raw.Internal.foldRevM f init b = List.foldrM (fun (a : (a : α) × β a) (b : δ) => f b a.fst a.snd) init (toListModel b.buckets)
theorem Std.DHashMap.Internal.Raw.foldRev_eq_foldr_toListModel {α : Type u} {β : α → Type v} {γ : Type w} {l : Raw α β} {f : γ → (a : α) → β a → γ} {init : γ} :
Raw.Internal.foldRev f init l = List.foldr (fun (a : (a : α) × β a) (b : γ) => f b a.fst a.snd) init (toListModel l.buckets)
theorem Std.DHashMap.Internal.Raw.toList_eq_toListModel {α : Type u} {β : α → Type v} {m : Raw α β} :
theorem Std.DHashMap.Internal.Raw.Const.toList_eq_toListModel_map {α : Type u} {β : Type v} {m : Raw α fun (x : α) => β} :
Raw.Const.toList m = List.map
(fun (x : (_ : α) × β) =>
match x with
| ⟨k, v⟩ => (k, v))
(toListModel m.buckets)
theorem Std.DHashMap.Internal.Raw.toArray_eq_toArray_toListModel {α : Type u} {β : α → Type v} {m : Raw α β} :
theorem Std.DHashMap.Internal.Raw.keys_eq_keys_toListModel {α : Type u} {β : α → Type v} {m : Raw α β} :
theorem Std.DHashMap.Internal.Raw.values_eq_values_toListModel {α : Type u} {β : Type v} {m : Raw α fun (x : α) => β} :
theorem Std.DHashMap.Internal.Raw.keysArray_eq_toArray_keys_toListModel {α : Type u} {β : α → Type v} {m : Raw α β} :
theorem Std.DHashMap.Internal.Raw.forIn_eq_forIn_toListModel {α : Type u} {β : α → Type v} {δ : Type w} {l : Raw α β} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : (a : α) → β a → δ → m (ForInStep δ)} {init : δ} :
Raw.forIn f init l = ForIn.forIn (toListModel l.buckets) init fun (a : (a : α) × β a) (d : δ) => f a.fst a.snd d
Raw₀.empty #
@[simp]
theorem Std.DHashMap.Internal.Raw₀.toListModel_buckets_emptyWithCapacity {α : Type u} {β : α → Type v} {c : Nat} :
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_reinsertAux {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (data : { d : Array (AssocList α β) // 0 < d.size }) (a : α) (b : β a) (h : IsHashSelf data.val) :
IsHashSelf (reinsertAux hash data a b).val
expandIfNecessary #
theorem Std.DHashMap.Internal.Raw₀.toListModel_reinsertAux {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] (data : { d : Array (AssocList α β) // 0 < d.size }) (a : α) (b : β a) :
(toListModel (reinsertAux hash data a b).val).Perm (⟨a, b⟩ :: toListModel data.val)
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_foldl_reinsertAux {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (l : List ((a : α) × β a)) (target : { d : Array (AssocList α β) // 0 < d.size }) :
IsHashSelf target.val →
IsHashSelf
(List.foldl
(fun (acc : { d : Array (AssocList α β) // 0 < d.size }) (p : (a : α) × β a) =>
reinsertAux hash acc p.fst p.snd)
target l).val
theorem Std.DHashMap.Internal.Raw₀.toListModel_foldl_reinsertAux {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] (l : List ((a : α) × β a)) (target : { d : Array (AssocList α β) // 0 < d.size }) :
(toListModel
(List.foldl
(fun (acc : { d : Array (AssocList α β) // 0 < d.size }) (p : (a : α) × β a) =>
reinsertAux hash acc p.fst p.snd)
target l).val).Perm
(l ++ toListModel target.val)
theorem Std.DHashMap.Internal.Raw₀.toListModel_expandIfNecessary {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] (m : Raw₀ α β) :
theorem Std.DHashMap.Internal.Raw₀.wfImp_expandIfNecessary {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (h : Raw.WFImp m.val) :
Access operations #
theorem Std.DHashMap.Internal.Raw₀.containsₘ_eq_containsKey {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.contains_eq_containsKey {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.getEntryₘ_eq_getEntry {α : Type u} {β : α → Type v} [BEq α] [PartialEquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} {h : m.containsₘ a = true} :
theorem Std.DHashMap.Internal.Raw₀.getEntry?ₘ_eq_getEntry? {α : Type u} {β : α → Type v} [BEq α] [PartialEquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.getEntry_eq_getEntry {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} {h : m.contains a = true} :
theorem Std.DHashMap.Internal.Raw₀.getEntry?_eq_getEntry? {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.getEntryDₘ_eq_getEntryD {α : Type u} {β : α → Type v} [BEq α] [PartialEquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} {fallback : (a : α) × β a} :
theorem Std.DHashMap.Internal.Raw₀.getEntryD_eq_getEntryD {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} {fallback : (a : α) × β a} :
theorem Std.DHashMap.Internal.Raw₀.getEntry!ₘ_eq_getEntry! {α : Type u} {β : α → Type v} [BEq α] [PartialEquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} [Inhabited ((a : α) × β a)] :
theorem Std.DHashMap.Internal.Raw₀.getEntry!_eq_getEntry! {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} [Inhabited ((a : α) × β a)] :
theorem Std.DHashMap.Internal.Raw₀.getKey?ₘ_eq_getKey? {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.getKey?_eq_getKey? {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.getKeyDₘ_eq_getKeyD {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a fallback : α} :
theorem Std.DHashMap.Internal.Raw₀.getKeyD_eq_getKeyD {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (hm : Raw.WFImp m.val) {a fallback : α} :
theorem Std.DHashMap.Internal.Raw₀.Const.get?ₘ_eq_getValue? {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.Const.get?_eq_getValue? {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.Const.getₘ_eq_getValue {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} {h : m.containsₘ a = true} :
theorem Std.DHashMap.Internal.Raw₀.Const.get_eq_getValue {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} {h : m.contains a = true} :
theorem Std.DHashMap.Internal.Raw₀.Const.get!ₘ_eq_getValue! {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] [Inhabited β] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.Const.get!_eq_getValue! {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] [Inhabited β] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} :
theorem Std.DHashMap.Internal.Raw₀.Const.getDₘ_eq_getValueD {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} {fallback : β} :
theorem Std.DHashMap.Internal.Raw₀.Const.getD_eq_getValueD {α : Type u} {β : Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (hm : Raw.WFImp m.val) {a : α} {fallback : β} :
replaceₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_replaceₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (h : Raw.WFImp m.val) (a : α) (b : β a) :
(toListModel (m.replaceₘ a b).val.buckets).Perm (Internal.List.replaceEntry a b (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_replaceₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (h : Raw.WFImp m.val) (a : α) (b : β a) :
IsHashSelf (m.replaceₘ a b).val.buckets
insertₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_consₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [PartialEquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (h : Raw.WFImp m.val) (a : α) (b : β a) :
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_consₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (h : Raw.WFImp m.val) (a : α) (b : β a) :
IsHashSelf (m.consₘ a b).val.buckets
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
(toListModel (m.insertₘ a b).val.buckets).Perm (Internal.List.insertEntry a b (toListModel m.val.buckets))
insert #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insert {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
(toListModel (m.insert a b).val.buckets).Perm (Internal.List.insertEntry a b (toListModel m.val.buckets))
alter #
theorem Std.DHashMap.Internal.Raw₀.toListModel_updateBucket_alter {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {f : Option (β a) → Option (β a)} :
(toListModel (updateBucket m.val.buckets ⋯ a (AssocList.alter a f))).Perm
(Internal.List.alterKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_updateBucket_alter {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {f : Option (β a) → Option (β a)} :
IsHashSelf (updateBucket m.val.buckets ⋯ a (AssocList.alter a f))
theorem Std.DHashMap.Internal.Raw₀.wfImp_updateBucket_alter {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {f : Option (β a) → Option (β a)} :
Raw.WFImp (withComputedSize (updateBucket m.val.buckets ⋯ a (AssocList.alter a f)))
theorem Std.DHashMap.Internal.Raw₀.toListModel_alterₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {f : Option (β a) → Option (β a)} :
(toListModel (m.alterₘ a f).val.buckets).Perm (Internal.List.alterKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.toListModel_alter {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {f : Option (β a) → Option (β a)} :
(toListModel (m.alter a f).val.buckets).Perm (Internal.List.alterKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_updateBucket_alter {α : Type u} {β : Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (h : Raw.WFImp m.val) {a : α} {f : Option β → Option β} :
(toListModel (updateBucket m.val.buckets ⋯ a (AssocList.Const.alter a f))).Perm
(Internal.List.Const.alterKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.Const.isHashSelf_updateBucket_alter {α : Type u} {β : Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (h : Raw.WFImp m.val) {a : α} {f : Option β → Option β} :
IsHashSelf (updateBucket m.val.buckets ⋯ a (AssocList.Const.alter a f))
theorem Std.DHashMap.Internal.Raw₀.Const.wfImp_updateBucket_alter {α : Type u} {β : Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (h : Raw.WFImp m.val) {a : α} {f : Option β → Option β} :
Raw.WFImp (withComputedSize (updateBucket m.val.buckets ⋯ a (AssocList.Const.alter a f)))
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_alterₘ {α : Type u} {β : Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (h : Raw.WFImp m.val) {a : α} {f : Option β → Option β} :
(toListModel (alterₘ m a f).val.buckets).Perm (Internal.List.Const.alterKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_alter {α : Type u} {β : Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} (h : Raw.WFImp m.val) {a : α} {f : Option β → Option β} :
(toListModel (alter m a f).val.buckets).Perm (Internal.List.Const.alterKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.toListModel_modify {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {f : β a → β a} :
(toListModel (m.modify a f).val.buckets).Perm (Internal.List.modifyKey a f (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_modify {α : Type u} {β : Type v} {m : Raw₀ α fun (x : α) => β} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] (h : Raw.WFImp m.val) {a : α} {f : β → β} :
(toListModel (modify m a f).val.buckets).Perm (Internal.List.Const.modifyKey a f (toListModel m.val.buckets))
containsThenInsert #
theorem Std.DHashMap.Internal.Raw₀.toListModel_containsThenInsert {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
(toListModel (m.containsThenInsert a b).snd.val.buckets).Perm
(Internal.List.insertEntry a b (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.wfImp_containsThenInsert {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
Raw.WFImp (m.containsThenInsert a b).snd.val
insertIfNewₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertIfNewₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
(toListModel (m.insertIfNewₘ a b).val.buckets).Perm (Internal.List.insertEntryIfNew a b (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.wfImp_insertIfNewₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
Raw.WFImp (m.insertIfNewₘ a b).val
insertIfNew #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertIfNew {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
(toListModel (m.insertIfNew a b).val.buckets).Perm (Internal.List.insertEntryIfNew a b (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.wfImp_insertIfNew {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
Raw.WFImp (m.insertIfNew a b).val
containsThenInsertIfNew #
theorem Std.DHashMap.Internal.Raw₀.toListModel_containsThenInsertIfNew {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
(toListModel (m.containsThenInsertIfNew a b).snd.val.buckets).Perm
(Internal.List.insertEntryIfNew a b (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.wfImp_containsThenInsertIfNew {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} (h : Raw.WFImp m.val) {a : α} {b : β a} :
Raw.WFImp (m.containsThenInsertIfNew a b).snd.val
getThenInsertIfNew? #
theorem Std.DHashMap.Internal.Raw₀.toListModel_getThenInsertIfNew? {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [LawfulBEq α] {m : Raw₀ α β} {a : α} {b : β a} (h : Raw.WFImp m.val) :
(toListModel (m.getThenInsertIfNew? a b).snd.val.buckets).Perm
(Internal.List.insertEntryIfNew a b (toListModel m.val.buckets))
Const.getThenInsertIfNew? #
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_getThenInsertIfNew? {α : Type u} {β : Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} {a : α} {b : β} (h : Raw.WFImp m.val) :
(toListModel (getThenInsertIfNew? m a b).snd.val.buckets).Perm
(Internal.List.insertEntryIfNew a b (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.Const.wfImp_getThenInsertIfNew? {α : Type u} {β : Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} {a : α} {b : β} (h : Raw.WFImp m.val) :
Raw.WFImp (getThenInsertIfNew? m a b).snd.val
eraseₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_eraseₘaux {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (a : α) (h : Raw.WFImp m.val) :
(toListModel (m.eraseₘaux a).val.buckets).Perm (Internal.List.eraseKey a (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_eraseₘaux {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (a : α) (h : Raw.WFImp m.val) :
IsHashSelf (m.eraseₘaux a).val.buckets
theorem Std.DHashMap.Internal.Raw₀.toListModel_perm_eraseKey_of_containsₘ_eq_false {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] (m : Raw₀ α β) (a : α) (h : Raw.WFImp m.val) (h' : m.containsₘ a = false) :
(toListModel m.val.buckets).Perm (Internal.List.eraseKey a (toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.toListModel_eraseₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {a : α} (h : Raw.WFImp m.val) :
(toListModel (m.eraseₘ a).val.buckets).Perm (Internal.List.eraseKey a (toListModel m.val.buckets))
erase #
theorem Std.DHashMap.Internal.Raw₀.toListModel_erase {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {a : α} (h : Raw.WFImp m.val) :
(toListModel (m.erase a).val.buckets).Perm (Internal.List.eraseKey a (toListModel m.val.buckets))
filterₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_filterₘ {α : Type u} {β : α → Type v} {m : Raw₀ α β} {f : (a : α) → β a → Bool} :
(toListModel (m.filterₘ f).val.buckets).Perm
(List.filter (fun (p : (a : α) × β a) => f p.fst p.snd) (toListModel m.val.buckets))
filter #
theorem Std.DHashMap.Internal.Raw₀.toListModel_filter {α : Type u} {β : α → Type v} {m : Raw₀ α β} {f : (a : α) → β a → Bool} :
(toListModel (filter f m).val.buckets).Perm
(List.filter (fun (p : (a : α) × β a) => f p.fst p.snd) (toListModel m.val.buckets))
insertListₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertListₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {l : List ((a : α) × β a)} (h : Raw.WFImp m.val) :
(toListModel (m.insertListₘ l).val.buckets).Perm (Internal.List.insertList (toListModel m.val.buckets) l)
theorem Std.DHashMap.Internal.Raw₀.toListModel_eraseListₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {l : List α} (h : Raw.WFImp m.val) :
(toListModel (m.eraseListₘ l).val.buckets).Perm (Internal.List.eraseList (toListModel m.val.buckets) l)
insertListₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertListIfNewₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {l : List ((a : α) × β a)} (h : Raw.WFImp m.val) :
(toListModel (m.insertListIfNewₘ l).val.buckets).Perm (Internal.List.insertListIfNew (toListModel m.val.buckets) l)
unionₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_unionₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m₁ m₂ : Raw₀ α β} (h₁ : Raw.WFImp m₁.val) (h₂ : Raw.WFImp m₂.val) :
(toListModel (m₁.unionₘ m₂).val.buckets).Perm
(Internal.List.insertList (toListModel m₁.val.buckets) (toListModel m₂.val.buckets))
filterMapₘ #
theorem Std.DHashMap.Internal.Raw₀.toListModel_filterMapₘ {α : Type u} {β : α → Type v} {δ : α → Type w} {m : Raw₀ α β} {f : (a : α) → β a → Option (δ a)} :
(toListModel (m.filterMapₘ f).val.buckets).Perm
(List.filterMap (fun (p : (a : α) × β a) => Option.map (fun (x : δ p.fst) => ⟨p.fst, x⟩) (f p.fst p.snd))
(toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.isHashSelf_filterMapₘ {α : Type u} {β : α → Type v} {δ : α → Type w} [BEq α] [Hashable α] [ReflBEq α] [LawfulHashable α] {m : Raw₀ α β} {f : (a : α) → β a → Option (δ a)} (h : Raw.WFImp m.val) :
IsHashSelf (m.filterMapₘ f).val.buckets
filterMap #
theorem Std.DHashMap.Internal.Raw₀.toListModel_filterMap {α : Type u} {β : α → Type v} {δ : α → Type w} {m : Raw₀ α β} {f : (a : α) → β a → Option (δ a)} :
(toListModel (filterMap f m).val.buckets).Perm
(List.filterMap (fun (p : (a : α) × β a) => Option.map (fun (x : δ p.fst) => ⟨p.fst, x⟩) (f p.fst p.snd))
(toListModel m.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.filterMap_eq_filter {α : Type u} {β : α → Type v} {m : Raw₀ α β} {f : (a : α) → β a → Bool} :
mapₘ #
map #
insertMany #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertMany_list {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {l : List ((a : α) × β a)} (h : Raw.WFImp m.val) :
(toListModel (m.insertMany l).val.val.buckets).Perm (Internal.List.insertList (toListModel m.val.buckets) l)
eraseMany #
theorem Std.DHashMap.Internal.Raw₀.eraseMany_eq_eraseListₘ_toListModel {α : Type u} {β : α → Type v} [BEq α] [Hashable α] (m m₂ : Raw₀ α β) :
(m.eraseManyEntries m₂.val).val = m.eraseListₘ (List.map (fun (x : (a : α) × β a) => x.fst) (toListModel m₂.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.toListModel_diffₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m₁ m₂ : Raw₀ α β} (h₁ : Raw.WFImp m₁.val) (h₂ : Raw.WFImp m₂.val) :
(toListModel (m₁.diffₘ m₂).val.buckets).Perm
(List.filter (fun (k : (a : α) × β a) => !(List.map Sigma.fst (toListModel m₂.val.buckets)).contains k.fst)
(toListModel m₁.val.buckets))
theorem Std.DHashMap.Internal.Raw₀.toListModel_diff {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m₁ m₂ : Raw₀ α β} (h₁ : Raw.WFImp m₁.val) (h₂ : Raw.WFImp m₂.val) :
(toListModel (m₁.diff m₂).val.buckets).Perm
(List.filter (fun (k : (a : α) × β a) => !(List.map Sigma.fst (toListModel m₂.val.buckets)).contains k.fst)
(toListModel m₁.val.buckets))
insertManyIfNew #
theorem Std.DHashMap.Internal.Raw₀.toListModel_insertManyIfNew_list {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α β} {l : List ((a : α) × β a)} (h : Raw.WFImp m.val) :
(toListModel (m.insertManyIfNew l).val.val.buckets).Perm (Internal.List.insertListIfNew (toListModel m.val.buckets) l)
theorem Std.DHashMap.Internal.Raw₀.insertManyIfNew_list_eq_foldl {α : Type u} {β : α → Type v} [BEq α] [Hashable α] {m : Raw₀ α β} {l : List ((a : α) × β a)} :
(m.insertManyIfNew l).val = List.foldl (fun (a : Raw₀ α β) (b : (a : α) × β a) => a.insertIfNew b.fst b.snd) m l
union #
theorem Std.DHashMap.Internal.Raw₀.toListModel_union {α : Type u} {β : α → Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m₁ m₂ : Raw₀ α β} (h₁ : Raw.WFImp m₁.val) (h₂ : Raw.WFImp m₂.val) :
(toListModel (m₁.union m₂).val.buckets).Perm
(Internal.List.insertList (toListModel m₁.val.buckets) (toListModel m₂.val.buckets))
inter #
theorem Std.DHashMap.Internal.Raw₀.wfImp_interSmallerFnₘ {α : Type u} {β : α → Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] (m₁ m₂ : Raw₀ α β) (hm₂ : Raw.WFImp m₂.val) (k : α) :
Raw.WFImp (m₁.interSmallerFnₘ m₂ k).val
def Std.DHashMap.Internal.Raw₀.interSmallerₘ {α : Type u} {β : α → Type v} [BEq α] [Hashable α] (m₁ : Raw₀ α β) (m₂ : Raw α β) :
Raw₀ α β
Internal implementation detail of the hash map
Equations
- m₁.interSmallerₘ m₂ = Std.DHashMap.Raw.fold (fun (sofar : Std.DHashMap.Internal.Raw₀ α β) (k : α) (x : β k) => m₁.interSmallerFnₘ sofar k) Std.DHashMap.Internal.Raw₀.emptyWithCapacity m₂
Instances For
theorem Std.DHashMap.Internal.Raw₀.foldl_perm_cong {α : Type u} {β : α → Type v} [BEq α] {init₁ init₂ l : List ((a : α) × β a)} {f : List ((a : α) × β a) → (a : α) × β a → List ((a : α) × β a)} (h₁ : init₁.Perm init₂) (h₂ :
∀ (h : (a : α) × β a) (l₁ l₂ : List ((a : α) × β a)),
Internal.List.DistinctKeys l₁ → l₁.Perm l₂ → (f l₁ h).Perm (f l₂ h) ∧ Internal.List.DistinctKeys (f l₁ h)) (h₃ : Internal.List.DistinctKeys init₁) :
(List.foldl f init₁ l).Perm (List.foldl f init₂ l)
theorem Std.DHashMap.Internal.Raw₀.toListModel_interSmallerFnₘ {α : Type u} {β : α → Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] (m sofar : Raw₀ α β) (l : List ((a : α) × β a)) (hm : Raw.WFImp m.val) (hs : Raw.WFImp sofar.val) (k : α) (hml : (toListModel sofar.val.buckets).Perm l) :
(toListModel (m.interSmallerFnₘ sofar k).val.buckets).Perm
(Internal.List.interSmallerFn (toListModel m.val.buckets) l k)
theorem Std.DHashMap.Internal.Raw₀.toListModel_interSmallerₘ {α : Type u} {β : α → Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] (m₁ : Raw₀ α β) (m₂ : Raw α β) (hm₁ : Raw.WFImp m₁.val) :
(toListModel (m₁.interSmallerₘ m₂).val.buckets).Perm
(Internal.List.interSmaller (toListModel m₁.val.buckets) (toListModel m₂.buckets))
theorem Std.DHashMap.Internal.Raw₀.toListModel_inter {α : Type u} {β : α → Type v} [BEq α] [EquivBEq α] [Hashable α] [LawfulHashable α] (m₁ m₂ : Raw₀ α β) (hm₁ : Raw.WFImp m₁.val) (hm₂ : Raw.WFImp m₂.val) :
(toListModel (m₁.inter m₂).val.buckets).Perm
(List.filter (fun (p : (a : α) × β a) => Internal.List.containsKey p.fst (toListModel m₂.val.buckets))
(toListModel m₁.val.buckets))
Const.insertListₘ #
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_insertListₘ {α : Type u} {β : Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} {l : List (α × β)} (h : Raw.WFImp m.val) :
(toListModel (insertListₘ m l).val.buckets).Perm (Internal.List.insertListConst (toListModel m.val.buckets) l)
Const.insertMany #
theorem Std.DHashMap.Internal.Raw₀.Const.toListModel_insertMany_list {α : Type u} {β : Type v} [BEq α] [Hashable α] [EquivBEq α] [LawfulHashable α] {m : Raw₀ α fun (x : α) => β} {l : List (α × β)} (h : Raw.WFImp m.val) :
(toListModel (insertMany m l).val.val.buckets).Perm (Internal.List.insertListConst (toListModel m.val.buckets) l)
Const.insertListIfNewUnitₘ #
Const.insertManyIfNewUnit #
theorem Std.DHashMap.Internal.Raw₀.Const.insertManyIfNewUnit_list_eq_foldl {α : Type u} [BEq α] [Hashable α] {m : Raw₀ α fun (x : α) => Unit} {l : List α} :
(insertManyIfNewUnit m l).val = List.foldl (fun (a : Raw₀ α fun (x : α) => Unit) (b : α) => a.insertIfNew b ()) m l
theorem Std.DHashMap.Internal.Raw₀.Const.beq_eq_beqModel {α : Type u} {β : Type v} [BEq α] [PartialEquivBEq α] [Hashable α] [LawfulHashable α] [BEq β] {m₁ m₂ : Raw₀ α fun (x : α) => β} (h₁ : Raw.WFImp m₁.val) (h₂ : Raw.WFImp m₂.val) :