Skip to content

Commit ebdfdee

Browse files
committed
uniqueness of RN derivatives up ae eq
1 parent e63a2a3 commit ebdfdee

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
@@ -8,6 +8,14 @@
88
+ lemma `globally0`
99
- in `normedtype.v`:
1010
+ lemma `lipschitz_set0`, `lipschitz_set1`
11+
- in `classical_sets.v`:
12+
+ lemmas `set_eq_le`, `set_neq_lt`
13+
- in `set_interval.v`:
14+
+ lemma `set_lte_bigcup`
15+
- in `lebesgue_integral.v`:
16+
+ lemmas `emeasurable_fun_lt`, `emeasurable_fun_le`, `emeasurable_fun_eq`,
17+
`emeasurable_fun_neq`
18+
+ lemma `integral_ae_eq`
1119

1220
### Changed
1321

classical/classical_sets.v

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

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

17681768
End emeasurable_fun.
17691769

1770+
Section measurable_fun_measurable2.
1771+
Local Open Scope ereal_scope.
1772+
Context d (T : measurableType d) (R : realType).
1773+
Variables (D : set T) (mD : measurable D).
1774+
Implicit Types f g : T -> \bar R.
1775+
1776+
Lemma emeasurable_fun_lt f g : measurable_fun D f -> measurable_fun D g ->
1777+
measurable (D `&` [set x | f x < g x]).
1778+
Proof.
1779+
move=> mf mg; under eq_set do rewrite -sube_gt0.
1780+
by apply: emeasurable_fun_o_infty => //; exact: emeasurable_funB.
1781+
Qed.
1782+
1783+
Lemma emeasurable_fun_le f g : measurable_fun D f -> measurable_fun D g ->
1784+
measurable (D `&` [set x | f x <= g x]).
1785+
Proof.
1786+
move=> mf mg; under eq_set do rewrite -sube_le0.
1787+
by apply: emeasurable_fun_infty_c => //; exact: emeasurable_funB.
1788+
Qed.
1789+
1790+
Lemma emeasurable_fun_eq f g : measurable_fun D f -> measurable_fun D g ->
1791+
measurable (D `&` [set x | f x = g x]).
1792+
Proof.
1793+
move=> mf mg; rewrite set_eq_le setIIr.
1794+
by apply: measurableI; apply: emeasurable_fun_le.
1795+
Qed.
1796+
1797+
Lemma emeasurable_fun_neq f g : measurable_fun D f -> measurable_fun D g ->
1798+
measurable (D `&` [set x | f x != g x]).
1799+
Proof.
1800+
move=> mf mg; rewrite set_neq_lt setIUr.
1801+
by apply: measurableU; exact: emeasurable_fun_lt.
1802+
Qed.
1803+
1804+
End measurable_fun_measurable2.
1805+
17701806
Section ge0_integral_sum.
17711807
Local Open Scope ereal_scope.
17721808
Context d (T : measurableType d) (R : realType).
@@ -4039,6 +4075,72 @@ Qed.
40394075

40404076
End ae_ge0_le_integral.
40414077

4078+
Section integral_ae_eq.
4079+
Local Open Scope ereal_scope.
4080+
Context d (T : measurableType d) (R : realType) (mu : {measure set T -> \bar R}).
4081+
4082+
Let integral_measure_lt (D : set T) (mD : measurable D) (g f : T -> \bar R) :
4083+
mu.-integrable D f -> mu.-integrable D g ->
4084+
(forall E, measurable E -> \int[mu]_(x in E) f x = \int[mu]_(x in E) g x) ->
4085+
mu (D `&` [set x | g x < f x]) = 0.
4086+
Proof.
4087+
move=> mf mg fg; pose E j := D `&` [set x | f x - g x >= j.+1%:R^-1%:E].
4088+
have mE j : measurable (E j).
4089+
rewrite /E; apply: emeasurable_fun_le => //; first exact: measurable_fun_cst.
4090+
exact/(emeasurable_funD mf.1)/(emeasurable_funN _ (mg.1)).
4091+
have muE j : mu (E j) = 0.
4092+
apply/eqP; rewrite eq_le measure_ge0// andbT.
4093+
have fg0 : \int[mu]_(x in E j) (f \- g) x = 0.
4094+
rewrite integralB//; last 2 first.
4095+
by apply: integrableS mf => //; exact: subIsetl.
4096+
by apply: integrableS mg => //; exact: subIsetl.
4097+
rewrite fg// subee// fin_num_abs (le_lt_trans (le_abse_integral _ _ _))//.
4098+
by apply: measurable_funS mg.1 => //; first exact: subIsetl.
4099+
apply: le_lt_trans mg.2; apply: subset_integral => //; last exact: subIsetl.
4100+
exact: measurable_funT_comp mg.1.
4101+
suff : mu (E j) <= j.+1%:R%:E * \int[mu]_(x in E j) (f \- g) x.
4102+
by rewrite fg0 mule0.
4103+
apply: (@le_trans _ _ (j.+1%:R%:E * \int[mu]_(x in E j) j.+1%:R^-1%:E)).
4104+
by rewrite integral_cst// muleA -EFinM divrr ?unitfE// mul1e.
4105+
rewrite lee_pmul//; first exact: integral_ge0.
4106+
apply: ge0_le_integral => //; [exact: measurable_fun_cst| | |by move=> x []].
4107+
- by move=> x [_/=]; exact: le_trans.
4108+
- apply: emeasurable_funB.
4109+
+ by apply: measurable_funS mf.1 => //; exact: subIsetl.
4110+
+ by apply: measurable_funS mg.1 => //; exact: subIsetl.
4111+
have nd_E : {homo E : n0 m / (n0 <= m)%N >-> (n0 <= m)%O}.
4112+
move=> i j ij; apply/subsetPset => x [Dx /= ifg]; split => //.
4113+
by move: ifg; apply: le_trans; rewrite lee_fin lef_pinv// ?posrE// ler_nat.
4114+
rewrite set_lte_bigcup.
4115+
have /cvg_lim h1 : mu \o E --> 0 by apply: cvg_near_cst; exact: nearW.
4116+
have := @nondecreasing_cvg_mu _ _ _ mu E mE (bigcupT_measurable E mE) nd_E.
4117+
by move/cvg_lim => h2; rewrite setI_bigcupr -h2// h1.
4118+
Qed.
4119+
4120+
Lemma integral_ae_eq (D : set T) (mD : measurable D) (g f : T -> \bar R) :
4121+
mu.-integrable D f -> mu.-integrable D g ->
4122+
(forall E, measurable E -> \int[mu]_(x in E) f x = \int[mu]_(x in E) g x) ->
4123+
ae_eq mu D f g.
4124+
Proof.
4125+
move=> mf mg fg.
4126+
have mugf : mu (D `&` [set x | g x < f x]) = 0 by exact: integral_measure_lt.
4127+
have mufg : mu (D `&` [set x | f x < g x]) = 0.
4128+
by apply: integral_measure_lt => // E mE; rewrite fg.
4129+
have h : ~` [set x | D x -> f x = g x] = D `&` [set x | f x != g x].
4130+
apply/seteqP; split => [x/= /not_implyP[? /eqP]//|x/= [Dx fgx]].
4131+
by apply/not_implyP; split => //; exact/eqP.
4132+
apply/negligibleP.
4133+
by rewrite h; apply: emeasurable_fun_neq => //; [case: mf|case: mg].
4134+
rewrite h set_neq_lt setIUr measureU//.
4135+
- by rewrite [X in X + _]mufg add0e [LHS]mugf.
4136+
- by apply: emeasurable_fun_lt => //; [case: mf|case: mg].
4137+
- by apply: emeasurable_fun_lt => //; [case: mg|case: mf].
4138+
- apply/seteqP; split => [x [[Dx/= + [_]]]|//].
4139+
by move=> /lt_trans => /[apply]; rewrite ltxx.
4140+
Qed.
4141+
4142+
End integral_ae_eq.
4143+
40424144
(******************************************************************************)
40434145
(* * product measure *)
40444146
(******************************************************************************)

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)