Skip to content

Commit 8196991

Browse files
isolate the theory of lime_sup (#1121)
* isolate the theory of lime_sup - generic def of limsup --------- Co-authored-by: Zachary Stone <[email protected]>
1 parent 8ae7e5d commit 8196991

File tree

8 files changed

+668
-27
lines changed

8 files changed

+668
-27
lines changed

CHANGELOG_UNRELEASED.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,54 @@
8383
+ lemma `maxe_cvg_0_cvg_fin_num`
8484
+ lemma `maxe_cvg_maxr_cvg`
8585
+ lemma `maxe_cvg_0_cvg_0`
86+
- in `constructive_ereal.v`
87+
+ lemma `lee_subgt0Pr`
88+
89+
- in `topology.v`:
90+
+ lemma `nbhs_dnbhs_neq`
91+
92+
- in `normedtype.v`:
93+
+ lemma `not_near_at_rightP`
94+
95+
- in `realfun.v`:
96+
+ lemma `cvg_at_right_left_dnbhs`
97+
+ lemma `cvg_at_rightP`
98+
+ lemma `cvg_at_leftP`
99+
+ lemma `cvge_at_rightP`
100+
+ lemma `cvge_at_leftP`
101+
+ lemma `lime_sup`
102+
+ lemma `lime_inf`
103+
+ lemma `lime_supE`
104+
+ lemma `lime_infE`
105+
+ lemma `lime_infN`
106+
+ lemma `lime_supN`
107+
+ lemma `lime_sup_ge0`
108+
+ lemma `lime_inf_ge0`
109+
+ lemma `lime_supD`
110+
+ lemma `lime_sup_le`
111+
+ lemma `lime_inf_sup`
112+
+ lemma `lim_lime_inf`
113+
+ lemma `lim_lime_sup`
114+
+ lemma `lime_sup_inf_at_right`
115+
+ lemma `lime_sup_inf_at_left`
116+
117+
- in `normedtype.v`:
118+
+ lemmas `withinN`, `at_rightN`, `at_leftN`, `cvg_at_leftNP`, `cvg_at_rightNP`
119+
+ lemma `dnbhsN`
120+
+ lemma `limf_esup_dnbhsN`
121+
122+
- in `topology.v`:
123+
+ lemma `dnbhs_ball`
124+
125+
- in `normedtype.v`
126+
+ definitions `limf_esup`, `limf_einf`
127+
+ lemmas `limf_esupE`, `limf_einfE`, `limf_esupN`, `limf_einfN`
128+
129+
- in `sequences.v`:
130+
+ lemmas `limn_esup_lim`, `limn_einf_lim`
131+
132+
- in `realfun.v`:
133+
+ lemmas `lime_sup_lim`, `lime_inf_lim`
86134

87135
### Changed
88136

@@ -118,6 +166,10 @@
118166
- moved from `topology.v` to `mathcomp_extra.v`
119167
+ definition `monotonous`
120168

169+
- in `sequences.v`:
170+
+ `limn_esup` now defined from `lime_sup`
171+
+ `limn_einf` now defined from `limn_esup`
172+
121173
### Renamed
122174

123175
- in `exp.v`:

theories/constructive_ereal.v

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3035,6 +3035,14 @@ apply/(iffP idP) => [|].
30353035
by rewrite lee_fin; apply/ler_addgt0Pr => e e0; rewrite -lee_fin EFinD xy.
30363036
Qed.
30373037

3038+
Lemma lee_subgt0Pr x y :
3039+
reflect (forall e, (0 < e)%R -> x - e%:E <= y) (x <= y).
3040+
Proof.
3041+
apply/(iffP idP) => [xy e|xy].
3042+
by rewrite lee_subl_addr//; move: e; exact/lee_addgt0Pr.
3043+
by apply/lee_addgt0Pr => e e0; rewrite -lee_subl_addr// xy.
3044+
Qed.
3045+
30383046
Lemma lee_mul01Pr x y : 0 <= x ->
30393047
reflect (forall r, (0 < r < 1)%R -> r%:E * x <= y) (x <= y).
30403048
Proof.

theories/lebesgue_integral.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2370,7 +2370,8 @@ pose g n := fun x => einfs (f ^~ x) n.
23702370
have mg := measurable_fun_einfs mf.
23712371
have g0 n x : D x -> 0 <= g n x.
23722372
by move=> Dx; apply: lb_ereal_inf => _ [m /= nm <-]; exact: f0.
2373-
rewrite monotone_convergence //; last first.
2373+
under eq_integral do rewrite limn_einf_lim.
2374+
rewrite limn_einf_lim monotone_convergence //; last first.
23742375
move=> x Dx m n mn /=; apply: le_ereal_inf => _ /= [p /= np <-].
23752376
by exists p => //=; rewrite (leq_trans mn).
23762377
apply: lee_lim.

theories/lebesgue_measure.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1823,7 +1823,7 @@ Proof.
18231823
move=> mf mD; rewrite (_ : (fun _ => _) =
18241824
(fun x => ereal_inf [set esups (f^~ x) n | n in [set n | n >= 0]%N])).
18251825
by apply: measurable_fun_einfs => // k; exact: measurable_fun_esups.
1826-
rewrite funeqE => t; apply/cvg_lim => //.
1826+
rewrite funeqE => t; rewrite limn_esup_lim; apply/cvg_lim => //.
18271827
rewrite [X in _ --> X](_ : _ = ereal_inf (range (esups (f^~t)))).
18281828
exact: cvg_esups_inf.
18291829
by congr (ereal_inf [set _ | _ in _]); rewrite predeqE.
@@ -1834,6 +1834,7 @@ Lemma emeasurable_fun_cvg D (f_ : (T -> \bar R)^nat) (f : T -> \bar R) :
18341834
(forall x, D x -> f_ ^~ x --> f x) -> measurable_fun D f.
18351835
Proof.
18361836
move=> mf_ f_f; have fE x : D x -> f x = limn_esup (f_^~ x).
1837+
rewrite limn_esup_lim.
18371838
by move=> Dx; have /cvg_lim <-// := @cvg_esups _ (f_^~x) (f x) (f_f x Dx).
18381839
apply: (eq_measurable_fun (fun x => limn_esup (f_ ^~ x))) => //.
18391840
by move=> x; rewrite inE => Dx; rewrite fE.

theories/normedtype.v

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ Require Import ereal reals signed topology prodnormedzmodule.
1010
(* *)
1111
(* Note that balls in topology.v are not necessarily open, here they are. *)
1212
(* *)
13+
(* * Limit superior and inferior: *)
14+
(* limf_esup f F, limf_einf f F == limit sup/inferior of f at "filter" F *)
15+
(* f has type X -> \bar R. *)
16+
(* F has type set (set X). *)
17+
(* *)
1318
(* * Normed Topological Abelian groups: *)
1419
(* pseudoMetricNormedZmodType R == interface type for a normed topological *)
1520
(* Abelian group equipped with a norm *)
@@ -144,6 +149,35 @@ Import numFieldTopology.Exports.
144149
Local Open Scope classical_set_scope.
145150
Local Open Scope ring_scope.
146151

152+
Section limf_esup_einf.
153+
Variables (T : choiceType) (X : filteredType T) (R : realFieldType).
154+
Implicit Types (f : X -> \bar R) (F : set (set X)).
155+
Local Open Scope ereal_scope.
156+
157+
Definition limf_esup f F := ereal_inf [set ereal_sup (f @` V) | V in F].
158+
159+
Definition limf_einf f F := - limf_esup (\- f) F.
160+
161+
Lemma limf_esupE f F :
162+
limf_esup f F = ereal_inf [set ereal_sup (f @` V) | V in F].
163+
Proof. by []. Qed.
164+
165+
Lemma limf_einfE f F :
166+
limf_einf f F = ereal_sup [set ereal_inf (f @` V) | V in F].
167+
Proof.
168+
rewrite /limf_einf limf_esupE /ereal_inf oppeK -[in RHS]image_comp /=.
169+
congr (ereal_sup [set _ | _ in [set ereal_sup _ | _ in _]]).
170+
by under eq_fun do rewrite -image_comp.
171+
Qed.
172+
173+
Lemma limf_esupN f F : limf_esup (\- f) F = - limf_einf f F.
174+
Proof. by rewrite /limf_einf oppeK. Qed.
175+
176+
Lemma limf_einfN f F : limf_einf (\- f) F = - limf_esup f F.
177+
Proof. by rewrite /limf_einf; under eq_fun do rewrite oppeK. Qed.
178+
179+
End limf_esup_einf.
180+
147181
Definition pointed_of_zmodule (R : zmodType) : pointedType := PointedType R 0.
148182

149183
Definition filtered_of_normedZmod (K : numDomainType) (R : normedZmodType K)
@@ -214,6 +248,20 @@ move=> [y [[z Az oppzey] [t Bt opptey]]]; exists (- y).
214248
by split; [rewrite -oppzey opprK|rewrite -opptey opprK].
215249
Qed.
216250

251+
Lemma dnbhsN {R : numFieldType} (r : R) :
252+
(- r)%R^' = (fun A => -%R @` A) @` r^'.
253+
Proof.
254+
apply/seteqP; split=> [A [e/= e0 reA]|_/= [A [e/= e0 reA <-]]].
255+
exists (-%R @` A).
256+
exists e => // x/= rxe xr; exists (- x)%R; rewrite ?opprK//.
257+
by apply: reA; rewrite ?eqr_opp//= opprK addrC distrC.
258+
rewrite image_comp (_ : _ \o _ = idfun) ?image_id// funeqE => x/=.
259+
by rewrite opprK.
260+
exists e => //= x/=; rewrite -opprD normrN => axe xa.
261+
exists (- x)%R; rewrite ?opprK//; apply: reA; rewrite ?eqr_oppLR//=.
262+
by rewrite opprK.
263+
Qed.
264+
217265
Module PseudoMetricNormedZmodule.
218266
Section ClassDef.
219267
Variable R : numDomainType.
@@ -1629,6 +1677,15 @@ End Exports.
16291677
End numFieldNormedType.
16301678
Import numFieldNormedType.Exports.
16311679

1680+
Lemma limf_esup_dnbhsN {R : realType} (f : R -> \bar R) (a : R) :
1681+
limf_esup f a^' = limf_esup (fun x => f (- x)%R) (- a)%R^'.
1682+
Proof.
1683+
rewrite /limf_esup dnbhsN image_comp/=.
1684+
congr (ereal_inf [set _ | _ in _]); apply/funext => A /=.
1685+
rewrite image_comp/= -compA (_ : _ \o _ = idfun)// funeqE => x/=.
1686+
by rewrite opprK.
1687+
Qed.
1688+
16321689
Section NormedModule_numDomainType.
16331690
Variables (R : numDomainType) (V : normedModType R).
16341691

@@ -2077,6 +2134,47 @@ Lemma nbhs_left_ge x z : z < x -> \forall y \near x^'-, z <= y.
20772134
Proof. by move=> xz; near do apply/ltW; apply: nbhs_left_gt.
20782135
Unshelve. all: by end_near. Qed.
20792136

2137+
Lemma not_near_at_rightP T (f : R -> T) (p : R) (P : pred T) :
2138+
~ (\forall x \near p^'+, P (f x)) ->
2139+
forall e : {posnum R}, exists2 x, p < x < p + e%:num & ~ P (f x).
2140+
Proof.
2141+
move=> pPf e; apply: contrapT => /forallPNP pePf; apply: pPf; near=> t.
2142+
apply: contrapT; apply: pePf; apply/andP; split.
2143+
- by near: t; exact: nbhs_right_gt.
2144+
- by near: t; apply: nbhs_right_lt; rewrite ltr_addl.
2145+
Unshelve. all: by end_near. Qed.
2146+
2147+
Lemma withinN (A : set R) a :
2148+
within A (nbhs (- a)) = - x @[x --> within (-%R @` A) (nbhs a)].
2149+
Proof.
2150+
rewrite eqEsubset /=; split; move=> E /= [e e0 aeE]; exists e => //.
2151+
move=> r are ra; apply: aeE; last by rewrite memNE opprK.
2152+
by rewrite /= opprK addrC distrC.
2153+
move=> r aer ar; rewrite -(opprK r); apply: aeE; last by rewrite -memNE.
2154+
by rewrite /= opprK -normrN opprD.
2155+
Qed.
2156+
2157+
Let fun_predC (T : choiceType) (f : T -> T) (p : pred T) : involutive f ->
2158+
[set f x | x in p] = [set x | x in p \o f].
2159+
Proof.
2160+
by move=> fi; apply/seteqP; split => _/= [y hy <-];
2161+
exists (f y) => //; rewrite fi.
2162+
Qed.
2163+
2164+
Lemma at_rightN a : (- a)^'+ = -%R @ a^'-.
2165+
Proof.
2166+
rewrite /at_right withinN [X in within X _](_ : _ = [set u | u < a])//.
2167+
rewrite (@fun_predC _ -%R)/=; last exact: opprK.
2168+
by rewrite image_id; under eq_fun do rewrite ltr_oppl opprK.
2169+
Qed.
2170+
2171+
Lemma at_leftN a : (- a)^'- = -%R @ a^'+.
2172+
Proof.
2173+
rewrite /at_left withinN [X in within X _](_ : _ = [set u | a < u])//.
2174+
rewrite (@fun_predC _ -%R)/=; last exact: opprK.
2175+
by rewrite image_id; under eq_fun do rewrite ltr_oppl opprK.
2176+
Qed.
2177+
20802178
End at_left_right.
20812179
#[global] Typeclasses Opaque at_left at_right.
20822180
Notation "x ^'-" := (at_left x) : classical_set_scope.
@@ -2088,6 +2186,20 @@ Notation "x ^'+" := (at_right x) : classical_set_scope.
20882186
#[global] Hint Extern 0 (Filter (nbhs _^'-)) =>
20892187
(apply: at_left_proper_filter) : typeclass_instances.
20902188

2189+
Lemma cvg_at_leftNP {T : topologicalType} {R : numFieldType}
2190+
(f : R -> T) a (l : T) :
2191+
f @ a^'- --> l <-> f \o -%R @ (- a)^'+ --> l.
2192+
Proof.
2193+
by rewrite at_rightN -?fmap_comp; under [_ \o _]eq_fun => ? do rewrite /= opprK.
2194+
Qed.
2195+
2196+
Lemma cvg_at_rightNP {T : topologicalType} {R : numFieldType}
2197+
(f : R -> T) a (l : T) :
2198+
f @ a^'+ --> l <-> f \o -%R @ (- a)^'- --> l.
2199+
Proof.
2200+
by rewrite at_leftN -?fmap_comp; under [_ \o _]eq_fun => ? do rewrite /= opprK.
2201+
Qed.
2202+
20912203
Section open_itv_subset.
20922204
Context {R : realType}.
20932205
Variables (A : set R) (x : R).

0 commit comments

Comments
 (0)