@@ -1580,6 +1580,7 @@ Qed.
15801580
15811581End approximation.
15821582
1583+
15831584Section semi_linearity0.
15841585Local Open Scope ereal_scope.
15851586Context d (T : measurableType d) (R : realType).
@@ -1714,6 +1715,128 @@ Qed.
17141715
17151716End approximation_sfun.
17161717
1718+ Section lusin.
1719+ Hint Extern 0 (hausdorff_space _) => (exact: Rhausdorff ) : core.
1720+ Local Open Scope ereal_scope.
1721+ Context (rT : realType) (A : set rT).
1722+ Let mu := [the measure _ _ of @lebesgue_measure rT].
1723+ Let R := [the measurableType _ of measurableTypeR rT].
1724+ Hypothesis mA : measurable A.
1725+ Hypothesis finA : mu A < +oo.
1726+
1727+ Let lusin_simple (f : {sfun R >-> rT}) (eps : rT) : (0 < eps)%R ->
1728+ exists K, [/\ compact K, K `<=` A, mu (A `\` K) < eps%:E &
1729+ {within K, continuous f}].
1730+ Proof .
1731+ move: eps=> _/posnumP[eps]; have [N /card_fset_set rfN] := @fimfunP _ _ f.
1732+ pose Af x : set R := A `&` f @^-1` [set x].
1733+ have mAf x : measurable (Af x) by exact: measurableI.
1734+ have finAf x : mu (Af x) < +oo.
1735+ by rewrite (le_lt_trans _ finA)// le_measure// ?inE//; exact: subIsetl.
1736+ have eNpos : (0 < eps%:num/N.+1%:R)%R by [].
1737+ have dK' x := lebesgue_regularity_inner (mAf x) (finAf x) eNpos.
1738+ pose dK x : set R := projT1 (cid (dK' x)); pose J i : set R := Af i `\` dK i.
1739+ have dkP x := projT2 (cid (dK' x)).
1740+ have mdK i : measurable (dK i).
1741+ by apply: closed_measurable; apply: compact_closed => //; case: (dkP i).
1742+ have mJ i : measurable (J i) by apply: measurableD => //; exact: measurableI.
1743+ have dKsub z : dK z `<=` f @^-1` [set z].
1744+ by case: (dkP z) => _ /subset_trans + _; apply => ? [].
1745+ exists (\bigcup_(i in range f) dK i); split.
1746+ - by rewrite -bigsetU_fset_set//; apply: bigsetU_compact=>// i _; case: (dkP i).
1747+ - by move=> z [y _ dy]; have [_ /(_ _ dy) []] := dkP y.
1748+ - have -> : A `\` \bigcup_(i in range f) dK i = \bigcup_(i in range f) J i.
1749+ rewrite -bigcupDr /= ?eqEsubset; last by exists (f point), point.
1750+ split => z; first by move=> /(_ (f z)) [//| ? ?]; exists (f z).
1751+ case => ? [? _ <-] [[zab /= <- nfz]] ? [r _ <-]; split => //.
1752+ by move: nfz; apply: contra_not => /[dup] /dKsub ->.
1753+ apply: (@le_lt_trans _ _ (\sum_(i \in range f) mu (J i))).
1754+ by apply: content_sub_fsum => //; exact: fin_bigcup_measurable.
1755+ apply: le_lt_trans.
1756+ apply: (@lee_fsum _ _ _ _ (fun=> (eps%:num / N.+1%:R)%:E * 1%:E)) => //.
1757+ by move=> i ?; rewrite mule1; apply: ltW; have [_ _] := dkP i.
1758+ rewrite /=-ge0_mule_fsumr // -esum_fset // finite_card_sum // -EFinM lte_fin.
1759+ by rewrite rfN -mulrA gtr_pmulr // mulrC ltr_pdivr_mulr // mul1r ltr_nat.
1760+ - suff : closed (\bigcup_(i in range f) dK i) /\
1761+ {within \bigcup_(i in range f) dK i, continuous f} by case.
1762+ rewrite -bigsetU_fset_set //.
1763+ apply: (@big_ind _ (fun U => closed U /\ {within U, continuous f})).
1764+ + by split; [exact: closed0 | exact: continuous_subspace0].
1765+ + by move=> ? ? [? ?][? ?]; split; [exact: closedU|exact: withinU_continuous].
1766+ + move=> i _; split; first by apply: compact_closed; have [] := dkP i.
1767+ apply: (continuous_subspaceW (dKsub i)).
1768+ apply: (@subspace_eq_continuous _ _ _ (fun=> i)).
1769+ by move=> ? /set_mem ->.
1770+ by apply: continuous_subspaceT => ?; exact: cvg_cst.
1771+ Qed .
1772+
1773+ Let measurable_almost_continuous' (f : R -> R) (eps : rT) :
1774+ (0 < eps)%R -> measurable_fun A f -> exists K,
1775+ [/\ measurable K, K `<=` A, mu (A `\` K) < eps%:E &
1776+ {within K, continuous f}].
1777+ Proof .
1778+ move: eps=> _/posnumP[eps] mf; pose f' := EFin \o f.
1779+ have mf' : measurable_fun A f' by exact/EFin_measurable_fun.
1780+ have [/= g_ gf'] := @approximation_sfun _ R rT _ _ mA mf'.
1781+ pose e2n n := (eps%:num / 2) / (2 ^ n.+1)%:R.
1782+ have e2npos n : (0 < e2n n)%R by rewrite divr_gt0.
1783+ have gK' n := @lusin_simple (g_ n) (e2n n) (e2npos n).
1784+ pose gK n := projT1 (cid (gK' n)); have gKP n := projT2 (cid (gK' n)).
1785+ pose K := \bigcap_i gK i; have mgK n : measurable (gK n).
1786+ by apply: closed_measurable; apply: compact_closed => //; have [] := gKP n.
1787+ have mK : measurable K by exact: bigcap_measurable.
1788+ have Kab : K `<=` A by move=> z /(_ O I); have [_ + _ _] := gKP O; apply.
1789+ have []// := @pointwise_almost_uniform _ rT R mu g_ f K (eps%:num / 2).
1790+ - by move=> n; exact: measurable_funTS.
1791+ - exact: (measurable_funS _ Kab).
1792+ - by rewrite (@le_lt_trans _ _ (mu A))// le_measure// ?inE.
1793+ - by move=> z Kz; have /fine_fcvg := gf' z (Kab _ Kz); rewrite -fmap_comp compA.
1794+ move=> D [/= mD Deps KDf]; exists (K `\` D); split => //.
1795+ - exact: measurableD.
1796+ - exact: subset_trans Kab.
1797+ - rewrite setDDr; apply: le_lt_trans => /=.
1798+ by apply: measureU2 => //; apply: measurableI => //; apply: measurableC.
1799+ rewrite [_%:num]splitr EFinD; apply: lee_lt_add => //=; first 2 last.
1800+ + by rewrite (@le_lt_trans _ _ (mu D)) ?le_measure ?inE//; exact: measurableI.
1801+ + rewrite ge0_fin_numE// (@le_lt_trans _ _ (mu A))// le_measure// ?inE//.
1802+ exact: measurableD.
1803+ rewrite setDE setC_bigcap setI_bigcupr.
1804+ apply: (@le_trans _ _(\sum_(k <oo) mu (A `\` gK k))).
1805+ apply: measure_sigma_sub_additive => //; [|apply: bigcup_measurable => + _].
1806+ by move=> k /=; apply: measurableD => //; apply: mgK.
1807+ by move=> k /=; apply: measurableD => //; apply: mgK.
1808+ apply: (@le_trans _ _(\sum_(k <oo) (e2n k)%:E)); last exact: epsilon_trick0.
1809+ by apply: lee_nneseries => // k _; apply: ltW; have [] := gKP k.
1810+ apply: (@uniform_limit_continuous_subspace _ _ _ (g_ @ \oo)) => //.
1811+ near_simpl; apply: nearW => // n; apply: (@continuous_subspaceW _ _ _ (gK n)).
1812+ by move=> z [+ _]; apply.
1813+ by have [] := projT2 (cid (gK' n)).
1814+ Qed .
1815+
1816+ Lemma measurable_almost_continuous (f : R -> R) (eps : rT) :
1817+ (0 < eps)%R -> measurable_fun A f -> exists K,
1818+ [/\ compact K, K `<=` A, mu (A `\` K) < eps%:E &
1819+ {within K, continuous f}].
1820+ Proof .
1821+ move: eps=> _/posnumP[eps] mf; have e2pos : (0 < eps%:num/2)%R by [].
1822+ have [K [mK KA ? ?]] := measurable_almost_continuous' e2pos mf.
1823+ have Kfin : mu K < +oo by rewrite (le_lt_trans _ finA)// le_measure ?inE.
1824+ have [D /= [cD DK KDe]] := lebesgue_regularity_inner mK Kfin e2pos.
1825+ exists D; split => //; last exact: (continuous_subspaceW DK).
1826+ exact: (subset_trans DK).
1827+ have -> : A `\` D = (A `\` K) `|` (K `\` D).
1828+ rewrite eqEsubset; split => z.
1829+ by case: (pselect (K z)) => // ? [? ?]; [right | left].
1830+ case; case=> az nz; split => //; [by move: z nz {az}; apply/subsetC|].
1831+ exact: KA.
1832+ apply: le_lt_trans.
1833+ apply: measureU2; apply: measurableD => //; apply: closed_measurable.
1834+ by apply: compact_closed; first exact: Rhausdorff.
1835+ by rewrite [_ eps]splitr EFinD lte_add.
1836+ Qed .
1837+
1838+ End lusin.
1839+
17171840Section emeasurable_fun.
17181841Local Open Scope ereal_scope.
17191842Context d (T : measurableType d) (R : realType).
0 commit comments