teorth/PFR
Source indexedlemma · leanprover/lean4:v4.33.0-rc1
ProbabilityTheory.measureEntropy_prod
PFR.ForMathlib.Entropy.Measure · PFR/ForMathlib/Entropy/Measure.lean:470 to 502
Source documentation
An ambitious goal would be to replace FiniteSupport with finite entropy.
Exact Lean statement
@[simp]
lemma measureEntropy_prod {μ : Measure S} {ν : Measure T} [FiniteSupport μ] [FiniteSupport ν]
[IsProbabilityMeasure μ] [IsProbabilityMeasure ν] [MeasurableSingletonClass T] :
Hm[μ.prod ν] = Hm[μ] + Hm[ν]Complete declaration
Lean source
Full Lean sourceLean 4
@[simp]lemma measureEntropy_prod {μ : Measure S} {ν : Measure T} [FiniteSupport μ] [FiniteSupport ν] [IsProbabilityMeasure μ] [IsProbabilityMeasure ν] [MeasurableSingletonClass T] : Hm[μ.prod ν] = Hm[μ] + Hm[ν] := by let A := μ.support have hA := measure_compl_support μ let B := ν.support have hB := measure_compl_support ν have hC : (μ.prod ν) (A ×ˢ B : Finset (S × T))ᶜ = 0 := by have : ((A ×ˢ B : Finset (S × T)) : Set (S × T))ᶜ = ((A : Set S)ᶜ ×ˢ Set.univ) ∪ (Set.univ ×ˢ (B : Set T)ᶜ) := by ext ⟨a, b⟩; simp; tauto rw [this] simp [hA, hB, A, B] have h1 : Hm[μ] = ∑ p ∈ (A ×ˢ B), (negMulLog (μ.real {p.1})) * (ν.real {p.2}) := by rw [measureEntropy_of_isProbabilityMeasure_finite' hA, Finset.sum_product] congr with s dsimp simp only [← Finset.mul_sum, sum_measureReal_singleton] suffices ν.real B = ν.real Set.univ by simp at this; simp [this] apply measureReal_congr simp [hB, B] have h2 : Hm[ν] = ∑ p ∈ (A ×ˢ B), (negMulLog (ν.real {p.2})) * (μ.real {p.1}) := by rw [measureEntropy_of_isProbabilityMeasure_finite' hB, Finset.sum_product_right] congr with t dsimp simp only [← Finset.mul_sum, sum_measureReal_singleton] suffices μ.real A = μ.real Set.univ by simp at this; simp [this] apply measureReal_congr simp [hA, A] rw [measureEntropy_of_isProbabilityMeasure_finite' hC, h1, h2, ← Finset.sum_add_distrib] congr with ⟨s, t⟩ simp_rw [← Set.singleton_prod_singleton, measureReal_prod_prod, negMulLog_mul] ring