@@ -5,6 +5,7 @@ Authors: Rémy Degenne
55-/
66import Mathlib.Probability.Independence.Basic
77import Mathlib.Probability.Independence.Conditional
8+ import Mathlib.Probability.Kernel.CompProdEqIff
89import Mathlib.Probability.Kernel.Condexp
910
1011
@@ -45,28 +46,30 @@ end MeasureTheory.Measure
4546
4647namespace ProbabilityTheory
4748
48- lemma condDistrib_comp_map [IsFiniteMeasure μ]
49- (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) :
49+ section CondDistrib
50+
51+ variable [IsFiniteMeasure μ]
52+
53+ lemma condDistrib_comp_map (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) :
5054 condDistrib Y X μ ∘ₘ (μ.map X) = μ.map Y := by
5155 rw [← Measure.snd_compProd, compProd_map_condDistrib hY, Measure.snd_map_prodMk₀ hX]
5256
53- lemma condDistrib_congr [IsFiniteMeasure μ] {X' : α → β} {Y' : α → Ω}
54- (hY : Y =ᵐ[μ] Y') (hX : X =ᵐ[μ] X') :
57+ lemma condDistrib_congr {X' : α → β} {Y' : α → Ω} (hY : Y =ᵐ[μ] Y') (hX : X =ᵐ[μ] X') :
5558 condDistrib Y X μ = condDistrib Y' X' μ := by
5659 rw [condDistrib, condDistrib]
5760 congr 1
5861 rw [Measure.map_congr]
5962 filter_upwards [hX, hY] with a ha hb using by rw [ha, hb]
6063
61- lemma condDistrib_congr_right [IsFiniteMeasure μ] {X' : α → β} (hX : X =ᵐ[μ] X') :
64+ lemma condDistrib_congr_right {X' : α → β} (hX : X =ᵐ[μ] X') :
6265 condDistrib Y X μ = condDistrib Y X' μ :=
6366 condDistrib_congr (by rfl) hX
6467
65- lemma condDistrib_congr_left [IsFiniteMeasure μ] {Y' : α → Ω} (hY : Y =ᵐ[μ] Y') :
68+ lemma condDistrib_congr_left {Y' : α → Ω} (hY : Y =ᵐ[μ] Y') :
6669 condDistrib Y X μ = condDistrib Y' X μ :=
6770 condDistrib_congr hY (by rfl)
6871
69- lemma condDistrib_ae_eq_of_measure_eq_compProd₀ [IsFiniteMeasure μ]
72+ lemma condDistrib_ae_eq_of_measure_eq_compProd₀
7073 (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) (κ : Kernel β Ω) [IsFiniteKernel κ]
7174 (hκ : μ.map (fun x => (X x, Y x)) = μ.map X ⊗ₘ κ) :
7275 ∀ᵐ x ∂μ.map X, κ x = condDistrib Y X μ x := by
@@ -80,22 +83,145 @@ lemma condDistrib_ae_eq_of_measure_eq_compProd₀ [IsFiniteMeasure μ]
8083 filter_upwards [hX.ae_eq_mk, hY.ae_eq_mk] with a haX haY using by rw [haX, haY]
8184 · rw [Measure.map_congr hX.ae_eq_mk]
8285
83- lemma condDistrib_comp [IsFiniteMeasure μ]
84- (hX : AEMeasurable X μ) {f : β → Ω} (hf : Measurable f) :
86+ lemma condDistrib_comp (hX : AEMeasurable X μ) {f : β → Ω} (hf : Measurable f) :
8587 condDistrib (f ∘ X) X μ =ᵐ[μ.map X] Kernel.deterministic f hf := by
8688 symm
8789 refine condDistrib_ae_eq_of_measure_eq_compProd₀ hX (by fun_prop) _ ?_
8890 rw [Measure.compProd_deterministic, AEMeasurable.map_map_of_aemeasurable (by fun_prop) hX]
8991 rfl
9092
91- lemma condDistrib_const [IsFiniteMeasure μ]
92- (hX : AEMeasurable X μ) (c : Ω) :
93+ lemma condDistrib_const (hX : AEMeasurable X μ) (c : Ω) :
9394 condDistrib (fun _ ↦ c) X μ =ᵐ[μ.map X] Kernel.deterministic (fun _ ↦ c) (by fun_prop) := by
9495 have : (fun _ : α ↦ c) = (fun _ : β ↦ c) ∘ X := rfl
9596 conv_lhs => rw [this]
9697 filter_upwards [condDistrib_comp hX (by fun_prop : Measurable (fun _ ↦ c))] with b hb
9798 rw [hb]
9899
100+ lemma condDistrib_of_indepFun (h : IndepFun X Y μ) (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) :
101+ condDistrib Y X μ =ᵐ[μ.map X] Kernel.const β (μ.map Y) := by
102+ symm
103+ refine condDistrib_ae_eq_of_measure_eq_compProd₀ (μ := μ) hX hY _ ?_
104+ simp only [Measure.compProd_const]
105+ exact (indepFun_iff_map_prod_eq_prod_map_map hX hY).mp h
106+
107+ lemma indepFun_iff_condDistrib_eq_const (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) :
108+ IndepFun X Y μ ↔ condDistrib Y X μ =ᵐ[μ.map X] Kernel.const β (μ.map Y) := by
109+ refine ⟨fun h ↦ condDistrib_of_indepFun h hX hY, fun h ↦ ?_⟩
110+ rw [indepFun_iff_map_prod_eq_prod_map_map hX hY, ← compProd_map_condDistrib hY,
111+ Measure.compProd_congr h]
112+ simp
113+
114+ lemma Kernel.prod_apply_prod {κ : Kernel α β} {η : Kernel α γ}
115+ [IsSFiniteKernel κ] [IsSFiniteKernel η] {s : Set β} {t : Set γ} {a : α} :
116+ (κ ×ₖ η) a (s ×ˢ t) = (κ a s) * (η a t) := by
117+ rw [Kernel.prod_apply, Measure.prod_prod]
118+
119+ theorem Kernel.indepFun_iff_map_prod_eq_prod_map_map {Ω' α β γ : Type *}
120+ {mΩ' : MeasurableSpace Ω'} {mα : MeasurableSpace α} {mβ : MeasurableSpace β}
121+ {mγ : MeasurableSpace γ} {X : α → β} {T : α → γ}
122+ {μ : Measure Ω'} [IsFiniteMeasure μ]
123+ {κ : Kernel Ω' α} [IsFiniteKernel κ]
124+ -- TODO: relax this to CountableOrCountablyGenerated once it is fixed
125+ [StandardBorelSpace β] [StandardBorelSpace γ]
126+ (hf : Measurable X) (hg : Measurable T) :
127+ IndepFun X T κ μ ↔ κ.map (fun ω ↦ (X ω, T ω)) =ᵐ[μ] ((κ.map X) ×ₖ (κ.map T)) := by
128+ classical
129+ rw [indepFun_iff_measure_inter_preimage_eq_mul]
130+ refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
131+ · rw [← Kernel.compProd_eq_iff]
132+ have : (μ ⊗ₘ κ.map fun ω ↦ (X ω, T ω)) = μ ⊗ₘ (κ.map X ×ₖ κ.map T)
133+ ↔ ∀ {u : Set Ω'} {s : Set β} {t : Set γ},
134+ MeasurableSet u → MeasurableSet s → MeasurableSet t →
135+ (μ ⊗ₘ κ.map (fun ω ↦ (X ω, T ω))) (u ×ˢ s ×ˢ t)
136+ = (μ ⊗ₘ (κ.map X ×ₖ κ.map T)) (u ×ˢ s ×ˢ t) := by
137+ refine ⟨fun h ↦ by simp [h], fun h ↦ ?_⟩
138+ sorry
139+ rw [this]
140+ intro u s t hu hs ht
141+ rw [Measure.compProd_apply (hu.prod (hs.prod ht)),
142+ Measure.compProd_apply (hu.prod (hs.prod ht))]
143+ refine lintegral_congr_ae ?_
144+ have h_set_eq ω : Prod.mk ω ⁻¹' u ×ˢ s ×ˢ t = if ω ∈ u then s ×ˢ t else ∅ := by ext; simp
145+ simp_rw [h_set_eq]
146+ filter_upwards [h s t hs ht] with ω hω
147+ by_cases hωu : ω ∈ u
148+ swap; · simp [hωu]
149+ simp only [hωu, ↓reduceIte]
150+ rw [Kernel.map_apply _ (by fun_prop), Measure.map_apply (by fun_prop) (hs.prod ht)]
151+ rw [Set.mk_preimage_prod, hω, Kernel.prod_apply_prod, Kernel.map_apply' _ (by fun_prop),
152+ Kernel.map_apply' _ (by fun_prop)]
153+ exacts [ht, hs]
154+ · intro s t hs ht
155+ filter_upwards [h] with ω hω
156+ calc (κ ω) (X ⁻¹' s ∩ T ⁻¹' t)
157+ _ = (κ.map (fun ω ↦ (X ω, T ω))) ω (s ×ˢ t) := by
158+ rw [← Kernel.deterministic_comp_eq_map, ← deterministic_prod_deterministic hf hg,
159+ Kernel.comp_apply, Measure.bind_apply (hs.prod ht) (by fun_prop)]
160+ simp_rw [Kernel.prod_apply_prod, Kernel.deterministic_apply' hf _ hs,
161+ Kernel.deterministic_apply' hg _ ht]
162+ calc (κ ω) (X ⁻¹' s ∩ T ⁻¹' t)
163+ _ = ∫⁻ a, (X ⁻¹' s ∩ T ⁻¹' t).indicator (fun x ↦ 1 ) a ∂κ ω := by
164+ simp [lintegral_indicator ((hf hs).inter (hg ht))]
165+ _ = ∫⁻ a, (X ⁻¹' s).indicator (fun x ↦ 1 ) a * (T ⁻¹' t).indicator (fun x ↦ 1 ) a ∂κ ω := by
166+ congr with a
167+ simp only [Set.indicator_apply, Set.mem_inter_iff, Set.mem_preimage, mul_ite, mul_one,
168+ mul_zero]
169+ by_cases has : X a ∈ s <;> simp [has]
170+ _ = ∫⁻ a, s.indicator (fun x ↦ 1 ) (X a) * t.indicator (fun x ↦ 1 ) (T a) ∂κ ω := rfl
171+ _ = ((κ.map X) ×ₖ (κ.map T)) ω (s ×ˢ t) := by rw [hω]
172+ _ = (κ ω) (X ⁻¹' s) * (κ ω) (T ⁻¹' t) := by
173+ rw [Kernel.prod_apply_prod, Kernel.map_apply' _ (by fun_prop),
174+ Kernel.map_apply' _ (by fun_prop)]
175+ exacts [ht, hs]
176+
177+ theorem Kernel.indepFun_iff_compProd_map_prod_eq_compProd_prod_map_map {Ω' α β γ : Type *}
178+ {mΩ' : MeasurableSpace Ω'} {mα : MeasurableSpace α} {mβ : MeasurableSpace β}
179+ {mγ : MeasurableSpace γ} {X : α → β} {T : α → γ}
180+ {μ : Measure Ω'} [IsFiniteMeasure μ]
181+ {κ : Kernel Ω' α} [IsFiniteKernel κ]
182+ -- TODO: relax this to CountableOrCountablyGenerated once it is fixed
183+ [StandardBorelSpace β] [StandardBorelSpace γ]
184+ (hf : Measurable X) (hg : Measurable T) :
185+ IndepFun X T κ μ ↔ (μ ⊗ₘ κ.map fun ω ↦ (X ω, T ω)) = μ ⊗ₘ (κ.map X ×ₖ κ.map T) := by
186+ rw [Kernel.indepFun_iff_map_prod_eq_prod_map_map hf hg, Kernel.compProd_eq_iff]
187+
188+ theorem condIndepFun_iff_map_prod_eq_prod_map_map {α : Type *} {m mα : MeasurableSpace α}
189+ [StandardBorelSpace α]
190+ {X : α → β} {T : α → γ}
191+ {hm : m ≤ mα} {μ : Measure α} [IsFiniteMeasure μ]
192+ -- TODO: relax this to CountableOrCountablyGenerated once it is fixed
193+ [StandardBorelSpace β] [StandardBorelSpace γ]
194+ (hX : Measurable X) (hT : Measurable T) :
195+ CondIndepFun m hm X T μ
196+ ↔ (condExpKernel μ m).map (fun ω ↦ (X ω, T ω))
197+ =ᵐ[μ.trim hm] (((condExpKernel μ m).map X) ×ₖ ((condExpKernel μ m).map T)) :=
198+ Kernel.indepFun_iff_map_prod_eq_prod_map_map hX hT
199+
200+ lemma condDistrib_of_condIndepFun [StandardBorelSpace α]
201+ (hX : Measurable X) (hY : Measurable Y) (hZ : Measurable Z)
202+ (h : CondIndepFun (MeasurableSpace.comap Z inferInstance) hZ.comap_le Y X μ) :
203+ condDistrib Y (fun ω ↦ (X ω, Z ω)) μ
204+ =ᵐ[μ.map (fun ω ↦ (X ω, Z ω))] Kernel.prodMkLeft _ (condDistrib Y Z μ) := by
205+ symm
206+ refine condDistrib_ae_eq_of_measure_eq_compProd₀ (μ := μ) (hX.prodMk hZ).aemeasurable
207+ hY.aemeasurable _ ?_
208+ sorry
209+
210+ end CondDistrib
211+
212+ lemma condIndep_iff_condExpKernel_eq {α : Type *} {F G H mα : MeasurableSpace α}
213+ [StandardBorelSpace α] {μ : Measure α} [IsFiniteMeasure μ]
214+ (hG : G ≤ mα) :
215+ CondIndep G F H hG μ
216+ ↔ condExpKernel μ (F ⊔ G) =ᵐ[@Measure.map _ _ mα H id μ] condExpKernel μ G := by
217+ sorry
218+
219+ section Cond
220+
221+ lemma ae_cond_of_forall_mem {μ : Measure α} {s : Set α}
222+ (hs : MeasurableSet s) {p : α → Prop } (h : ∀ x ∈ s, p x) :
223+ ∀ᵐ x ∂μ[|s], p x := Measure.ae_smul_measure (ae_restrict_of_forall_mem hs h) _
224+
99225lemma condDistrib_ae_eq_cond [Countable β] [MeasurableSingletonClass β]
100226 [IsFiniteMeasure μ]
101227 (hX : Measurable X) (hY : Measurable Y) :
@@ -110,26 +236,6 @@ lemma condDistrib_ae_eq_cond [Countable β] [MeasurableSingletonClass β]
110236 · congr
111237 · exact hb
112238
113- lemma ae_cond_of_forall_mem {μ : Measure α} {s : Set α}
114- (hs : MeasurableSet s) {p : α → Prop } (h : ∀ x ∈ s, p x) :
115- ∀ᵐ x ∂μ[|s], p x := Measure.ae_smul_measure (ae_restrict_of_forall_mem hs h) _
116-
117- lemma condDistrib_of_indepFun [IsZeroOrProbabilityMeasure μ] (h : IndepFun X Y μ)
118- (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) :
119- condDistrib Y X μ =ᵐ[μ.map X] Kernel.const β (μ.map Y) := by
120- symm
121- refine condDistrib_ae_eq_of_measure_eq_compProd₀ (μ := μ) hX hY _ ?_
122- simp only [Measure.compProd_const]
123- exact (indepFun_iff_map_prod_eq_prod_map_map hX hY).mp h
124-
125- lemma indepFun_iff_condDistrib_eq_const [IsZeroOrProbabilityMeasure μ]
126- (hX : AEMeasurable X μ) (hY : AEMeasurable Y μ) :
127- IndepFun X Y μ ↔ condDistrib Y X μ =ᵐ[μ.map X] Kernel.const β (μ.map Y) := by
128- refine ⟨fun h ↦ condDistrib_of_indepFun h hX hY, fun h ↦ ?_⟩
129- rw [indepFun_iff_map_prod_eq_prod_map_map hX hY, ← compProd_map_condDistrib hY,
130- Measure.compProd_congr h]
131- simp
132-
133239lemma cond_of_indepFun [IsZeroOrProbabilityMeasure μ] (h : IndepFun X T μ)
134240 (hX : Measurable X) (hT : Measurable T) {s : Set β} (hs : MeasurableSet s)
135241 (hμs : μ (X ⁻¹' s) ≠ 0 ) :
@@ -142,21 +248,6 @@ lemma cond_of_indepFun [IsZeroOrProbabilityMeasure μ] (h : IndepFun X T μ)
142248 · rw [indepFun_iff_indepSet_preimage hX hT] at h
143249 exact h s t hs ht
144250
145- lemma condIndep_iff_condExpKernel_eq {α : Type *} {F G H mα : MeasurableSpace α}
146- [StandardBorelSpace α] {μ : Measure α} [IsFiniteMeasure μ]
147- (hG : G ≤ mα) :
148- CondIndep G F H hG μ
149- ↔ condExpKernel μ (F ⊔ G) =ᵐ[@Measure.map _ _ mα H id μ] condExpKernel μ G := by
150- sorry
151-
152- lemma condDistrib_of_condIndepFun
153- [StandardBorelSpace α] [IsZeroOrProbabilityMeasure μ]
154- (hX : Measurable X) (hY : Measurable Y) (hZ : Measurable Z)
155- (h : CondIndepFun (MeasurableSpace.comap Z inferInstance) hZ.comap_le Y X μ) :
156- condDistrib Y (fun ω ↦ (X ω, Z ω)) μ
157- =ᵐ[μ.map (fun ω ↦ (X ω, Z ω))] fun p ↦ condDistrib Y Z μ p.2 := by
158- sorry
159-
160251lemma cond_of_condIndepFun [StandardBorelSpace α] [IsZeroOrProbabilityMeasure μ]
161252 (hZ : Measurable Z)
162253 (h : CondIndepFun (MeasurableSpace.comap Z inferInstance) hZ.comap_le Y X μ)
@@ -173,4 +264,6 @@ lemma cond_of_condIndepFun [StandardBorelSpace α] [IsZeroOrProbabilityMeasure
173264 specialize h u s hu hs
174265 sorry
175266
267+ end Cond
268+
176269end ProbabilityTheory
0 commit comments