@@ -69,6 +69,117 @@ lemma HasCondDistrib.snd {Y : α → Ω × Ω'} {κ : Kernel β (Ω × Ω')} [Is
6969 rw [Kernel.snd_eq]
7070 exact HasCondDistrib.comp h measurable_snd
7171
72+ lemma HasCondDistrib.comp_right [IsFiniteMeasure μ] [IsFiniteKernel κ] (h : HasCondDistrib Y X κ μ)
73+ (f : β ≃ᵐ γ) :
74+ HasCondDistrib Y (f ∘ X) (κ.comap f.symm (by fun_prop)) μ := by
75+ have hY := h.aemeasurable_fst
76+ have hX := h.aemeasurable_snd
77+ refine ⟨h.aemeasurable_fst, by fun_prop, ?_⟩
78+ have h_eq := h.condDistrib_eq
79+ rw [condDistrib_ae_eq_iff_measure_eq_compProd _ (by fun_prop) _] at h_eq ⊢
80+ calc μ.map (fun ω ↦ ((f ∘ X) ω, Y ω))
81+ _ = μ.map ((fun p ↦ (f p.1 , p.2 )) ∘ fun ω ↦ (X ω, Y ω)) := by congr
82+ _ = (μ.map (fun ω ↦ (X ω, Y ω))).map (fun p ↦ (f p.1 , p.2 )) := by
83+ rw [AEMeasurable.map_map_of_aemeasurable (by fun_prop) (by fun_prop)]
84+ _ = (μ.map X ⊗ₘ κ).map (fun p ↦ (f p.1 , p.2 )) := by rw [h_eq]
85+ _ = μ.map (f ∘ X) ⊗ₘ (κ.comap f.symm (by fun_prop)) := by
86+ -- this is probably very inefficient.
87+ have hX_eq : X = f.symm ∘ (f ∘ X) := by ext; simp
88+ conv_lhs => rw [hX_eq]
89+ rw [← AEMeasurable.map_map_of_aemeasurable, Measure.compProd_eq_comp_prod,
90+ ← Measure.deterministic_comp_eq_map (f := f.symm), ← Measure.deterministic_comp_eq_map]
91+ rotate_left
92+ · fun_prop
93+ · fun_prop
94+ · fun_prop
95+ · fun_prop
96+ rw [← Kernel.comp_deterministic_eq_comap, Measure.compProd_eq_comp_prod]
97+ simp_rw [Measure.comp_assoc]
98+ congr 1
99+ ext c : 1
100+ rw [Kernel.comp_apply, Kernel.comp_apply, Kernel.prod_apply, Kernel.comp_apply]
101+ simp only [Kernel.deterministic_apply, Kernel.id_apply, Measure.dirac_bind κ.measurable,
102+ Measure.dirac_bind (Kernel.id ×ₖ κ).measurable, Kernel.prod_apply,
103+ Measure.deterministic_comp_eq_map]
104+ ext s hs
105+ rw [Measure.map_apply (by fun_prop) hs, Measure.prod_apply, Measure.prod_apply,
106+ lintegral_dirac', lintegral_dirac']
107+ · congr
108+ ext
109+ simp
110+ · exact measurable_measure_prodMk_left hs
111+ · exact measurable_measure_prodMk_left (hs.preimage (by fun_prop))
112+ · exact hs
113+ · exact hs.preimage (by fun_prop)
114+
115+ lemma HasCondDistrib.prod_right [IsFiniteMeasure μ] [IsFiniteKernel κ] (h : HasCondDistrib Y X κ μ)
116+ {f : β → γ} (hf : Measurable f) :
117+ HasCondDistrib Y (fun a ↦ (X a, f (X a))) (κ.prodMkRight _) μ := by
118+ have hY := h.aemeasurable_fst
119+ have hX := h.aemeasurable_snd
120+ refine ⟨h.aemeasurable_fst, by fun_prop, ?_⟩
121+ have h_eq := h.condDistrib_eq
122+ rw [condDistrib_ae_eq_iff_measure_eq_compProd _ (by fun_prop) _] at h_eq ⊢
123+ calc μ.map (fun x ↦ ((X x, f (X x)), Y x))
124+ _ = (μ.map (fun ω ↦ (X ω, Y ω))).map (fun p ↦ ((p.1 , f p.1 ), p.2 )) := by
125+ rw [AEMeasurable.map_map_of_aemeasurable (by fun_prop) (by fun_prop)]
126+ congr
127+ _ = (μ.map X ⊗ₘ κ).map (fun p ↦ ((p.1 , f p.1 ), p.2 )) := by rw [h_eq]
128+ _ = (μ.map X).map (fun a ↦ (a, f a)) ⊗ₘ κ.prodMkRight γ := by
129+ rw [Measure.compProd_eq_comp_prod, Measure.compProd_eq_comp_prod,
130+ ← Measure.deterministic_comp_eq_map (f := fun a ↦ (a, f a)),
131+ ← Measure.deterministic_comp_eq_map, Measure.comp_assoc, Measure.comp_assoc]
132+ swap; · fun_prop
133+ swap; · fun_prop
134+ congr 1
135+ ext b : 1
136+ rw [Kernel.comp_apply, Kernel.comp_apply, Kernel.prod_apply, Kernel.deterministic_apply,
137+ Kernel.id_apply, Measure.dirac_bind (Kernel.measurable _), Kernel.prod_apply,
138+ Measure.deterministic_comp_eq_map, Kernel.prodMkRight_apply, Kernel.id_apply]
139+ change Measure.map (Prod.map (fun x ↦ (x, f x)) id) ((Measure.dirac b).prod (κ b)) =
140+ (Measure.dirac (b, f b)).prod (κ b)
141+ rw [← Measure.map_prod_map _ _ (by fun_prop) (by fun_prop), Measure.map_id,
142+ Measure.map_dirac (by fun_prop)]
143+ _ = μ.map (fun a ↦ (X a, f (X a))) ⊗ₘ κ.prodMkRight γ := by
144+ rw [AEMeasurable.map_map_of_aemeasurable (by fun_prop) (by fun_prop)]
145+ congr
146+
147+ lemma hasCondDistrib_prod_right_iff [IsFiniteMeasure μ] [IsFiniteKernel κ] (X : α → β) (Y : α → Ω)
148+ {f : β → γ} (hf : Measurable f) :
149+ HasCondDistrib Y (fun a ↦ (X a, f (X a))) (κ.prodMkRight _) μ ↔ HasCondDistrib Y X κ μ := by
150+ refine ⟨fun h ↦ ?_, fun h ↦ h.prod_right hf⟩
151+ have hX : AEMeasurable X μ := by
152+ have := h.aemeasurable_snd
153+ have h_eq : X = (fun p ↦ p.1 ) ∘ (fun a ↦ (X a, f (X a))) := by ext; simp
154+ rw [h_eq]
155+ exact Measurable.comp_aemeasurable (by fun_prop) (by fun_prop)
156+ have hY := h.aemeasurable_fst
157+ refine ⟨by fun_prop, by fun_prop, ?_⟩
158+ have h_eq := h.condDistrib_eq
159+ rw [condDistrib_ae_eq_iff_measure_eq_compProd _ (by fun_prop) _] at h_eq ⊢
160+ calc μ.map (fun x ↦ (X x, Y x))
161+ _ = (μ.map (fun ω ↦ ((X ω, f (X ω)), Y ω))).map (fun p ↦ (p.1 .1 , p.2 )) := by
162+ rw [AEMeasurable.map_map_of_aemeasurable (by fun_prop) (by fun_prop)]
163+ congr
164+ _ = (μ.map (fun a ↦ (X a, f (X a))) ⊗ₘ κ.prodMkRight γ).map (fun p ↦ (p.1 .1 , p.2 )) := by rw [h_eq]
165+ _ = ((μ.map X).map (fun a ↦ (a, f a)) ⊗ₘ κ.prodMkRight γ).map (fun p ↦ (p.1 .1 , p.2 )) := by
166+ rw [AEMeasurable.map_map_of_aemeasurable (by fun_prop) (by fun_prop)]
167+ congr
168+ _ = μ.map X ⊗ₘ κ := by
169+ simp_rw [Measure.compProd_eq_comp_prod,
170+ ← Measure.deterministic_comp_eq_map (f := fun a ↦ (a, f a)) (by fun_prop),
171+ ← Measure.deterministic_comp_eq_map (f := fun p : (β × γ) × Ω ↦ (p.1 .1 , p.2 )) (by fun_prop),
172+ Measure.comp_assoc]
173+ congr 1
174+ ext b : 1
175+ rw [Kernel.comp_apply, Kernel.comp_apply, Kernel.prod_apply, Kernel.id_apply,
176+ Kernel.deterministic_apply, Measure.dirac_bind (Kernel.measurable _),
177+ Kernel.prod_apply, Measure.deterministic_comp_eq_map, Kernel.prodMkRight_apply,
178+ Kernel.id_apply]
179+ change Measure.map (Prod.map (fun x ↦ x.1 ) id) ((Measure.dirac (b, f b)).prod (κ b)) = _
180+ rw [← Measure.map_prod_map _ _ (by fun_prop) (by fun_prop), Measure.map_id,
181+ Measure.map_dirac (by fun_prop)]
182+
72183lemma HasLaw.prod_of_hasCondDistrib {P : Measure β} [IsFiniteMeasure μ] [IsSFiniteKernel κ]
73184 (h1 : HasLaw X P μ) (h2 : HasCondDistrib Y X κ μ) :
74185 HasLaw (fun ω ↦ (X ω, Y ω)) (P ⊗ₘ κ) μ := by
0 commit comments