Distributive lattice structure on multisets #
This file defines an instance DistribLattice (Multiset α) using the union and intersection
operators:
s ∪ t: The multiset for which the number of occurrences of eachais the max of the occurrences ofainsandt.s ∩ t: The multiset for which the number of occurrences of eachais the min of the occurrences ofainsandt.
Union #
s ∪ t is the multiset such that the multiplicity of each a in it is the maximum of the
multiplicity of a in s and t. This is the supremum of multisets.
Instances For
@[implicit_reducible]
@[simp]
theorem
Multiset.mem_union
{α : Type u_1}
[DecidableEq α]
{s t : Multiset α}
{a : α}
:
a ∈ s ∪ t ↔ a ∈ s ∨ a ∈ t
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
Intersection #
s ∩ t is the multiset such that the multiplicity of each a in it is the minimum of the
multiplicity of a in s and t. This is the infimum of multisets.
Instances For
@[implicit_reducible]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Multiset.cons_inter_of_neg
{α : Type u_1}
[DecidableEq α]
{t : Multiset α}
{a : α}
(s : Multiset α)
:
a ∉ t → (a ::ₘ s) ∩ t = s ∩ t
@[simp]
theorem
Multiset.mem_inter
{α : Type u_1}
[DecidableEq α]
{s t : Multiset α}
{a : α}
:
a ∈ s ∩ t ↔ a ∈ s ∧ a ∈ t
@[implicit_reducible]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Multiset.eq_union_right
{α : Type u_1}
[DecidableEq α]
{s t : Multiset α}
(h : s ≤ t)
:
s ∪ t = t
theorem
Multiset.union_add_distrib
{α : Type u_1}
[DecidableEq α]
(s t u : Multiset α)
:
s ∪ t + u = s + u ∪ (t + u)
theorem
Multiset.add_union_distrib
{α : Type u_1}
[DecidableEq α]
(s t u : Multiset α)
:
s + (t ∪ u) = s + t ∪ (s + u)
theorem
Multiset.inter_add_distrib
{α : Type u_1}
[DecidableEq α]
(s t u : Multiset α)
:
s ∩ t + u = (s + u) ∩ (t + u)
theorem
Multiset.add_inter_distrib
{α : Type u_1}
[DecidableEq α]
(s t u : Multiset α)
:
s + t ∩ u = (s + t) ∩ (s + u)
theorem
Multiset.union_add_inter
{α : Type u_1}
[DecidableEq α]
(s t : Multiset α)
:
s ∪ t + s ∩ t = s + t
@[simp]
@[simp]
@[implicit_reducible]
@[simp]
@[simp]
@[simp]
theorem
Multiset.inter_add_sub_of_add_eq_add
{α : Type u_1}
[DecidableEq α]
{M N P Q : Multiset α}
(h : M + N = P + Q)
:
N ∩ Q + (P - M) = N
Disjoint multisets #
theorem
Multiset.disjoint_left
{α : Type u_1}
{s t : Multiset α}
:
Disjoint s t ↔ ∀ {a : α}, a ∈ s → a ∉ t
theorem
Disjoint.notMem_of_mem_left_multiset
{α : Type u_1}
{s t : Multiset α}
:
Disjoint s t → ∀ {a : α}, a ∈ s → a ∉ t
Alias of the forward direction of Multiset.disjoint_left.
@[simp]
theorem
Multiset.disjoint_right
{α : Type u_1}
{s t : Multiset α}
:
Disjoint s t ↔ ∀ {a : α}, a ∈ t → a ∉ s
theorem
Disjoint.notMem_of_mem_right_multiset
{α : Type u_1}
{s t : Multiset α}
:
Disjoint s t → ∀ {a : α}, a ∈ t → a ∉ s
Alias of the forward direction of Multiset.disjoint_right.
theorem
Multiset.disjoint_iff_ne
{α : Type u_1}
{s t : Multiset α}
:
Disjoint s t ↔ ∀ a ∈ s, ∀ b ∈ t, a ≠ b
theorem
Multiset.disjoint_of_subset_left
{α : Type u_1}
{s t u : Multiset α}
(h : s ⊆ u)
(d : Disjoint u t)
:
Disjoint s t
theorem
Multiset.disjoint_of_subset_right
{α : Type u_1}
{s t u : Multiset α}
(h : t ⊆ u)
(d : Disjoint s u)
:
Disjoint s t
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Multiset.inter_eq_zero_iff_disjoint
{α : Type u_1}
[DecidableEq α]
{s t : Multiset α}
:
s ∩ t = 0 ↔ Disjoint s t
@[simp]
@[simp]
theorem
Multiset.add_eq_union_iff_disjoint
{α : Type u_1}
[DecidableEq α]
{s t : Multiset α}
:
s + t = s ∪ t ↔ Disjoint s t
theorem
Multiset.add_eq_union_left_of_le
{α : Type u_1}
[DecidableEq α]
{s t u : Multiset α}
(h : t ≤ s)
:
u + s = u ∪ t ↔ Disjoint u s ∧ s = t
theorem
Multiset.add_eq_union_right_of_le
{α : Type u_1}
[DecidableEq α]
{x y z : Multiset α}
(h : z ≤ y)
:
x + y = x ∪ z ↔ y = z ∧ Disjoint x y
theorem
Multiset.disjoint_of_nodup_add
{α : Type u_1}
{s t : Multiset α}
(d : (s + t).Nodup)
:
Disjoint s t
@[simp]