Skip to content

Commit 68b3cfc

Browse files
committed
Add set of lemmas for esum
1 parent 0653637 commit 68b3cfc

2 files changed

Lines changed: 280 additions & 12 deletions

File tree

theories/esum.v

Lines changed: 279 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) :
185+
(forall i, S i -> f i <= g i) ->
159186
\esum_(i in S) f i <= \esum_(i in S) g i.
160187
Proof.
161188
move=> fg; rewrite ge_ereal_sup => //= _ [X [finX XS]] <-.
162189
by rewrite pos_esum_ge//; exists X => //; apply: lee_fsum => // t /XS /fg.
163190
Qed.
164191

192+
Lemma le_pos_esum_fine
193+
{U : choiceType} (A : set U) (B : set T) (f : T -> U -> \bar R) :
194+
(\esum_(i in A) (fine (\esum_(x in B) f x i))%:E <=
195+
\esum_(i in A) (\esum_(x in B) f x i))%E.
196+
Proof.
197+
rewrite le_pos_esum // => i ?.
198+
case h: (\esum_(x in B) _) => //=.
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.
@@ -385,18 +423,53 @@ Section esum_realType.
385423
Variables (R : realType) (T : choiceType).
386424
Implicit Types (S : set T) (f : T -> \bar R).
387425

388-
Lemma le_esum S f g : (forall x, S x -> 0 <= f x) ->
426+
Lemma sum_esum_ge J (f: T -> R) :
427+
(forall x, 0 <= f x)%R ->
428+
uniq J -> ((\sum_(j <- J) f j)%:E <= \esum_(i in [set:T]) (f i)%:E)%E.
429+
Proof.
430+
move=> f0 uJ; rewrite ge0_esum.
431+
+ by move=> x _; rewrite lee_fin; exact: f0.
432+
exact: (PosEsum.pos_sum_esum_ge).
433+
Qed.
434+
435+
Lemma le_esum S f g :
389436
(forall x, S x -> f x <= g x) ->
390-
\esum_(x in S) f x <= \esum_(x in S) g x.
437+
\esum_(i in S) f i <= \esum_(i in S) g i.
391438
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.
439+
move=> leS.
440+
have leS' : {in S, forall x, f x <= g x} by move=> x /set_mem; exact: leS.
441+
rewrite /esum; apply: leeB.
442+
- by apply: PosEsum.le_pos_esum => x /mem_set; exact: funepos_le.
443+
- by apply: PosEsum.le_pos_esum => x /mem_set; exact: funeneg_le.
395444
Qed.
396445

397446
Lemma esum_ge0 S f : (forall x, S x -> 0 <= f x) -> 0 <= \esum_(i in S) f i.
398447
Proof. by move=> f0; rewrite ge0_esum// PosEsum.pos_esum_ge0. Qed.
399448

449+
Lemma le_esum_fine {U : choiceType} (A : set U) (B : set T) (f : T -> U -> \bar R) :
450+
(forall x y, 0 <= f x y)%E ->
451+
(\esum_(i in A) (fine (\esum_(x in B) f x i))%:E <=
452+
\esum_(i in A) (\esum_(x in B) f x i))%E.
453+
Proof.
454+
move=> hf.
455+
rewrite [leLHS]ge0_esum.
456+
+ by move=> i _; rewrite lee_fin; apply: fine_ge0; apply esum_ge0.
457+
rewrite [leRHS]ge0_esum; first by move=> i _; apply esum_ge0.
458+
under [leLHS]PosEsum.eq_pos_esum => i _ do rewrite ge0_esum //.
459+
under [leRHS]PosEsum.eq_pos_esum => i _ do rewrite ge0_esum //.
460+
exact: PosEsum.le_pos_esum_fine.
461+
Qed.
462+
463+
Lemma subset_esum (I J : set T) (a : T -> \bar R) :
464+
(forall x, J x -> 0 <= a x) ->
465+
I `<=` J -> (\esum_(i in I) a i <= \esum_(i in J) a i)%E.
466+
Proof.
467+
move=> a0 IJ.
468+
have ?: forall x, I x -> 0 <= a x by move => x /IJ /a0.
469+
rewrite ge0_esum // ge0_esum //.
470+
by apply: PosEsum.subset_pos_esum.
471+
Qed.
472+
400473
Lemma esum_fset S f : finite_set S -> (forall i, S i -> 0 <= f i) ->
401474
\esum_(i in S) f i = \sum_(i \in S) f i.
402475
Proof. by move=> finF f0; rewrite ge0_esum//; exact: PosEsum.pos_esum_fset. Qed.
@@ -410,6 +483,13 @@ move=> Df0; rewrite ge0_esum; last exact: PosEsum.pos_esum1.
410483
by move=> i /Df0 ->.
411484
Qed.
412485

486+
Lemma esum0 {R : realFieldType} {I : choiceType} (D : set I) :
487+
\esum_(i in D) (@cst I (\bar R) 0 i) = 0.
488+
Proof.
489+
by rewrite esum1 ?subee// => r _;
490+
rewrite ?[LHS](funepos_cst0,funeneg_cst0).
491+
Qed.
492+
413493
Section esum_cond.
414494
Context {R : realType} {T : choiceType}.
415495
Implicit Types (A B : set T) (f : T -> \bar R).
@@ -483,6 +563,10 @@ Lemma esum_ge {R : realType} {T : choiceType} (I : set T) (f : T -> \bar R) x :
483563
x <= \esum_(i in I) f i.
484564
Proof. by move=> f0 If; rewrite ge0_esum// PosEsum.pos_esum_ge. Qed.
485565

566+
Lemma esum_unit {R : realType} {T : choiceType} (f : T -> \bar R) x :
567+
\esum_(i in [set:T]) (if x == i then f i else 0) = f x.
568+
Proof. by rewrite esum_if_eq_op esum_set1. Qed.
569+
486570
Lemma esum_eq0P {R : realType} {T : choiceType} (A : set T) (f : T -> \bar R) :
487571
(forall i, A i -> 0 <= f i) ->
488572
\esum_(x in A) f x = 0 -> forall x, A x -> f x = 0.
@@ -493,6 +577,18 @@ exists [set x]; first by split => // t ->.
493577
by rewrite -esum_set1 esum_fset// => i ->; exact: f0.
494578
Qed.
495579

580+
Lemma neq0_esum {R : realType} {T : choiceType} (I : set T) (a : T -> \bar R) :
581+
\esum_(i in I) a i <> 0 -> exists i, a i <> 0.
582+
Proof.
583+
move=> ?. apply/existsp_asboolPn /asboolPn => h.
584+
have // : (\esum_(i in I) a i = 0); by apply esum1.
585+
Qed.
586+
587+
Lemma esum_ge1 {R : realType} {T : choiceType} (I : set T) (f : T -> \bar R) :
588+
(forall x, I x -> 0 <= f x) ->
589+
(forall x, I x -> f x <= \esum_(i in (I : set T)) f i)%E.
590+
Proof. by move=> f0 x Ix; rewrite ge0_esum//; exact: PosEsum.pos_esum_ge1. Qed.
591+
496592
Section esumZ.
497593
Context {R : realType} {T : choiceType} (A : set T) (f : T -> \bar R).
498594

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

879+
Lemma eq_summable D f g : f =1 g -> summable D f -> summable D g.
880+
Proof.
881+
move => eq_fg; rewrite /summable; apply: le_lt_trans.
882+
by apply: le_esum => ?; rewrite eq_fg.
883+
Qed.
884+
885+
Lemma le_summable D f g :
886+
(forall x, 0 <= f x <= g x) -> summable D g -> summable D f.
887+
Proof.
888+
move => eq_fg; rewrite /summable; apply: le_lt_trans.
889+
apply: le_esum => i //.
890+
have /andP := (eq_fg i).
891+
move =>[ h1 h2]; rewrite !gee0_abs => //=.
892+
by apply /le_trans;first apply h1.
893+
Qed.
894+
783895
Lemma summableD D f g : summable D f -> summable D g -> summable D (f \+ g).
784896
Proof.
785897
move=> Df Dg; apply: le_lt_trans (lte_add_pinfty Df Dg).
@@ -812,6 +924,50 @@ apply: PosEsum.le_pos_esum => t Dt.
812924
by rewrite -/((abse \o f) t) -funeposDneg gee0_abs// leeDr.
813925
Qed.
814926

927+
Lemma summable_muleC D f1 f2 :
928+
summable D (f2 \* f1) -> summable D (f1 \* f2).
929+
Proof.
930+
rewrite /summable => ?.
931+
by under eq_esum do rewrite abseM muleC -abseM.
932+
Qed.
933+
934+
Lemma summableZ D f c :
935+
c \is a fin_num -> summable D f -> summable D (fun x => c * f x).
936+
Proof.
937+
rewrite /summable => ??.
938+
under eq_esum do rewrite abseM.
939+
by rewrite esumZ // lte_mul_pinfty //= abse_fin_num.
940+
Qed.
941+
942+
Lemma summableZr D f c :
943+
c \is a fin_num -> summable D f -> summable D (fun x => f x * c).
944+
Proof. by move=> ??; apply/summable_muleC /summableZ. Qed.
945+
946+
Lemma summableMl D f1 f2 :
947+
(exists2 M, (forall x, D x -> `|f1 x| <= M) & M \is a fin_num) ->
948+
summable D f2 -> summable D (f1 \* f2).
949+
Proof.
950+
move=> [M h1 Mfin] sf2.
951+
rewrite /summable; apply: le_lt_trans (summableZ Mfin sf2).
952+
apply: le_esum => x Dx; rewrite !abseM.
953+
apply: lee_wpmul2r; first exact: abse_ge0.
954+
by apply: le_trans (h1 x Dx) (lee_abs _).
955+
Qed.
956+
957+
Lemma summableMr D f1 f2 :
958+
(exists2 M, (forall x, D x -> `|f2 x| <= M) & M \is a fin_num ) ->
959+
summable D f1 ->
960+
summable D (f1 \* f2).
961+
Proof. by move => ??; apply/summable_muleC /summableMl. Qed.
962+
963+
Lemma summableM D f1 f2 :
964+
summable D f1 -> summable D f2 -> summable D (f1 \* f2).
965+
Proof.
966+
rewrite summableE => smS1 smS2; apply/summableMl => //.
967+
exists (\esum_(x in D) `| f1 x|) => //.
968+
by move => x; apply/esum_ge1.
969+
Qed.
970+
815971
End summable_lemmas.
816972

817973
Import numFieldNormedType.Exports.
@@ -960,6 +1116,121 @@ Qed.
9601116

9611117
End esumB.
9621118

1119+
Section esum_summable.
1120+
Context {R : realType} {T : choiceType}.
1121+
Implicit Types (S : T -> \bar R).
1122+
1123+
Lemma summable_esum_funepos S :
1124+
summable [set: T] S -> \esum_(t in [set: T]) S^\+ t \is a fin_num.
1125+
Proof.
1126+
move => /summable_funepos.
1127+
rewrite summableE.
1128+
rewrite (@eq_esum _ _ _ (fun y : T => S^\+ y) (fun y : T => `|S^\+ y|)) //=.
1129+
by move => ??; rewrite gee0_abs.
1130+
Qed.
1131+
1132+
Lemma summable_esum_fin_num S :
1133+
summable [set: T] S -> \esum_(i in [set:T]) S i \is a fin_num.
1134+
Proof.
1135+
move=> sm; rewrite /esum fin_numB; apply/andP; split.
1136+
- rewrite /PosEsum.pos_esum -ge0_esum; first by move=> x _; exact: funepos_ge0.
1137+
exact: (summable_esum_funepos sm).
1138+
- have smN : summable [set: T] (\- S) by rewrite -summableN.
1139+
rewrite /PosEsum.pos_esum -ge0_esum; first by move=> x _; exact: funeneg_ge0.
1140+
by rewrite -funeposN; exact: (summable_esum_funepos smN).
1141+
Qed.
1142+
1143+
Lemma summable_esumN S :
1144+
summable [set : T] S -> \esum_(i in [set:T]) - S i = - \esum_(i in [set:T]) S i.
1145+
Proof.
1146+
move=> hs; rewrite /esum funeposN funenegN oppeB.
1147+
- apply: fin_num_adde_defr.
1148+
rewrite /PosEsum.pos_esum -ge0_esum; first by move=> x _; exact: funepos_ge0.
1149+
exact: (summable_esum_funepos hs).
1150+
- by rewrite addeC.
1151+
Qed.
1152+
1153+
Lemma summable_esumZ_pos S :
1154+
summable [set : T] S ->
1155+
forall d : \bar R, 0 <= d -> d \is a fin_num ->
1156+
\esum_(x in [set:T]) d * S x = d * \esum_(x in [set:T]) S x.
1157+
Proof.
1158+
move=> h d d0 dfin.
1159+
have -> : d = (fine d)%:E by rewrite fineK.
1160+
have ? : (0 <= fine d)%R by rewrite -lee_fin fineK.
1161+
have ? : (0 <= (fine d)%:E) by rewrite fineK.
1162+
have ? : (fine d)%:E \is a fin_num by [].
1163+
rewrite [in LHS]/esum ge0_funeposM// ge0_funenegM//.
1164+
rewrite (PosEsum.pos_esumZ _ (fun t _ => funepos_ge0 S t)) //.
1165+
rewrite (PosEsum.pos_esumZ _ (fun t _ => funeneg_ge0 S t)) //.
1166+
rewrite -muleBr //.
1167+
apply: fin_num_adde_defr.
1168+
rewrite /PosEsum.pos_esum -ge0_esum; first by move=> x _; exact: funepos_ge0.
1169+
exact: (summable_esum_funepos h).
1170+
Qed.
1171+
1172+
Lemma summable_esumZ S c :
1173+
`|c| \is a fin_num -> summable [set : T] S ->
1174+
\esum_(x in [set : T]) c * S x = c * \esum_(x in [set : T]) S x.
1175+
Proof.
1176+
move=> hf h.
1177+
have [c0|c0|->] := comparable_ltgtP (comparableT c 0).
1178+
- rewrite (eq_esum _ _ (fun x => - (`|c| * S x))).
1179+
+ by move=> x _; rewrite lte0_abs// mulNe oppeK.
1180+
rewrite (summable_esumN (summableZ hf h)).
1181+
rewrite (summable_esumZ_pos h (abse_ge0 c) hf).
1182+
by rewrite lte0_abs// mulNe oppeK.
1183+
- apply: (summable_esumZ_pos h (ltW c0)).
1184+
by rewrite -abse_fin_num.
1185+
- rewrite [in RHS]mul0e; under eq_esum do rewrite mul0e.
1186+
by rewrite esum0.
1187+
Qed.
1188+
1189+
Lemma esum_posneg (h : T -> \bar R) :
1190+
\esum_(x in [set:T]) h x =
1191+
\esum_(x in [set:T]) h^\+ x - \esum_(x in [set:T]) h^\- x.
1192+
Proof.
1193+
rewrite [in RHS]ge0_esum; first by move=> x _; exact: funepos_ge0.
1194+
rewrite [in RHS]ge0_esum; first by move=> x _; exact: funeneg_ge0.
1195+
by rewrite /esum.
1196+
Qed.
1197+
1198+
Lemma summable_esumD S1 S2 :
1199+
summable [set: T] S1 -> summable [set: T] S2 ->
1200+
\esum_(x in [set : T]) (S1 x + S2 x) =
1201+
\esum_(x in [set : T]) S1 x + \esum_(x in [set : T]) S2 x.
1202+
Proof.
1203+
move=> sm1 sm2.
1204+
rewrite -(funeDB S1 S2).
1205+
rewrite (esum_posneg ((S1^\+ \+ S2^\+) \- (S1^\- \+ S2^\-))).
1206+
rewrite (@esumB _ _ [set:T] (S1^\+ \+ S2^\+) (S1^\- \+ S2^\-)
1207+
(summableD (summable_funepos sm1) (summable_funepos sm2))
1208+
(summableD (summable_funeneg sm1) (summable_funeneg sm2))
1209+
(fun i _ => adde_ge0 (funepos_ge0 S1 i) (funepos_ge0 S2 i))
1210+
(fun i _ => adde_ge0 (funeneg_ge0 S1 i) (funeneg_ge0 S2 i))).
1211+
rewrite (@esumD _ _ [set:T] (S1^\+) (S2^\+)
1212+
(fun i _ => funepos_ge0 S1 i) (fun i _ => funepos_ge0 S2 i)).
1213+
rewrite (@esumD _ _ [set:T] (S1^\-) (S2^\-)
1214+
(fun i _ => funeneg_ge0 S1 i) (fun i _ => funeneg_ge0 S2 i)).
1215+
rewrite [in RHS](esum_posneg S1) [in RHS](esum_posneg S2).
1216+
rewrite oppeD.
1217+
apply: fin_num_adde_defl.
1218+
exact: (summable_esum_fin_num (summable_funeneg sm2)).
1219+
by rewrite addeACA.
1220+
Qed.
1221+
1222+
Lemma summable_esumB {V : choiceType} S1 S2 :
1223+
summable [set: T] S1 -> summable [set: T] S2 ->
1224+
\esum_(x in [set : T]) (S1 x - S2 x) =
1225+
\esum_(x in [set : T]) S1 x - \esum_(x in [set : T]) S2 x.
1226+
Proof.
1227+
move=> sm1 sm2.
1228+
have nS2 : summable [set: T] (\- S2) by rewrite -summableN.
1229+
by rewrite (summable_esumD sm1 nS2) (summable_esumN sm2).
1230+
Qed.
1231+
1232+
End esum_summable.
1233+
9631234
Section exchange_esum_ereal_sup.
9641235
Context {R : realType} {T : choiceType} {f : T -> nat -> \bar R}.
9651236
Hypothesis f_ge0 : forall t n, 0 <= f t n.
@@ -970,10 +1241,8 @@ Lemma exchange_esum_ereal_sup (A : set T) :
9701241
ereal_sup (range (fun n => \esum_(x in A) f x n)).
9711242
Proof.
9721243
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.
1244+
+ by move=> x Ax; apply: le_ereal_sup_tmp; exists (f x 0).
1245+
under eq_imagel => B [fin BA] do rewrite fsbig_finite//= ereal_sup_sum//.
9771246
rewrite exchange_ereal_sup; congr ereal_sup; apply: eq_imagel => n _.
9781247
rewrite ge0_esum//; congr ereal_sup.
9791248
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)