Skip to main content
teorth/PFR
Source indexedlemma · leanprover/lean4:v4.33.0-rc1

ProbabilityTheory.Kernel.entropy_triple_add_entropy_le'

PFR.ForMathlib.Entropy.Kernel.MutualInfo · PFR/ForMathlib/Entropy/Kernel/MutualInfo.lean:338 to 386

Source documentation

The submodularity inequality: H[X,Y,Z]+H[X]H[X,Z]+H[X,Y]. H[X,Y,Z] + H[X] \leq H[X,Z] + H[X,Y].

Exact Lean statement

lemma entropy_triple_add_entropy_le' {κ : Kernel T (S × U × V)} [IsZeroOrMarkovKernel κ]
    {μ : Measure T} [IsZeroOrProbabilityMeasure μ] [FiniteSupport μ]
    (hκ : AEFiniteKernelSupport κ μ) :
    Hk[κ, μ] + Hk[fst κ, μ] ≤ Hk[deleteMiddle κ, μ] + Hk[deleteRight κ, μ]

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma entropy_triple_add_entropy_le' {κ : Kernel T (S × U × V)} [IsZeroOrMarkovKernel κ]    {μ : Measure T} [IsZeroOrProbabilityMeasure μ] [FiniteSupport μ]    (hκ : AEFiniteKernelSupport κ μ) :    Hk[κ, μ] + Hk[fst κ, μ]  Hk[deleteMiddle κ, μ] + Hk[deleteRight κ, μ] := by  rcases eq_zero_or_isMarkovKernel κ with rfl | hκ'  · simp  rcases eq_zero_or_isProbabilityMeasure μ with rfl | hμ  · simp  have : Nonempty (S × U × V) := nonempty_of_isProbabilityMeasure_of_isMarkovKernel μ κ  inhabit (S × U × V)  have : Nonempty U := (default : S × U × V).2.1  have : Nonempty V := (default : S × U × V).2.2  set κ' := map κ MeasurableEquiv.prodAssoc.symm with hκ'_def  set ξ := fst (fst κ') with ξ_def  let κ'' := condKernel (fst κ')  let η := condKernel κ'  have hξ_eq : ξ = fst κ := by    rw [ξ_def, hκ'_def, fst_eq, MeasurableEquiv.prodAssoc, MeasurableEquiv.coe_mk, Equiv.coe_fn_mk,     fst_eq, map_map _ (by fun_prop) (by fun_prop), map_map _ (by fun_prop) (by fun_prop), fst_eq]    rfl  have h_compProd_eq : ξ ⊗ₖ κ'' = fst κ' := (disintegration (fst κ')).symm  have h_compProd_triple_eq : (ξ ⊗ₖ κ'') ⊗ₖ η = κ' := by    rw [h_compProd_eq]    exact (disintegration κ').symm  have h_compProd_triple_eq' :      ξ ⊗ₖ (κ'' ⊗ₖ comap η MeasurableEquiv.prodAssoc MeasurableEquiv.prodAssoc.measurable)        = κ := by    rw [ compProd_assoc', h_compProd_triple_eq,hκ'_def, map_map _ (by fun_prop) (by fun_prop)]    simp  have h := entropy_compProd_triple_add_entropy_le (ξ := ξ) (κ := κ'') (η := η) (μ := μ) ?_ ?_ ?_  rotate_left  · exact aefiniteKernelSupport_of_cond _ hκ.map.fst  · rw [h_compProd_eq]    apply aefiniteKernelSupport_of_cond    exact hκ.map  · exact hκ.map.fst.fst  rw [ hξ_eq]  have h_right : deleteRight κ = fst κ' := by    rw [hκ'_def, deleteRight_eq, fst_eq, map_map _ (by fun_prop) (by fun_prop)]    congr  have h_middle : deleteMiddle κ      = ξ ⊗ₖ snd        (κ'' ⊗ₖ comap η MeasurableEquiv.prodAssoc MeasurableEquiv.prodAssoc.measurable) := by    rw [ deleteMiddle_compProd, h_compProd_triple_eq']  have hκ : Hk[κ, μ] = Hk[κ', μ] := by    rw [hκ'_def, entropy_map_of_injective _ _ _ (by fun_prop)]    exact MeasurableEquiv.prodAssoc.symm.injective  rw [h_right, h_middle, hκ,  h_compProd_triple_eq, fst_compProd]  · exact h