Skip to content

Commit e26b4ff

Browse files
committed
chore(Probability/Kernel): add fun_prop attributes, use it (#21861)
I marked measurability lemmas about kernels with `fun_prop` and used that tactic in various places to replace measurability proofs. Using `fun_prop` instead of manual proofs improved some proofs and allowed removing several now unused typeclass arguments.
1 parent 5d264f3 commit e26b4ff

File tree

7 files changed

+56
-60
lines changed

7 files changed

+56
-60
lines changed

Mathlib/MeasureTheory/Measure/GiryMonad.lean

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,20 @@ theorem _root_.Measurable.measure_of_isPiSystem_of_isProbabilityMeasure {μ : α
8585
(h_basic : ∀ s ∈ S, Measurable fun a ↦ μ a s) : Measurable μ :=
8686
.measure_of_isPiSystem hgen hpi h_basic <| by simp
8787

88+
@[fun_prop]
8889
theorem measurable_map (f : α → β) (hf : Measurable f) :
8990
Measurable fun μ : Measure α => map f μ := by
9091
refine measurable_of_measurable_coe _ fun s hs => ?_
9192
simp_rw [map_apply hf hs]
9293
exact measurable_coe (hf hs)
9394

95+
@[fun_prop]
9496
theorem measurable_dirac : Measurable (Measure.dirac : α → Measure α) := by
9597
refine measurable_of_measurable_coe _ fun s hs => ?_
9698
simp_rw [dirac_apply' _ hs]
9799
exact measurable_one.indicator hs
98100

101+
@[fun_prop]
99102
theorem measurable_lintegral {f : α → ℝ≥0∞} (hf : Measurable f) :
100103
Measurable fun μ : Measure α => ∫⁻ x, f x ∂μ := by
101104
simp only [lintegral_eq_iSup_eapprox_lintegral, hf, SimpleFunc.lintegral]
@@ -124,6 +127,7 @@ theorem join_zero : (0 : Measure (Measure α)).join = 0 := by
124127
ext1 s hs
125128
simp only [hs, join_apply, lintegral_zero_measure, coe_zero, Pi.zero_apply]
126129

130+
@[fun_prop]
127131
theorem measurable_join : Measurable (join : Measure (Measure α) → Measure α) :=
128132
measurable_of_measurable_coe _ fun s hs => by
129133
simp only [join_apply hs]; exact measurable_lintegral (measurable_coe hs)
@@ -144,7 +148,7 @@ theorem lintegral_join {m : Measure (Measure α)} {f : α → ℝ≥0∞} (hf :
144148
intro s f hf hm
145149
rw [lintegral_iSup _ hm]
146150
swap
147-
· exact fun n => Finset.measurable_sum _ fun r _ => (hf _ _).const_mul _
151+
· fun_prop
148152
congr
149153
funext n
150154
rw [lintegral_finset_sum (s n)]
@@ -180,6 +184,7 @@ lemma bind_const {m : Measure α} {ν : Measure β} : m.bind (fun _ ↦ ν) = m
180184
ext s hs
181185
rw [bind_apply hs measurable_const, lintegral_const, smul_apply, smul_eq_mul, mul_comm]
182186

187+
@[fun_prop]
183188
theorem measurable_bind' {g : α → Measure β} (hg : Measurable g) : Measurable fun m => bind m g :=
184189
measurable_join.comp (measurable_map _ hg)
185190

@@ -211,7 +216,7 @@ lemma bind_dirac_eq_map (m : Measure α) {f : α → β} (hf : Measurable f) :
211216
m.bind (fun x ↦ Measure.dirac (f x)) = m.map f := by
212217
ext s hs
213218
rw [bind_apply hs]
214-
swap; · exact measurable_dirac.comp hf
219+
swap; · fun_prop
215220
simp_rw [dirac_apply' _ hs]
216221
rw [← lintegral_map _ hf, lintegral_indicator_one hs]
217222
exact measurable_const.indicator hs

Mathlib/Probability/Kernel/Composition/Basic.lean

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ theorem compProdFun_iUnion (κ : Kernel α β) (η : Kernel (α × β) γ) [IsSF
118118
· simp [compProdFun]
119119
· intro i
120120
have hm : MeasurableSet {p : (α × β) × γ | (p.1.2, p.2) ∈ f i} :=
121-
measurable_fst.snd.prod_mk measurable_snd (hf_meas i)
121+
(hf_meas i).preimage (by fun_prop)
122122
exact ((measurable_kernel_prod_mk_left hm).comp measurable_prod_mk_left).aemeasurable
123123

124124
theorem compProdFun_tsum_right (κ : Kernel α β) (η : Kernel (α × β) γ) [IsSFiniteKernel η] (a : α)
@@ -401,9 +401,7 @@ theorem lintegral_compProd' (κ : Kernel α β) [IsSFiniteKernel κ] (η : Kerne
401401
(fun ab => ∫⁻ c, f' (ab.2, c) ∂η ab) ∘ fun b => (a, b) := by
402402
ext1 ab; rfl
403403
rw [this]
404-
apply Measurable.comp _ (measurable_prod_mk_left (m := mα))
405-
exact Measurable.lintegral_kernel_prod_right
406-
((SimpleFunc.measurable _).comp (measurable_fst.snd.prod_mk measurable_snd))
404+
fun_prop
407405
rw [lintegral_iSup]
408406
rotate_left
409407
· exact fun n => h_some_meas_integral (F n)
@@ -588,7 +586,7 @@ use `map κ f` instead. -/
588586
noncomputable def mapOfMeasurable (κ : Kernel α β) (f : β → γ) (hf : Measurable f) :
589587
Kernel α γ where
590588
toFun a := (κ a).map f
591-
measurable' := (Measure.measurable_map _ hf).comp (Kernel.measurable κ)
589+
measurable' := by fun_prop
592590

593591
open Classical in
594592
/-- The pushforward of a kernel along a function.
@@ -1201,7 +1199,7 @@ instance IsSFiniteKernel.comp (η : Kernel β γ) [IsSFiniteKernel η] (κ : Ker
12011199
[IsSFiniteKernel κ] : IsSFiniteKernel (η ∘ₖ κ) := by rw [comp_eq_snd_compProd]; infer_instance
12021200

12031201
/-- Composition of kernels is associative. -/
1204-
theorem comp_assoc {δ : Type*} {mδ : MeasurableSpace δ} (ξ : Kernel γ δ) [IsSFiniteKernel ξ]
1202+
theorem comp_assoc {δ : Type*} {mδ : MeasurableSpace δ} (ξ : Kernel γ δ)
12051203
(η : Kernel β γ) (κ : Kernel α β) : ξ ∘ₖ η ∘ₖ κ = ξ ∘ₖ (η ∘ₖ κ) := by
12061204
refine ext_fun fun a f hf => ?_
12071205
simp_rw [lintegral_comp _ _ _ hf, lintegral_comp _ _ _ hf.lintegral_kernel]
@@ -1351,20 +1349,20 @@ lemma comap_prod_swap (κ : Kernel α β) (η : Kernel γ δ) [IsSFiniteKernel
13511349
intro x f hf
13521350
rw [lintegral_comap, lintegral_map _ measurable_swap _ hf, lintegral_prod _ _ _ hf,
13531351
lintegral_prod]
1354-
swap; · exact hf.comp measurable_swap
1352+
swap; · fun_prop
13551353
simp only [prodMkRight_apply, Prod.fst_swap, Prod.swap_prod_mk, lintegral_prodMkLeft,
13561354
Prod.snd_swap]
13571355
refine (lintegral_lintegral_swap ?_).symm
1358-
exact (hf.comp measurable_swap).aemeasurable
1356+
fun_prop
13591357

13601358
lemma map_prod_swap (κ : Kernel α β) (η : Kernel α γ) [IsSFiniteKernel κ] [IsSFiniteKernel η] :
13611359
map (κ ×ₖ η) Prod.swap = η ×ₖ κ := by
13621360
rw [ext_fun_iff]
13631361
intro x f hf
13641362
rw [lintegral_map _ measurable_swap _ hf, lintegral_prod, lintegral_prod _ _ _ hf]
1365-
swap; · exact hf.comp measurable_swap
1363+
swap; · fun_prop
13661364
refine (lintegral_lintegral_swap ?_).symm
1367-
exact hf.aemeasurable
1365+
fun_prop
13681366

13691367
@[simp]
13701368
lemma swap_prod {κ : Kernel α β} [IsSFiniteKernel κ] {η : Kernel α γ} [IsSFiniteKernel η] :

Mathlib/Probability/Kernel/Defs.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ instance instFunLike : FunLike (Kernel α β) α (Measure β) where
7373
coe := toFun
7474
coe_injective' f g h := by cases f; cases g; congr
7575

76+
@[fun_prop]
7677
lemma measurable (κ : Kernel α β) : Measurable κ := κ.measurable'
78+
7779
@[simp, norm_cast] lemma coe_mk (f : α → Measure β) (hf) : mk f hf = f := rfl
7880

7981
initialize_simps_projections Kernel (toFun → apply)

Mathlib/Probability/Kernel/Invariance.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ theorem Invariant.def (hκ : Invariant κ μ) : μ.bind κ = μ :=
7575
theorem Invariant.comp_const (hκ : Invariant κ μ) : κ ∘ₖ const α μ = const α μ := by
7676
rw [← const_bind_eq_comp_const κ μ, hκ.def]
7777

78-
theorem Invariant.comp [IsSFiniteKernel κ] (hκ : Invariant κ μ) (hη : Invariant η μ) :
78+
theorem Invariant.comp (hκ : Invariant κ μ) (hη : Invariant η μ) :
7979
Invariant (κ ∘ₖ η) μ := by
8080
cases' isEmpty_or_nonempty α with _ hα
8181
· exact Subsingleton.elim _ _

Mathlib/Probability/Kernel/MeasurableLIntegral.lean

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ theorem Kernel.measurable_lintegral_indicator_const {t : Set (α × β)} (ht : M
118118
/-- For an s-finite kernel `κ` and a function `f : α → β → ℝ≥0∞` which is measurable when seen as a
119119
map from `α × β` (hypothesis `Measurable (uncurry f)`), the integral `a ↦ ∫⁻ b, f a b ∂(κ a)` is
120120
measurable. -/
121+
@[fun_prop]
121122
theorem _root_.Measurable.lintegral_kernel_prod_right {f : α → β → ℝ≥0∞}
122123
(hf : Measurable (uncurry f)) : Measurable fun a => ∫⁻ b, f a b ∂κ a := by
123124
let F : ℕ → SimpleFunc (α × β) ℝ≥0∞ := SimpleFunc.eapprox (uncurry f)
@@ -150,13 +151,11 @@ theorem _root_.Measurable.lintegral_kernel_prod_right {f : α → β → ℝ≥0
150151
rw [h_add]
151152
exact Measurable.add hm₁ hm₂
152153

154+
@[fun_prop]
153155
theorem _root_.Measurable.lintegral_kernel_prod_right' {f : α × β → ℝ≥0∞} (hf : Measurable f) :
154-
Measurable fun a => ∫⁻ b, f (a, b) ∂κ a := by
155-
refine Measurable.lintegral_kernel_prod_right ?_
156-
have : (uncurry fun (a : α) (b : β) => f (a, b)) = f := by
157-
ext x; rw [uncurry_apply_pair]
158-
rwa [this]
156+
Measurable fun a => ∫⁻ b, f (a, b) ∂κ a := by fun_prop
159157

158+
@[fun_prop]
160159
theorem _root_.Measurable.lintegral_kernel_prod_right'' {f : β × γ → ℝ≥0∞} (hf : Measurable f) :
161160
Measurable fun x => ∫⁻ y, f (x, y) ∂η (a, x) := by
162161
-- Porting note: used `Prod.mk a` instead of `fun x => (a, x)` below
@@ -166,35 +165,35 @@ theorem _root_.Measurable.lintegral_kernel_prod_right'' {f : β × γ → ℝ≥
166165
-- Porting note: specified `κ`, `f`.
167166
refine (Measurable.lintegral_kernel_prod_right' (κ := η)
168167
(f := (fun u ↦ f (u.fst.snd, u.snd))) ?_).comp measurable_prod_mk_left
169-
exact hf.comp (measurable_fst.snd.prod_mk measurable_snd)
168+
fun_prop
170169

171170
theorem _root_.Measurable.setLIntegral_kernel_prod_right {f : α → β → ℝ≥0∞}
172171
(hf : Measurable (uncurry f)) {s : Set β} (hs : MeasurableSet s) :
173172
Measurable fun a => ∫⁻ b in s, f a b ∂κ a := by
174-
simp_rw [← lintegral_restrict κ hs]; exact hf.lintegral_kernel_prod_right
173+
simp_rw [← lintegral_restrict κ hs]; fun_prop
175174

175+
@[fun_prop]
176176
theorem _root_.Measurable.lintegral_kernel_prod_left' {f : β × α → ℝ≥0∞} (hf : Measurable f) :
177-
Measurable fun y => ∫⁻ x, f (x, y) ∂κ y :=
178-
(measurable_swap_iff.mpr hf).lintegral_kernel_prod_right'
177+
Measurable fun y => ∫⁻ x, f (x, y) ∂κ y := by fun_prop
179178

179+
@[fun_prop]
180180
theorem _root_.Measurable.lintegral_kernel_prod_left {f : β → α → ℝ≥0∞}
181-
(hf : Measurable (uncurry f)) : Measurable fun y => ∫⁻ x, f x y ∂κ y :=
182-
hf.lintegral_kernel_prod_left'
181+
(hf : Measurable (uncurry f)) : Measurable fun y => ∫⁻ x, f x y ∂κ y := by fun_prop
183182

184183
theorem _root_.Measurable.setLIntegral_kernel_prod_left {f : β → α → ℝ≥0∞}
185184
(hf : Measurable (uncurry f)) {s : Set β} (hs : MeasurableSet s) :
186185
Measurable fun b => ∫⁻ a in s, f a b ∂κ b := by
187-
simp_rw [← lintegral_restrict κ hs]; exact hf.lintegral_kernel_prod_left
186+
simp_rw [← lintegral_restrict κ hs]; fun_prop
188187

189-
theorem _root_.Measurable.lintegral_kernel {f : β → ℝ≥0∞} (hf : Measurable f) :
190-
Measurable fun a => ∫⁻ b, f b ∂κ a :=
191-
Measurable.lintegral_kernel_prod_right (hf.comp measurable_snd)
188+
@[fun_prop]
189+
theorem _root_.Measurable.lintegral_kernel {κ : Kernel α β} {f : β → ℝ≥0∞} (hf : Measurable f) :
190+
Measurable fun a => ∫⁻ b, f b ∂κ a := by fun_prop
192191

193192
theorem _root_.Measurable.setLIntegral_kernel {f : β → ℝ≥0∞} (hf : Measurable f) {s : Set β}
194193
(hs : MeasurableSet s) : Measurable fun a => ∫⁻ b in s, f b ∂κ a := by
195194
-- Porting note: was term mode proof (`Function.comp` reducibility)
196195
refine Measurable.setLIntegral_kernel_prod_right ?_ hs
197-
convert hf.comp measurable_snd
196+
fun_prop
198197

199198
end Lintegral
200199

Mathlib/Probability/Kernel/RadonNikodym.lean

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ lemma rnDerivAux_le_one [IsFiniteKernel η] (hκη : κ ≤ η) {a : α} :
107107
· have := hαγ.countableOrCountablyGenerated.resolve_left hα
108108
exact density_le_one ((fst_map_id_prod _ measurable_const).trans_le hκη) _ _ _
109109

110+
@[fun_prop]
110111
lemma measurable_rnDerivAux (κ η : Kernel α γ) :
111112
Measurable (fun p : α × γ ↦ Kernel.rnDerivAux κ η p.1 p.2) := by
112113
simp_rw [rnDerivAux]
@@ -124,10 +125,9 @@ lemma measurable_rnDerivAux (κ η : Kernel α γ) :
124125
· have := hαγ.countableOrCountablyGenerated.resolve_left hα
125126
exact measurable_density _ η MeasurableSet.univ
126127

128+
@[fun_prop]
127129
lemma measurable_rnDerivAux_right (κ η : Kernel α γ) (a : α) :
128-
Measurable (fun x : γ ↦ rnDerivAux κ η a x) := by
129-
change Measurable ((fun p : α × γ ↦ rnDerivAux κ η p.1 p.2) ∘ (fun x ↦ (a, x)))
130-
exact (measurable_rnDerivAux _ _).comp measurable_prod_mk_left
130+
Measurable (fun x : γ ↦ rnDerivAux κ η a x) := by fun_prop
131131

132132
lemma setLIntegral_rnDerivAux (κ η : Kernel α γ) [IsFiniteKernel κ] [IsFiniteKernel η]
133133
(a : α) {s : Set γ} (hs : MeasurableSet s) :
@@ -150,8 +150,7 @@ lemma withDensity_rnDerivAux (κ η : Kernel α γ) [IsFiniteKernel κ] [IsFinit
150150
withDensity (κ + η) (fun a x ↦ Real.toNNReal (rnDerivAux κ (κ + η) a x)) = κ := by
151151
ext a s hs
152152
rw [Kernel.withDensity_apply']
153-
swap
154-
· exact (measurable_rnDerivAux _ _).ennreal_ofReal
153+
swap; · fun_prop
155154
simp_rw [ofNNReal_toNNReal]
156155
exact setLIntegral_rnDerivAux κ η a hs
157156

@@ -174,7 +173,7 @@ lemma withDensity_one_sub_rnDerivAux (κ η : Kernel α γ) [IsFiniteKernel κ]
174173
rw [withDensity_sub_add_cancel]
175174
· rw [withDensity_one']
176175
· exact measurable_const
177-
· exact (measurable_rnDerivAux _ _).ennreal_ofReal
176+
· fun_prop
178177
· intro a
179178
filter_upwards [rnDerivAux_le_one h_le] with x hx
180179
simp only [ENNReal.ofReal_le_one]
@@ -217,12 +216,9 @@ lemma measure_mutuallySingularSetSlice (κ η : Kernel α γ) [IsFiniteKernel κ
217216
simp_rw [ofNNReal_toNNReal]
218217
rw [Kernel.withDensity_apply', lintegral_eq_zero_iff, EventuallyEq, ae_restrict_iff]
219218
rotate_left
220-
· exact (measurable_const.sub
221-
((measurable_rnDerivAux _ _).comp measurable_prod_mk_left)).ennreal_ofReal
222-
(measurableSet_singleton _)
223-
· exact (measurable_const.sub
224-
((measurable_rnDerivAux _ _).comp measurable_prod_mk_left)).ennreal_ofReal
225-
· exact (measurable_const.sub (measurable_rnDerivAux _ _)).ennreal_ofReal
219+
· exact (measurableSet_singleton 0).preimage (by fun_prop)
220+
· fun_prop
221+
· fun_prop
226222
refine ae_of_all _ (fun x hx ↦ ?_)
227223
simp only [mem_setOf_eq] at hx
228224
simp [hx]
@@ -236,16 +232,16 @@ lemma rnDeriv_def' (κ η : Kernel α γ) :
236232
rnDeriv κ η = fun a x ↦ ENNReal.ofReal (rnDerivAux κ (κ + η) a x)
237233
/ ENNReal.ofReal (1 - rnDerivAux κ (κ + η) a x) := by ext; rw [rnDeriv_def]
238234

235+
@[fun_prop]
239236
lemma measurable_rnDeriv (κ η : Kernel α γ) :
240237
Measurable (fun p : α × γ ↦ rnDeriv κ η p.1 p.2) := by
241238
simp_rw [rnDeriv_def]
242239
exact (measurable_rnDerivAux κ _).ennreal_ofReal.div
243240
(measurable_const.sub (measurable_rnDerivAux κ _)).ennreal_ofReal
244241

242+
@[fun_prop]
245243
lemma measurable_rnDeriv_right (κ η : Kernel α γ) (a : α) :
246-
Measurable (fun x : γ ↦ rnDeriv κ η a x) := by
247-
change Measurable ((fun p : α × γ ↦ rnDeriv κ η p.1 p.2) ∘ (fun x ↦ (a, x)))
248-
exact (measurable_rnDeriv _ _).comp measurable_prod_mk_left
244+
Measurable (fun x : γ ↦ rnDeriv κ η a x) := by fun_prop
249245

250246
lemma rnDeriv_eq_top_iff (κ η : Kernel α γ) (a : α) (x : γ) :
251247
rnDeriv κ η a x = ∞ ↔ (a, x) ∈ mutuallySingularSet κ η := by
@@ -267,9 +263,7 @@ irreducible_def singularPart (κ η : Kernel α γ) [IsSFiniteKernel κ] [IsSFin
267263

268264
lemma measurable_singularPart_fun (κ η : Kernel α γ) :
269265
Measurable (fun p : α × γ ↦ Real.toNNReal (rnDerivAux κ (κ + η) p.1 p.2)
270-
- Real.toNNReal (1 - rnDerivAux κ (κ + η) p.1 p.2) * rnDeriv κ η p.1 p.2) :=
271-
(measurable_rnDerivAux _ _).ennreal_ofReal.sub
272-
((measurable_const.sub (measurable_rnDerivAux _ _)).ennreal_ofReal.mul (measurable_rnDeriv _ _))
266+
- Real.toNNReal (1 - rnDerivAux κ (κ + η) p.1 p.2) * rnDeriv κ η p.1 p.2) := by fun_prop
273267

274268
lemma measurable_singularPart_fun_right (κ η : Kernel α γ) (a : α) :
275269
Measurable (fun x : γ ↦ Real.toNNReal (rnDerivAux κ (κ + η) a x)
@@ -351,9 +345,8 @@ lemma withDensity_rnDeriv_of_subset_compl_mutuallySingularSetSlice
351345
exact (withDensity_one_sub_rnDerivAux κ η).symm
352346
rw [this, ← withDensity_mul, Kernel.withDensity_apply']
353347
rotate_left
354-
· exact ((measurable_const.sub (measurable_rnDerivAux _ _)).ennreal_ofReal.mul
355-
(measurable_rnDeriv _ _))
356-
· exact (measurable_const.sub (measurable_rnDerivAux _ _)).real_toNNReal
348+
· fun_prop
349+
· fun_prop
357350
· exact measurable_rnDeriv _ _
358351
simp_rw [rnDeriv]
359352
have hs' : ∀ x ∈ s, rnDerivAux κ (κ + η) a x < 1 := by

Mathlib/Probability/Kernel/WithDensity.lean

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ theorem integral_withDensity {E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ
111111
(hg : Measurable (Function.uncurry g)) :
112112
∫ b, f b ∂withDensity κ (fun a b => g a b) a = ∫ b, g a b • f b ∂κ a := by
113113
rw [Kernel.withDensity_apply, integral_withDensity_eq_integral_smul]
114-
· exact Measurable.of_uncurry_left hg
115-
· exact measurable_coe_nnreal_ennreal.comp hg
114+
· fun_prop
115+
· fun_prop
116116

117117
theorem withDensity_add_left (κ η : Kernel α β) [IsSFiniteKernel κ] [IsSFiniteKernel η]
118118
(f : α → β → ℝ≥0∞) : withDensity (κ + η) f = withDensity κ f + withDensity η f := by
@@ -139,7 +139,7 @@ lemma withDensity_add_right [IsSFiniteKernel κ] {f g : α → β → ℝ≥0∞
139139
ext a
140140
rw [coe_add, Pi.add_apply, Kernel.withDensity_apply _ hf, Kernel.withDensity_apply _ hg,
141141
Kernel.withDensity_apply, Pi.add_apply, MeasureTheory.withDensity_add_right]
142-
· exact hg.comp measurable_prod_mk_left
142+
· fun_prop
143143
· exact hf.add hg
144144

145145
lemma withDensity_sub_add_cancel [IsSFiniteKernel κ] {f g : α → β → ℝ≥0∞}
@@ -166,11 +166,11 @@ theorem withDensity_tsum [Countable ι] (κ : Kernel α β) [IsSFiniteKernel κ]
166166
rw [tsum_apply h_sum, tsum_apply (h_sum_a _), tsum_apply]
167167
exact Pi.summable.mpr fun p => ENNReal.summable
168168
rw [this]
169-
exact Measurable.ennreal_tsum' hf
169+
fun_prop
170170
have : ∫⁻ b in s, (∑' n, f n) a b ∂κ a = ∫⁻ b in s, ∑' n, (fun b => f n a b) b ∂κ a := by
171171
congr with b
172172
rw [tsum_apply h_sum, tsum_apply (h_sum_a a)]
173-
rw [this, lintegral_tsum fun n => (Measurable.of_uncurry_left (hf n)).aemeasurable]
173+
rw [this, lintegral_tsum fun n => by fun_prop]
174174
congr with n
175175
rw [Kernel.withDensity_apply' _ (hf n) a s]
176176

@@ -238,7 +238,7 @@ theorem isSFiniteKernel_withDensity_of_isFiniteKernel (κ : Kernel α β) [IsFin
238238
rw [Filter.EventuallyEq, Filter.eventually_atTop]
239239
exact ⟨⌈(f a b).toReal⌉₊, fun n hn => (min_eq_left (h_le a b n hn)).symm⟩
240240
rw [hf_eq_tsum, withDensity_tsum _ fun n : ℕ => _]
241-
swap; · exact fun _ => (hf.min measurable_const).sub (hf.min measurable_const)
241+
swap; · fun_prop
242242
refine isSFiniteKernel_sum (hκs := fun n => ?_)
243243
suffices IsFiniteKernel (withDensity κ (fs n)) by haveI := this; infer_instance
244244
refine isFiniteKernel_withDensity_of_bounded _ (ENNReal.coe_ne_top : ↑n + 1 ≠ ∞) fun a b => ?_
@@ -273,14 +273,13 @@ nonrec lemma withDensity_mul [IsSFiniteKernel κ] {f : α → β → ℝ≥0} {g
273273
= withDensity (withDensity κ fun a x ↦ f a x) g := by
274274
ext a : 1
275275
rw [Kernel.withDensity_apply]
276-
swap; · exact (measurable_coe_nnreal_ennreal.comp hf).mul hg
276+
swap; · fun_prop
277277
change (Measure.withDensity (κ a) ((fun x ↦ (f a x : ℝ≥0∞)) * (fun x ↦ (g a x : ℝ≥0∞)))) =
278278
(withDensity (withDensity κ fun a x ↦ f a x) g) a
279279
rw [withDensity_mul]
280280
· rw [Kernel.withDensity_apply _ hg, Kernel.withDensity_apply]
281281
exact measurable_coe_nnreal_ennreal.comp hf
282-
· rw [measurable_coe_nnreal_ennreal_iff]
283-
exact hf.comp measurable_prod_mk_left
284-
· exact hg.comp measurable_prod_mk_left
282+
· fun_prop
283+
· fun_prop
285284

286285
end ProbabilityTheory.Kernel

0 commit comments

Comments
 (0)