Skip to content

Commit ba93a11

Browse files
authored
Merge pull request #1862 from pi8027/num_bound
Use `Num.bound`
2 parents 3cb27a8 + 5aeb689 commit ba93a11

14 files changed

Lines changed: 63 additions & 59 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
- in `unstable.v`:
2828
+ lemmas `oppr_itvNy`, `oppr_itvy`
29+
+ lemmas `ltr_norm_bound`, `real_ltr_bound`, `real_ltrNbound`, `ltr_bound`,
30+
`ltrNbound`
2931

3032
- in `set_interval.v`:
3133
+ lemmas `opp_preimage_itvbndy`, `opp_preimage_itvbndbnd`

classical/unstable.v

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,3 +574,20 @@ End ProperNotations.
574574

575575
Lemma sqrtK {K : rcfType} : {in Num.nneg, cancel (@Num.sqrt K) (fun x => x ^+ 2)}.
576576
Proof. by move=> r r0; rewrite sqr_sqrtr. Qed.
577+
578+
Lemma ltr_norm_bound {R : archiNumDomainType} (x : R) : `|x| < (Num.bound x)%:R.
579+
Proof. by rewrite /Num.bound -[in ltRHS]normr_id archi_boundP. Qed.
580+
581+
Lemma real_ltr_bound {R : archiNumDomainType} (x : R) :
582+
x \is Num.real -> x < (Num.bound x)%:R.
583+
Proof. by move=> /real_ler_norm /le_lt_trans -> //; apply: ltr_norm_bound. Qed.
584+
585+
Lemma real_ltrNbound {R : archiNumDomainType} (x : R) :
586+
x \is Num.real -> - x < (Num.bound x)%:R.
587+
Proof. by rewrite /Num.bound -realN -normrN; exact: real_ltr_bound. Qed.
588+
589+
Lemma ltr_bound {R : archiRealDomainType} (x : R) : x < (Num.bound x)%:R.
590+
Proof. exact: real_ltr_bound. Qed.
591+
592+
Lemma ltrNbound {R : archiRealDomainType} (x : R) : - x < (Num.bound x)%:R.
593+
Proof. exact: real_ltrNbound. Qed.

experimental_reals/realsum.v

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
(* Copyright (c) - 2016--2018 - Polytechnique *)
55
(* -------------------------------------------------------------------- *)
66
From mathcomp Require Import all_ssreflect_compat all_algebra.
7+
#[warning="-warn-library-file-internal-analysis"]
8+
From mathcomp Require Import unstable.
79
From mathcomp.classical Require Import boolp.
810
From mathcomp Require Import xfinmap constructive_ereal reals discrete realseq.
911
From mathcomp.classical Require Import classical_sets functions.
@@ -137,24 +139,22 @@ Variable (T : choiceType) (R : realType) (f : T -> R).
137139

138140
Lemma summable_countn0 : summable f -> countable [pred x | f x != 0].
139141
Proof.
140-
case/summableP=> M ge0_M bM; pose E (p : nat) := [pred x | `|f x| > 1 / p.+1%:~R].
142+
case/summableP=> M ge0_M bM; pose E (p : nat) := [pred x | `|f x| > p.+1%:~R^-1].
141143
set F := [pred x | _]; have le: {subset F <= [pred x | `[< exists p, x \in E p >]]}.
142144
move=> x; rewrite !inE => nz_fx; exists (Num.truncn `|f x|^-1).
143-
rewrite inE mul1r invf_plt ?unfold_in /= ?normr_gt0 //.
144-
by have/truncn_itv/andP[]: 0 <= `|f x|^-1 by rewrite invr_ge0 normr_ge0.
145+
by rewrite inE invf_plt ?unfold_in/= ?normr_gt0 // -normfV ltr_norm_bound.
145146
apply/(countable_sub le)/cunion_countable=> i /=.
146147
case: (existsTP (fun s : seq T => {subset E i <= s}))=> /= [[s le_Eis]|].
147148
by apply/finite_countable/finiteP; exists s => x /le_Eis.
148149
move=> /finiteNP/(_ ((Num.truncn M).+1 * i.+1)%N)/asboolP/exists_asboolP h.
149150
have/asboolP[] := xchooseP h.
150151
set s := xchoose h=> eq_si uq_s le_sEi; pose J := [fset x in s].
151152
suff: \sum_(x : J) `|f (val x)| > M by rewrite ltNge bM.
152-
apply/(@lt_le_trans _ _ (\sum_(x : J) 1 / i.+1%:~R)); last first.
153+
apply/(@lt_le_trans _ _ (\sum_(x : J) i.+1%:~R^-1)); last first.
153154
apply/ler_sum=> /= m _; apply/ltW.
154155
by have:= fsvalP m; rewrite in_fset => /le_sEi.
155-
rewrite mul1r sumr_const -cardfE card_fseq undup_id // eq_si.
156-
rewrite -mulr_natr natrM mulrC mulfK ?pnatr_eq0//.
157-
by case/truncn_itv/andP: ge0_M.
156+
rewrite sumr_const -cardfE card_fseq undup_id // eq_si.
157+
by rewrite -mulr_natr natrM mulrC mulfK ?pnatr_eq0// truncnS_gt.
158158
Qed.
159159

160160
End SummableCountable.

reals/real_interval.v

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
(* mathcomp analysis (c) 2025 Inria and AIST. License: CeCILL-C. *)
22
From mathcomp Require Import all_ssreflect_compat finmap ssralg ssrnum ssrint interval.
33
From mathcomp Require Import archimedean.
4+
#[warning="-warn-library-file-internal-analysis"]
5+
From mathcomp Require Import unstable.
46
From mathcomp Require Import boolp classical_sets functions.
57
From mathcomp Require Export set_interval.
68
From mathcomp Require Import reals interval_inference constructive_ereal.
@@ -170,8 +172,8 @@ Lemma itvNybndEbigcup b x : [set` Interval -oo%O (BSide b x)] =
170172
Proof.
171173
rewrite predeqE => y; split=> /=; last first.
172174
by move=> [n _]/=; rewrite in_itv => /andP[ny yx]; rewrite in_itv.
173-
rewrite in_itv /= => yx; exists (truncn `|y|).+1 => //=; rewrite in_itv/=.
174-
by rewrite yx /= andbT ltrNl (le_lt_trans (ler_norm _))// normrN truncnS_gt.
175+
rewrite in_itv /= => yx; exists (Num.bound y) => //=; rewrite in_itv/=.
176+
by rewrite yx /= andbT ltrNl ltrNbound.
175177
Qed.
176178

177179
Lemma itvoyEbigcup x :
@@ -354,10 +356,6 @@ Notation itv_infty_bnd_bigcup := itvNy_bnd_bigcup_BLeft (only parsing).
354356
Lemma bigcup_itvT {R : archiRealDomainType} b1 b2 :
355357
\bigcup_n [set` Interval (BSide b1 (- n%:R)) (BSide b2 n%:R)] = [set: R].
356358
Proof.
357-
rewrite -subTset => x _ /=; exists (truncn `|x|).+1 => //=.
358-
have := truncnS_gt `|x|; rewrite in_itv/=; move: b1 b2 => [] []/=.
359-
- by rewrite ltr_norml => /andP[/ltW ->].
360-
- by move/ltW; rewrite ler_norml => /andP[-> ->].
361-
- by rewrite ltr_norml => /andP[-> ->].
362-
- by rewrite ltr_norml => /andP[-> /ltW].
359+
rewrite -subTset => x _ /=; exists (Num.bound x) => //=.
360+
by rewrite in_itv lteifNl 2?lteifS// (ltr_bound, ltrNbound).
363361
Qed.

theories/lebesgue_integral_theory/lebesgue_integral_differentiation.v

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -880,8 +880,7 @@ move=> Ef; have {Ef} : mu.-negligible (E `&` [set x | 0 < f^* x]).
880880
near \oo => m; exists m => //=.
881881
rewrite -(@fineK _ (f^* x)) ?gt0_fin_numE ?ltey// lte_fin.
882882
rewrite invf_plt ?posrE//; last by rewrite fine_gt0// ltey fx0.
883-
set r := _^-1%R; rewrite (lt_le_trans (truncnS_gt _))//.
884-
by rewrite ler_nat ltnS; near: m; exact: nbhs_infty_ge.
883+
by rewrite -truncn_le_nat; near: m; exact: nbhs_infty_ge.
885884
apply: negligibleS => z /= /not_implyP[Ez H]; split => //.
886885
rewrite ltNge; apply: contra_notN H.
887886
rewrite le_eqVlt ltNge limf_esup_ge0/= ?orbF//; last first.

theories/lebesgue_stieltjes_measure.v

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
From HB Require Import structures.
33
From mathcomp Require Import all_ssreflect_compat finmap ssralg ssrnum ssrint interval.
44
From mathcomp Require Import archimedean.
5+
#[warning="-warn-library-file-internal-analysis"]
6+
From mathcomp Require Import unstable.
57
From mathcomp Require Import boolp classical_sets functions fsbigop cardinality.
68
From mathcomp Require Import reals ereal interval_inference topology numfun.
79
From mathcomp Require Import normedtype sequences esum real_interval measure.
@@ -484,8 +486,7 @@ Lemma wlength_sigma_finite (f : R -> R) :
484486
Proof.
485487
exists (fun k => `](- k%:R), k%:R]%classic).
486488
apply/esym; rewrite -subTset => /= x _ /=.
487-
exists (truncn `|x|).+1; rewrite //= in_itv/=.
488-
by have := truncnS_gt `|x|; rewrite ltr_norml => /andP[-> /ltW->].
489+
by exists (Num.bound x); rewrite //= in_itv/= ltrNl ltrNbound ltW// ltr_bound.
489490
move=> k; split => //; rewrite wlength_itv /= -EFinB.
490491
by case: ifP; rewrite ltey.
491492
Qed.

theories/measurable_realfun.v

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
From HB Require Import structures.
33
From mathcomp Require Import all_ssreflect_compat finmap ssralg ssrnum ssrint interval.
44
From mathcomp Require Import archimedean rat.
5+
#[warning="-warn-library-file-internal-analysis"]
6+
From mathcomp Require Import unstable.
57
From mathcomp Require Import boolp classical_sets.
68
From mathcomp Require Import functions cardinality fsbigop reals ereal.
79
From mathcomp Require Import interval_inference topology numfun tvs normedtype.
@@ -324,11 +326,9 @@ rewrite [X in measurable X](_ : _ =
324326
apply: bigcupT_measurable => k; rewrite -(setIid D) setIACA.
325327
exact/measurableI/emeasurable_fun_infty_c/emeasurable_fun_c_infty.
326328
rewrite predeqE => t; split => [/= [Dt ft]|].
327-
exists (truncn `|fine (f t)|).+1 => //=; split=> //; split.
328-
rewrite -[leRHS](fineK ft) lee_fin lerNl.
329-
by rewrite (le_trans (ler_norm _))// normrN ltW// truncnS_gt.
330-
rewrite -[leLHS](fineK ft) lee_fin (le_trans (ler_norm _))//.
331-
by rewrite ltW// truncnS_gt.
329+
exists (Num.bound (fine (f t))) => //=.
330+
rewrite -(fineK ft) !lee_fin (fineK ft) lerNl.
331+
by rewrite !ltW// (ltrNbound, ltr_bound).
332332
move=> [n _] [/= Dt [nft fnt]]; split => //; rewrite fin_numElt.
333333
by rewrite (lt_le_trans _ nft) ?ltNyr//= (le_lt_trans fnt)// ltry.
334334
Qed.
@@ -567,21 +567,15 @@ Lemma eset1Ny :
567567
[set -oo] = \bigcap_k `]-oo, (-k%:R%:E)[%classic :> set (\bar R).
568568
Proof.
569569
rewrite eqEsubset; split=> [_ -> i _ |]; first by rewrite /= in_itv /= ltNyr.
570-
move=> [r|/(_ O Logic.I)|]//.
571-
move=> /(_ `|floor r|%N Logic.I); rewrite /= in_itv/= ltNge.
572-
rewrite lee_fin; have [r0|r0] := leP 0%R r.
573-
by rewrite (le_trans _ r0) // lerNl oppr0 ler0n.
574-
rewrite lerNl -abszN natr_absz gtr0_norm; last by rewrite ltrNr oppr0 floor_lt0.
575-
by rewrite mulrNz lerNl opprK floor_le_tmp.
570+
move=> [r|/(_ O Logic.I)|]// /(_ (Num.bound r) Logic.I) /=.
571+
by rewrite in_itv/= lte_fin ltNge lerNl ltW// ltrNbound.
576572
Qed.
577573

578574
Lemma eset1y : [set +oo] = \bigcap_k `]k%:R%:E, +oo[%classic :> set (\bar R).
579575
Proof.
580576
rewrite eqEsubset; split=> [_ -> i _/=|]; first by rewrite in_itv /= ltry.
581-
move=> [r| |/(_ O Logic.I)] // /(_ `|ceil r|%N Logic.I); rewrite /= in_itv /=.
582-
rewrite andbT lte_fin ltNge.
583-
have [r0|r0] := ltP 0%R r; last by rewrite (le_trans r0).
584-
by rewrite natr_absz gtr0_norm// ?ceil_ge// ceil_gt0.
577+
move=> [r| |/(_ O Logic.I)] // /(_ (Num.bound r) Logic.I) /=.
578+
by rewrite in_itv/= andbT lte_fin ltNge ltW// ltr_bound.
585579
Qed.
586580

587581
End erealwithrays.

theories/normedtype_theory/normed_module.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2014,7 +2014,7 @@ Lemma compact_bounded (K : realType) (V : normedModType K) (A : set V) :
20142014
Proof.
20152015
rewrite compact_cover => Aco.
20162016
have covA : A `<=` \bigcup_(n : int) [set p | `|p| < n%:~R].
2017-
by move=> p _; exists (floor `|p| + 1) => //=; rewrite floorD1_gt.
2017+
by move=> p _; exists (truncn `|p|).+1; rewrite //= truncnS_gt.
20182018
have /Aco [] := covA.
20192019
move=> n _; rewrite openE => p; rewrite /= -subr_gt0 => ltpn.
20202020
apply/nbhs_ballP; exists (n%:~R - `|p|) => // q.

theories/normedtype_theory/num_normedtype.v

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -714,28 +714,22 @@ Notation near_in_itv := near_in_itvoo (only parsing).
714714
Lemma nbhs_infty_gtr {R : archiRealFieldType} (r : R) :
715715
\forall n \near \oo, r < n%:R.
716716
Proof.
717-
exists `|ceil r|.+1 => // n/=; rewrite -(ler_nat R); apply: lt_le_trans.
718-
rewrite -natr1 -[ltLHS]addr0 ler_ltD//.
719-
by rewrite (le_trans (ceil_ge _))// natr_absz ler_int ler_norm.
717+
exists (Num.bound r) => // n /=.
718+
by rewrite truncn_lt_nat//; apply/le_lt_trans/ler_norm.
720719
Qed.
721720

722721
Lemma near_infty_natSinv_lt (R : archiRealFieldType) (e : {posnum R}) :
723722
\forall n \near \oo, n.+1%:R^-1 < e%:num.
724723
Proof.
725-
near=> n; rewrite -(@ltr_pM2r _ n.+1%:R) // mulVf.
726-
rewrite -(@ltr_pM2l _ e%:num^-1) // mulr1 mulrA mulVf// mul1r.
727-
rewrite (lt_trans (archi_boundP _)) // ltr_nat.
728-
by near: n; exists (Num.bound e%:num^-1).
724+
near=> n; rewrite invf_plt ?unfold_in//= -truncn_le_nat.
725+
by near: n; exists (Num.truncn e%:num^-1).
729726
Unshelve. all: by end_near. Qed.
730727

731728
Lemma near_infty_natSinv_expn_lt (R : archiRealFieldType) (e : {posnum R}) :
732729
\forall n \near \oo, 1 / 2 ^+ n < e%:num.
733730
Proof.
734731
near=> n.
735-
rewrite -(@ltr_pM2r _ (2 ^+ n))// -?natrX ?ltr0n ?expn_gt0//.
736-
rewrite mul1r mulVf ?gt_eqF//.
737-
rewrite -(@ltr_pM2l _ e%:num^-1)// mulr1 mulrA mulVf// mul1r.
738-
rewrite (lt_trans (archi_boundP _))// natrX upper_nthrootP//.
732+
rewrite mul1r invf_plt ?unfold_in//=; apply: upper_nthrootP.
739733
near: n; eexists; last by move=> m; exact.
740734
by [].
741735
Unshelve. all: by end_near. Qed.

theories/probability_theory/random_variable.v

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ have cdf_n1 : cdf X n%:R @[n --> \oo] --> 1.
269269
pose F n := X @^-1` `]-oo, n%:R].
270270
have <- : \bigcup_n F n = setT.
271271
rewrite -preimage_bigcup -subTset => t _/=.
272-
by exists (truncn (X t)).+1 => //=; rewrite in_itv/= ltW// truncnS_gt.
272+
by exists (truncn (X t)).+1; rewrite //= in_itv/= ltW// truncnS_gt.
273273
apply: nondecreasing_cvg_mu => //; first exact: bigcup_measurable.
274274
move=> n m nm; apply/subsetPset => x/=; rewrite !in_itv/= => /le_trans.
275275
by apply; rewrite ler_nat.
@@ -290,10 +290,8 @@ have cdf_opp_n0 : (cdf X \o -%R) n%:R @[n --> \oo] --> 0.
290290
rewrite -(measure0 P).
291291
pose F n := X @^-1` `]-oo, (- n%:R)%R].
292292
have <- : \bigcap_n F n = set0.
293-
rewrite -subset0 => t.
294-
set m := (truncn `|X t|).+1.
295-
move=> /(_ m I); rewrite /F/= in_itv/= leNgt => /negP; apply.
296-
by rewrite ltrNl /m (le_lt_trans (ler_norm _))// normrN truncnS_gt.
293+
rewrite -subset0 => t /(_ (Num.bound (X t)) I).
294+
by rewrite /F/= in_itv/= leNgt => /negP; apply; rewrite ltrNl ltrNbound.
297295
apply: nonincreasing_cvg_mu => //=.
298296
+ by rewrite (le_lt_trans (probability_le1 _ _)) ?ltry.
299297
+ exact: bigcap_measurable.

0 commit comments

Comments
 (0)