teorth/PFR
Source indexedlemma · leanprover/lean4:v4.33.0-rc1
ProbabilityTheory.chain_rule'
PFR.ForMathlib.Entropy.Basic · PFR/ForMathlib/Entropy/Basic.lean:547 to 571
Source documentation
One form of the chain rule : H[X, Y] = H[X] + H[Y | X].
Exact Lean statement
lemma chain_rule' (μ : Measure Ω) [IsZeroOrProbabilityMeasure μ]
(hX : Measurable X) (hY : Measurable Y) [FiniteRange X] [FiniteRange Y] :
H[⟨X, Y⟩ ; μ] = H[X ; μ] + H[Y | X ; μ]Complete declaration
Lean source
Full Lean sourceLean 4
lemma chain_rule' (μ : Measure Ω) [IsZeroOrProbabilityMeasure μ] (hX : Measurable X) (hY : Measurable Y) [FiniteRange X] [FiniteRange Y] : H[⟨X, Y⟩ ; μ] = H[X ; μ] + H[Y | X ; μ] := by rcases eq_zero_or_isProbabilityMeasure μ with rfl | hμ · simp have : Nonempty T := Nonempty.map Y (μ.nonempty_of_neZero) rw [entropy_eq_kernel_entropy, Kernel.chain_rule] · simp_rw [← Kernel.map_const _ (hX.prodMk hY), Kernel.fst_map_prod _ hY, Kernel.map_const _ hX, Kernel.map_const _ (hX.prodMk hY)] congr 1 · rw [Kernel.entropy, integral_dirac] rfl · simp_rw [condEntropy_eq_kernel_entropy hY hX] have : Measure.dirac () ⊗ₘ Kernel.const Unit (μ.map X) = μ.map (fun ω ↦ ((), X ω)) := by ext s _ rw [Measure.dirac_unit_compProd_const, Measure.map_map measurable_prodMk_left hX] congr rw [this, Kernel.entropy_congr (condDistrib_const_unit hX hY μ)] have : μ.map (fun ω ↦ ((), X ω)) = (μ.map X).map (Prod.mk ()) := by ext s _ rw [Measure.map_map measurable_prodMk_left hX] rfl rw [this, Kernel.entropy_prodMkLeft_unit] · apply Kernel.FiniteKernelSupport.aefiniteKernelSupport exact Kernel.finiteKernelSupport_of_const _