Skip to content

Commit 493a1fa

Browse files
committed
break mine_cvg_0_cvg_0 into pieces
1 parent 525f388 commit 493a1fa

6 files changed

Lines changed: 89 additions & 37 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@
147147
`discrete_pseudoMetricType`, and `pseudoMetric_bool`.
148148
+ new lemmas `finite_compact`, `discrete_ball_center`, `compact_cauchy_cvg`
149149

150+
- in `mathcomp_extra.v`:
151+
+ lemma `lt_min_lt`
152+
- in `constructive_ereal.v`:
153+
+ lemmas `EFin_min`, `EFin_max`
154+
150155
### Changed
151156

152157
- in `mathcomp_extra.v`
@@ -176,6 +181,10 @@
176181
+ weaken condition of `exp_fun_mulrn` and rename to `power_pos_mulrn`
177182
+ the notation ``` `^ ``` has now scope `real_scope`
178183
+ weaken condition of `riemannR_gt0` and `dvg_riemannR`
184+
- in `constructive_ereal.v`:
185+
+ `maxEFin` changed to `fine_max`
186+
+ `minEFin` changed to `fine_min`
187+
179188

180189
### Renamed
181190

classical/mathcomp_extra.v

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,3 +1134,17 @@ have [b_gt0 _|//|<- _] := ltgtP; last first.
11341134
have [a_le0|a_gt0] := ler0P a; last by rewrite ler_psqrt.
11351135
by rewrite ler0_sqrtr // sqrtr_ge0 (le_trans a_le0) ?ltW.
11361136
Qed.
1137+
1138+
Section order_min.
1139+
Variables (d : unit) (T : orderType d).
1140+
Import Order.
1141+
Local Open Scope order_scope.
1142+
1143+
Lemma lt_min_lt (x y z : T) : (min x z < min y z)%O -> (x < y)%O.
1144+
Proof.
1145+
rewrite /Order.min/=; case: ifPn => xz; case: ifPn => yz; rewrite ?ltxx//.
1146+
- by move=> /lt_le_trans; apply; rewrite leNgt.
1147+
- by rewrite ltNge (ltW yz).
1148+
Qed.
1149+
1150+
End order_min.

theories/charge.v

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -383,9 +383,7 @@ Let nuA_d_ x : nu (A_ x) >= mine (d_ x * 2^-1%:E) 1.
383383
Proof. by move: x => [[[? ?] ?]] []. Qed.
384384

385385
Let nuA_ge0 x : 0 <= nu (A_ x).
386-
Proof.
387-
by rewrite (le_trans _ (nuA_d_ _))// /mine; case: ifP => // _; rewrite mule_ge0.
388-
Qed.
386+
Proof. by rewrite (le_trans _ (nuA_d_ _))// le_minr lee01 andbT mule_ge0. Qed.
389387

390388
Let subDD A := [set nu E | E in [set E | measurable E /\ E `<=` D `\` A] ].
391389

@@ -408,39 +406,62 @@ have /ereal_sup_gt/cid2[_ [B/= [mB BDA <- mnuB]]] : m < t_ A.
408406
by rewrite min_r ?ltey ?gt0_mulye ?leey.
409407
rewrite -(@fineK _ (t_ A)); last first.
410408
by rewrite ge0_fin_numE// ?(ltW d_gt0)// lt_neqAle dn1oo leey.
411-
rewrite -EFinM minEFin lte_fin lt_minl; apply/orP; left.
409+
rewrite -EFinM -fine_min// lte_fin lt_minl; apply/orP; left.
412410
by rewrite ltr_pdivr_mulr// ltr_pmulr ?ltr1n// fine_gt0// d_gt0/= ltey.
413411
by exists B; split => //; rewrite (le_trans _ (ltW mnuB)).
414412
Qed.
415413

416-
(* NB: move outside? *)
417-
Let mine_cvg_0_cvg_0 (x : (\bar R)^nat) : (forall k, 0 <= x k) ->
418-
(fun n => mine (x n * (2^-1)%:E) 1) --> 0 -> x --> 0.
414+
(* TODO: generalize? *)
415+
Let minr_cvg_0_cvg_0 (x : R^nat) : (forall k, 0 <= x k)%R ->
416+
(fun n => minr (x n * 2^-1) 1)%R --> (0:R)%R -> x --> (0:R)%R.
419417
Proof.
420-
move=> x_ge0 /fine_cvgP[_] /[dup] mine_cvg_0.
421-
move=> /(@cvgrPdist_lt _ [normedModType R of R^o])/(_ _ ltr01)[N _ hN].
422-
have xfin : \forall n \near \oo, x n \is a fin_num.
423-
near=> n; have /hN : (N <= n)%N by near: n; exists N.
424-
rewrite sub0r normrN /= ger0_norm ?fine_ge0//; last first.
425-
by rewrite le_minr mule_ge0//=.
426-
rewrite /mine; case: ifPn => [+ _|_]; last by rewrite ltxx.
427-
rewrite ge0_fin_numE// lte_pdivr_mulr// mul1e => /lt_le_trans; apply.
428-
by rewrite leey.
429-
apply/fine_cvgP; split => //.
418+
move=> x_ge0 minr_cvg.
430419
apply/(@cvgrPdist_lt _ [normedModType R of R^o]) => _ /posnumP[e].
431-
move: mine_cvg_0 => /(@cvgrPdist_lt _ [normedModType R of R^o]).
432420
have : (0 < minr (e%:num / 2) 1)%R by rewrite lt_minr// ltr01 andbT divr_gt0.
433-
move=> /[swap] /[apply] -[M _ hM].
421+
move/(@cvgrPdist_lt _ [normedModType R of R^o]) : minr_cvg => /[apply] -[M _ hM].
434422
near=> n; rewrite sub0r normrN.
435423
have /hM : (M <= n)%N by near: n; exists M.
436-
rewrite sub0r normrN /mine/=; case: ifPn => [_|_].
437-
rewrite fineM//=; last by near: n; exact: xfin.
438-
rewrite normrM (@gtr0_norm _ 2^-1%R); last by rewrite invr_gt0.
439-
rewrite ltr_pdivr_mulr// => /lt_le_trans; apply.
440-
by rewrite minr_pmull// -mulrA mulVr ?unitfE// mulr1 le_minl lexx.
441-
by rewrite ger0_norm//= lt_minr ltxx andbF.
424+
rewrite sub0r normrN !ger0_norm// ?le_minr ?divr_ge0//=.
425+
rewrite -[X in minr _ X](@divrr _ 2) ?unitfE -?minr_pmull//.
426+
rewrite -[X in (_ < minr _ X)%R](@divrr _ 2) ?unitfE -?minr_pmull//.
427+
by rewrite ltr_pmul2r//; exact: lt_min_lt.
428+
Unshelve. all: by end_near. Qed.
429+
430+
Let mine_cvg_0_cvg_fin_num (x : (\bar R)^nat) : (forall k, 0 <= x k) ->
431+
(fun n => mine (x n * (2^-1)%:E) 1) --> 0 ->
432+
\forall n \near \oo, x n \is a fin_num.
433+
Proof.
434+
move=> x_ge0 /fine_cvgP[_].
435+
move=> /(@cvgrPdist_lt _ [normedModType R of R^o])/(_ _ ltr01)[N _ hN].
436+
near=> n; have /hN : (N <= n)%N by near: n; exists N.
437+
rewrite sub0r normrN /= ger0_norm ?fine_ge0//; last first.
438+
by rewrite le_minr mule_ge0//=.
439+
by have := x_ge0 n; case: (x n) => //=; rewrite gt0_mulye//= ltxx.
442440
Unshelve. all: by end_near. Qed.
443441

442+
Let mine_cvg_minr_cvg (x : (\bar R)^nat) : (forall k, 0 <= x k) ->
443+
(fun n => mine (x n * (2^-1)%:E) 1) --> 0 ->
444+
(fun n => minr ((fine \o x) n / 2) 1%R) --> (0:R)%R.
445+
Proof.
446+
move=> x_ge0 mine_cvg.
447+
apply: (cvg_trans _ (fine_cvg mine_cvg)).
448+
move/fine_cvgP : mine_cvg => [_ /=] /(@cvgrPdist_lt _ [normedModType R of R^o]).
449+
move=> /(_ _ ltr01)[N _ hN]; apply: near_eq_cvg; near=> n.
450+
have xnoo : x n < +oo.
451+
rewrite ltNge leye_eq; apply/eqP => xnoo.
452+
have /hN : (N <= n)%N by near: n; exists N.
453+
by rewrite /= sub0r normrN xnoo gt0_mulye//= normr1 ltxx.
454+
by rewrite /= -(@fineK _ (x n)) ?ge0_fin_numE//= -fine_min.
455+
Unshelve. all: by end_near. Qed.
456+
457+
Let mine_cvg_0_cvg_0 (x : (\bar R)^nat) : (forall k, 0 <= x k) ->
458+
(fun n => mine (x n * (2^-1)%:E) 1) --> 0 -> x --> 0.
459+
Proof.
460+
move=> x_ge0 h; apply/fine_cvgP; split; first exact: mine_cvg_0_cvg_fin_num.
461+
apply: (@minr_cvg_0_cvg_0 (fine \o x)) => //; last exact: mine_cvg_minr_cvg.
462+
by move=> k /=; rewrite fine_ge0.
463+
Qed.
464+
444465
Lemma hahn_decomposition_lemma : measurable D ->
445466
{A | [/\ A `<=` D, negative_set nu A & nu A <= nu D]}.
446467
Proof.
@@ -562,7 +583,7 @@ have /ereal_inf_lt/cid2[_ [B/= [mB BU] <-] nuBm] : s_ U < m.
562583
by rewrite max_r ?ltNye// gt0_mulNye// leNye.
563584
rewrite -(@fineK _ (s_ U)); last first.
564585
by rewrite le0_fin_numE// ?(ltW s_lt0)// lt_neqAle leNye eq_sym s0oo.
565-
rewrite -EFinM maxEFin lte_fin lt_maxr; apply/orP; left.
586+
rewrite -EFinM -fine_max// lte_fin lt_maxr; apply/orP; left.
566587
by rewrite ltr_pdivl_mulr// gtr_nmulr ?ltr1n// fine_lt0// s_lt0/= ltNye andbT.
567588
have [C [CB nsC nuCB]] := hahn_decomposition_lemma nu mB.
568589
exists C; split => //; first exact: (subset_trans CB).

theories/constructive_ereal.v

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2270,18 +2270,26 @@ move=> [x| |] [y| |] //=; first by rewrite normrM.
22702270
- by rewrite mulyy.
22712271
Qed.
22722272

2273-
Lemma maxEFin r1 r2 : maxe r1%:E r2%:E = (Num.max r1 r2)%:E.
2273+
Lemma fine_max :
2274+
{in fin_num &, {mono @fine R : x y / maxe x y >-> (Num.max x y)%:E}}.
22742275
Proof.
2275-
by have [ab|ba] := leP r1 r2;
2276+
by move=> [x| |] [y| |]//= _ _; apply/esym; have [ab|ba] := leP x y;
22762277
[apply/max_idPr; rewrite lee_fin|apply/max_idPl; rewrite lee_fin ltW].
22772278
Qed.
22782279

2279-
Lemma minEFin r1 r2 : mine r1%:E r2%:E = (Num.min r1 r2)%:E.
2280+
Lemma EFin_max : {morph (@EFin R) : r s / Num.max r s >-> maxe r s}.
2281+
Proof. by move=> a b /=; rewrite -fine_max. Qed.
2282+
2283+
Lemma fine_min :
2284+
{in fin_num &, {mono @fine R : x y / mine x y >-> (Num.min x y)%:E}}.
22802285
Proof.
2281-
by have [ab|ba] := leP r1 r2;
2286+
by move=> [x| |] [y| |]//= _ _; apply/esym; have [ab|ba] := leP x y;
22822287
[apply/min_idPl; rewrite lee_fin|apply/min_idPr; rewrite lee_fin ltW].
22832288
Qed.
22842289

2290+
Lemma EFin_min : {morph (@EFin R) : r s / Num.min r s >-> mine r s}.
2291+
Proof. by move=> a b /=; rewrite -fine_min. Qed.
2292+
22852293
Lemma adde_maxl : left_distributive (@adde R) maxe.
22862294
Proof.
22872295
move=> x y z; have [xy|yx] := leP x y.
@@ -2329,7 +2337,7 @@ Canonical mine_comoid := Monoid.ComLaw minC.
23292337
Lemma oppe_max : {morph -%E : x y / maxe x y >-> mine x y : \bar R}.
23302338
Proof.
23312339
move=> [x| |] [y| |] //=.
2332-
- by rewrite maxEFin minEFin -EFinN oppr_max.
2340+
- by rewrite -fine_max//= -fine_min//= oppr_max.
23332341
- by rewrite maxey mineNy.
23342342
- by rewrite miney.
23352343
- by rewrite minNye.

theories/lebesgue_integral.v

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1873,7 +1873,7 @@ Proof.
18731873
rewrite bigmax_nnsfunE.
18741874
apply: (@le_trans _ _ (\big[maxe/0%:E]_(i < k) g k x)); last first.
18751875
by apply/bigmax_leP; split => //; apply: g0D.
1876-
rewrite (@big_morph _ _ EFin 0%:E maxe) //; last by move=> *; rewrite maxEFin.
1876+
rewrite (big_morph _ (@EFin_max R) erefl) //.
18771877
apply: le_bigmax2 => i _; rewrite nnsfun_approxE /=.
18781878
by rewrite (le_trans (le_approx _ _ _)) => //; exact/nd_g/ltnW.
18791879
Qed.
@@ -3122,11 +3122,11 @@ suff: \int[mu]_(x in D) ((g1 \+ g2)^\+ x) + \int[mu]_(x in D) (g1^\- x) +
31223122
have : (g1 \+ g2)^\+ \+ g1^\- \+ g2^\- = (g1 \+ g2)^\- \+ g1^\+ \+ g2^\+.
31233123
rewrite funeqE => x.
31243124
apply/eqP; rewrite -2!addeA [in eqRHS]addeC -sube_eq; last 2 first.
3125-
by rewrite /funepos /funeneg /g1 /g2 /= !maxEFin.
3126-
by rewrite /funepos /funeneg /g1 /g2 /= !maxEFin.
3125+
by rewrite /funepos /funeneg -!fine_max.
3126+
by rewrite /funepos /funeneg -!fine_max.
31273127
rewrite addeAC eq_sym -sube_eq; last 2 first.
3128-
by rewrite /funepos /funeneg !maxEFin.
3129-
by rewrite /funepos /funeneg !maxEFin.
3128+
by rewrite /funepos /funeneg -!fine_max.
3129+
by rewrite /funepos /funeneg -!fine_max.
31303130
apply/eqP.
31313131
rewrite -[LHS]/((g1^\+ \+ g2^\+ \- (g1^\- \+ g2^\-)) x) -funeD_posD.
31323132
by rewrite -[RHS]/((_ \- _) x) -funeD_Dpos.

theories/numfun.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ Qed.
217217
Lemma add_def_funeposneg f x : (f^\+ x +? - f^\- x).
218218
Proof.
219219
by rewrite /funeneg /funepos; case: (f x) => [r| |];
220-
[rewrite !maxEFin|rewrite /maxe /= ltNyr|rewrite /maxe /= ltNyr].
220+
[rewrite -fine_max/=|rewrite /maxe /= ltNyr|rewrite /maxe /= ltNyr].
221221
Qed.
222222

223223
Lemma funeD_Dpos f g : f \+ g = (f \+ g)^\+ \- (f \+ g)^\-.

0 commit comments

Comments
 (0)