Skip to content

Commit b6355f0

Browse files
committed
uniqueness of RN derivatives up ae eq (#914)
1 parent ed1629f commit b6355f0

File tree

4 files changed

+152
-4
lines changed

4 files changed

+152
-4
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
- in file `topology.v`,
2323
+ new definitions `basis`, and `second_countable`.
2424
+ new lemmas `clopen_countable` and `compact_countable_base`.
25+
- in `classical_sets.v`:
26+
+ lemmas `set_eq_le`, `set_neq_lt`
27+
- in `set_interval.v`:
28+
+ lemma `set_lte_bigcup`
29+
- in `lebesgue_integral.v`:
30+
+ lemmas `emeasurable_fun_lt`, `emeasurable_fun_le`, `emeasurable_fun_eq`,
31+
`emeasurable_fun_neq`
32+
+ lemma `integral_ae_eq`
2533

2634
### Changed
2735

classical/classical_sets.v

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,19 @@ Notation setvI := setICl.
10181018
#[deprecated(since="mathcomp-analysis 0.6", note="Use setICr instead.")]
10191019
Notation setIv := setICr.
10201020

1021+
Section set_order.
1022+
Import Order.TTheory.
1023+
1024+
Lemma set_eq_le d (rT : porderType d) T (f g : T -> rT) :
1025+
[set x | f x = g x] = [set x | (f x <= g x)%O] `&` [set x | (f x >= g x)%O].
1026+
Proof. by apply/seteqP; split => [x/= ->//|x /andP]; rewrite -eq_le =>/eqP. Qed.
1027+
1028+
Lemma set_neq_lt d (rT : orderType d) T (f g : T -> rT) :
1029+
[set x | f x != g x ] = [set x | (f x < g x)%O] `|` [set x | (f x > g x)%O].
1030+
Proof. by apply/seteqP; split => [x/=|x /=]; rewrite neq_lt => /orP. Qed.
1031+
1032+
End set_order.
1033+
10211034
Lemma image2E {TA TB rT : Type} (A : set TA) (B : set TB) (f : TA -> TB -> rT) :
10221035
[set f x y | x in A & y in B] = uncurry f @` (A `*` B).
10231036
Proof.

theories/lebesgue_integral.v

Lines changed: 104 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ From HB Require Import structures.
33
From mathcomp Require Import all_ssreflect ssralg ssrnum ssrint interval finmap.
44
From mathcomp.classical Require Import boolp classical_sets functions.
55
From mathcomp.classical Require Import cardinality fsbigop mathcomp_extra.
6-
Require Import signed reals ereal topology normedtype sequences esum measure.
7-
Require Import lebesgue_measure numfun.
6+
Require Import signed reals ereal topology normedtype sequences real_interval.
7+
Require Import esum measure lebesgue_measure numfun.
88

99
(******************************************************************************)
1010
(* Lebesgue Integral *)
@@ -1858,6 +1858,42 @@ Proof. by move=> mf; exact/(emeasurable_funM _ mf)/measurable_fun_cst. Qed.
18581858

18591859
End emeasurable_fun.
18601860

1861+
Section measurable_fun_measurable2.
1862+
Local Open Scope ereal_scope.
1863+
Context d (T : measurableType d) (R : realType).
1864+
Variables (D : set T) (mD : measurable D).
1865+
Implicit Types f g : T -> \bar R.
1866+
1867+
Lemma emeasurable_fun_lt f g : measurable_fun D f -> measurable_fun D g ->
1868+
measurable (D `&` [set x | f x < g x]).
1869+
Proof.
1870+
move=> mf mg; under eq_set do rewrite -sube_gt0.
1871+
by apply: emeasurable_fun_o_infty => //; exact: emeasurable_funB.
1872+
Qed.
1873+
1874+
Lemma emeasurable_fun_le f g : measurable_fun D f -> measurable_fun D g ->
1875+
measurable (D `&` [set x | f x <= g x]).
1876+
Proof.
1877+
move=> mf mg; under eq_set do rewrite -sube_le0.
1878+
by apply: emeasurable_fun_infty_c => //; exact: emeasurable_funB.
1879+
Qed.
1880+
1881+
Lemma emeasurable_fun_eq f g : measurable_fun D f -> measurable_fun D g ->
1882+
measurable (D `&` [set x | f x = g x]).
1883+
Proof.
1884+
move=> mf mg; rewrite set_eq_le setIIr.
1885+
by apply: measurableI; apply: emeasurable_fun_le.
1886+
Qed.
1887+
1888+
Lemma emeasurable_fun_neq f g : measurable_fun D f -> measurable_fun D g ->
1889+
measurable (D `&` [set x | f x != g x]).
1890+
Proof.
1891+
move=> mf mg; rewrite set_neq_lt setIUr.
1892+
by apply: measurableU; exact: emeasurable_fun_lt.
1893+
Qed.
1894+
1895+
End measurable_fun_measurable2.
1896+
18611897
Section ge0_integral_sum.
18621898
Local Open Scope ereal_scope.
18631899
Context d (T : measurableType d) (R : realType).
@@ -4132,6 +4168,72 @@ Qed.
41324168

41334169
End ae_ge0_le_integral.
41344170

4171+
Section integral_ae_eq.
4172+
Local Open Scope ereal_scope.
4173+
Context d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}).
4174+
4175+
Let integral_measure_lt (D : set T) (mD : measurable D) (g f : T -> \bar R) :
4176+
mu.-integrable D f -> mu.-integrable D g ->
4177+
(forall E, measurable E -> \int[mu]_(x in E) f x = \int[mu]_(x in E) g x) ->
4178+
mu (D `&` [set x | g x < f x]) = 0.
4179+
Proof.
4180+
move=> mf mg fg; pose E j := D `&` [set x | f x - g x >= j.+1%:R^-1%:E].
4181+
have mE j : measurable (E j).
4182+
rewrite /E; apply: emeasurable_fun_le => //; first exact: measurable_fun_cst.
4183+
by apply/(emeasurable_funD mf.1)/emeasurable_funN; case: mg.
4184+
have muE j : mu (E j) = 0.
4185+
apply/eqP; rewrite eq_le measure_ge0// andbT.
4186+
have fg0 : \int[mu]_(x in E j) (f \- g) x = 0.
4187+
rewrite integralB//; last 2 first.
4188+
by apply: integrableS mf => //; exact: subIsetl.
4189+
by apply: integrableS mg => //; exact: subIsetl.
4190+
rewrite fg// subee// fin_num_abs (le_lt_trans (le_abse_integral _ _ _))//.
4191+
by apply: measurable_funS mg.1 => //; first exact: subIsetl.
4192+
apply: le_lt_trans mg.2; apply: subset_integral => //; last exact: subIsetl.
4193+
exact: measurable_funT_comp mg.1.
4194+
suff : mu (E j) <= j.+1%:R%:E * \int[mu]_(x in E j) (f \- g) x.
4195+
by rewrite fg0 mule0.
4196+
apply: (@le_trans _ _ (j.+1%:R%:E * \int[mu]_(x in E j) j.+1%:R^-1%:E)).
4197+
by rewrite integral_cst// muleA -EFinM divrr ?unitfE// mul1e.
4198+
rewrite lee_pmul//; first exact: integral_ge0.
4199+
apply: ge0_le_integral => //; [exact: measurable_fun_cst| | |by move=> x []].
4200+
- by move=> x [_/=]; exact: le_trans.
4201+
- apply: emeasurable_funB.
4202+
+ by apply: measurable_funS mf.1 => //; exact: subIsetl.
4203+
+ by apply: measurable_funS mg.1 => //; exact: subIsetl.
4204+
have nd_E : {homo E : n0 m / (n0 <= m)%N >-> (n0 <= m)%O}.
4205+
move=> i j ij; apply/subsetPset => x [Dx /= ifg]; split => //.
4206+
by move: ifg; apply: le_trans; rewrite lee_fin lef_pinv// ?posrE// ler_nat.
4207+
rewrite set_lte_bigcup.
4208+
have /cvg_lim h1 : mu \o E --> 0 by apply: cvg_near_cst; exact: nearW.
4209+
have := @nondecreasing_cvg_mu _ _ _ mu E mE (bigcupT_measurable E mE) nd_E.
4210+
by move/cvg_lim => h2; rewrite setI_bigcupr -h2// h1.
4211+
Qed.
4212+
4213+
Lemma integral_ae_eq (D : set T) (mD : measurable D) (g f : T -> \bar R) :
4214+
mu.-integrable D f -> mu.-integrable D g ->
4215+
(forall E, measurable E -> \int[mu]_(x in E) f x = \int[mu]_(x in E) g x) ->
4216+
ae_eq mu D f g.
4217+
Proof.
4218+
move=> mf mg fg.
4219+
have mugf : mu (D `&` [set x | g x < f x]) = 0 by exact: integral_measure_lt.
4220+
have mufg : mu (D `&` [set x | f x < g x]) = 0.
4221+
by apply: integral_measure_lt => // E mE; rewrite fg.
4222+
have h : ~` [set x | D x -> f x = g x] = D `&` [set x | f x != g x].
4223+
apply/seteqP; split => [x/= /not_implyP[? /eqP]//|x/= [Dx fgx]].
4224+
by apply/not_implyP; split => //; exact/eqP.
4225+
apply/negligibleP.
4226+
by rewrite h; apply: emeasurable_fun_neq => //; [case: mf|case: mg].
4227+
rewrite h set_neq_lt setIUr measureU//.
4228+
- by rewrite [X in X + _]mufg add0e [LHS]mugf.
4229+
- by apply: emeasurable_fun_lt => //; [case: mf|case: mg].
4230+
- by apply: emeasurable_fun_lt => //; [case: mg|case: mf].
4231+
- apply/seteqP; split => [x [[Dx/= + [_]]]|//].
4232+
by move=> /lt_trans => /[apply]; rewrite ltxx.
4233+
Qed.
4234+
4235+
End integral_ae_eq.
4236+
41354237
(******************************************************************************)
41364238
(* * product measure *)
41374239
(******************************************************************************)

theories/real_interval.v

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ Coercion ereal_of_itv_bound T (b : itv_bound T) : \bar T :=
275275
match b with BSide _ y => y%:E | +oo%O => +oo%E | -oo%O => -oo%E end.
276276
Arguments ereal_of_itv_bound T !b.
277277

278-
Section erealDomainType.
278+
Section itv_realDomainType.
279279
Context (R : realDomainType).
280280

281281
Lemma le_bnd_ereal (a b : itv_bound R) : (a <= b)%O -> (a <= b)%E.
@@ -325,7 +325,32 @@ rewrite set_itvE predeqE => x; split => /=.
325325
- by move: x => [x h|//|/(_ erefl)]; rewrite ?ltNyr.
326326
Qed.
327327

328-
End erealDomainType.
328+
End itv_realDomainType.
329+
330+
Section set_ereal.
331+
Context (R : realType) T (f g : T -> \bar R).
332+
Local Open Scope ereal_scope.
333+
334+
Let E j := [set x | f x - g x >= j.+1%:R^-1%:E].
335+
336+
Lemma set_lte_bigcup : [set x | f x > g x] = \bigcup_j E j.
337+
Proof.
338+
apply/seteqP; split => [x/=|x [n _]]; last first.
339+
by rewrite /E/= -sube_gt0; apply: lt_le_trans.
340+
move gxE : (g x) => gx; case: gx gxE => [gx| |gxoo fxoo]; last 2 first.
341+
- by case: (f x).
342+
- by exists 0%N => //; rewrite /E/= gxoo addey// ?leey// -ltNye.
343+
move fxE : (f x) => fx; case: fx fxE => [fx fxE gxE|fxoo gxE _|//]; last first.
344+
by exists 0%N => //; rewrite /E/= fxoo gxE// addye// leey.
345+
rewrite lte_fin -subr_gt0 => fgx; exists `|floor (fx - gx)^-1%R|%N => //.
346+
rewrite /E/= -natr1 natr_absz ger0_norm ?floor_ge0 ?invr_ge0; last exact/ltW.
347+
rewrite fxE gxE lee_fin -[leRHS]invrK lef_pinv//.
348+
- by apply/ltW; rewrite lt_succ_floor.
349+
- by rewrite posrE// ltr_spaddr// ler0z floor_ge0 invr_ge0 ltW.
350+
- by rewrite posrE invr_gt0.
351+
Qed.
352+
353+
End set_ereal.
329354

330355
Lemma disj_itv_Rhull {R : realType} (A B : set R) : A `&` B = set0 ->
331356
is_interval A -> is_interval B -> disjoint_itv (Rhull A) (Rhull B).

0 commit comments

Comments
 (0)