Skip to content

Commit f1d0285

Browse files
authored
Closed ball0 20250911 (#1717)
* minor generalization * rename closure_ball
1 parent fcefe89 commit f1d0285

5 files changed

Lines changed: 47 additions & 26 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
+ definition `parse`, `print`
3232
+ number notations in scopes `ereal_dual_scope` and `ereal_scope`
3333
+ notation `- 1` in scopes `ereal_dual_scope` and `ereal_scope`
34+
- in `pseudometric_normed_Zmodule.v`:
35+
+ lemma `le0_ball0`
3436

3537
### Changed
3638

@@ -42,10 +44,19 @@
4244
+ lemmas `wlength_ge0`, `cumulative_content_sub_fsum`, `wlength_sigma_subadditive`, `lebesgue_stieltjes_measure_unique`
4345
+ definitions `lebesgue_stieltjes_measure`, `completed_lebesgue_stieltjes_measure`
4446

47+
- moved from `vitali_lemma.v` to `pseudometric_normed_Zmodule.v` and renamed:
48+
+ `closure_ball` -> `closure_ballE`
49+
4550
### Renamed
4651

4752
### Generalized
4853

54+
- in `pseudometric_normed_Zmodule.v`:
55+
+ lemma `closed_ball0` (`realFieldType` -> `pseudoMetricNormedZmodType`)
56+
+ lemmas `closed_ball_closed`, `subset_closed_ball` (`realFieldType` -> `numDomainType`)
57+
+ lemma `subset_closure_half` (`realFieldType` -> `numFieldType`)
58+
+ lemma `le_closed_ball` (`pseudoMetricNormedZmodType` -> `pseudoMetricType`)
59+
4960
- in `lebesgue_stieltjes_measure.v` generalized (codomain is now an `orderNbhsType`):
5061
+ lemma `right_continuousW`
5162
+ record `isCumulative`

theories/lebesgue_measure.v

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,8 +1350,8 @@ apply: le_trans; apply: lee_nneseries => //; first by move=> *; exact: esum_ge0.
13501350
move=> n _.
13511351
rewrite -(set_mem_set (F n)) -nneseries_esum// -nneseries_esum// -nneseriesZl//.
13521352
apply: lee_nneseries => // m mFn.
1353-
rewrite (ballE (is_ballB m))// closure_ball lebesgue_measure_closed_ball//.
1354-
rewrite scale_ballE// closure_ball lebesgue_measure_closed_ball//.
1353+
rewrite (ballE (is_ballB m))// closure_ballE lebesgue_measure_closed_ball//.
1354+
rewrite scale_ballE// closure_ballE lebesgue_measure_closed_ball//.
13551355
by rewrite -EFinM mulrnAr.
13561356
Qed.
13571357

@@ -1390,7 +1390,7 @@ Let vitali_cover_mclosure (F : set nat) k :
13901390
vitali_cover A B F -> (R.-ocitv.-measurable).-sigma.-measurable (closure (B k)).
13911391
Proof.
13921392
case => + _ => /(_ k)/ballE ->.
1393-
by rewrite closure_ball; exact: measurable_closed_ball.
1393+
by rewrite closure_ballE; exact: measurable_closed_ball.
13941394
Qed.
13951395

13961396
Let vitali_cover_measurable (F : set nat) k :
@@ -1452,7 +1452,7 @@ have muGSfin C : C `<=` G -> mu (\bigcup_(k in C) closure (B k)) \is a fin_num.
14521452
apply: lee_nneseries => // n _.
14531453
case: ifPn => [/set_mem nC|]; last by rewrite measure0.
14541454
rewrite (vitali_cover_ballE _ ABF) ifT; last exact/mem_set/CG.
1455-
by rewrite closure_ball lebesgue_measure_closed_ball// lebesgue_measure_ball.
1455+
by rewrite closure_ballE lebesgue_measure_closed_ball// lebesgue_measure_ball.
14561456
have muGfin : mu (\bigcup_(k in G) closure (B k)) \is a fin_num.
14571457
by rewrite -(bigB0 G) muGSfin.
14581458
have [c Hc] : exists c : {posnum R},
@@ -1540,8 +1540,8 @@ have bigBG_fin (r : {posnum R}) : finite_set (bigB G r%:num).
15401540
apply: lee_sum => //= i /G0G'r [iG rBi].
15411541
rewrite -[leRHS]fineK//; last first.
15421542
rewrite (vitali_cover_ballE _ ABF).
1543-
by rewrite closure_ball lebesgue_measure_closed_ball.
1544-
rewrite (vitali_cover_ballE _ ABF) closure_ball.
1543+
by rewrite closure_ballE lebesgue_measure_closed_ball.
1544+
rewrite (vitali_cover_ballE _ ABF) closure_ballE.
15451545
by rewrite lebesgue_measure_closed_ball// fineK// lee_fin mulr2n ler_wpDl.
15461546
rewrite le_measure? inE//; last exact: bigcup_subset.
15471547
- by apply: bigcup_measurable => k _; exact: vitali_cover_mclosure ABF.
@@ -1557,7 +1557,7 @@ have bigBG_fin (r : {posnum R}) : finite_set (bigB G r%:num).
15571557
move/trivIsetP : tB => /(_ _ _ Gi Gj ij).
15581558
by apply: subsetI_eq0 => //=; exact: subset_closure.
15591559
rewrite /= lee_nneseries// => n _.
1560-
rewrite (vitali_cover_ballE _ ABF)// closure_ball.
1560+
rewrite (vitali_cover_ballE _ ABF)// closure_ballE.
15611561
by rewrite lebesgue_measure_closed_ball// lebesgue_measure_ball.
15621562
rewrite le_measure? inE//.
15631563
+ by apply: bigcup_measurable => k _; exact: vitali_cover_measurable ABF.

theories/measurable_realfun.v

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,7 @@ Proof. by rewrite ball_itv; exact: measurable_itv. Qed.
334334

335335
Lemma measurable_closed_ball (x : R) r : measurable (closed_ball x r).
336336
Proof.
337-
have [r0|r0] := leP r 0; first by rewrite closed_ball0.
338-
rewrite closed_ball_itv//.
337+
by have [r0|r0] := leP r 0; [rewrite closed_ball0|rewrite closed_ball_itv].
339338
Qed.
340339

341340
End salgebra_R_ssets.

theories/normedtype_theory/pseudometric_normed_Zmodule.v

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,18 @@ Arguments cvgr0_norm_le {_ _ _ F FF}.
400400
#[global] Hint Extern 0 (is_true (`|?x| <= _)) => match goal with
401401
H : x \is_near _ |- _ => solve[near: x; now apply: cvgr0_norm_le] end : core.
402402

403+
Section pseudoMetricNormedZmod_realDomainType.
404+
405+
Lemma le0_ball0 (R : realDomainType) (V : pseudoMetricNormedZmodType R) (a : V) (r : R) :
406+
r <= 0 -> ball a r = set0.
407+
Proof.
408+
move=> r0; rewrite -subset0 => y.
409+
rewrite -ball_normE /ball_/= ltNge => /negP; apply.
410+
by rewrite (le_trans r0).
411+
Qed.
412+
413+
End pseudoMetricNormedZmod_realDomainType.
414+
403415
Section pseudoMetricNormedZmod_numFieldType.
404416
Variables (R : numFieldType) (V : pseudoMetricNormedZmodType R).
405417

@@ -420,10 +432,11 @@ Local Hint Extern 0 (hausdorff_space _) => solve[apply: norm_hausdorff] : core.
420432
(* i.e. where the generic lemma is applied, *)
421433
(* check that norm_hausdorff is not used in a hard way *)
422434

423-
Lemma norm_closeE (x y : V): close x y = (x = y). Proof. exact: closeE. Qed.
435+
Lemma norm_closeE (x y : V) : close x y = (x = y). Proof. exact: closeE. Qed.
424436
Lemma norm_close_eq (x y : V) : close x y -> x = y. Proof. exact: close_eq. Qed.
425437

426-
Lemma norm_cvg_unique {F} {FF : ProperFilter F} : is_subset1 [set x : V | F --> x].
438+
Lemma norm_cvg_unique {F} {FF : ProperFilter F} :
439+
is_subset1 [set x : V | F --> x].
427440
Proof. exact: cvg_unique. Qed.
428441

429442
Lemma norm_cvg_eq (x y : V) : x --> y -> x = y. Proof. exact: (@cvg_eq V). Qed.
@@ -1210,38 +1223,43 @@ Definition closed_ball_ (R : numDomainType) (V : zmodType) (norm : V -> R)
12101223
Definition closed_ball (R : numDomainType) (V : pseudoMetricType R)
12111224
(x : V) (e : R) := closure (ball x e).
12121225

1213-
Lemma closed_ball0 (R : realFieldType) (a r : R) :
1214-
r <= 0 -> closed_ball a r = set0.
1226+
Lemma closure_ballE (R : numDomainType) (V : pseudoMetricType R)
1227+
(c : V) (r : R) : closure (ball c r) = closed_ball c r.
1228+
Proof. by []. Qed.
1229+
1230+
Lemma closed_ball0 (R : realDomainType) (V : pseudoMetricNormedZmodType R)
1231+
(v : V) (r : R) : r <= 0 -> closed_ball v r = set0.
12151232
Proof.
1216-
move=> /ball0 r0; apply/seteqP; split => // y.
1217-
by rewrite /closed_ball r0 closure0.
1233+
by move=> r0; rewrite -subset0 => w; rewrite /closed_ball le0_ball0// closure0.
12181234
Qed.
12191235

12201236
Lemma closed_ballxx (R : numDomainType) (V : pseudoMetricType R) (x : V)
12211237
(e : R) : 0 < e -> closed_ball x e x.
12221238
Proof. by move=> ?; exact/subset_closure/ballxx. Qed.
12231239

1224-
Lemma closed_ball_closed (R : realFieldType) (V : pseudoMetricType R) (x : V)
1240+
Lemma closed_ball_closed (R : numDomainType) (V : pseudoMetricType R) (x : V)
12251241
(r : R) : closed (closed_ball x r).
12261242
Proof. exact: closed_closure. Qed.
12271243

1228-
Lemma subset_closed_ball (R : realFieldType) (V : pseudoMetricType R) (x : V)
1244+
Lemma subset_closed_ball (R : numDomainType) (V : pseudoMetricType R) (x : V)
12291245
(r : R) : ball x r `<=` closed_ball x r.
12301246
Proof. exact: subset_closure. Qed.
12311247

1232-
Lemma subset_closure_half (R : realFieldType) (V : pseudoMetricType R) (x : V)
1248+
Lemma subset_closure_half (R : numFieldType) (V : pseudoMetricType R) (x : V)
12331249
(r : R) : 0 < r -> closed_ball x (r / 2) `<=` ball x r.
12341250
Proof.
12351251
move:r => _/posnumP[r] z /(_ (ball z ((r%:num/2)%:pos)%:num)) [].
12361252
exact: nbhsx_ballx.
12371253
by move=> y [+/ball_sym]; rewrite [t in ball x t z]splitr; apply: ball_triangle.
12381254
Qed.
12391255

1240-
Lemma le_closed_ball (R : numFieldType) (M : pseudoMetricNormedZmodType R)
1256+
Lemma le_closed_ball (R : numFieldType) (M : pseudoMetricType R)
12411257
(x : M) (e1 e2 : R) : (e1 <= e2)%O -> closed_ball x e1 `<=` closed_ball x e2.
12421258
Proof. by rewrite /closed_ball => le; apply/closure_subset/le_ball. Qed.
12431259

12441260
End Closed_Ball.
1261+
#[deprecated(since="mathcomp-analysis 1.14.0", note="renamed to `closure_ballE`")]
1262+
Notation closure_ball := closure_ballE (only parsing).
12451263

12461264
Section limit_composition_pseudometric.
12471265
Context {K : numFieldType} {V : pseudoMetricNormedZmodType K} {T : Type}.

theories/normedtype_theory/vitali_lemma.v

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,13 +202,6 @@ Lemma is_ball_closure (A : set R) : is_ball A ->
202202
closure A = closed_ball (cpoint A) (radius A)%:num.
203203
Proof. by move=> ballA; rewrite /closed_ball -ballE. Qed.
204204

205-
Lemma closure_ball (c r : R) : closure (ball c r) = closed_ball c r.
206-
Proof.
207-
have [r0|r0] := leP r 0.
208-
by rewrite closed_ball0// ((ball0 _ _).2 r0) closure0.
209-
by rewrite (is_ball_closure (is_ball_ball _ _)) cpoint_ball// radius_ball ?ltW.
210-
Qed.
211-
212205
Lemma scale_ballE k x r : 0 <= k -> k *` ball x r = ball x (k * r).
213206
Proof.
214207
move=> k0; have [r0|r0] := ltP 0 r.

0 commit comments

Comments
 (0)