Multinomial coefficient bounded above by its entropy exponential
Provedmme_multinomial_entropy_upperA multinomial coefficient never exceeds the exponential of its entropy.
Let be a nonempty finite index set, strictly positive, , and . Write for the normalised weight vector and for its Shannon entropy in bits. Then
This is the elementary half of the type-counting estimate: a single type class is no larger than the exponential of its entropy. It is the exact counterpart of the platform's mme_dwz_multinomial_entropy_polynomial_lower, which supplies the matching lower bound at the cost of a polynomial factor, and together the two pin the multinomial to within a polynomial of .
The pair is what one needs to compare two multinomial coefficients on the same total, for instance two joint histograms with the same marginals, at exponential rate: the ratio is up to a polynomial factor.
Formalization note. The proof is the classical one and uses no Stirling estimate. By the multinomial theorem, expands as a sum of non-negative terms over all compositions of ; keeping only the term at gives , and by definition of the entropy. Strict positivity of keeps every logarithm finite.
import Mathlib.Data.Nat.Choose.Multinomial import Mathlib.Analysis.SpecialFunctions.Log.NegMulLog import Definitions.Def_mme_modern_entropy_data open BigOperators Finset set_option autoImplicit false
theorem mme_multinomial_entropy_upper
{R : Type*} [Fintype R] [DecidableEq R] [Nonempty R] (w : R → ℕ) (m : ℕ)
(hw : ∀ i, 0 < w i) :
(Nat.multinomial Finset.univ (fun i ↦ w i * m) : ℝ) ≤
Real.exp ((m : ℝ) * (((∑ i, w i : ℕ) : ℝ) * Real.log 2 *
mme_modern_entropyBits
(fun i ↦ (w i : ℝ) / ((∑ j, w j : ℕ) : ℝ)))) := by
sorry