Tree set lemmas #
This file contains lemmas about Std.TreeSet. Most of the lemmas require
TransCmp cmp for the comparison function cmp.
@[simp]
theorem Std.TreeSet.insert_eq_insert {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {p : α} :
theorem Std.TreeSet.mem_of_mem_insert' {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {k a : α} :
This is a restatement of mem_of_mem_insert that is written to exactly match the
proof obligation in the statement of get_insert.
theorem Std.TreeSet.compare_getKey?_self {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {k : α} :
@[simp]
theorem Std.TreeSet.get_eq {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [LawfulEqCmp cmp] {k : α} (h' : k ∈ t) :
theorem Std.TreeSet.getD_eq_of_mem {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [LawfulEqCmp cmp] {k fallback : α} (h' : k ∈ t) :
@[simp]
theorem Std.TreeSet.containsThenInsert_fst {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {k : α} :
@[simp]
theorem Std.TreeSet.containsThenInsert_snd {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {k : α} :
theorem Std.TreeSet.distinct_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] :
List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) t.toList
theorem Std.TreeSet.ordered_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] :
List.Pairwise (fun (a b : α) => cmp a b = Ordering.lt) t.toList
theorem Std.TreeSet.foldlM_eq_foldlM_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : δ → α → m δ} {init : δ} :
theorem Std.TreeSet.foldlM_eq_foldlM_toArray {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : δ → α → m δ} {init : δ} :
theorem Std.TreeSet.foldl_eq_foldl_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {f : δ → α → δ} {init : δ} :
theorem Std.TreeSet.foldl_eq_foldl_toArray {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {f : δ → α → δ} {init : δ} :
theorem Std.TreeSet.foldrM_eq_foldrM_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : α → δ → m δ} {init : δ} :
theorem Std.TreeSet.foldrM_eq_foldrM_toArray {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : α → δ → m δ} {init : δ} :
theorem Std.TreeSet.foldr_eq_foldr_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {f : α → δ → δ} {init : δ} :
theorem Std.TreeSet.foldr_eq_foldr_toArray {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {f : α → δ → δ} {init : δ} :
theorem Std.TreeSet.forM_eq_forM_toArray {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : α → m PUnit} :
@[simp]
theorem Std.TreeSet.forIn_eq_forIn {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : α → δ → m (ForInStep δ)} {init : δ} :
theorem Std.TreeSet.forIn_eq_forIn_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : α → δ → m (ForInStep δ)} {init : δ} :
@[simp]
instance Std.TreeSet.instPureForInOfLawfulMonad {α : Type u} {cmp : α → α → Ordering} {m : Type w → Type w'} [Monad m] [LawfulMonad m] :
Internal.PureForIn m (TreeSet α cmp) α
theorem Std.TreeSet.forIn_eq_forIn_toArray {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {δ : Type w} {m : Type w → Type w'} [Monad m] [LawfulMonad m] {f : α → δ → m (ForInStep δ)} {init : δ} :
@[simp]
@[simp]
theorem Std.TreeSet.insertMany_list_singleton {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {k : α} :
theorem Std.TreeSet.insertMany_cons {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {l : List α} {k : α} :
theorem Std.TreeSet.insertMany_append {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} {l₁ l₂ : List α} :
@[simp]
theorem Std.TreeSet.contains_insertMany_list {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [BEq α] [LawfulBEqCmp cmp] {l : List α} {k : α} :
theorem Std.TreeSet.mem_of_mem_insertMany_list {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [BEq α] [LawfulBEqCmp cmp] {l : List α} {k : α} (contains_eq_false : l.contains k = false) :
k ∈ t.insertMany l → k ∈ t
theorem Std.TreeSet.get?_insertMany_list_of_not_mem_of_mem {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {l : List α} {k k' : α} (k_eq : cmp k k' = Ordering.eq) (not_mem : ¬k ∈ t) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.get_insertMany_list_of_mem {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {l : List α} {k : α} {h' : k ∈ t.insertMany l} (contains : k ∈ t) :
theorem Std.TreeSet.get_insertMany_list_of_not_mem_of_mem {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {l : List α} {k k' : α} (k_eq : cmp k k' = Ordering.eq) {h' : k' ∈ t.insertMany l} (not_mem : ¬k ∈ t) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.get!_insertMany_list_of_not_mem_of_mem {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [Inhabited α] {l : List α} {k k' : α} (k_eq : cmp k k' = Ordering.eq) (not_mem : ¬k ∈ t) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.getD_insertMany_list_of_not_mem_of_mem {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] {l : List α} {k k' fallback : α} (k_eq : cmp k k' = Ordering.eq) (not_mem : ¬k ∈ t) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.size_insertMany_list {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [BEq α] [LawfulBEqCmp cmp] {l : List α} (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) :
theorem Std.TreeSet.get?_ofList_of_mem {α : Type u} {cmp : α → α → Ordering} [TransCmp cmp] {l : List α} {k k' : α} (k_eq : cmp k k' = Ordering.eq) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.get_ofList_of_mem {α : Type u} {cmp : α → α → Ordering} [TransCmp cmp] {l : List α} {k k' : α} (k_eq : cmp k k' = Ordering.eq) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) {h' : k' ∈ ofList l cmp} :
theorem Std.TreeSet.get!_ofList_of_mem {α : Type u} {cmp : α → α → Ordering} [TransCmp cmp] [Inhabited α] {l : List α} {k k' : α} (k_eq : cmp k k' = Ordering.eq) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.getD_ofList_of_mem {α : Type u} {cmp : α → α → Ordering} [TransCmp cmp] {l : List α} {k k' fallback : α} (k_eq : cmp k k' = Ordering.eq) (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) (mem : k ∈ l) :
theorem Std.TreeSet.size_ofList {α : Type u} {cmp : α → α → Ordering} [TransCmp cmp] {l : List α} (distinct : List.Pairwise (fun (a b : α) => ¬cmp a b = Ordering.eq) l) :
@[simp]
theorem Std.TreeSet.min?_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [Min α] [LE α] [LawfulOrderCmp cmp] [LawfulOrderMin α] [LawfulOrderLeftLeaningMin α] [LawfulEqCmp cmp] :
@[simp]
theorem Std.TreeSet.head?_toList {α : Type u} {cmp : α → α → Ordering} {t : TreeSet α cmp} [TransCmp cmp] [Min α] [LE α] [LawfulOrderCmp cmp] [LawfulOrderMin α] [LawfulOrderLeftLeaningMin α] [LawfulEqCmp cmp] :
theorem Std.TreeSet.Equiv.filter {α : Type u} {cmp : α → α → Ordering} {t₁ t₂ : TreeSet α cmp} (h : t₁.Equiv t₂) (f : α → Bool) :
(TreeSet.filter f t₁).Equiv (TreeSet.filter f t₂)
theorem Std.TreeSet.Equiv.insertMany_list {α : Type u} {cmp : α → α → Ordering} {t₁ t₂ : TreeSet α cmp} [TransCmp cmp] (h : t₁.Equiv t₂) (l : List α) :
(t₁.insertMany l).Equiv (t₂.insertMany l)
theorem Std.TreeSet.insertMany_list_equiv_foldl {α : Type u} {cmp : α → α → Ordering} {t₁ : TreeSet α cmp} {l : List α} :
(t₁.insertMany l).Equiv (List.foldl (fun (acc : TreeSet α cmp) (a : α) => acc.insert a) t₁ l)