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 #
A composition induces a partition (just convert the list to a multiset).
Given a multiset which sums to n
, construct a partition of n
with the same multiset, but
without the zeros.
Equations
- nat.partition.of_sums n l hl = {parts := multiset.filter (λ (_x : ℕ), _x ≠ 0) l, parts_pos := _, parts_sum := _}
A multiset ℕ
induces a partition on its sum.
Equations
The partition of exactly one part.
Equations
Equations
The number of times a positive integer i
appears in the partition of_sums 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 (λ (c : n.partition), ∀ (i : ℕ), i ∈ c.parts → ¬even i) finset.univ
The finset of those partitions in which each part is used at most once.
Equations
- nat.partition.distincts n = finset.filter (λ (c : n.partition), c.parts.nodup) finset.univ
The finset of those partitions in which every part is odd and used at most once.