@@ -637,6 +637,22 @@ split=> [ge_x y Sy|ge_x _ [y Sy <-]]; rewrite ?oppeK// ?ge_x//.
637637by rewrite -[y]oppeK ge_x//; exists y.
638638Qed .
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+
640656Lemma ereal_sup_gtP S x :
641657 reflect (exists2 y : \bar R, S y & x < y) (x < ereal_sup S).
642658Proof .
@@ -752,6 +768,53 @@ move=> XN0 r_gt0; rewrite !ereal_supEN muleN image_comp/=; congr (- _).
752768by under eq_imagel do rewrite /= -muleN; rewrite -image_comp ereal_inf_pZl.
753769Qed .
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+
755818End ereal_supZ.
756819
757820Lemma 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
15471610Lemma 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.
15491612Proof .
15501613move=> P; rewrite /ereal_loc_seq.
15511614case: x => /= [x [_/posnumP[d] dP] |[d [dreal dP]] |[d [dreal dP]]]; last 2 first.
0 commit comments