Bind operation for multisets #
This file defines a few basic operations on Multiset, notably the monadic bind.
Main declarations #
Multiset.join: The join, aka union or sum, of multisets.Multiset.bind: The bind of a multiset-indexed family of multisets.Multiset.product: Cartesian product of two multisets.Multiset.sigma: Disjoint sum of multisets in a sigma type.
Join #
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Multiset.mem_join
{α : Type u_1}
{a : α}
{S : Multiset (Multiset α)}
:
a ∈ S.join ↔ ∃ s ∈ S, a ∈ s
@[simp]
@[simp]
Bind #
@[simp]
theorem
Multiset.coe_bind
{α : Type u_1}
{β : Type v}
(l : List α)
(f : α → List β)
:
((↑l).bind fun (a : α) => ↑(f a)) = ↑(List.flatMap f l)
@[simp]
@[simp]
@[simp]
theorem
Multiset.singleton_bind
{α : Type u_1}
{β : Type v}
(a : α)
(f : α → Multiset β)
:
{a}.bind f = f a
@[simp]
@[simp]
theorem
Multiset.bind_zero
{α : Type u_1}
{β : Type v}
(s : Multiset α)
:
(s.bind fun (x : α) => 0) = 0
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
Product of two multisets #
@[implicit_reducible]
@[simp]
@[simp]
@[simp]
@[simp]
theorem
Multiset.product_singleton
{α : Type u_1}
{β : Type v}
(a : α)
(b : β)
:
{a} ×ˢ {b} = {(a, b)}
@[simp]
@[simp]
@[simp]
@[simp]
Disjoint sum of multisets #
def
Multiset.sigma
{α : Type u_1}
{σ : α → Type u_4}
(s : Multiset α)
(t : (a : α) → Multiset (σ a))
:
Multiset ((a : α) × σ a)
Multiset.sigma s t is the dependent version of Multiset.product. It is the sum of
(a, b) as a ranges over s and b ranges over t a.
Instances For
@[simp]
theorem
Multiset.coe_sigma
{α : Type u_1}
{σ : α → Type u_4}
(l₁ : List α)
(l₂ : (a : α) → List (σ a))
:
((↑l₁).sigma fun (a : α) => ↑(l₂ a)) = ↑(l₁.sigma l₂)
@[simp]
theorem
Multiset.zero_sigma
{α : Type u_1}
{σ : α → Type u_4}
(t : (a : α) → Multiset (σ a))
:
Multiset.sigma 0 t = 0
@[simp]
theorem
Multiset.sigma_singleton
{α : Type u_1}
{β : Type v}
(a : α)
(b : α → β)
:
({a}.sigma fun (a : α) => {b a}) = {⟨a, b a⟩}
@[simp]
@[simp]
@[simp]