Skip to content

Commit a5374bd

Browse files
committed
address comments
1 parent bc6feda commit a5374bd

6 files changed

Lines changed: 202 additions & 223 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,21 @@
101101
+ lemmas `numEesg`, `gte0_esg`, `lte0_esg`, `esg0`
102102

103103
- in `esum.v`:
104-
+ lemmas `esum_eq0P`, `esumZ`, `esum_esum'`
104+
+ lemmas `esum_eq0P`, `esumZ`, `exchange_esum`
105105
+ lemmas `ge0_funeneg`, `ge0_funepos`, `funepos_cst0`, `funeneg_cst0`,
106106
`le_funepos`
107107
+ definition `sum`
108-
+ lemmas `sum0`, `eq_sum`, `esum_unit`, `sum_unit`
109-
+ lemmas `esum_sum'`, `sum_ge0`, `le_sum`, `sumN`, `sumZ`
108+
+ lemmas `sum0`, `eq_sum`
109+
+ lemmas `ge0_sum`, `sum_ge0`, `le_sum`, `sumN`, `sumZ`
110110
+ lemmas `summable_le_sum`, `summable_esum_funepos`, `summable_sumN`,
111111
`summableZ`, `summable_sumZ`
112-
+ lemmas `ereal_sup_comm`
113-
+ lemmas `esupZl`, `esupZl_range`, `esup_add`, `ereal_sup_sum`, `esum_esup_comm`
112+
+ lemmas `exchange_esum_ereal_sup`
113+
114+
- in `ereal.v`:
115+
+ lemmas `exchange_ereal_sup`, `ge0_ereal_supZl`, `ge0_ereal_supZl_range`
116+
117+
- in `sequences.v`:
118+
+ lemmas `ereal_supD`, `ereal_sup_sum`
114119

115120
- in `reals.v`:
116121
+ lemmas `sup_ge0`, `has_sup_wpZl`, `gt0_has_supZl`, `has_sup_Mn`, `sup_Mn`
@@ -254,6 +259,10 @@
254259
* lemmas `summable_funrpos`, `summable_funrneg`
255260
+ lemma `sum0` (now uses `cst`)
256261

262+
- moved from `numfun.v` to `unstable.v`:
263+
+ notations `nondecreasing_fun`, `nonincreasing_fun`,
264+
`decreasing_fun`, `increasing_fun`
265+
257266
### Renamed
258267

259268
- in `tvs.v`:

classical/unstable.v

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ From mathcomp Require Import vector archimedean interval.
1616
(* ``` *)
1717
(* swap x := (x.2, x.1) *)
1818
(* map_pair f x := (f x.1, f x.2) *)
19+
(* nondecreasing_fun f == the function f is non-decreasing *)
20+
(* nonincreasing_fun f == the function f is non-increasing *)
21+
(* increasing_fun f == the function f is (strictly) increasing *)
22+
(* decreasing_fun f == the function f is (strictly) decreasing *)
1923
(* monotonic A f := {in A &, {homo f : x y / x <= y}} \/ *)
2024
(* {in A &, {homo f : x y /~ x <= y}} *)
2125
(* strict_monotonic A f := {in A &, {homo f : x y / x < y}} \/ *)
@@ -197,6 +201,15 @@ rewrite -[X in (_ <= X)%N]prednK ?expn_gt0// -[X in (_ <= X)%N]addn1 leq_add2r.
197201
by rewrite (leq_trans h2)// -subn1 leq_subRL ?expn_gt0// add1n ltn_exp2l.
198202
Qed.
199203

204+
Notation "'nondecreasing_fun' f" := ({homo f : n m / (n <= m)%O >-> (n <= m)%O})
205+
(at level 10).
206+
Notation "'nonincreasing_fun' f" := ({homo f : n m / (n <= m)%O >-> (n >= m)%O})
207+
(at level 10).
208+
Notation "'increasing_fun' f" := ({mono f : n m / (n <= m)%O >-> (n <= m)%O})
209+
(at level 10).
210+
Notation "'decreasing_fun' f" := ({mono f : n m / (n <= m)%O >-> (n >= m)%O})
211+
(at level 10).
212+
200213
Definition monotonic d (T : porderType d) d' (T' : porderType d')
201214
(pT : predType T) (A : pT) (f : T -> T') :=
202215
{in A &, nondecreasing f} \/ {in A &, {homo f : x y /~ (x <= y)%O}}.

theories/ereal.v

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,22 @@ split=> [ge_x y Sy|ge_x _ [y Sy <-]]; rewrite ?oppeK// ?ge_x//.
637637
by rewrite -[y]oppeK ge_x//; exists y.
638638
Qed.
639639

640+
Lemma exchange_ereal_sup {X Y : Type} (f : X -> Y -> \bar R)
641+
(A : set X) (B : set Y) :
642+
ereal_sup [set ereal_sup [set f x y | y in B] | x in A] =
643+
ereal_sup [set ereal_sup [set f x y | x in A] | y in B].
644+
Proof.
645+
suff suf : forall (U V : Type) (g : U -> V -> \bar R) (C : set U) (D : set V),
646+
ereal_sup [set ereal_sup [set g x y | y in D] | x in C] <=
647+
ereal_sup [set ereal_sup [set g x y | x in C] | y in D].
648+
by apply/le_anti/andP; split; exact: suf.
649+
move=> U V g C D.
650+
apply/ereal_supP => _ [x Cx <-]; apply/ereal_supP => _ [y Dy <-].
651+
apply: le_ereal_sup_tmp; exists (ereal_sup [set g x y | x in C]).
652+
- by exists y.
653+
- by apply: le_ereal_sup_tmp; exists (g x y) => //; exists x.
654+
Qed.
655+
640656
Lemma ereal_sup_gtP S x :
641657
reflect (exists2 y : \bar R, S y & x < y) (x < ereal_sup S).
642658
Proof.
@@ -752,6 +768,53 @@ move=> XN0 r_gt0; rewrite !ereal_supEN muleN image_comp/=; congr (- _).
752768
by under eq_imagel do rewrite /= -muleN; rewrite -image_comp ereal_inf_pZl.
753769
Qed.
754770

771+
Lemma ge0_ereal_supZl (c : \bar R) X : 0 <= c -> X != set0 ->
772+
(forall x, X x -> 0 <= x) ->
773+
ereal_sup [set c * x | x in X] = c * ereal_sup X.
774+
Proof.
775+
move=> c0 /[dup] Xneq0 /set0P[x Xx] X_ge0.
776+
case: c c0 => [r r0|_|//].
777+
- have [->|_] := eqVneq r 0%R.
778+
+ rewrite mul0e.
779+
under eq_imagel do rewrite mul0e.
780+
by rewrite ereal_sup_cst.
781+
+ exact: ereal_supZl Xneq0 r0.
782+
- have [Xall0|] := pselect (forall a, X a -> a = 0).
783+
+ rewrite [X in ereal_sup X = _](_ : _ = [set 0]%classic).
784+
apply/seteqP; split.
785+
* by move=> _ [z Xz <-]; rewrite (Xall0 _ Xz) mule0.
786+
* by move=> y /= ->; exists x => //; rewrite (Xall0 _ Xx) mule0.
787+
have -> : X = [set 0]%classic.
788+
apply/seteqP; split.
789+
+ by move=> y /Xall0 ->.
790+
+ by move=> y /= ->; rewrite -(Xall0 _ Xx).
791+
by rewrite ereal_sup1 mule0.
792+
+ rewrite -existsNE => -[y /not_implyP[Xy /eqP]].
793+
rewrite neq_lt ltNge X_ge0//= => y0.
794+
rewrite gt0_mulye//.
795+
by rewrite (lt_le_trans y0)// ereal_sup_ubound.
796+
by rewrite ereal_supy//=; exists y => //; exact: gt0_mulye.
797+
Qed.
798+
799+
Section ge0_ereal_supZl_range.
800+
Context {T : choiceType} (f : T -> nat -> \bar R).
801+
Hypothesis f_ge0 : forall t n, 0 <= f t n.
802+
803+
Lemma ge0_ereal_supZl_range (c : \bar R) (x : T) : 0 <= c ->
804+
c * ereal_sup (range (f x)) = ereal_sup (range (fun n => c * f x n)).
805+
Proof.
806+
move=> c0.
807+
rewrite [X in _ = ereal_sup X](_ : _ = [set c * y | y in range (f x)]%classic).
808+
apply/seteqP; split.
809+
- by move=> _ [n _ <-]; exists (f x n) => //; exists n.
810+
- by move=> _ [_ [n _ <-] <-]; exists n.
811+
rewrite ge0_ereal_supZl//.
812+
- by apply/set0P; exists (f x 0%N), 0%N.
813+
- by move=> _ [n _ <-]; exact: f_ge0.
814+
Qed.
815+
816+
End ge0_ereal_supZl_range.
817+
755818
End ereal_supZ.
756819

757820
Lemma restrict_abse T (R : numDomainType) (f : T -> \bar R) (D : set T) :
@@ -1545,7 +1608,7 @@ Definition ereal_loc_seq (R : numDomainType) (x : \bar R) (n : nat) :=
15451608
end.
15461609

15471610
Lemma cvg_ereal_loc_seq (R : realType) (x : \bar R) :
1548-
ereal_loc_seq x @ \oo--> ereal_dnbhs x.
1611+
ereal_loc_seq x @ \oo --> ereal_dnbhs x.
15491612
Proof.
15501613
move=> P; rewrite /ereal_loc_seq.
15511614
case: x => /= [x [_/posnumP[d] dP] |[d [dreal dP]] |[d [dreal dP]]]; last 2 first.

0 commit comments

Comments
 (0)