Partitions #
A partition of a natural number n
is a way of writing n
as a sum of positive integers, where the
order does not matter: two sums that differ only in the order of their summands are considered the
same partition. This notion is closely related to that of a composition of n
, but in a composition
of n
the order does matter.
A summand of the partition is called a part.
Main functions #
p : Partition n
is a structure, made of a multiset of integers which are all positive and add up ton
.
Implementation details #
The main motivation for this structure and its API is to show Euler's partition theorem, and related results.
The representation of a partition as a multiset is very handy as multisets are very flexible and already have a well-developed API.
Tags #
Partition
References #
positive integers summing to
n
proof that the
parts
are positive- parts_sum : Multiset.sum s.parts = n
proof that the
parts
sum ton
A partition of n
is a multiset of positive integers summing to n
.
Instances For
Equations
- Nat.Partition.decidableEqParition x x = match x, x with | p, q => Eq.mpr (_ : Decidable (p = q) = Decidable (p.parts = q.parts)) (Multiset.decidableEq p.parts q.parts)
A composition induces a partition (just convert the list to a multiset).
Equations
- Nat.Partition.ofComposition n c = { parts := ↑c.blocks, parts_pos := (_ : ∀ {i : ℕ}, i ∈ ↑c.blocks → 0 < i), parts_sum := (_ : Multiset.sum ↑c.blocks = n) }
Instances For
Given a multiset which sums to n
, construct a partition of n
with the same multiset, but
without the zeros.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A Multiset ℕ
induces a partition on its sum.
Equations
- Nat.Partition.ofMultiset l = Nat.Partition.ofSums (Multiset.sum l) l (_ : Multiset.sum l = Multiset.sum l)
Instances For
The partition of exactly one part.
Equations
- Nat.Partition.indiscretePartition n = Nat.Partition.ofSums n {n} (_ : Multiset.sum {n} = Multiset.sum {n})
Instances For
Equations
- Nat.Partition.instInhabitedPartition = { default := Nat.Partition.indiscretePartition n }
The number of times a positive integer i
appears in the partition ofSums n l hl
is the same
as the number of times it appears in the multiset l
.
(For i = 0
, Partition.non_zero
combined with Multiset.count_eq_zero_of_not_mem
gives that
this is 0
instead.)
Show there are finitely many partitions by considering the surjection from compositions to partitions.
The finset of those partitions in which every part is odd.
Equations
- Nat.Partition.odds n = Finset.filter (fun c => ∀ (i : ℕ), i ∈ c.parts → ¬Even i) Finset.univ
Instances For
The finset of those partitions in which each part is used at most once.
Equations
- Nat.Partition.distincts n = Finset.filter (fun c => Multiset.Nodup c.parts) Finset.univ
Instances For
The finset of those partitions in which every part is odd and used at most once.