Module docstring
{"# Lattice operations on multisets ","### sup ","### inf "}
{"# Lattice operations on multisets ","### sup ","### inf "}
Multiset.sup
definition
(s : Multiset α) : α
Multiset.sup_coe
theorem
(l : List α) : sup (l : Multiset α) = l.foldr (· ⊔ ·) ⊥
Multiset.sup_zero
theorem
: (0 : Multiset α).sup = ⊥
Multiset.sup_cons
theorem
(a : α) (s : Multiset α) : (a ::ₘ s).sup = a ⊔ s.sup
Multiset.sup_singleton
theorem
{a : α} : ({ a } : Multiset α).sup = a
@[simp]
theorem sup_singleton {a : α} : ({a} : Multiset α).sup = a := sup_bot_eq _
Multiset.sup_add
theorem
(s₁ s₂ : Multiset α) : (s₁ + s₂).sup = s₁.sup ⊔ s₂.sup
Multiset.sup_le
theorem
{s : Multiset α} {a : α} : s.sup ≤ a ↔ ∀ b ∈ s, b ≤ a
@[simp]
theorem sup_le {s : Multiset α} {a : α} : s.sup ≤ a ↔ ∀ b ∈ s, b ≤ a :=
Multiset.induction_on s (by simp)
(by simp +contextual [or_imp, forall_and])
Multiset.le_sup
theorem
{s : Multiset α} {a : α} (h : a ∈ s) : a ≤ s.sup
Multiset.sup_mono
theorem
{s₁ s₂ : Multiset α} (h : s₁ ⊆ s₂) : s₁.sup ≤ s₂.sup
Multiset.sup_dedup
theorem
(s : Multiset α) : (dedup s).sup = s.sup
Multiset.sup_ndunion
theorem
(s₁ s₂ : Multiset α) : (ndunion s₁ s₂).sup = s₁.sup ⊔ s₂.sup
@[simp]
theorem sup_ndunion (s₁ s₂ : Multiset α) : (ndunion s₁ s₂).sup = s₁.sup ⊔ s₂.sup := by
rw [← sup_dedup, dedup_ext.2, sup_dedup, sup_add]; simp
Multiset.sup_union
theorem
(s₁ s₂ : Multiset α) : (s₁ ∪ s₂).sup = s₁.sup ⊔ s₂.sup
Multiset.sup_ndinsert
theorem
(a : α) (s : Multiset α) : (ndinsert a s).sup = a ⊔ s.sup
Multiset.nodup_sup_iff
theorem
{α : Type*} [DecidableEq α] {m : Multiset (Multiset α)} : m.sup.Nodup ↔ ∀ a : Multiset α, a ∈ m → a.Nodup
theorem nodup_sup_iff {α : Type*} [DecidableEq α] {m : Multiset (Multiset α)} :
m.sup.Nodup ↔ ∀ a : Multiset α, a ∈ m → a.Nodup := by
induction m using Multiset.induction_on with
| empty => simp
| cons _ _ h => simp [h]
Multiset.inf
definition
(s : Multiset α) : α
Multiset.inf_coe
theorem
(l : List α) : inf (l : Multiset α) = l.foldr (· ⊓ ·) ⊤
Multiset.inf_zero
theorem
: (0 : Multiset α).inf = ⊤
Multiset.inf_cons
theorem
(a : α) (s : Multiset α) : (a ::ₘ s).inf = a ⊓ s.inf
Multiset.inf_singleton
theorem
{a : α} : ({ a } : Multiset α).inf = a
@[simp]
theorem inf_singleton {a : α} : ({a} : Multiset α).inf = a := inf_top_eq _
Multiset.inf_add
theorem
(s₁ s₂ : Multiset α) : (s₁ + s₂).inf = s₁.inf ⊓ s₂.inf
Multiset.le_inf
theorem
{s : Multiset α} {a : α} : a ≤ s.inf ↔ ∀ b ∈ s, a ≤ b
@[simp]
theorem le_inf {s : Multiset α} {a : α} : a ≤ s.inf ↔ ∀ b ∈ s, a ≤ b :=
Multiset.induction_on s (by simp)
(by simp +contextual [or_imp, forall_and])
Multiset.inf_le
theorem
{s : Multiset α} {a : α} (h : a ∈ s) : s.inf ≤ a
Multiset.inf_mono
theorem
{s₁ s₂ : Multiset α} (h : s₁ ⊆ s₂) : s₂.inf ≤ s₁.inf
Multiset.inf_dedup
theorem
(s : Multiset α) : (dedup s).inf = s.inf
Multiset.inf_ndunion
theorem
(s₁ s₂ : Multiset α) : (ndunion s₁ s₂).inf = s₁.inf ⊓ s₂.inf
@[simp]
theorem inf_ndunion (s₁ s₂ : Multiset α) : (ndunion s₁ s₂).inf = s₁.inf ⊓ s₂.inf := by
rw [← inf_dedup, dedup_ext.2, inf_dedup, inf_add]; simp
Multiset.inf_union
theorem
(s₁ s₂ : Multiset α) : (s₁ ∪ s₂).inf = s₁.inf ⊓ s₂.inf
Multiset.inf_ndinsert
theorem
(a : α) (s : Multiset α) : (ndinsert a s).inf = a ⊓ s.inf