From 130649abdae54098da80ac3395da99b9ed97c621 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Tue, 7 Jul 2026 12:58:11 +0200 Subject: [PATCH 1/3] rebase --- classical/filter.v | 6 +- theories/lebesgue_measure.v | 18 ++ theories/lebesgue_stieltjes_measure.v | 293 ++------------------------ theories/measurable_realfun.v | 157 ++++++++++++++ 4 files changed, 196 insertions(+), 278 deletions(-) diff --git a/classical/filter.v b/classical/filter.v index 9617295dcc..403b4aee28 100644 --- a/classical/filter.v +++ b/classical/filter.v @@ -1251,7 +1251,7 @@ move=> near_hom fFG; apply/cvg_to_withinP; split. Qed. Lemma filter_bigI_within T (I : choiceType) (D : {fset I}) (f : I -> set T) - (F : set_system T) (P : set T) : + (F : set_system T) (P : set T) : Filter F -> (forall i, i \in D -> F [set j | P j -> f i j]) -> F ([set j | P j -> (\bigcap_(i in [set` D]) f i) j]). Proof. move=> FF FfD; exact: (@filter_bigI T I D f _ (within_filter P FF)). Qed. @@ -1518,6 +1518,7 @@ End UltraFilters. Section filter_supremums. +Global Instance smallest_filter_filter {T : Type} (F : set_system T) : Global Instance smallest_filter_filter {T : Type} (F : set_system T) : Filter (smallest Filter F). Proof. @@ -1527,12 +1528,14 @@ split. - by move=> ? ? /filterS + sFP ? [? ?]; apply; exact: sFP. Qed. +Fixpoint filterI_iter {T : Type} (F : set_system T) (n : nat) := Fixpoint filterI_iter {T : Type} (F : set_system T) (n : nat) := if n is m.+1 then [set P `&` Q | P in filterI_iter F m & Q in filterI_iter F m] else setT |` F. +Lemma filterI_iter_sub {T : Type} (F : set_system T) : Lemma filterI_iter_sub {T : Type} (F : set_system T) : {homo filterI_iter F : i j / (i <= j)%N >-> i `<=` j}. Proof. @@ -1541,6 +1544,7 @@ move=> j IH i; rewrite leq_eqVlt => /predU1P[->//|]. by move=> /IH/subset_trans; apply=> A ?; do 2 exists A => //; rewrite setIid. Qed. +Lemma filterI_iterE {T : Type} (F : set_system T) : Lemma filterI_iterE {T : Type} (F : set_system T) : smallest Filter F = filter_from (\bigcup_n (filterI_iter F n)) id. Proof. diff --git a/theories/lebesgue_measure.v b/theories/lebesgue_measure.v index 0e0f99382f..35c9f6a8c5 100644 --- a/theories/lebesgue_measure.v +++ b/theories/lebesgue_measure.v @@ -646,8 +646,14 @@ Let lebesgue_measure_itvoo_subr1 (a : R) : Proof. rewrite itv_bnd_open_bigcup//; transitivity (limn (lebesgue_measure \o (fun k => `]a - 1, a - k.+1%:R^-1]%classic : set R))). +<<<<<<< HEAD apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure => //. - exact: bigcup_measurable. +======= + apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure. + - by move=> ?; exact: measurable_itv. + - by apply: bigcup_measurable => k _; exact: measurable_itv. +>>>>>>> 2fdb72603 (rebase) - move=> n m nm; apply/subsetPset => x /=; rewrite !in_itv/= => /andP[->/=]. by move/le_trans; apply; rewrite lerB// lef_pV2 ?ler_nat ?posrE. rewrite (_ : _ \o _ = (fun n => (1 - n.+1%:R^-1)%:E)). @@ -744,8 +750,14 @@ Let lebesgue_measure_itv_bnd_infty x (a : R) : Proof. rewrite itv_bndy_bigcup_BRight; transitivity (limn (lebesgue_measure \o (fun k => [set` Interval (BSide x a) (BRight (a + k%:R))] : set R))). +<<<<<<< HEAD apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure => //. + exact: bigcup_measurable. +======= + apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure. + + by move=> k; exact: measurable_itv. + + by apply: bigcup_measurable => k _; exact: measurable_itv. +>>>>>>> 2fdb72603 (rebase) + move=> m n mn; apply/subsetPset => r/=; rewrite !in_itv/= => /andP[->/=]. by move=> /le_trans; apply; rewrite lerD// ler_nat. rewrite (_ : _ \o _ = (fun k => k%:R%:E))//. @@ -759,8 +771,14 @@ Let lebesgue_measure_itv_infty_bnd y (b : R) : Proof. rewrite itvNy_bnd_bigcup_BLeft; transitivity (limn (lebesgue_measure \o (fun k => [set` Interval (BLeft (b - k%:R)) (BSide y b)] : set R))). +<<<<<<< HEAD apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure => //. + exact: bigcup_measurable. +======= + apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure. + + by move=> k; exact: measurable_itv. + + by apply: bigcup_measurable => k _; exact: measurable_itv. +>>>>>>> 2fdb72603 (rebase) + move=> m n mn; apply/subsetPset => r/=; rewrite !in_itv/= => /andP[+ ->]. by rewrite andbT; apply: le_trans; rewrite lerB// ler_nat. rewrite (_ : _ \o _ = (fun k : nat => k%:R%:E))//. diff --git a/theories/lebesgue_stieltjes_measure.v b/theories/lebesgue_stieltjes_measure.v index 1652724365..35d158010a 100644 --- a/theories/lebesgue_stieltjes_measure.v +++ b/theories/lebesgue_stieltjes_measure.v @@ -230,269 +230,6 @@ Notation "R .-ocitv" := (ocitv_display R) : measure_display_scope. Notation "R .-ocitv.-measurable" := (measurable : set_system (ocitv_type R)) : classical_set_scope. -Module MeasurableRocitv. -Section measurableRocitv. -Context {R : realType}. - -Definition measurableTypeR := g_sigma_algebraType (@ocitv R). - -Definition lebesgue_display : measure_display := (@ocitv R).-sigma. - -Definition measurableR : set_system R := (@ocitv R).-sigma.-measurable. - -HB.instance Definition _ : Measurable lebesgue_display measurableTypeR := - Measurable.on measurableTypeR. -(* Presumably it is safe to use NFI here because morally R is unique - and nothing else can be used here *) -#[non_forgetful_inheritance] -HB.instance Definition _ := Measurable.copy R measurableTypeR. - -Lemma measurable_set1 (r : R) : measurable [set r]. -Proof. -rewrite set1_bigcap_oc; apply: bigcap_measurable => // k _. -by apply: sub_sigma_algebra; exact/is_ocitv. -Qed. -#[local] Hint Resolve measurable_set1 : core. - -Lemma measurable_itv (i : interval R) : measurable [set` i]. -Proof. -have moc (a b : R) : measurable `]a, b]. - by apply: sub_sigma_algebra; apply: is_ocitv. -have mopoo (x : R) : measurable `]x, +oo[. - by rewrite itv_bndy_bigcup_BRight; exact: bigcup_measurable. -have mnooc (x : R) : measurable `]-oo, x]. - by rewrite -setCitvr; exact/measurableC. -have ooE (a b : R) : `]a, b[%classic = `]a, b] `\ b. - by rewrite setDitv1r. -have moo (a b : R) : measurable `]a, b[ by rewrite ooE; exact: measurableD. -have mcc (a b : R) : measurable `[a, b]. - case: (boolP (a <= b)) => ab; last by rewrite set_itv_ge. - by rewrite -setU_1itvob//; apply/measurableU. -have mco (a b : R) : measurable `[a, b[. - case: (boolP (a < b)) => ab; last by rewrite set_itv_ge. - by rewrite -setU_1itvob//; apply/measurableU. -have oooE (b : R) : `]-oo, b[%classic = `]-oo, b] `\ b. - by rewrite setDitv1r. -case: i => [[[] a|[]] [[] b|[]]] => //; do ?by rewrite set_itv_ge. -- by rewrite -setU_1itvob//; exact/measurableU. -- by rewrite oooE; exact/measurableD. -- by rewrite set_itvNyy. -Qed. - -End measurableRocitv. -Arguments measurableTypeR : clear implicits. -#[global] -Hint Extern 0 (measurable (_ @^-1` [set _])) => - solve [apply: measurable_funPTI; exact: measurable_set1] : core. -#[global] -Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. -#[global] -Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. -End MeasurableRocitv. - -Module RGenOInfty. -Section rgenoinfty. -Context (R : realType). -Implicit Types x y z : R. - -Definition G := [set A | exists x, A = `]x, +oo[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; last by apply: sub_sigma_algebra; eexists; reflexivity. -rewrite itvcyEbigcap; apply: bigcapT_measurable => k. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b x : a != +oo%O -> - G.-sigma.-measurable [set` Interval a (BSide b x)]. -Proof. -case: a => [a r _|[_|//]]. - by rewrite set_itv_splitD; apply: measurableD => //; - exact: measurable_itv_bnd_infty. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -Qed. - -End rgenoinfty. -End RGenOInfty. - -Module RGenInftyO. -Section rgeninftyo. -Context (R : realType). -Implicit Types x y z : R. - -Definition G := [set A | exists x, A = `]-oo, x[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. -Proof. -case: b; first by apply sub_sigma_algebra; eexists; reflexivity. -rewrite -setCitvr itvoyEbigcup; apply/measurableC/bigcupT_measurable => n. -rewrite -setCitvl; apply: measurableC. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b x : a != -oo%O -> - G.-sigma.-measurable [set` Interval (BSide b x) a]. -Proof. -case: a => [a r _|[//|_]]. - by rewrite set_itv_splitD; apply/measurableD => //; - rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. -by rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -Qed. - -End rgeninftyo. -End RGenInftyO. - -Module RGenCInfty. -Section rgencinfty. -Context (R : realType). -Implicit Types x y z : R. - -Definition G : set_system R := [set A | exists x, A = `[x, +oo[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. -rewrite itvoyEbigcup; apply: bigcupT_measurable => k. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b y : a != +oo%O -> - G.-sigma.-measurable [set` Interval a (BSide b y)]. -Proof. -case: a => [a r _|[_|//]]. - rewrite set_itv_splitD. - by apply: measurableD; exact: measurable_itv_bnd_infty. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -Qed. - -End rgencinfty. -End RGenCInfty. - -Module RGenOpens. -Section rgenopens. -Context (R : realType). -Implicit Types x y z : R. - -Definition G := [set A | exists x y, A = `]x, y[%classic]. - -Local Lemma measurable_itvoo x y : G.-sigma.-measurable `]x, y[%classic. -Proof. by apply sub_sigma_algebra; eexists; eexists; reflexivity. Qed. - -Local Lemma measurable_itv_o_infty x : G.-sigma.-measurable `]x, +oo[%classic. -Proof. -rewrite itvbndyEbigcup; apply: bigcupT_measurable => i. -exact: measurable_itvoo. -Qed. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; last exact: measurable_itv_o_infty. -rewrite itvcyEbigcap; apply: bigcapT_measurable => k. -exact: measurable_itv_o_infty. -Qed. - -Lemma measurable_itv_infty_bnd b x : - G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. -Proof. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurable_itv_bounded a x b y : - G.-sigma.-measurable [set` Interval (BSide a x) (BSide b y)]. -Proof. -move: a b => [] []; rewrite -[X in measurable X]setCK setCitv; - apply: measurableC; apply: measurableU; try solve[ - exact: measurable_itv_infty_bnd|exact: measurable_itv_bnd_infty]. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. -Qed. - -End rgenopens. -End RGenOpens. - -Module RGenOpenSets. -Section rgenopensets. -Context (R : realType). -Implicit Types a b : R. -Import MeasurableRocitv. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = open.-sigma.-measurable. -Proof. -rewrite eqEsubset; split; [rewrite RGenOpens.measurableE|]; - apply: sigma_algebra_subl=> U. -- by rewrite /RGenOpens.G/= => -[a [b ->]]; exact: sub_sigma_algebra. -- move=> oU; rewrite (open_disjoint_itv_bigcup oU). - apply: sigma_algebra_bigcup => k. - have /is_intervalP -> := @open_disjoint_itv_is_interval _ U oU k. - exact: measurable_itv. -Qed. - -End rgenopensets. -End RGenOpenSets. - -Section open. -Context {R : realType}. - -Definition open_type : Type := R. - -HB.instance Definition _ := Pointed.on open_type. - -Let measurable : set_system R := @measurable _ (g_sigma_algebraType (@open R)). - -Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. - -Let measurableC A : measurable A -> measurable (~` A). -Proof. by move=> /measurableC. Qed. - -Let measurable_bigcup (F : (set R)^nat) : (forall i, measurable (F i)) -> - measurable (\bigcup_i (F i)). -Proof. move=> mF; exact: bigcupT_measurable. Qed. - -HB.instance Definition _ := - @isMeasurable.Build (sigma_display (@open R)) - open_type measurable measurable0 measurableC measurable_bigcup. - -End open. - -Notation "R .-open" := (sigma_display (@open R)) : measure_display_scope. -Notation "R .-open.-measurable" := (measurable : set_system (@open_type R)) : - classical_set_scope. - Module MeasurableRopen. Section measurableRopen. Context {R : realType}. @@ -941,21 +678,23 @@ HB.instance Definition _ (f : cumulative R R) := End wlength_extension. Arguments lebesgue_stieltjes_measure {R}. -Section lebesgue_stieltjes_measure_unique. -Context {R : realType} (f : cumulative R R). -Import MeasurableR. +Definition measurableTypeR (R : realType) := + g_sigma_algebraType (@ocitv R). -Let ocitv_lebesgue_stieltjes_measure_unique - (mu : {measure set (MeasurableRocitv.measurableTypeR R) -> \bar R}) : - (forall X, ocitv X -> lebesgue_stieltjes_measure f X = mu X) -> - forall A : set R, measurable A -> lebesgue_stieltjes_measure f A = mu A. -Proof. -move=> muE A mA. -apply: measure_extension_unique => //=. -- exact: wlength_sigma_finite. -- by move=> X mX; rewrite -muE// -measurable_mu_extE. -- by rewrite RGenOpenSets.measurableE. -Qed. +Section lebesgue_stieltjes_measure. +Context {R : realType}. + +Definition lebesgue_display : measure_display := + (@ocitv R).-sigma. +Definition measurableR : set (set R) := + (@ocitv R).-sigma.-measurable. + +HB.instance Definition _ : Measurable lebesgue_display (measurableTypeR R) := + Measurable.on (measurableTypeR R). +(* Presumably it is safe to use NFI here because morally R is unique + and nothing else can be used here *) +#[non_forgetful_inheritance] +HB.instance Definition _ := Measurable.copy R (measurableTypeR R). Lemma lebesgue_stieltjes_measure_unique (mu : {measure set (MeasurableRopen.measurableTypeR R) -> \bar R}) : diff --git a/theories/measurable_realfun.v b/theories/measurable_realfun.v index 531d615bd1..bf934cfbbd 100644 --- a/theories/measurable_realfun.v +++ b/theories/measurable_realfun.v @@ -340,6 +340,163 @@ Qed. End measurable_fun_measurable. +<<<<<<< HEAD +======= +Module RGenOInfty. +Section rgenoinfty. +Variable R : realType. +Implicit Types x y z : R. + +Definition G := [set A | exists x, A = `]x, +oo[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; last by apply: sub_sigma_algebra; eexists; reflexivity. +rewrite itvcyEbigcap; apply: bigcapT_measurable => k. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b x : a != +oo%O -> + G.-sigma.-measurable [set` Interval a (BSide b x)]. +Proof. +case: a => [a r _|[_|//]]. + by rewrite set_itv_splitD; apply: measurableD => //; + exact: measurable_itv_bnd_infty. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +Qed. + +End rgenoinfty. +End RGenOInfty. + +Module RGenInftyO. +Section rgeninftyo. +Variable R : realType. +Implicit Types x y z : R. + +Definition G := [set A | exists x, A = `]-oo, x[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. +Proof. +case: b; first by apply sub_sigma_algebra; eexists; reflexivity. +rewrite -setCitvr itvoyEbigcup; apply/measurableC/bigcupT_measurable => n. +rewrite -setCitvl; apply: measurableC. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b x : a != -oo%O -> + G.-sigma.-measurable [set` Interval (BSide b x) a]. +Proof. +case: a => [a r _|[//|_]]. + by rewrite set_itv_splitD; apply/measurableD => //; + rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. +by rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +Qed. + +End rgeninftyo. +End RGenInftyO. + +Module RGenCInfty. +Section rgencinfty. +Variable R : realType. +Implicit Types x y z : R. + +Definition G : set_system R := [set A | exists x, A = `[x, +oo[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. +rewrite itvoyEbigcup; apply: bigcupT_measurable => k. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b y : a != +oo%O -> + G.-sigma.-measurable [set` Interval a (BSide b y)]. +Proof. +case: a => [a r _|[_|//]]. + rewrite set_itv_splitD. + by apply: measurableD; exact: measurable_itv_bnd_infty. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +Qed. + +End rgencinfty. +End RGenCInfty. + +Module RGenOpens. +Section rgenopens. +Variable R : realType. +Implicit Types x y z : R. + +Definition G := [set A | exists x y, A = `]x, y[%classic]. + +Local Lemma measurable_itvoo x y : G.-sigma.-measurable `]x, y[%classic. +Proof. by apply sub_sigma_algebra; eexists; eexists; reflexivity. Qed. + +Local Lemma measurable_itv_o_infty x : G.-sigma.-measurable `]x, +oo[%classic. +Proof. +rewrite itvbndyEbigcup; apply: bigcupT_measurable => i. +exact: measurable_itvoo. +Qed. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; last exact: measurable_itv_o_infty. +rewrite itvcyEbigcap; apply: bigcapT_measurable => k. +exact: measurable_itv_o_infty. +Qed. + +Lemma measurable_itv_infty_bnd b x : + G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. +Proof. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurable_itv_bounded a x b y : + G.-sigma.-measurable [set` Interval (BSide a x) (BSide b y)]. +Proof. +move: a b => [] []; rewrite -[X in measurable X]setCK setCitv; + apply: measurableC; apply: measurableU; try solve[ + exact: measurable_itv_infty_bnd|exact: measurable_itv_bnd_infty]. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. +Qed. + +End rgenopens. +End RGenOpens. +>>>>>>> 2fdb72603 (rebase) Section erealwithrays. Variable R : realType. Implicit Types (x y z : \bar R) (r s : R). From ea9459518615c61075ec76c9c64bea9380f008fb Mon Sep 17 00:00:00 2001 From: adjevahi Date: Tue, 18 Aug 2026 23:10:15 +0200 Subject: [PATCH 2/3] topology lemmas --- theories/topology_theory/topology_structure.v | 77 +++++++++++++++++-- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/theories/topology_theory/topology_structure.v b/theories/topology_theory/topology_structure.v index ca3115f5ec..21d8743370 100644 --- a/theories/topology_theory/topology_structure.v +++ b/theories/topology_theory/topology_structure.v @@ -27,6 +27,8 @@ From mathcomp Require Export filter. (* basis B == a family of open sets that converges to *) (* each point *) (* second_countable T == T has a countable basis *) +(* separable_set T A == A : set T admits a countable dense subset *) +(* separable T == separable_set T [set:T] *) (* [locally P] := forall a, A a -> G (within A (nbhs x)) if P *) (* is convertible to G (globally A) *) (* U° == all of the points which are locally in U, *) @@ -122,11 +124,6 @@ Context {T : topologicalType}. Definition open_nbhs (p : T) (A : set T) := open A /\ A p. -Definition basis (B : set_system T) := - B `<=` open /\ forall x, filter_from [set U | B U /\ U x] id --> x. - -Definition second_countable := exists2 B, countable B & basis B. - Global Instance nbhs_pfilter (p : T) : ProperFilter (nbhs p). Proof. by apply: nbhs_pfilter_subproof; case: T p => ? []. Qed. Typeclasses Opaque nbhs. @@ -1023,6 +1020,76 @@ apply/not_implyP; split; first exact: openT. by rewrite setTI => -[]. Qed. +Section basis. +Context {T : topologicalType}. + +Definition basis (B : set (set T)) := + B `<=` open /\ forall x, filter_from [set U | B U /\ U x] id --> x. + +Definition separable_set (A : set T) := +exists D, + [/\ countable D, D `<=` A & forall O, A`&`O !=set0 -> open O -> O`&`D !=set0]. + +Definition separable := separable_set setT. + +Definition second_countable := exists2 B, countable B & basis B. + +Lemma basisP {B : set_system T} : basis B <-> B `<=`open +/\ (forall U: set T, open U -> U = \bigcup_(V in [set W | B W /\ W `<=`U]) V). +Proof. +split=> [[oB bB]|[Bo dec]]. split=> //U oU. + rewrite eqEsubset /bigcup; split=>[x Ux/=|x [A/= [BA AU] /AU //]]. + have:= bB x. rewrite/cvg_to {2}/nbhs/filter_from/= => /(_ U)/=. + have nT: \near x, U x by apply: (open_in_nearW oU)=>[y|]; rewrite in_setE. + rewrite nbhs_nearE !exists2E/= => /(_ nT). + by under eq_exists=>x0 do rewrite -andA {1}(andC (x0 x) _) andA. +split=>// x. rewrite nbhsE => P [U [/(dec U)->] [A [BA AU] Ax] UP]. +exists A=>// t At; apply: UP. by exists A. +Qed. + +Lemma separableTE : separable = exists A : set T, countable A /\ dense A. +Proof. +apply: eq_exists=>A. rewrite [X in [/\ _, _ & X]] (_:_ = dense A)//. + by under eq_forall do rewrite setTI. +by rewrite propeqE; split=>[[]|[]]. +Qed. + +Lemma second_countable_separable : + second_countable -> separable. +Proof. +have [T0 _|/set0P [x _]] := eqVneq [set:T] set0. by exists set0; split=>// U; + rewrite setTI => [/(subset_nonempty (subsetT U))/set0P/eqP /(_ T0)]. +move=>[B] /(sub_countable (card_le_setD B [set set0])) cB /basisP [BO BB]. +have /choice [f nef] : forall U, exists x, (B `\ set0) U -> U x. + move=> U; have [[BU /= /eqP/set0P [y Uy]]| + /= /not_andP [nBU|nU0]] := pselect ((B `\ set0) U); first by exists y. + by exists x => [[/nBU]]. by exists x => [[_ /nU0]]. +exists (image (B `\ set0) f); split=>// [|U /=]; + first exact/(card_le_trans (card_image_le _ _)). +rewrite setTI/= => [/[swap] /BB -> /bigcup_nonempty [V [BV VU] /set0P/eqP nV0]]. +exists (f V); split; exists V=>//. exact: nef. +Qed. + +Lemma bigcupT_separable [A : (set T)^nat] : (forall n, separable_set (A n)) -> +separable_set (\bigcup_n A n). +Proof. +move=>/choice [D_ /all_and3 [cDx DAx dDx]]. exists (\bigcup_n D_ n); split. + exact: bigcup_countable. exact: subset_bigcup. move=> O [x [[n _ Anx] Ox] oO]. +have /(dDx n O) /(_ oO) [y [Oy Dny]] : A n `&` O !=set0 by exists x. +by exists y; split=>//; exists n. +Qed. + +Lemma bigcup_separable [A : (set T)^nat] [P : set nat] : +(forall n, P n -> separable_set (A n)) +-> separable_set (\bigcup_(i in P) A i). +Proof. +rewrite bigcup_mkcond => nsPA. apply: bigcupT_separable=>n. +case: ifPn=>[|_]. rewrite in_setE. apply: (nsPA n). +by exists set0; split=>// O [x [F]]. +Qed. + +End basis. + Section ClopenSets. Implicit Type T : topologicalType. From 51c2baf5c26a5914768c5885f5b8fa012877b517 Mon Sep 17 00:00:00 2001 From: adjevahi Date: Tue, 18 Aug 2026 23:19:45 +0200 Subject: [PATCH 3/3] fix --- classical/filter.v | 6 +- theories/lebesgue_measure.v | 18 -- theories/lebesgue_stieltjes_measure.v | 293 ++++++++++++++++++++++++-- theories/measurable_realfun.v | 157 -------------- 4 files changed, 278 insertions(+), 196 deletions(-) diff --git a/classical/filter.v b/classical/filter.v index 403b4aee28..9617295dcc 100644 --- a/classical/filter.v +++ b/classical/filter.v @@ -1251,7 +1251,7 @@ move=> near_hom fFG; apply/cvg_to_withinP; split. Qed. Lemma filter_bigI_within T (I : choiceType) (D : {fset I}) (f : I -> set T) - (F : set_system T) (P : set T) : + (F : set_system T) (P : set T) : Filter F -> (forall i, i \in D -> F [set j | P j -> f i j]) -> F ([set j | P j -> (\bigcap_(i in [set` D]) f i) j]). Proof. move=> FF FfD; exact: (@filter_bigI T I D f _ (within_filter P FF)). Qed. @@ -1518,7 +1518,6 @@ End UltraFilters. Section filter_supremums. -Global Instance smallest_filter_filter {T : Type} (F : set_system T) : Global Instance smallest_filter_filter {T : Type} (F : set_system T) : Filter (smallest Filter F). Proof. @@ -1528,14 +1527,12 @@ split. - by move=> ? ? /filterS + sFP ? [? ?]; apply; exact: sFP. Qed. -Fixpoint filterI_iter {T : Type} (F : set_system T) (n : nat) := Fixpoint filterI_iter {T : Type} (F : set_system T) (n : nat) := if n is m.+1 then [set P `&` Q | P in filterI_iter F m & Q in filterI_iter F m] else setT |` F. -Lemma filterI_iter_sub {T : Type} (F : set_system T) : Lemma filterI_iter_sub {T : Type} (F : set_system T) : {homo filterI_iter F : i j / (i <= j)%N >-> i `<=` j}. Proof. @@ -1544,7 +1541,6 @@ move=> j IH i; rewrite leq_eqVlt => /predU1P[->//|]. by move=> /IH/subset_trans; apply=> A ?; do 2 exists A => //; rewrite setIid. Qed. -Lemma filterI_iterE {T : Type} (F : set_system T) : Lemma filterI_iterE {T : Type} (F : set_system T) : smallest Filter F = filter_from (\bigcup_n (filterI_iter F n)) id. Proof. diff --git a/theories/lebesgue_measure.v b/theories/lebesgue_measure.v index 35c9f6a8c5..0e0f99382f 100644 --- a/theories/lebesgue_measure.v +++ b/theories/lebesgue_measure.v @@ -646,14 +646,8 @@ Let lebesgue_measure_itvoo_subr1 (a : R) : Proof. rewrite itv_bnd_open_bigcup//; transitivity (limn (lebesgue_measure \o (fun k => `]a - 1, a - k.+1%:R^-1]%classic : set R))). -<<<<<<< HEAD apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure => //. - exact: bigcup_measurable. -======= - apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure. - - by move=> ?; exact: measurable_itv. - - by apply: bigcup_measurable => k _; exact: measurable_itv. ->>>>>>> 2fdb72603 (rebase) - move=> n m nm; apply/subsetPset => x /=; rewrite !in_itv/= => /andP[->/=]. by move/le_trans; apply; rewrite lerB// lef_pV2 ?ler_nat ?posrE. rewrite (_ : _ \o _ = (fun n => (1 - n.+1%:R^-1)%:E)). @@ -750,14 +744,8 @@ Let lebesgue_measure_itv_bnd_infty x (a : R) : Proof. rewrite itv_bndy_bigcup_BRight; transitivity (limn (lebesgue_measure \o (fun k => [set` Interval (BSide x a) (BRight (a + k%:R))] : set R))). -<<<<<<< HEAD apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure => //. + exact: bigcup_measurable. -======= - apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure. - + by move=> k; exact: measurable_itv. - + by apply: bigcup_measurable => k _; exact: measurable_itv. ->>>>>>> 2fdb72603 (rebase) + move=> m n mn; apply/subsetPset => r/=; rewrite !in_itv/= => /andP[->/=]. by move=> /le_trans; apply; rewrite lerD// ler_nat. rewrite (_ : _ \o _ = (fun k => k%:R%:E))//. @@ -771,14 +759,8 @@ Let lebesgue_measure_itv_infty_bnd y (b : R) : Proof. rewrite itvNy_bnd_bigcup_BLeft; transitivity (limn (lebesgue_measure \o (fun k => [set` Interval (BLeft (b - k%:R)) (BSide y b)] : set R))). -<<<<<<< HEAD apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure => //. + exact: bigcup_measurable. -======= - apply/esym/cvg_lim => //; apply: nondecreasing_cvg_measure. - + by move=> k; exact: measurable_itv. - + by apply: bigcup_measurable => k _; exact: measurable_itv. ->>>>>>> 2fdb72603 (rebase) + move=> m n mn; apply/subsetPset => r/=; rewrite !in_itv/= => /andP[+ ->]. by rewrite andbT; apply: le_trans; rewrite lerB// ler_nat. rewrite (_ : _ \o _ = (fun k : nat => k%:R%:E))//. diff --git a/theories/lebesgue_stieltjes_measure.v b/theories/lebesgue_stieltjes_measure.v index 35d158010a..1652724365 100644 --- a/theories/lebesgue_stieltjes_measure.v +++ b/theories/lebesgue_stieltjes_measure.v @@ -230,6 +230,269 @@ Notation "R .-ocitv" := (ocitv_display R) : measure_display_scope. Notation "R .-ocitv.-measurable" := (measurable : set_system (ocitv_type R)) : classical_set_scope. +Module MeasurableRocitv. +Section measurableRocitv. +Context {R : realType}. + +Definition measurableTypeR := g_sigma_algebraType (@ocitv R). + +Definition lebesgue_display : measure_display := (@ocitv R).-sigma. + +Definition measurableR : set_system R := (@ocitv R).-sigma.-measurable. + +HB.instance Definition _ : Measurable lebesgue_display measurableTypeR := + Measurable.on measurableTypeR. +(* Presumably it is safe to use NFI here because morally R is unique + and nothing else can be used here *) +#[non_forgetful_inheritance] +HB.instance Definition _ := Measurable.copy R measurableTypeR. + +Lemma measurable_set1 (r : R) : measurable [set r]. +Proof. +rewrite set1_bigcap_oc; apply: bigcap_measurable => // k _. +by apply: sub_sigma_algebra; exact/is_ocitv. +Qed. +#[local] Hint Resolve measurable_set1 : core. + +Lemma measurable_itv (i : interval R) : measurable [set` i]. +Proof. +have moc (a b : R) : measurable `]a, b]. + by apply: sub_sigma_algebra; apply: is_ocitv. +have mopoo (x : R) : measurable `]x, +oo[. + by rewrite itv_bndy_bigcup_BRight; exact: bigcup_measurable. +have mnooc (x : R) : measurable `]-oo, x]. + by rewrite -setCitvr; exact/measurableC. +have ooE (a b : R) : `]a, b[%classic = `]a, b] `\ b. + by rewrite setDitv1r. +have moo (a b : R) : measurable `]a, b[ by rewrite ooE; exact: measurableD. +have mcc (a b : R) : measurable `[a, b]. + case: (boolP (a <= b)) => ab; last by rewrite set_itv_ge. + by rewrite -setU_1itvob//; apply/measurableU. +have mco (a b : R) : measurable `[a, b[. + case: (boolP (a < b)) => ab; last by rewrite set_itv_ge. + by rewrite -setU_1itvob//; apply/measurableU. +have oooE (b : R) : `]-oo, b[%classic = `]-oo, b] `\ b. + by rewrite setDitv1r. +case: i => [[[] a|[]] [[] b|[]]] => //; do ?by rewrite set_itv_ge. +- by rewrite -setU_1itvob//; exact/measurableU. +- by rewrite oooE; exact/measurableD. +- by rewrite set_itvNyy. +Qed. + +End measurableRocitv. +Arguments measurableTypeR : clear implicits. +#[global] +Hint Extern 0 (measurable (_ @^-1` [set _])) => + solve [apply: measurable_funPTI; exact: measurable_set1] : core. +#[global] +Hint Extern 0 (measurable [set _]) => solve [apply: measurable_set1] : core. +#[global] +Hint Extern 0 (measurable [set` _] ) => exact: measurable_itv : core. +End MeasurableRocitv. + +Module RGenOInfty. +Section rgenoinfty. +Context (R : realType). +Implicit Types x y z : R. + +Definition G := [set A | exists x, A = `]x, +oo[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; last by apply: sub_sigma_algebra; eexists; reflexivity. +rewrite itvcyEbigcap; apply: bigcapT_measurable => k. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b x : a != +oo%O -> + G.-sigma.-measurable [set` Interval a (BSide b x)]. +Proof. +case: a => [a r _|[_|//]]. + by rewrite set_itv_splitD; apply: measurableD => //; + exact: measurable_itv_bnd_infty. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +Qed. + +End rgenoinfty. +End RGenOInfty. + +Module RGenInftyO. +Section rgeninftyo. +Context (R : realType). +Implicit Types x y z : R. + +Definition G := [set A | exists x, A = `]-oo, x[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. +Proof. +case: b; first by apply sub_sigma_algebra; eexists; reflexivity. +rewrite -setCitvr itvoyEbigcup; apply/measurableC/bigcupT_measurable => n. +rewrite -setCitvl; apply: measurableC. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b x : a != -oo%O -> + G.-sigma.-measurable [set` Interval (BSide b x) a]. +Proof. +case: a => [a r _|[//|_]]. + by rewrite set_itv_splitD; apply/measurableD => //; + rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. +by rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +Qed. + +End rgeninftyo. +End RGenInftyO. + +Module RGenCInfty. +Section rgencinfty. +Context (R : realType). +Implicit Types x y z : R. + +Definition G : set_system R := [set A | exists x, A = `[x, +oo[%classic]. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. +rewrite itvoyEbigcup; apply: bigcupT_measurable => k. +by apply: sub_sigma_algebra; eexists; reflexivity. +Qed. + +Lemma measurable_itv_bounded a b y : a != +oo%O -> + G.-sigma.-measurable [set` Interval a (BSide b y)]. +Proof. +case: a => [a r _|[_|//]]. + rewrite set_itv_splitD. + by apply: measurableD; exact: measurable_itv_bnd_infty. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. +Qed. + +End rgencinfty. +End RGenCInfty. + +Module RGenOpens. +Section rgenopens. +Context (R : realType). +Implicit Types x y z : R. + +Definition G := [set A | exists x y, A = `]x, y[%classic]. + +Local Lemma measurable_itvoo x y : G.-sigma.-measurable `]x, y[%classic. +Proof. by apply sub_sigma_algebra; eexists; eexists; reflexivity. Qed. + +Local Lemma measurable_itv_o_infty x : G.-sigma.-measurable `]x, +oo[%classic. +Proof. +rewrite itvbndyEbigcup; apply: bigcupT_measurable => i. +exact: measurable_itvoo. +Qed. + +Lemma measurable_itv_bnd_infty b x : + G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. +Proof. +case: b; last exact: measurable_itv_o_infty. +rewrite itvcyEbigcap; apply: bigcapT_measurable => k. +exact: measurable_itv_o_infty. +Qed. + +Lemma measurable_itv_infty_bnd b x : + G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. +Proof. +by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. +Qed. + +Lemma measurable_itv_bounded a x b y : + G.-sigma.-measurable [set` Interval (BSide a x) (BSide b y)]. +Proof. +move: a b => [] []; rewrite -[X in measurable X]setCK setCitv; + apply: measurableC; apply: measurableU; try solve[ + exact: measurable_itv_infty_bnd|exact: measurable_itv_bnd_infty]. +Qed. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. +Proof. +rewrite eqEsubset; split => A. + apply: smallest_sub; first exact: smallest_sigma_algebra. + by move=> I [x _ <-]; exact: measurable_itv_bounded. +by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. +Qed. + +End rgenopens. +End RGenOpens. + +Module RGenOpenSets. +Section rgenopensets. +Context (R : realType). +Implicit Types a b : R. +Import MeasurableRocitv. + +Lemma measurableE : (@ocitv R).-sigma.-measurable = open.-sigma.-measurable. +Proof. +rewrite eqEsubset; split; [rewrite RGenOpens.measurableE|]; + apply: sigma_algebra_subl=> U. +- by rewrite /RGenOpens.G/= => -[a [b ->]]; exact: sub_sigma_algebra. +- move=> oU; rewrite (open_disjoint_itv_bigcup oU). + apply: sigma_algebra_bigcup => k. + have /is_intervalP -> := @open_disjoint_itv_is_interval _ U oU k. + exact: measurable_itv. +Qed. + +End rgenopensets. +End RGenOpenSets. + +Section open. +Context {R : realType}. + +Definition open_type : Type := R. + +HB.instance Definition _ := Pointed.on open_type. + +Let measurable : set_system R := @measurable _ (g_sigma_algebraType (@open R)). + +Let measurable0 : measurable set0. Proof. exact: measurable0. Qed. + +Let measurableC A : measurable A -> measurable (~` A). +Proof. by move=> /measurableC. Qed. + +Let measurable_bigcup (F : (set R)^nat) : (forall i, measurable (F i)) -> + measurable (\bigcup_i (F i)). +Proof. move=> mF; exact: bigcupT_measurable. Qed. + +HB.instance Definition _ := + @isMeasurable.Build (sigma_display (@open R)) + open_type measurable measurable0 measurableC measurable_bigcup. + +End open. + +Notation "R .-open" := (sigma_display (@open R)) : measure_display_scope. +Notation "R .-open.-measurable" := (measurable : set_system (@open_type R)) : + classical_set_scope. + Module MeasurableRopen. Section measurableRopen. Context {R : realType}. @@ -678,23 +941,21 @@ HB.instance Definition _ (f : cumulative R R) := End wlength_extension. Arguments lebesgue_stieltjes_measure {R}. -Definition measurableTypeR (R : realType) := - g_sigma_algebraType (@ocitv R). - -Section lebesgue_stieltjes_measure. -Context {R : realType}. - -Definition lebesgue_display : measure_display := - (@ocitv R).-sigma. -Definition measurableR : set (set R) := - (@ocitv R).-sigma.-measurable. +Section lebesgue_stieltjes_measure_unique. +Context {R : realType} (f : cumulative R R). +Import MeasurableR. -HB.instance Definition _ : Measurable lebesgue_display (measurableTypeR R) := - Measurable.on (measurableTypeR R). -(* Presumably it is safe to use NFI here because morally R is unique - and nothing else can be used here *) -#[non_forgetful_inheritance] -HB.instance Definition _ := Measurable.copy R (measurableTypeR R). +Let ocitv_lebesgue_stieltjes_measure_unique + (mu : {measure set (MeasurableRocitv.measurableTypeR R) -> \bar R}) : + (forall X, ocitv X -> lebesgue_stieltjes_measure f X = mu X) -> + forall A : set R, measurable A -> lebesgue_stieltjes_measure f A = mu A. +Proof. +move=> muE A mA. +apply: measure_extension_unique => //=. +- exact: wlength_sigma_finite. +- by move=> X mX; rewrite -muE// -measurable_mu_extE. +- by rewrite RGenOpenSets.measurableE. +Qed. Lemma lebesgue_stieltjes_measure_unique (mu : {measure set (MeasurableRopen.measurableTypeR R) -> \bar R}) : diff --git a/theories/measurable_realfun.v b/theories/measurable_realfun.v index bf934cfbbd..531d615bd1 100644 --- a/theories/measurable_realfun.v +++ b/theories/measurable_realfun.v @@ -340,163 +340,6 @@ Qed. End measurable_fun_measurable. -<<<<<<< HEAD -======= -Module RGenOInfty. -Section rgenoinfty. -Variable R : realType. -Implicit Types x y z : R. - -Definition G := [set A | exists x, A = `]x, +oo[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; last by apply: sub_sigma_algebra; eexists; reflexivity. -rewrite itvcyEbigcap; apply: bigcapT_measurable => k. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b x : a != +oo%O -> - G.-sigma.-measurable [set` Interval a (BSide b x)]. -Proof. -case: a => [a r _|[_|//]]. - by rewrite set_itv_splitD; apply: measurableD => //; - exact: measurable_itv_bnd_infty. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -Qed. - -End rgenoinfty. -End RGenOInfty. - -Module RGenInftyO. -Section rgeninftyo. -Variable R : realType. -Implicit Types x y z : R. - -Definition G := [set A | exists x, A = `]-oo, x[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. -Proof. -case: b; first by apply sub_sigma_algebra; eexists; reflexivity. -rewrite -setCitvr itvoyEbigcup; apply/measurableC/bigcupT_measurable => n. -rewrite -setCitvl; apply: measurableC. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b x : a != -oo%O -> - G.-sigma.-measurable [set` Interval (BSide b x) a]. -Proof. -case: a => [a r _|[//|_]]. - by rewrite set_itv_splitD; apply/measurableD => //; - rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. -by rewrite -setCitvl; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -Qed. - -End rgeninftyo. -End RGenInftyO. - -Module RGenCInfty. -Section rgencinfty. -Variable R : realType. -Implicit Types x y z : R. - -Definition G : set_system R := [set A | exists x, A = `[x, +oo[%classic]. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; first by apply: sub_sigma_algebra; exists x; rewrite set_itvcy. -rewrite itvoyEbigcup; apply: bigcupT_measurable => k. -by apply: sub_sigma_algebra; eexists; reflexivity. -Qed. - -Lemma measurable_itv_bounded a b y : a != +oo%O -> - G.-sigma.-measurable [set` Interval a (BSide b y)]. -Proof. -case: a => [a r _|[_|//]]. - rewrite set_itv_splitD. - by apply: measurableD; exact: measurable_itv_bnd_infty. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x ->]]. -Qed. - -End rgencinfty. -End RGenCInfty. - -Module RGenOpens. -Section rgenopens. -Variable R : realType. -Implicit Types x y z : R. - -Definition G := [set A | exists x y, A = `]x, y[%classic]. - -Local Lemma measurable_itvoo x y : G.-sigma.-measurable `]x, y[%classic. -Proof. by apply sub_sigma_algebra; eexists; eexists; reflexivity. Qed. - -Local Lemma measurable_itv_o_infty x : G.-sigma.-measurable `]x, +oo[%classic. -Proof. -rewrite itvbndyEbigcup; apply: bigcupT_measurable => i. -exact: measurable_itvoo. -Qed. - -Lemma measurable_itv_bnd_infty b x : - G.-sigma.-measurable [set` Interval (BSide b x) +oo%O]. -Proof. -case: b; last exact: measurable_itv_o_infty. -rewrite itvcyEbigcap; apply: bigcapT_measurable => k. -exact: measurable_itv_o_infty. -Qed. - -Lemma measurable_itv_infty_bnd b x : - G.-sigma.-measurable [set` Interval -oo%O (BSide b x)]. -Proof. -by rewrite -setCitvr; apply: measurableC; exact: measurable_itv_bnd_infty. -Qed. - -Lemma measurable_itv_bounded a x b y : - G.-sigma.-measurable [set` Interval (BSide a x) (BSide b y)]. -Proof. -move: a b => [] []; rewrite -[X in measurable X]setCK setCitv; - apply: measurableC; apply: measurableU; try solve[ - exact: measurable_itv_infty_bnd|exact: measurable_itv_bnd_infty]. -Qed. - -Lemma measurableE : (@ocitv R).-sigma.-measurable = G.-sigma.-measurable. -Proof. -rewrite eqEsubset; split => A. - apply: smallest_sub; first exact: smallest_sigma_algebra. - by move=> I [x _ <-]; exact: measurable_itv_bounded. -by apply: smallest_sub; [exact: smallest_sigma_algebra|move=> A' /= [x [y ->]]]. -Qed. - -End rgenopens. -End RGenOpens. ->>>>>>> 2fdb72603 (rebase) Section erealwithrays. Variable R : realType. Implicit Types (x y z : \bar R) (r s : R).