@@ -5,11 +5,7 @@ Authors: Rémy Degenne
55-/
66module
77
8- public import RandomDo.Probability.Transfer
9- public import Mathlib.MeasureTheory.Integral.Bochner.Basic
10- public import Mathlib.MeasureTheory.Measure.Real
11- public import Mathlib.Probability.HasCondDistrib
12- public import Mathlib.Probability.Independence.Basic
8+ public import RandomDo.Probability.MeasurePreserving
139public import Mathlib.Probability.Kernel.Composition.MeasureCompProd
1410public meta import Lean.Elab.Tactic.Basic
1511
@@ -55,11 +51,9 @@ statement by statement. Here the projection `f` is measure preserving, which is
5551## Main results
5652
5753* `RDo.wlog_extend`, `RDo.wlog_extend_kernel`: the principles behind the tactic.
58- * `MeasureTheory.MeasurePreserving.map_fun_comp`, `hasLaw_fun_comp_iff`, `indepFun_fun_comp_iff`,
59- `hasCondDistrib_fun_comp_iff`: pulling statements back along a measure-preserving map.
60- * The `@[transfer]` lemmas `MeasurePreserving.transfer_*` and the `@[transfer_forward]` lemmas
61- `*.comp_measurePreserving`, `*.preimage_measurePreserving`: the same facts in the forms the
62- `transfer` tactic uses.
54+ * `RDo.indepFun_fst_snd_prod`, `RDo.hasCondDistrib_snd_fst_compProd`: the product extension.
55+
56+ The lemmas the `transfer` tactic rewrites with are in `RandomDo.Probability.MeasurePreserving`.
6357-/
6458
6559@[expose] public section
@@ -68,178 +62,6 @@ open MeasureTheory ProbabilityTheory
6862
6963noncomputable section
7064
71- /-! ### Pulling statements back along a measure-preserving map -/
72-
73- namespace MeasureTheory.MeasurePreserving
74-
75- variable {Ω Ω' 𝓧 𝓨 : Type *} {mΩ : MeasurableSpace Ω} {mΩ' : MeasurableSpace Ω'}
76- {m𝓧 : MeasurableSpace 𝓧} {m𝓨 : MeasurableSpace 𝓨} {P : Measure Ω} {P' : Measure Ω'}
77- {f : Ω' → Ω} {X : Ω → 𝓧} {Y : Ω → 𝓨}
78-
79- /-- The law of `X ∘ f` under `P'` is the law of `X` under `P`. -/
80- lemma map_fun_comp (hf : MeasurePreserving f P' P) (hX : AEMeasurable X P) :
81- P'.map (fun ω ↦ X (f ω)) = P.map X := by
82- rw [← hf.map_eq] at hX ⊢
83- exact (AEMeasurable.map_map_of_aemeasurable hX hf.measurable.aemeasurable).symm
84-
85- lemma hasLaw_fun_comp_iff (hf : MeasurePreserving f P' P) (hX : Measurable X) {ν : Measure 𝓧} :
86- HasLaw (fun ω ↦ X (f ω)) ν P' ↔ HasLaw X ν P where
87- mp h := ⟨hX.aemeasurable, by rw [← hf.map_fun_comp hX.aemeasurable]; exact h.map_eq⟩
88- mpr h := h.comp hf.hasLaw
89-
90- lemma indepFun_fun_comp_iff (hf : MeasurePreserving f P' P) (hX : Measurable X)
91- (hY : Measurable Y) :
92- IndepFun (fun ω ↦ X (f ω)) (fun ω ↦ Y (f ω)) P' ↔ IndepFun X Y P := by
93- simp only [indepFun_iff_measure_inter_preimage_eq_mul]
94- refine forall ₄_congr fun s t hs ht ↦ ?_
95- change P' (f ⁻¹' (X ⁻¹' s) ∩ f ⁻¹' (Y ⁻¹' t))
96- = P' (f ⁻¹' (X ⁻¹' s)) * P' (f ⁻¹' (Y ⁻¹' t)) ↔ _
97- rw [← Set.preimage_inter, hf.measure_preimage ((hX hs).inter (hY ht)).nullMeasurableSet,
98- hf.measure_preimage (hX hs).nullMeasurableSet, hf.measure_preimage (hY ht).nullMeasurableSet]
99-
100- lemma hasCondDistrib_fun_comp_iff (hf : MeasurePreserving f P' P) (hX : Measurable X)
101- (hY : Measurable Y) {κ : Kernel 𝓧 𝓨} :
102- HasCondDistrib (fun ω ↦ Y (f ω)) (fun ω ↦ X (f ω)) κ P' ↔ HasCondDistrib Y X κ P := by
103- unfold HasCondDistrib
104- rw [hf.map_fun_comp hX.aemeasurable]
105- exact hf.hasLaw_fun_comp_iff (hX.prodMk hY)
106-
107- /-! ### The `@[transfer]` lemmas: from the old space to the new one
108-
109- The same facts, stated with the old space on the left and `hf` as the first explicit argument,
110- which is what the `transfer` tactic rewrites with. -/
111-
112- @[transfer]
113- lemma transfer_map (hf : MeasurePreserving f P' P) (hX : AEMeasurable X P) :
114- P.map X = P'.map (fun ω ↦ X (f ω)) :=
115- (hf.map_fun_comp hX).symm
116-
117- @[transfer]
118- lemma transfer_measure (hf : MeasurePreserving f P' P) {s : Set Ω} (hs : NullMeasurableSet s P) :
119- P s = P' (f ⁻¹' s) :=
120- (hf.measure_preimage hs).symm
121-
122- @[transfer]
123- lemma transfer_real (hf : MeasurePreserving f P' P) {s : Set Ω} (hs : NullMeasurableSet s P) :
124- P.real s = P'.real (f ⁻¹' s) := by
125- simp only [measureReal_def, hf.measure_preimage hs]
126-
127- @[transfer]
128- lemma transfer_hasLaw (hf : MeasurePreserving f P' P) (hX : Measurable X) {ν : Measure 𝓧} :
129- HasLaw X ν P ↔ HasLaw (fun ω ↦ X (f ω)) ν P' :=
130- (hf.hasLaw_fun_comp_iff hX).symm
131-
132- @[transfer]
133- lemma transfer_indepFun (hf : MeasurePreserving f P' P) (hX : Measurable X) (hY : Measurable Y) :
134- IndepFun X Y P ↔ IndepFun (fun ω ↦ X (f ω)) (fun ω ↦ Y (f ω)) P' :=
135- (hf.indepFun_fun_comp_iff hX hY).symm
136-
137- @[transfer]
138- lemma transfer_hasCondDistrib (hf : MeasurePreserving f P' P) (hX : Measurable X)
139- (hY : Measurable Y) {κ : Kernel 𝓧 𝓨} :
140- HasCondDistrib Y X κ P ↔ HasCondDistrib (fun ω ↦ Y (f ω)) (fun ω ↦ X (f ω)) κ P' :=
141- (hf.hasCondDistrib_fun_comp_iff hX hY).symm
142-
143- @[transfer]
144- lemma transfer_integral {G : Type *} [NormedAddCommGroup G] [NormedSpace ℝ G]
145- (hf : MeasurePreserving f P' P) {g : Ω → G} (hg : AEStronglyMeasurable g P) :
146- ∫ ω, g ω ∂P = ∫ ω, g (f ω) ∂P' := by
147- rw [← hf.map_eq] at hg ⊢
148- exact integral_map hf.measurable.aemeasurable hg
149-
150- @[transfer]
151- lemma transfer_lintegral (hf : MeasurePreserving f P' P) {g : Ω → ENNReal}
152- (hg : AEMeasurable g P) :
153- ∫⁻ ω, g ω ∂P = ∫⁻ ω, g (f ω) ∂P' := by
154- rw [← hf.map_eq] at hg ⊢
155- exact lintegral_map' hg hf.measurable.aemeasurable
156-
157- @[transfer]
158- lemma transfer_ae (hf : MeasurePreserving f P' P) {p : Ω → Prop }
159- (hp : NullMeasurableSet {ω | p ω} P) :
160- (∀ᵐ ω ∂P, p ω) ↔ ∀ᵐ ω ∂P', p (f ω) := by
161- rw [ae_iff, ae_iff, ← hf.measure_preimage (s := {ω | ¬ p ω}) hp.compl, Set.preimage_ofPred_eq]
162-
163- @[transfer]
164- lemma transfer_ae_eq (hf : MeasurePreserving f P' P) {X Y : Ω → 𝓧}
165- (h : NullMeasurableSet {ω | X ω = Y ω} P) :
166- X =ᵐ[P] Y ↔ (fun ω ↦ X (f ω)) =ᵐ[P'] fun ω ↦ Y (f ω) :=
167- hf.transfer_ae h
168-
169- @[transfer]
170- lemma transfer_integrable {G : Type *} [NormedAddCommGroup G] (hf : MeasurePreserving f P' P)
171- {g : Ω → G} (hg : AEStronglyMeasurable g P) :
172- Integrable g P ↔ Integrable (fun ω ↦ g (f ω)) P' :=
173- (hf.integrable_comp hg).symm
174-
175- end MeasureTheory.MeasurePreserving
176-
177- /-! ### Forward transport of hypotheses
178-
179- A hypothesis about the old space gives one about the new space. These are the
180- `@[transfer_forward]` lemmas: the hypothesis first, then `hf`, then side conditions. -/
181-
182- section Forward
183-
184- variable {Ω Ω' 𝓧 𝓨 : Type *} {mΩ : MeasurableSpace Ω} {mΩ' : MeasurableSpace Ω'}
185- {m𝓧 : MeasurableSpace 𝓧} {m𝓨 : MeasurableSpace 𝓨} {P : Measure Ω} {P' : Measure Ω'}
186- {f : Ω' → Ω} {X : Ω → 𝓧} {Y : Ω → 𝓨}
187-
188- @[transfer_forward]
189- lemma Measurable.comp_measurePreserving (hX : Measurable X) (hf : MeasurePreserving f P' P) :
190- Measurable fun ω ↦ X (f ω) :=
191- hX.comp hf.measurable
192-
193- @[transfer_forward]
194- lemma AEMeasurable.comp_measurePreserving (hX : AEMeasurable X P)
195- (hf : MeasurePreserving f P' P) :
196- AEMeasurable (fun ω ↦ X (f ω)) P' :=
197- hX.comp_quasiMeasurePreserving hf.quasiMeasurePreserving
198-
199- attribute [transfer_forward] MeasureTheory.AEStronglyMeasurable.comp_measurePreserving
200-
201- @[transfer_forward]
202- lemma MeasurableSet.preimage_measurePreserving {s : Set Ω} (hs : MeasurableSet s)
203- (hf : MeasurePreserving f P' P) :
204- MeasurableSet (f ⁻¹' s) :=
205- hf.measurable hs
206-
207- @[transfer_forward]
208- lemma MeasureTheory.NullMeasurableSet.preimage_measurePreserving {s : Set Ω}
209- (hs : NullMeasurableSet s P) (hf : MeasurePreserving f P' P) :
210- NullMeasurableSet (f ⁻¹' s) P' :=
211- hs.preimage hf.quasiMeasurePreserving
212-
213- @[transfer_forward]
214- lemma ProbabilityTheory.HasLaw.comp_measurePreserving {ν : Measure 𝓧} (hX : HasLaw X ν P)
215- (hf : MeasurePreserving f P' P) :
216- HasLaw (fun ω ↦ X (f ω)) ν P' :=
217- hX.comp hf.hasLaw
218-
219- /-- A conditional law pulls back along a measure-preserving map. -/
220- @[transfer_forward]
221- lemma ProbabilityTheory.HasCondDistrib.comp_measurePreserving {κ : Kernel 𝓧 𝓨}
222- (h : HasCondDistrib Y X κ P) (hf : MeasurePreserving f P' P) :
223- HasCondDistrib (fun ω ↦ Y (f ω)) (fun ω ↦ X (f ω)) κ P' := by
224- have hX := h.aemeasurable_fst
225- unfold HasCondDistrib at h ⊢
226- rw [hf.map_fun_comp hX]
227- exact h.comp hf.hasLaw
228-
229- @[transfer_forward]
230- lemma ProbabilityTheory.IndepFun.comp_measurePreserving (h : IndepFun X Y P)
231- (hf : MeasurePreserving f P' P) (hX : Measurable X) (hY : Measurable Y) :
232- IndepFun (fun ω ↦ X (f ω)) (fun ω ↦ Y (f ω)) P' :=
233- (hf.indepFun_fun_comp_iff hX hY).2 h
234-
235- @[transfer_forward]
236- lemma MeasureTheory.Integrable.comp_measurePreserving {G : Type *} [NormedAddCommGroup G]
237- {g : Ω → G} (hg : Integrable g P) (hf : MeasurePreserving f P' P) :
238- Integrable (fun ω ↦ g (f ω)) P' :=
239- (hf.integrable_comp hg.aestronglyMeasurable).2 hg
240-
241- end Forward
242-
24365namespace RDo
24466
24567/-! ### The product extension -/
0 commit comments