It like a number of binary numbers length n with m ones.
So by definition:
choose(n, 0) = 1choose(n, n) = 1
choose(n, < 0) = 0choose(n, > n) = 0
choose(n, m) = choose(n − 1, m − 1) + choose(n − 1, m)
From this properties by induction:
choose(n, m) = n! ⁄ (n − m)! ⁄ m!
Proof:
choose(1, m) = 1 = 1! ⁄ (1 − m)! ⁄ m!, form ∈ 0, 1
Assume that we prove for n − 1, so:
choose(n, m) = choose(n − 1, m − 1) + choose(n − 1, m)
= (n − 1)! ⁄ (n − m)! ⁄ (m − 1)! + (n − 1)! ⁄ (n − 1 − m)! ⁄ m!
= (n − 1)! ⁄ (n − 1 − m)! ⁄ (m − 1)!·(1 ⁄ (n − m) + 1 ⁄ m)
= (n − 1)! ⁄ (n − 1 − m)! ⁄ (m − 1)!·(m + (n − m)) ⁄ (n − m) ⁄ m = n! ⁄ (n − m)! ⁄ m!
It like a number of numbers in n-base with 0 in m_1 positions, 1 in m_2
positions, ..., (n-1) in m_n positions.
part(m1, ..., mn) = (∑i ∈ 1..nmi)! ⁄ ∏i ∈ 1..nmi!
For n = 2 it is a number of combinations:
part(m1, m2) = choose(m1 + m2, m2) = (m1 + m2)! ⁄ (m1!·m2!)
So:
part(m1, m2) = choose(m1 + m2, m2)
= choose(m1 + m2 − 1, m2) + choose(m1 + m2 − 1, m2 − 1)
= part(m1 − 1, m2) + part(m1, m2 − 1)
Generalise thinking:
part(m1, ..., mn) = part(m1 − 1, m2, ..., mn) + part(m1, m2 − 1, m3, ..., mn) + ... + part(m1, ..., mn − 1, mn − 1)
Now we can prove partition formula by induction:
part(m1, ..., mn) = ∑i = 1..npart(..., mi − 1, mi − 1, mi + 1, ...)
= ∑i = 1..n(mi − 1 + ∑j = 1..n, j ≠ imj)! ⁄ (mi − 1)! ⁄ ∏j = 1..n, j ≠ imj!
= ∑i = 1..n((∑j = 1..nmj) − 1)! ⁄ ∏j = 1..n(mj − 1)! ⁄ ∏j = 1..n, j ≠ imj
= ((∑j = 1..nmj) − 1)! ⁄ ∏j = 1..n(mj − 1)!·∑i = 1..n1 ⁄ ∏j = 1..n, j ≠ imj
= ((∑j = 1..nmj) − 1)! ⁄ ∏j = 1..n(mj − 1)!·∑i = 1..nmi ⁄ ∏j = 1..nmj
= ((∑j = 1..nmj) − 1)! ⁄ ∏j = 1..n(mj − 1)! ⁄ ∏j = 1..nmj·∑i = 1..nmi
= ((∑j = 1..nmj) − 1)! ⁄ ∏j = 1..nmj!·∑i = 1..nmi
= (∑j = 1..nmj)! ⁄ ∏j = 1..nmj!