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

ProbabilityTheory.iIndepFun.entropy_eq_add

PFR.ForMathlib.Entropy.Basic · PFR/ForMathlib/Entropy/Basic.lean:777 to 814

Mathematical statement

Exact Lean statement

lemma iIndepFun.entropy_eq_add {Ω S : Type*} [hΩ: MeasureSpace Ω] [IsProbabilityMeasure hΩ.volume]
    {m : ℕ} [MeasurableSpace S] [MeasurableSingletonClass S] [Finite S]
    {X : Fin m → Ω → S} (hX : ∀ i, Measurable (X i)) (h_indep : iIndepFun X) :
    H[(fun ω i ↦ X i ω)] = ∑ i, H[X i]

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma iIndepFun.entropy_eq_add {Ω S : Type*} [hΩ: MeasureSpace Ω] [IsProbabilityMeasure hΩ.volume]    {m : } [MeasurableSpace S] [MeasurableSingletonClass S] [Finite S]    {X : Fin m  Ω  S} (hX :  i, Measurable (X i)) (h_indep : iIndepFun X) :    H[(fun ω i  X i ω)] = ∑ i, H[X i] := by  cases nonempty_fintype S  induction m with  | zero =>    simp only [Finset.univ_eq_empty, Finset.sum_empty]    convert entropy_const Fin.elim0 <;> infer_instance  | succ m hm =>  calc    _ = H[ (fun ω (i:Fin m)  X i.castSucc ω), X (.last _) ] := by      let f : (Fin (m + 1)  S)  (Fin m  S) × S := fun x  (fun i  x i.castSucc, x (.last m))      convert! (entropy_comp_of_injective _ _ f _).symm      · fun_prop      intro x y hxy      simp only [Prod.mk.injEq, f] at hxy      ext i; rcases Fin.eq_castSucc_or_eq_last i with h | rfl      · obtain j, rfl := h; replace hxy := hxy.1; exact congr($hxy j)      tauto    _ = H[fun ω (i:Fin m)  X i.castSucc ω] + H[X (.last m)] := by      apply (entropy_pair_eq_add _ _).mpr _ <;> try fun_prop      let T : Finset (Fin (m + 1)) := {.last m}ᶜ      let T' : Finset (Fin (m + 1)) := {.last m}      let φ : (T  S)  (Fin m  S) := fun f j  f  j.castSucc, by simp [T]       let φ' : (T'  S)  S := fun f  f  .last m, by simp [T']       exact finsets_comp' (by simp [T', T]) h_indep hX (show Measurable φ by fun_prop)        (show Measurable φ' by fun_prop)    _ = ∑ i:Fin m, H[X i.castSucc] + H[X (.last m)] := by      congr; apply hm _ _      · intro i; fun_prop      let T : Fin m  Finset (Fin (m + 1)) := fun i  {i.castSucc}      let φ : (i:Fin m)  ((_: T i)  S)  S := fun i x  x  i.castSucc, by simp [T]       convert iIndepFun.finsets_comp T _ h_indep hX φ (by fun_prop)      rw [Finset.pairwiseDisjoint_iff]; rintro  _, _  _  _, _  _   _, _ , hij       simp [T] at hij       grind    _ = _ := by rw [Fin.sum_univ_castSucc]