@@ -187,15 +187,20 @@ theorem measurable_compProdFun (κ : kernel α β) [IsSFiniteKernel κ] (η : ke
187
187
exact h_meas.lintegral_kernel_prod_right
188
188
#align probability_theory.kernel.measurable_comp_prod_fun ProbabilityTheory.kernel.measurable_compProdFun
189
189
190
- /-- Composition-Product of kernels. It verifies
190
+ open Classical
191
+
192
+ /-- Composition-Product of kernels. For s-finite kernels, it satisfies
191
193
`∫⁻ bc, f bc ∂(compProd κ η a) = ∫⁻ b, ∫⁻ c, f (b, c) ∂(η (a, b)) ∂(κ a)`
192
- (see `lintegral_compProd`). -/
193
- noncomputable def compProd (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
194
- [IsSFiniteKernel η] : kernel α (β × γ) where
195
- val a :=
194
+ (see `ProbabilityTheory.kernel.lintegral_compProd`).
195
+ If either of the kernels is not s-finite, `compProd` is given the junk value 0. -/
196
+ noncomputable def compProd (κ : kernel α β) (η : kernel (α × β) γ) : kernel α (β × γ) :=
197
+ if h : IsSFiniteKernel κ ∧ IsSFiniteKernel η then
198
+ { val := λ a ↦
196
199
Measure.ofMeasurable (fun s _ => compProdFun κ η a s) (compProdFun_empty κ η a)
197
- (compProdFun_iUnion κ η a)
200
+ (@ compProdFun_iUnion _ _ _ _ _ _ κ η h. 2 a)
198
201
property := by
202
+ have : IsSFiniteKernel κ := h.1
203
+ have : IsSFiniteKernel η := h.2
199
204
refine' Measure.measurable_of_measurable_coe _ fun s hs => _
200
205
have :
201
206
(fun a =>
@@ -204,14 +209,18 @@ noncomputable def compProd (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel
204
209
fun a => compProdFun κ η a s :=
205
210
by ext1 a; rwa [Measure.ofMeasurable_apply]
206
211
rw [this]
207
- exact measurable_compProdFun κ η hs
212
+ exact measurable_compProdFun κ η hs }
213
+ else 0
208
214
#align probability_theory.kernel.comp_prod ProbabilityTheory.kernel.compProd
209
215
210
216
scoped [ProbabilityTheory] infixl :100 " ⊗ₖ " => ProbabilityTheory.kernel.compProd
211
217
212
218
theorem compProd_apply_eq_compProdFun (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
213
- [IsSFiniteKernel η] (a : α) (hs : MeasurableSet s) : (κ ⊗ₖ η) a s = compProdFun κ η a s := by
214
- rw [compProd]
219
+ [IsSFiniteKernel η] (a : α) (hs : MeasurableSet s) :
220
+ (κ ⊗ₖ η) a s = compProdFun κ η a s := by
221
+ rw [compProd, dif_pos]
222
+ swap
223
+ · constructor <;> infer_instance
215
224
change
216
225
Measure.ofMeasurable (fun s _ => compProdFun κ η a s) (compProdFun_empty κ η a)
217
226
(compProdFun_iUnion κ η a) s =
@@ -220,6 +229,18 @@ theorem compProd_apply_eq_compProdFun (κ : kernel α β) [IsSFiniteKernel κ] (
220
229
rfl
221
230
#align probability_theory.kernel.comp_prod_apply_eq_comp_prod_fun ProbabilityTheory.kernel.compProd_apply_eq_compProdFun
222
231
232
+ theorem compProd_of_not_isSFiniteKernel_left (κ : kernel α β) (η : kernel (α × β) γ)
233
+ (h : ¬ IsSFiniteKernel κ) :
234
+ κ ⊗ₖ η = 0 := by
235
+ rw [compProd, dif_neg]
236
+ simp [h]
237
+
238
+ theorem compProd_of_not_isSFiniteKernel_right (κ : kernel α β) (η : kernel (α × β) γ)
239
+ (h : ¬ IsSFiniteKernel η) :
240
+ κ ⊗ₖ η = 0 := by
241
+ rw [compProd, dif_neg]
242
+ simp [h]
243
+
223
244
theorem compProd_apply (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
224
245
[IsSFiniteKernel η] (a : α) (hs : MeasurableSet s) :
225
246
(κ ⊗ₖ η) a s = ∫⁻ b, η (a, b) {c | (b, c) ∈ s} ∂κ a :=
@@ -449,16 +470,24 @@ theorem compProd_eq_sum_compProd (κ : kernel α β) [IsSFiniteKernel κ] (η :
449
470
ext a s hs; simp_rw [kernel.sum_apply' _ a hs]; rw [compProd_eq_tsum_compProd κ η a hs]
450
471
#align probability_theory.kernel.comp_prod_eq_sum_comp_prod ProbabilityTheory.kernel.compProd_eq_sum_compProd
451
472
452
- theorem compProd_eq_sum_compProd_left (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
453
- [IsSFiniteKernel η] : κ ⊗ₖ η = kernel.sum fun n => seq κ n ⊗ₖ η := by
473
+ theorem compProd_eq_sum_compProd_left (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ) :
474
+ κ ⊗ₖ η = kernel.sum fun n => seq κ n ⊗ₖ η := by
475
+ by_cases h : IsSFiniteKernel η
476
+ swap
477
+ · simp_rw [compProd_of_not_isSFiniteKernel_right _ _ h]
478
+ simp
454
479
rw [compProd_eq_sum_compProd]
455
480
congr with n a s hs
456
481
simp_rw [kernel.sum_apply' _ _ hs, compProd_apply_eq_compProdFun _ _ _ hs,
457
482
compProdFun_tsum_right _ η a hs]
458
483
#align probability_theory.kernel.comp_prod_eq_sum_comp_prod_left ProbabilityTheory.kernel.compProd_eq_sum_compProd_left
459
484
460
- theorem compProd_eq_sum_compProd_right (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
485
+ theorem compProd_eq_sum_compProd_right (κ : kernel α β) (η : kernel (α × β) γ)
461
486
[IsSFiniteKernel η] : κ ⊗ₖ η = kernel.sum fun n => κ ⊗ₖ seq η n := by
487
+ by_cases hκ : IsSFiniteKernel κ
488
+ swap
489
+ · simp_rw [compProd_of_not_isSFiniteKernel_left _ _ hκ]
490
+ simp
462
491
rw [compProd_eq_sum_compProd]
463
492
simp_rw [compProd_eq_sum_compProd_left κ _]
464
493
rw [kernel.sum_comm]
@@ -472,8 +501,12 @@ instance IsMarkovKernel.compProd (κ : kernel α β) [IsMarkovKernel κ] (η : k
472
501
simp only [Set.mem_univ, Set.setOf_true, measure_univ, lintegral_one]⟩⟩
473
502
#align probability_theory.kernel.is_markov_kernel.comp_prod ProbabilityTheory.kernel.IsMarkovKernel.compProd
474
503
475
- theorem compProd_apply_univ_le (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
476
- [IsFiniteKernel η] (a : α) : (κ ⊗ₖ η) a Set.univ ≤ κ a Set.univ * IsFiniteKernel.bound η := by
504
+ theorem compProd_apply_univ_le (κ : kernel α β) (η : kernel (α × β) γ) [IsFiniteKernel η] (a : α) :
505
+ (κ ⊗ₖ η) a Set.univ ≤ κ a Set.univ * IsFiniteKernel.bound η := by
506
+ by_cases hκ : IsSFiniteKernel κ
507
+ swap
508
+ · rw [compProd_of_not_isSFiniteKernel_left _ _ hκ]
509
+ simp
477
510
rw [compProd_apply κ η a MeasurableSet.univ]
478
511
simp only [Set.mem_univ, Set.setOf_true]
479
512
let Cη := IsFiniteKernel.bound η
@@ -494,8 +527,16 @@ instance IsFiniteKernel.compProd (κ : kernel α β) [IsFiniteKernel κ] (η : k
494
527
mul_le_mul (measure_le_bound κ a Set.univ) le_rfl (zero_le _) (zero_le _)⟩⟩
495
528
#align probability_theory.kernel.is_finite_kernel.comp_prod ProbabilityTheory.kernel.IsFiniteKernel.compProd
496
529
497
- instance IsSFiniteKernel.compProd (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel (α × β) γ)
498
- [IsSFiniteKernel η] : IsSFiniteKernel (κ ⊗ₖ η) := by
530
+ instance IsSFiniteKernel.compProd (κ : kernel α β) (η : kernel (α × β) γ) :
531
+ IsSFiniteKernel (κ ⊗ₖ η) := by
532
+ by_cases h : IsSFiniteKernel κ
533
+ swap
534
+ · rw [compProd_of_not_isSFiniteKernel_left _ _ h]
535
+ infer_instance
536
+ by_cases h : IsSFiniteKernel η
537
+ swap
538
+ · rw [compProd_of_not_isSFiniteKernel_right _ _ h]
539
+ infer_instance
499
540
rw [compProd_eq_sum_compProd]
500
541
exact kernel.isSFiniteKernel_sum fun n => kernel.isSFiniteKernel_sum inferInstance
501
542
#align probability_theory.kernel.is_s_finite_kernel.comp_prod ProbabilityTheory.kernel.IsSFiniteKernel.compProd
@@ -774,7 +815,7 @@ section Comp
774
815
775
816
variable {γ : Type _} {mγ : MeasurableSpace γ} {f : β → γ} {g : γ → α}
776
817
777
- /-- Composition of two s-finite kernels. -/
818
+ /-- Composition of two kernels. -/
778
819
noncomputable def comp (η : kernel β γ) (κ : kernel α β) : kernel α γ where
779
820
val a := (κ a).bind η
780
821
property := (Measure.measurable_bind' (kernel.measurable _)).comp (kernel.measurable _)
@@ -847,9 +888,8 @@ section Prod
847
888
848
889
variable {γ : Type _} {mγ : MeasurableSpace γ}
849
890
850
- /-- Product of two s-finite kernels. -/
851
- noncomputable def prod (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel α γ) [IsSFiniteKernel η] :
852
- kernel α (β × γ) :=
891
+ /-- Product of two kernels. This is meaningful only when the kernels are s-finite. -/
892
+ noncomputable def prod (κ : kernel α β) (η : kernel α γ) : kernel α (β × γ) :=
853
893
κ ⊗ₖ swapLeft (prodMkLeft β η)
854
894
#align probability_theory.kernel.prod ProbabilityTheory.kernel.prod
855
895
@@ -875,8 +915,8 @@ instance IsFiniteKernel.prod (κ : kernel α β) [IsFiniteKernel κ] (η : kerne
875
915
[IsFiniteKernel η] : IsFiniteKernel (κ ×ₖ η) := by rw [prod]; infer_instance
876
916
#align probability_theory.kernel.is_finite_kernel.prod ProbabilityTheory.kernel.IsFiniteKernel.prod
877
917
878
- instance IsSFiniteKernel.prod (κ : kernel α β) [IsSFiniteKernel κ] (η : kernel α γ)
879
- [IsSFiniteKernel η] : IsSFiniteKernel (κ ×ₖ η) := by rw [prod]; infer_instance
918
+ instance IsSFiniteKernel.prod (κ : kernel α β) (η : kernel α γ) :
919
+ IsSFiniteKernel (κ ×ₖ η) := by rw [prod]; infer_instance
880
920
#align probability_theory.kernel.is_s_finite_kernel.prod ProbabilityTheory.kernel.IsSFiniteKernel.prod
881
921
882
922
end Prod
0 commit comments