Skip to content

Commit 9bdc580

Browse files
committed
addressing comments by Alessandro
1 parent 2718b19 commit 9bdc580

File tree

2 files changed

+143
-139
lines changed

2 files changed

+143
-139
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124
+ mixin `isFiniteTransition`, structure `FiniteTransitionKernel`,
125125
notations `finite_transition_kernel`, `R .-ftker X ~> Y`
126126
+ lemmas `sprob_kernelP`, `sprob_kernel_le1`
127-
+ definition `kfcomp`, lemma `measurable_kfcomp`
127+
+ definition `kfcomp`, lemmas `kfcompk1`, `kfcompkindic`, `measurable_kfcomp`
128128
+ definitions `kproduct`, `kproduct_snd`
129129
+ lemmas `measurable_kproduct`, `semi_sigma_additive_kproduct`
130130
+ definition `mkproduct`

theories/kernel.v

Lines changed: 142 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,58 +1255,129 @@ Qed.
12551255

12561256
End integral_kcomp.
12571257

1258+
Section kfcomp.
1259+
Context {d1} {d2} {T1 : measurableType d1} {T2 : measurableType d2}
1260+
{R : realType}.
1261+
12581262
(* [Definition 14.20, Klenke 2014 ]*)
1259-
Definition kfcomp d1 d2 (T1 : measurableType d1) (T2 : measurableType d2)
1260-
(R : realType) (k : T1 -> {measure set T2 -> \bar R})
1263+
Definition kfcomp (k : T1 -> {measure set T2 -> \bar R})
12611264
(f : T1 * T2 -> \bar R) : T1 -> \bar R :=
12621265
fun x => \int[k x]_y f (x, y).
1266+
(* NB: the difference with kcomp is that f is not of type
1267+
T1 * T2 -> {measure set T3 -> \bar R} *)
1268+
1269+
Lemma kfcompk1 (k : T1 -> {measure set T2 -> \bar R}) :
1270+
kfcomp k (EFin \o cst 1%R) = (k ^~ [set: T2]).
1271+
Proof. by apply/funext => x/=; rewrite /kfcomp/= integral_cst// mul1e. Qed.
1272+
1273+
Lemma kfcompkindic (k : T1 -> {measure set T2 -> \bar R}) A : measurable A ->
1274+
kfcomp k (EFin \o \1_A) = (fun x => k x (xsection A x)).
1275+
Proof.
1276+
move=> mA; apply/funext=> x; rewrite /kfcomp /= integral_indic// ?setIT//.
1277+
- by rewrite -[X in k x X = _]/(_ @^-1` _) -xsectionE.
1278+
- rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE.
1279+
exact: measurable_xsection.
1280+
Qed.
1281+
1282+
End kfcomp.
12631283

12641284
Section measurable_kfcomp.
12651285

1266-
Let finite_measure_sigma_finite d (T : measurableType d)
1267-
(R : realType) (mu : {measure set T -> \bar R}) :
1286+
Let finite_measure_sigma_finite d (T : measurableType d) (R : realType)
1287+
(mu : {measure set T -> \bar R}) :
12681288
fin_num_fun mu -> sigma_finite [set: T] mu.
12691289
Proof.
12701290
by move=> fmu; apply: fin_num_fun_sigma_finite => //; rewrite measure0.
12711291
Qed.
12721292

1273-
Let finite_measure_sfinite d (T : measurableType d)
1274-
(R : realType) (mu : {measure set T -> \bar R}) :
1293+
Let finite_measure_sfinite d (T : measurableType d) (R : realType)
1294+
(mu : {measure set T -> \bar R}) :
12751295
fin_num_fun mu -> sfinite_measure mu.
12761296
Proof.
12771297
move=> fmu.
12781298
exists (fun n => if n is O then mu else mzero) => [[]//|U mU].
12791299
by rewrite /mseries nneseries_recl// eseries0 ?adde0// => -[|].
12801300
Qed.
12811301

1302+
Let setI_closedX (d1 d2 : measure_display) (T1 : measurableType d1)
1303+
(T2 : measurableType d2) : @setI_closed (T1 * T2)
1304+
[set A `*` B | A in d1.-measurable & B in d2.-measurable].
1305+
Proof.
1306+
move=> X Y [X1 mX1 [X2 mX2 <-{X}]] [Y1 mY1 [Y2 mY2 <-{Y}]].
1307+
exists (X1 `&` Y1); first exact: measurableI.
1308+
by exists (X2 `&` Y2); [exact: measurableI|rewrite setXI].
1309+
Qed.
1310+
1311+
Variables (d1 d2 : measure_display) (T1 : measurableType d1)
1312+
(T2 : measurableType d2) (R : realType) (k : R.-ftker T1 ~> T2)
1313+
(f : T1 * T2 -> \bar R).
1314+
1315+
Let g (A1 : set T1) (A2 : set T2) : T1 * T2 -> \bar R := EFin \o \1_(A1 `*` A2).
1316+
1317+
Let kfcompkg (A1 : set T1) (A2 : set T2) : measurable A1 -> measurable A2 ->
1318+
kfcomp k (g A1 A2) = (fun x => (\1_A1 x)%:E * k x A2).
1319+
Proof.
1320+
move=> mA1 mA2; apply/funext => x.
1321+
rewrite /kfcomp /g/= integral_indic//; last first.
1322+
rewrite [X in measurable X](_ : _ = xsection (A1 `*` A2) x); last first.
1323+
by rewrite xsectionE.
1324+
by apply: measurable_xsection; exact: measurableX.
1325+
have [xA1|xA1] := boolP (x \in A1).
1326+
by rewrite indicE xA1 mul1e setIT -[X in _ _ X = _]xsectionE in_xsectionX.
1327+
rewrite indicE (negbTE xA1) mul0e setIT.
1328+
by rewrite -[X in _ _ X = _]xsectionE notin_xsectionX.
1329+
Qed.
1330+
1331+
Let D := [set A | measurable A /\ measurable_fun setT (kfcomp k (EFin \o \1_A))].
1332+
1333+
Let setSD_D : setSD_closed D.
1334+
Proof.
1335+
move=> B A AB; rewrite /D/= => -[mB mIB] [mA mIA].
1336+
suff KE : kfcomp k (EFin \o \1_(B `\` A)) =
1337+
kfcomp k (EFin \o \1_B) \- kfcomp k(EFin \o \1_A).
1338+
by split; [exact: measurableD|rewrite KE; exact: emeasurable_funB].
1339+
apply/funext => x/=.
1340+
pose kx : {measure set T2 -> \bar R} := k x.
1341+
pose H1 := isFinite.Build _ _ _ _ (@kernel_finite_transition _ _ _ _ R k x).
1342+
pose H2 := isSFinite.Build _ _ _ _ (finite_measure_sfinite
1343+
(@kernel_finite_transition _ _ _ _ R k x)).
1344+
pose H3 := isSigmaFinite.Build _ _ _ _ (finite_measure_sigma_finite
1345+
(@kernel_finite_transition _ _ _ _ R k x)).
1346+
pose kx' := HB.pack_for (FiniteMeasure.type T2 R) (Measure.sort kx) H1 H2 H3.
1347+
have kxE : kx = kx' by exact: eq_measure.
1348+
rewrite [in RHS]/kfcomp -integralB_EFin//; last 2 first.
1349+
- rewrite -/kx kxE; apply: integrable_indic => //.
1350+
by rewrite -[X in measurable X]xsectionE; exact: measurable_xsection.
1351+
- rewrite -/kx kxE; apply: integrable_indic => //.
1352+
by rewrite -[X in measurable X]xsectionE; exact: measurable_xsection.
1353+
apply: eq_integral => y _/=; rewrite setDE indicI indicC/=.
1354+
rewrite -[in RHS](setCK A) indicC in_setC.
1355+
have [xyA|xyA] := boolP (_ \in A); rewrite /= ?mulr1 ?mulr0 ?oppr0 ?adde0//.
1356+
by move/set_mem : xyA => /AB Bxy; rewrite indicE mem_set//= EFinN subee.
1357+
Qed.
1358+
1359+
Let lambda_D : lambda_system setT D.
1360+
Proof.
1361+
split => //.
1362+
- by rewrite /D/= indicT kfcompk1; split => //; exact: measurable_kernel.
1363+
- suff: D = [set A | (d1, d2).-prod.-measurable A /\
1364+
measurable_fun [set: T1] ((fun C x => k x (xsection C x)) A)].
1365+
by move=> ->; exact: xsection_ndseq_closed.
1366+
apply/seteqP; split=> [/= A [mA /= mIA]|/= A [/= mA mIA]].
1367+
+ by split => //; rewrite -kfcompkindic.
1368+
+ by split => //; rewrite kfcompkindic.
1369+
Qed.
1370+
12821371
Import HBNNSimple.
12831372

12841373
(* [Lemma 14.20, Klenke 2014] *)
1285-
Lemma measurable_kfcomp d1 d2 (T1 : measurableType d1) (T2 : measurableType d2)
1286-
(R : realType) (k : R.-ftker T1 ~> T2)
1287-
(f : T1 * T2 -> \bar R) : measurable_fun [set: T1 * T2] f ->
1288-
(forall t, 0 <= f t) ->
1289-
measurable_fun [set: T1] (kfcomp k f).
1374+
Lemma measurable_kfcomp : measurable_fun [set: T1 * T2] f ->
1375+
(forall t, 0 <= f t) -> measurable_fun [set: T1] (kfcomp k f).
12901376
Proof.
12911377
move=> mf f0.
1292-
rewrite /kfcomp.
1293-
pose I (f : T1 * T2 -> \bar R) x := \int[k x]_y f (x, y).
1294-
pose g (A1 : set T1) (A2 : set T2) : T1 * T2 -> \bar R :=
1295-
EFin \o \1_(A1 `*` A2).
1296-
have IgE (A1 : set T1) (A2 : set T2) x : measurable A1 -> measurable A2 ->
1297-
I (g A1 A2) x = (\1_A1 x)%:E * k x A2.
1298-
move=> mA1 mA2.
1299-
rewrite /I /g/= integral_indic//; last first.
1300-
rewrite [X in measurable X](_ : _ = xsection (A1 `*` A2) x); last first.
1301-
by rewrite xsectionE.
1302-
by apply: measurable_xsection; exact: measurableX.
1303-
have [xA1|xA1] := boolP (x \in A1).
1304-
by rewrite indicE xA1 mul1e setIT -[X in _ _ X = _]xsectionE in_xsectionX.
1305-
rewrite indicE (negbTE xA1) mul0e setIT.
1306-
by rewrite -[X in _ _ X = _]xsectionE notin_xsectionX.
1307-
rewrite -[X in measurable_fun _ X]/(I f).
13081378
pose f_ := nnsfun_approx measurableT mf.
1309-
have If_cvg x : I (EFin \o f_ n) x @[n --> \oo] --> I f x.
1379+
pose K := kfcomp k.
1380+
have Kf_cvg x : K (EFin \o f_ n) x @[n --> \oo] --> K f x.
13101381
pose g' n y := (EFin \o f_ n) (x, y).
13111382
rewrite [X in _ --> X](_ : _ =
13121383
\int[k x]_y (fun t => limn (g' ^~ t)) y); last first.
@@ -1316,118 +1387,51 @@ have If_cvg x : I (EFin \o f_ n) x @[n --> \oo] --> I f x.
13161387
- by move=> n; apply/measurable_EFinP; exact: measurableT_comp.
13171388
- by move=> n y _; rewrite /= lee_fin.
13181389
- by move=> y _ a b ab/=; rewrite lee_fin; exact/lefP/nd_nnsfun_approx.
1319-
apply: (emeasurable_fun_cvg (fun n => I (EFin \o f_ n))).
1320-
move=> m.
1321-
pose D := [set A | measurable A /\ measurable_fun setT (I (EFin \o \1_A))].
1322-
have setSD_D : setSD_closed D.
1323-
move=> B A AB; rewrite /D/= => -[mB mIB] [mA mIA].
1324-
have IE : I (EFin \o \1_(B `\` A)) = I (EFin \o \1_B) \- I (EFin \o \1_A).
1325-
apply/funext => x/=.
1326-
rewrite /I.
1327-
pose kx : {measure set T2 -> \bar R} := k x.
1328-
pose H1 := isFinite.Build _ _ _ _
1329-
(@kernel_finite_transition _ _ _ _ R k x).
1330-
pose H2 := isSFinite.Build _ _ _ _ (finite_measure_sfinite
1331-
(@kernel_finite_transition _ _ _ _ R k x)).
1332-
pose H3 := isSigmaFinite.Build _ _ _ _ (finite_measure_sigma_finite
1333-
(@kernel_finite_transition _ _ _ _ R k x)).
1334-
pose kx' := HB.pack_for (FiniteMeasure.type T2 R) (Measure.sort kx) H1 H2 H3.
1335-
have kxE : kx = kx' by exact: eq_measure.
1336-
rewrite (*TODO: use RintegralB when merged*) -integralB_EFin//; last 2 first.
1337-
- rewrite -/kx kxE; apply: integrable_indic => //.
1338-
rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE.
1339-
exact: measurable_xsection.
1340-
- rewrite -/kx kxE; apply: integrable_indic => //.
1341-
rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE.
1342-
exact: measurable_xsection.
1343-
apply: eq_integral => y _/=.
1344-
rewrite setDE indicI indicC/=.
1345-
have [/= xyA|/= xyA] := boolP ((x, y) \in _).
1346-
rewrite mulr0 EFinN !indicE xyA/= EFinN.
1347-
by move/set_mem : xyA => /AB /mem_set ->; rewrite subee.
1348-
by rewrite mulr1 EFinN !indicE (negbTE xyA)/= oppr0 adde0.
1349-
by split; [exact: measurableD|rewrite IE; exact: emeasurable_funB].
1350-
have lambda_D : lambda_system setT D.
1351-
split => //.
1352-
- rewrite /D/= indicT/=; split => //.
1353-
rewrite [X in measurable_fun _ X](_ : _ = (fun x => k x setT)); last first.
1354-
by rewrite /I; apply/funext => x/=; rewrite integral_cst// mul1e.
1355-
exact: measurable_kernel.
1356-
- suff: D = [set A | (d1, d2).-prod.-measurable A /\
1357-
measurable_fun [set: T1] ((fun C x => k x (xsection C x)) A)].
1358-
by move=> ->; exact: xsection_ndseq_closed.
1359-
apply/seteqP; split=> [/= A [mA /= mIA]|/= A [/= mA mIA]].
1360-
split => //.
1361-
rewrite [X in measurable_fun _ X](_ : _ = I (EFin \o \1_A))//.
1362-
apply/funext => x.
1363-
rewrite /I/= integral_indic// ?setIT//.
1364-
by rewrite -[X in _ = k x X]/(_ @^-1` _) -xsectionE.
1365-
rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE.
1366-
exact: measurable_xsection.
1367-
split => //.
1368-
rewrite /I [X in measurable_fun _ X](_ : _ = (fun x => k x (xsection A x)))//.
1369-
apply/funext => x.
1370-
rewrite integral_indic//; last first.
1371-
rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE.
1372-
exact: measurable_xsection.
1373-
by rewrite setIT xsectionE.
1374-
rewrite /= in lambda_D.
1375-
have DE : D = @measurable _ (T1 * T2)%type.
1376-
apply/seteqP; split => [/= A []//|].
1377-
rewrite measurable_prod_measurableType.
1378-
apply: lambda_system_subset => //.
1379-
(* NB: lemma? *)
1380-
move=> X Y [X1 mX1 [X2 mX2 <-{X}]] [Y1 mY1 [Y2 mY2 <-{Y}]].
1381-
exists (X1 `&` Y1); first exact: measurableI.
1382-
by exists (X2 `&` Y2); [exact: measurableI|rewrite setXI].
1383-
move=> /= C [A mA [B mB] <-].
1384-
split; first exact: measurableX.
1385-
rewrite [X in measurable_fun _ X](_ : _ =
1386-
(fun s => (\1_A s)%:E * k s B)); last first.
1387-
by apply/funext => s; rewrite IgE.
1388-
apply: emeasurable_funM; first exact/measurable_EFinP.
1389-
exact: measurable_kernel.
1390-
have mI1 (A : set (T1 * T2)) : measurable A ->
1391-
measurable_fun setT (I (EFin \o \1_A)).
1392-
by rewrite -DE => -[].
1393-
rewrite [X in measurable_fun _ X](_ : _ = I
1390+
apply: (emeasurable_fun_cvg (fun n => K (EFin \o f_ n))); last first.
1391+
by move=> ? _; exact: Kf_cvg.
1392+
move=> m.
1393+
have DE : D = @measurable _ (T1 * T2)%type.
1394+
apply/seteqP; split => [/= A []//|].
1395+
rewrite measurable_prod_measurableType.
1396+
apply: lambda_system_subset => //= C [A mA [B mB] <-].
1397+
split; [exact: measurableX|rewrite /K kfcompkg//].
1398+
apply: emeasurable_funM; first exact/measurable_EFinP.
1399+
exact: measurable_kernel.
1400+
have mK1 (A : set (T1 * T2)) : measurable A ->
1401+
measurable_fun setT (K (EFin \o \1_A)).
1402+
by rewrite -DE => -[].
1403+
rewrite [X in measurable_fun _ X](_ : _ = K
13941404
(EFin \o (fun x => \sum_(y \in range (f_ m)) y *
13951405
\1_(f_ m @^-1` [set y]) x))%R); last first.
1396-
apply/funext => x/=.
1397-
by apply: eq_integral => y _ /=; rewrite fimfunE.
1398-
rewrite /I/= [X in measurable_fun _ X](_ : _ = (fun x =>
1399-
\sum_(y \in range (f_ m))
1400-
(\int[k x]_w2 (y * \1_(f_ m @^-1` [set y]) (x, w2))%:E))); last first.
1401-
apply/funext => x.
1402-
under eq_integral.
1403-
move=> y _; rewrite -fsumEFin//.
1404-
over.
1405-
rewrite /= ge0_integral_fsum//=.
1406-
move=> r.
1407-
under eq_fun do rewrite EFinM.
1408-
apply: emeasurable_funM => //.
1409-
by apply/measurable_EFinP; exact: measurableT_comp.
1410-
by move=> r y _; rewrite EFinM nnfun_muleindic_ge0.
1411-
apply: emeasurable_fsum => // r.
1412-
rewrite [X in measurable_fun _ X](_ : _ = (fun x =>
1413-
(r%:E * \int[k x]_y (\1_(f_ m @^-1` [set r]) (x, y))%:E))); last first.
1414-
apply/funext => x.
1415-
under eq_integral do rewrite EFinM.
1416-
rewrite integralZl//.
1417-
pose kx : {measure set T2 -> \bar R} := k x.
1418-
pose H1 := isFinite.Build _ _ _ _
1419-
(@kernel_finite_transition _ _ _ _ R k x).
1420-
pose H2 := isSFinite.Build _ _ _ _ (finite_measure_sfinite
1421-
(@kernel_finite_transition _ _ _ _ R k x)).
1422-
pose H3 := isSigmaFinite.Build _ _ _ _ (finite_measure_sigma_finite
1423-
(@kernel_finite_transition _ _ _ _ R k x)).
1424-
pose kx' := HB.pack_for (FiniteMeasure.type T2 R) (Measure.sort kx) H1 H2 H3.
1425-
have kxE : kx = kx' by apply: eq_measure.
1426-
rewrite -/kx kxE; apply: integrable_indic => //.
1427-
rewrite -[X in measurable X]/(_ @^-1` _) -xsectionE.
1428-
exact: measurable_xsection.
1429-
by apply: emeasurable_funM => //; exact: mI1.
1430-
by move=> ? _; exact: If_cvg.
1406+
by apply/funext => x/=; apply: eq_integral => y _ /=; rewrite fimfunE.
1407+
rewrite /I/= [X in measurable_fun _ X](_ : _ = (fun x =>
1408+
\sum_(y \in range (f_ m))
1409+
(\int[k x]_w2 (y * \1_(f_ m @^-1` [set y]) (x, w2))%:E))); last first.
1410+
apply/funext => x; rewrite /K /kfcomp.
1411+
under eq_integral do rewrite /= -fsumEFin//.
1412+
rewrite /= ge0_integral_fsum//=.
1413+
move=> r.
1414+
under eq_fun do rewrite EFinM.
1415+
apply: emeasurable_funM => //.
1416+
by apply/measurable_EFinP; exact: measurableT_comp.
1417+
by move=> r y _; rewrite EFinM nnfun_muleindic_ge0.
1418+
apply: emeasurable_fsum => // r.
1419+
rewrite [X in measurable_fun _ X](_ : _ = (fun x =>
1420+
(r%:E * \int[k x]_y (\1_(f_ m @^-1` [set r]) (x, y))%:E))); last first.
1421+
apply/funext => x.
1422+
under eq_integral do rewrite EFinM.
1423+
rewrite integralZl//.
1424+
pose kx : {measure set T2 -> \bar R} := k x.
1425+
pose H1 := isFinite.Build _ _ _ _ (@kernel_finite_transition _ _ _ _ R k x).
1426+
pose H2 := isSFinite.Build _ _ _ _ (finite_measure_sfinite
1427+
(@kernel_finite_transition _ _ _ _ R k x)).
1428+
pose H3 := isSigmaFinite.Build _ _ _ _ (finite_measure_sigma_finite
1429+
(@kernel_finite_transition _ _ _ _ R k x)).
1430+
pose kx' := HB.pack_for (FiniteMeasure.type T2 R) (Measure.sort kx) H1 H2 H3.
1431+
have kxE : kx = kx' by apply: eq_measure.
1432+
rewrite -/kx kxE; apply: integrable_indic => //.
1433+
by rewrite -[X in measurable X]xsectionE; exact: measurable_xsection.
1434+
by apply: emeasurable_funM => //; exact: mK1.
14311435
Qed.
14321436

14331437
End measurable_kfcomp.

0 commit comments

Comments
 (0)