Skip to content

Commit ec96e78

Browse files
committed
Add set of lemmas for esum
1 parent ba95a8f commit ec96e78

2 files changed

Lines changed: 301 additions & 12 deletions

File tree

theories/esum.v

Lines changed: 300 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,13 +155,51 @@ Lemma pos_esum_ge (T1 : choiceType) (I : set T1) (a : T1 -> \bar R) x :
155155
x <= \esum_(i in I) a i.
156156
Proof. by move=> [X IX /le_trans->//]; apply: ereal_sup_ubound; exists X. Qed.
157157

158-
Lemma le_pos_esum S f g : (forall i, S i -> f i <= g i) ->
158+
Lemma pos_neq0_esum (I : set T) (a : T -> \bar R) :
159+
\esum_(i in I) a i <> 0 -> exists i, a i <> 0.
160+
Proof.
161+
move=> ?. apply/existsp_asboolPn /asboolPn => h.
162+
have // : (\esum_(i in I) a i = 0); by apply pos_esum1.
163+
Qed.
164+
165+
Lemma pos_esum_ge1 (I : set T) (f: T -> \bar R) :
166+
(forall x, I x -> f x <= \esum_(i in (I : set T)) f i)%E.
167+
Proof.
168+
move=> x Ix.
169+
apply: pos_esum_ge.
170+
exists ([set` [::x]]%classic) => //=.
171+
+ by split => // y /=; rewrite mem_seq1 => /eqP ->.
172+
by rewrite -fsbig_seq //= big_seq1.
173+
Qed.
174+
175+
Lemma pos_sum_esum_ge J (f: T -> R) :
176+
uniq J -> ((\sum_(j <- J) f j)%:E <= \esum_(i in [set: T]) (f i)%:E)%E.
177+
Proof.
178+
move => ?.
179+
apply: pos_esum_ge.
180+
exists [set` J]%classic => //.
181+
rewrite fsumEFin // lee_fin -fsbig_seq //=.
182+
Qed.
183+
184+
Lemma le_pos_esum {U : choiceType} (S: set U) (f g: U -> \bar R) : (forall i, S i -> f i <= g i) ->
159185
\esum_(i in S) f i <= \esum_(i in S) g i.
160186
Proof.
161187
move=> fg; rewrite ge_ereal_sup => //= _ [X [finX XS]] <-.
162188
by rewrite pos_esum_ge//; exists X => //; apply: lee_fsum => // t /XS /fg.
163189
Qed.
164190

191+
Lemma le_pos_esum_fine {U : choiceType} (f: T -> U -> \bar R):
192+
(forall x y, 0 <= f x y)%E ->
193+
(\esum_(i in [set: U]) (fine (\esum_(x in [set: T]) f x i))%:E <=
194+
\esum_(i in [set: U]) (\esum_(x in [set: T]) f x i))%E.
195+
Proof.
196+
move => hf.
197+
rewrite le_pos_esum // => i ?.
198+
case h: (\esum_(x in [set: T]) _) => //=.
199+
+ exact : leey.
200+
by rewrite -h pos_esum_ge0.
201+
Qed.
202+
165203
Lemma pos_esumZ S f (c : \bar R) : 0 <= c -> (forall t, S t -> 0 <= f t) ->
166204
\esum_(t in S) c * f t = c * \esum_(t in S) f t.
167205
Proof.
@@ -361,6 +399,12 @@ rewrite /esum PosEsum.ge0_pos_esum_funepos// PosEsum.ge0_pos_esum_funeneg//.
361399
by rewrite sube0.
362400
Qed.
363401

402+
Lemma esum_pos_esum S f : (forall x, S x -> 0 <= f x) ->
403+
\esum_(i in S) f i = PosEsum.pos_esum S f.
404+
Proof.
405+
by move=> ?; rewrite ge0_esum.
406+
Qed.
407+
364408
Lemma esum_set0 f : \esum_(i in set0) f i = 0.
365409
Proof. by rewrite /esum !PosEsum.pos_esum_set0 subee. Qed.
366410

@@ -385,13 +429,60 @@ Section esum_realType.
385429
Variables (R : realType) (T : choiceType).
386430
Implicit Types (S : set T) (f : T -> \bar R).
387431

388-
Lemma le_esum S f g : (forall x, S x -> 0 <= f x) ->
432+
Lemma sum_esum_ge J (f: T -> R) :
433+
(forall x, 0 <= f x)%R ->
434+
uniq J -> ((\sum_(j <- J) f j)%:E <= \esum_(i in [set:T]) (f i)%:E)%E.
435+
Proof.
436+
move=> f0 uJ.
437+
rewrite esum_pos_esum.
438+
+ by move=> x _; rewrite lee_fin; exact: f0.
439+
exact: (PosEsum.pos_sum_esum_ge).
440+
Qed.
441+
442+
(* Lemma le_esum S f g : (forall x, S x -> 0 <= f x) -> *)
443+
(* (forall x, S x -> f x <= g x) -> *)
444+
(* \esum_(x in S) f x <= \esum_(x in S) g x. *)
445+
(* Proof. *)
446+
(* move=> f0 leS; have g0 x : S x -> 0 <= g x. *)
447+
(* by move=> /[dup] Ax /leS; apply: le_trans; exact: f0 Ax. *)
448+
(* by rewrite !ge0_esum// PosEsum.le_pos_esum. *)
449+
(* Qed. *)
450+
451+
Lemma le_esum S f g :
389452
(forall x, S x -> f x <= g x) ->
390-
\esum_(x in S) f x <= \esum_(x in S) g x.
453+
\esum_(i in S) f i <= \esum_(i in S) g i.
454+
Proof.
455+
move=> leS.
456+
have leS' : {in S, forall x, f x <= g x} by move=> x /set_mem; exact: leS.
457+
rewrite /esum; apply: leeB.
458+
- by apply: PosEsum.le_pos_esum => x /mem_set; exact: funepos_le.
459+
- by apply: PosEsum.le_pos_esum => x /mem_set; exact: funeneg_le.
460+
Qed.
461+
462+
Lemma le_esum_fine {U : choiceType} (f: T -> U -> \bar R):
463+
(forall x y, 0 <= f x y)%E ->
464+
(\esum_(i in [set: U]) (fine (\esum_(x in [set: T]) f x i))%:E <=
465+
\esum_(i in [set: U]) (\esum_(x in [set: T]) f x i))%E.
466+
Proof.
467+
move=> hf.
468+
have E i : \esum_(x in [set: T]) f x i = PosEsum.pos_esum [set: T] (fun x => f x i).
469+
by rewrite esum_pos_esum// => x _; exact: hf.
470+
have hpos i : (0 <= \esum_(x in [set: T]) f x i)%E by rewrite E PosEsum.pos_esum_ge0.
471+
rewrite [leLHS]esum_pos_esum; first by move=> i _; rewrite lee_fin; apply: fine_ge0; exact: hpos.
472+
rewrite [leRHS]esum_pos_esum; first by move=> i _; exact: hpos.
473+
under [leLHS]PosEsum.eq_pos_esum => i _ do rewrite E.
474+
under [leRHS]PosEsum.eq_pos_esum => i _ do rewrite E.
475+
exact: (PosEsum.le_pos_esum_fine hf).
476+
Qed.
477+
478+
Lemma subset_esum (I J : set T) (a : T -> \bar R) :
479+
(forall x, J x -> 0 <= a x) ->
480+
I `<=` J -> (\esum_(i in I) a i <= \esum_(i in J) a i)%E.
391481
Proof.
392-
move=> f0 leS; have g0 x : S x -> 0 <= g x.
393-
by move=> /[dup] Ax /leS; apply: le_trans; exact: f0 Ax.
394-
by rewrite !ge0_esum// PosEsum.le_pos_esum.
482+
move=> a0 IJ.
483+
have ?: forall x, I x -> 0 <= a x by move => x /IJ /a0.
484+
rewrite esum_pos_esum // esum_pos_esum //.
485+
by apply: PosEsum.subset_pos_esum.
395486
Qed.
396487

397488
Lemma esum_ge0 S f : (forall x, S x -> 0 <= f x) -> 0 <= \esum_(i in S) f i.
@@ -410,6 +501,13 @@ move=> Df0; rewrite ge0_esum; last exact: PosEsum.pos_esum1.
410501
by move=> i /Df0 ->.
411502
Qed.
412503

504+
Lemma esum0 {R : realFieldType} {I : choiceType} (D : set I) :
505+
\esum_(i in D) (@cst I (\bar R) 0 i) = 0.
506+
Proof.
507+
by rewrite esum1 ?subee// => r _;
508+
rewrite ?[LHS](funepos_cst0,funeneg_cst0).
509+
Qed.
510+
413511
Section esum_cond.
414512
Context {R : realType} {T : choiceType}.
415513
Implicit Types (A B : set T) (f : T -> \bar R).
@@ -483,6 +581,13 @@ Lemma esum_ge {R : realType} {T : choiceType} (I : set T) (f : T -> \bar R) x :
483581
x <= \esum_(i in I) f i.
484582
Proof. by move=> f0 If; rewrite ge0_esum// PosEsum.pos_esum_ge. Qed.
485583

584+
Lemma esum_unit {R : realType} {T : choiceType} (f : T -> \bar R) x :
585+
\esum_(i in [set:T]) (if x == i then f i else 0) = f x.
586+
Proof.
587+
rewrite esum_if_eq_op.
588+
by rewrite esum_set1.
589+
Qed.
590+
486591
Lemma esum_eq0P {R : realType} {T : choiceType} (A : set T) (f : T -> \bar R) :
487592
(forall i, A i -> 0 <= f i) ->
488593
\esum_(x in A) f x = 0 -> forall x, A x -> f x = 0.
@@ -493,6 +598,18 @@ exists [set x]; first by split => // t ->.
493598
by rewrite -esum_set1 esum_fset// => i ->; exact: f0.
494599
Qed.
495600

601+
Lemma neq0_esum {R : realType} {T : choiceType} (I : set T) (a : T -> \bar R) :
602+
\esum_(i in I) a i <> 0 -> exists i, a i <> 0.
603+
Proof.
604+
move=> ?. apply/existsp_asboolPn /asboolPn => h.
605+
have // : (\esum_(i in I) a i = 0); by apply esum1.
606+
Qed.
607+
608+
Lemma esum_ge1 {R : realType} {T : choiceType} (I : set T) (f: T -> \bar R) :
609+
(forall x, I x -> 0 <= f x) ->
610+
(forall x, I x -> f x <= \esum_(i in (I : set T)) f i)%E.
611+
Proof. by move=> f0 x Ix; rewrite ge0_esum//; exact: PosEsum.pos_esum_ge1. Qed.
612+
496613
Section esumZ.
497614
Context {R : realType} {T : choiceType} (A : set T) (f : T -> \bar R).
498615

@@ -780,6 +897,22 @@ rewrite /summable fin_numElt; apply/idP/idP => [->|/andP[]//].
780897
by rewrite andbT (lt_le_trans (ltNyr 0))//; exact: esum_ge0.
781898
Qed.
782899

900+
Lemma eq_summable D f g : f =1 g -> summable D f -> summable D g.
901+
Proof.
902+
move => eq_fg; rewrite /summable; apply: le_lt_trans.
903+
by apply: le_esum => ?; rewrite eq_fg.
904+
Qed.
905+
906+
Lemma le_summable D f g :
907+
(forall x, 0 <= f x <= g x) -> summable D g -> summable D f.
908+
Proof.
909+
move => eq_fg; rewrite /summable; apply: le_lt_trans.
910+
apply: le_esum => i //.
911+
have /andP := (eq_fg i).
912+
move =>[ h1 h2]; rewrite !gee0_abs => //=.
913+
by apply /le_trans;first apply h1.
914+
Qed.
915+
783916
Lemma summableD D f g : summable D f -> summable D g -> summable D (f \+ g).
784917
Proof.
785918
move=> Df Dg; apply: le_lt_trans (lte_add_pinfty Df Dg).
@@ -812,6 +945,50 @@ apply: PosEsum.le_pos_esum => t Dt.
812945
by rewrite -/((abse \o f) t) -funeposDneg gee0_abs// leeDr.
813946
Qed.
814947

948+
Lemma summable_muleC D f1 f2 :
949+
summable D (f2 \* f1) -> summable D (f1 \* f2).
950+
Proof.
951+
rewrite /summable => ?.
952+
by under eq_esum do rewrite abseM muleC -abseM.
953+
Qed.
954+
955+
Lemma summableZ D f c :
956+
c \is a fin_num -> summable D f -> summable D (fun x => c * f x).
957+
Proof.
958+
rewrite /summable => ??.
959+
under eq_esum do rewrite abseM.
960+
by rewrite esumZ // lte_mul_pinfty //= abse_fin_num.
961+
Qed.
962+
963+
Lemma summableZr D f c :
964+
c \is a fin_num -> summable D f -> summable D (fun x => f x * c).
965+
Proof. by move=> ??; apply/summable_muleC /summableZ. Qed.
966+
967+
Lemma summableMl D f1 f2 :
968+
(exists M, (forall x, D x -> `|f1 x| <= M) /\ M \is a fin_num) ->
969+
summable D f2 -> summable D (f1 \* f2).
970+
Proof.
971+
move=> [M [h1 Mfin]] sf2.
972+
rewrite /summable; apply: le_lt_trans (summableZ Mfin sf2).
973+
apply: le_esum => x Dx; rewrite !abseM.
974+
apply: lee_wpmul2r; first exact: abse_ge0.
975+
by apply: le_trans (h1 x Dx) (lee_abs _).
976+
Qed.
977+
978+
Lemma summableMr D f1 f2 :
979+
(exists M, (forall x, D x -> `|f2 x| <= M) /\ M \is a fin_num ) ->
980+
summable D f1 ->
981+
summable D (f1 \* f2).
982+
Proof. by move => ??; apply/summable_muleC /summableMl. Qed.
983+
984+
Lemma summableM D f1 f2 :
985+
summable D f1 -> summable D f2 -> summable D (f1 \* f2).
986+
Proof.
987+
rewrite summableE => smS1 smS2; apply/summableMl => //.
988+
exists (\esum_(x in D) `| f1 x|) => //; split => //.
989+
by move => x; apply/esum_ge1.
990+
Qed.
991+
815992
End summable_lemmas.
816993

817994
Import numFieldNormedType.Exports.
@@ -960,6 +1137,121 @@ Qed.
9601137

9611138
End esumB.
9621139

1140+
Section esum_summable.
1141+
Context {R : realType} {T : choiceType}.
1142+
Implicit Types (S : T -> \bar R).
1143+
1144+
Lemma summable_esum_funepos S :
1145+
summable [set: T] S -> \esum_(t in [set: T]) S^\+ t \is a fin_num.
1146+
Proof.
1147+
move => /summable_funepos.
1148+
rewrite summableE.
1149+
rewrite (@eq_esum _ _ _ (fun y : T => S^\+ y) (fun y : T => `|S^\+ y|)) //=.
1150+
by move => ??; rewrite gee0_abs.
1151+
Qed.
1152+
1153+
Lemma summable_esum_fin_num S :
1154+
summable [set: T] S -> \esum_(i in [set:T]) S i \is a fin_num.
1155+
Proof.
1156+
move=> sm; rewrite /esum fin_numB; apply/andP; split.
1157+
- rewrite -esum_pos_esum; first by move=> x _; exact: funepos_ge0.
1158+
exact: (summable_esum_funepos sm).
1159+
- have smN : summable [set: T] (\- S) by rewrite -summableN.
1160+
rewrite -esum_pos_esum; first by move=> x _; exact: funeneg_ge0.
1161+
by rewrite -funeposN; exact: (summable_esum_funepos smN).
1162+
Qed.
1163+
1164+
Lemma summable_esumN S :
1165+
summable [set : T] S -> \esum_(i in [set:T]) - S i = - \esum_(i in [set:T]) S i.
1166+
Proof.
1167+
move=> hs; rewrite /esum funeposN funenegN oppeB.
1168+
- apply: fin_num_adde_defr.
1169+
rewrite -esum_pos_esum; first by move=> x _; exact: funepos_ge0.
1170+
exact: (summable_esum_funepos hs).
1171+
- by rewrite addeC.
1172+
Qed.
1173+
1174+
Lemma summable_esumZ_pos S :
1175+
summable [set : T] S ->
1176+
forall d : \bar R, 0 <= d -> d \is a fin_num ->
1177+
\esum_(x in [set:T]) d * S x = d * \esum_(x in [set:T]) S x.
1178+
Proof.
1179+
move=> h d d0 dfin.
1180+
have -> : d = (fine d)%:E by rewrite fineK.
1181+
have ? : (0 <= fine d)%R by rewrite -lee_fin fineK.
1182+
have ? : (0 <= (fine d)%:E) by rewrite fineK.
1183+
have ? : (fine d)%:E \is a fin_num by [].
1184+
rewrite [in LHS]/esum ge0_funeposM// ge0_funenegM//.
1185+
rewrite (PosEsum.pos_esumZ _ (fun t _ => funepos_ge0 S t)) //.
1186+
rewrite (PosEsum.pos_esumZ _ (fun t _ => funeneg_ge0 S t)) //.
1187+
rewrite -muleBr //.
1188+
apply: fin_num_adde_defr.
1189+
rewrite -esum_pos_esum; first by move=> x _; exact: funepos_ge0.
1190+
exact: (summable_esum_funepos h).
1191+
Qed.
1192+
1193+
Lemma summable_esumZ S c :
1194+
`|c| \is a fin_num -> summable [set : T] S ->
1195+
\esum_(x in [set : T]) c * S x = c * \esum_(x in [set : T]) S x.
1196+
Proof.
1197+
move=> hf h.
1198+
have [c0|c0|->] := comparable_ltgtP (comparableT c 0).
1199+
- rewrite (eq_esum _ _ (fun x => - (`|c| * S x))).
1200+
+ by move=> x _; rewrite lte0_abs// mulNe oppeK.
1201+
rewrite (summable_esumN (summableZ hf h)).
1202+
rewrite (summable_esumZ_pos h (abse_ge0 c) hf).
1203+
by rewrite lte0_abs// mulNe oppeK.
1204+
- apply: (summable_esumZ_pos h (ltW c0)).
1205+
by rewrite -abse_fin_num.
1206+
- rewrite [in RHS]mul0e; under eq_esum do rewrite mul0e.
1207+
by rewrite esum0.
1208+
Qed.
1209+
1210+
Lemma esum_posneg (h : T -> \bar R) :
1211+
\esum_(x in [set:T]) h x =
1212+
\esum_(x in [set:T]) h^\+ x - \esum_(x in [set:T]) h^\- x.
1213+
Proof.
1214+
rewrite [in RHS]esum_pos_esum; first by move=> x _; exact: funepos_ge0.
1215+
rewrite [in RHS]esum_pos_esum; first by move=> x _; exact: funeneg_ge0.
1216+
by rewrite /esum.
1217+
Qed.
1218+
1219+
Lemma summable_esumD S1 S2 :
1220+
summable [set: T] S1 -> summable [set: T] S2 ->
1221+
\esum_(x in [set : T]) (S1 x + S2 x) =
1222+
\esum_(x in [set : T]) S1 x + \esum_(x in [set : T]) S2 x.
1223+
Proof.
1224+
move=> sm1 sm2.
1225+
rewrite -(funeDB S1 S2).
1226+
rewrite (esum_posneg ((S1^\+ \+ S2^\+) \- (S1^\- \+ S2^\-))).
1227+
rewrite (@esumB _ _ [set:T] (S1^\+ \+ S2^\+) (S1^\- \+ S2^\-)
1228+
(summableD (summable_funepos sm1) (summable_funepos sm2))
1229+
(summableD (summable_funeneg sm1) (summable_funeneg sm2))
1230+
(fun i _ => adde_ge0 (funepos_ge0 S1 i) (funepos_ge0 S2 i))
1231+
(fun i _ => adde_ge0 (funeneg_ge0 S1 i) (funeneg_ge0 S2 i))).
1232+
rewrite (@esumD _ _ [set:T] (S1^\+) (S2^\+)
1233+
(fun i _ => funepos_ge0 S1 i) (fun i _ => funepos_ge0 S2 i)).
1234+
rewrite (@esumD _ _ [set:T] (S1^\-) (S2^\-)
1235+
(fun i _ => funeneg_ge0 S1 i) (fun i _ => funeneg_ge0 S2 i)).
1236+
rewrite [in RHS](esum_posneg S1) [in RHS](esum_posneg S2).
1237+
rewrite oppeD.
1238+
apply: fin_num_adde_defl.
1239+
exact: (summable_esum_fin_num (summable_funeneg sm2)).
1240+
by rewrite addeACA.
1241+
Qed.
1242+
1243+
Lemma summable_esumB {V : choiceType} S1 S2 :
1244+
summable [set: T] S1 -> summable [set: T] S2 ->
1245+
\esum_(x in [set : T]) (S1 x - S2 x) =
1246+
\esum_(x in [set : T]) S1 x - \esum_(x in [set : T]) S2 x.
1247+
Proof.
1248+
move=> sm1 sm2.
1249+
have nS2 : summable [set: T] (\- S2) by rewrite -summableN.
1250+
by rewrite (summable_esumD sm1 nS2) (summable_esumN sm2).
1251+
Qed.
1252+
1253+
End esum_summable.
1254+
9631255
Section exchange_esum_ereal_sup.
9641256
Context {R : realType} {T : choiceType} {f : T -> nat -> \bar R}.
9651257
Hypothesis f_ge0 : forall t n, 0 <= f t n.
@@ -970,10 +1262,8 @@ Lemma exchange_esum_ereal_sup (A : set T) :
9701262
ereal_sup (range (fun n => \esum_(x in A) f x n)).
9711263
Proof.
9721264
rewrite ge0_esum.
973-
by move=> x Ax; apply: le_ereal_sup_tmp; exists (f x 0).
974-
under eq_imagel.
975-
move=> B [fin BA]; rewrite fsbig_finite//= ereal_sup_sum//.
976-
over.
1265+
+ by move=> x Ax; apply: le_ereal_sup_tmp; exists (f x 0).
1266+
under eq_imagel => B [fin BA] do rewrite fsbig_finite//= ereal_sup_sum//.
9771267
rewrite exchange_ereal_sup; congr ereal_sup; apply: eq_imagel => n _.
9781268
rewrite ge0_esum//; congr ereal_sup.
9791269
by apply: eq_imagel => B [finB BA]; rewrite fsbig_finite.

theories/measure_theory/measure_function.v

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,8 +1212,7 @@ rewrite esum_bigcup//.
12121212
apply: (@trivIset_seqDU _ B) => //; exists y.
12131213
by split => //; [exact: YBi|exact: YBj].
12141214
rewrite nneseries_esumT//.
1215-
apply: le_esum => /=; first by move=> i _; exact: esum_ge0.
1216-
move=> // i _.
1215+
apply: le_esum => /= i _.
12171216
rewrite [leLHS](_ : _ = \sum_(j \in decomp (seqDU B i)) mu j).
12181217
by rewrite esum_fset//; exact: decomp_finite_set.
12191218
rewrite -SetRing.Rmu_fin_bigcup//=.

0 commit comments

Comments
 (0)