@@ -1255,58 +1255,129 @@ Qed.
12551255
12561256End 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
12641284Section 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.
12691289Proof .
12701290by move=> fmu; apply: fin_num_fun_sigma_finite => //; rewrite measure0.
12711291Qed .
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.
12761296Proof .
12771297move=> fmu.
12781298exists (fun n => if n is O then mu else mzero) => [[]//|U mU].
12791299by rewrite /mseries nneseries_recl// eseries0 ?adde0// => -[|].
12801300Qed .
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+
12821371Import 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).
12901376Proof .
12911377move=> 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).
13081378pose 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.
14311435Qed .
14321436
14331437End measurable_kfcomp.
0 commit comments