@@ -964,6 +964,10 @@ rewrite exprDn (bigD1 (inord 1)) ?inordK// subn1 expr1 bin1 lerDl sumr_ge0//.
964
964
by move=> i; rewrite ?(mulrn_wge0, mulr_ge0, exprn_ge0, subr_ge0)// ltW.
965
965
Unshelve. all: by end_near. Qed .
966
966
967
+ Lemma geometric_ge0 (R : numFieldType) (a z : R) n :
968
+ 0 <= a -> 0 <= z -> geometric a z n >= 0.
969
+ Proof . by move=> *; rewrite mulr_ge0// exprn_ge0. Qed .
970
+
967
971
Lemma geometric_seriesE (R : numFieldType) (a z : R) : z != 1 ->
968
972
series (geometric a z) = [sequence a * (1 - z ^+ n) / (1 - z)]_n.
969
973
Proof .
@@ -1773,7 +1777,7 @@ rewrite -lim_shift_cst; last by rewrite (@lt_le_trans _ _ 0)// f0// leq_addr.
1773
1777
Unshelve. all: by end_near. Qed .
1774
1778
1775
1779
Lemma nneseries_split_cond (R : realType) (f : nat -> \bar R) N n (P : pred nat) :
1776
- (forall k, P k -> 0 <= f k)%E ->
1780
+ (forall k, P k -> 0 <= f k) ->
1777
1781
\sum_(N <= k <oo | P k) f k =
1778
1782
\sum_(N <= k < N + n | P k) f k + \sum_(N + n <= k <oo | P k) f k.
1779
1783
Proof .
@@ -1782,15 +1786,36 @@ rewrite big_mkcond/= (nneseries_split n)// => k Nk.
1782
1786
by case: ifPn => //; exact: NPf.
1783
1787
Qed .
1784
1788
1789
+ Lemma nneseriesD1 {R : realType} (f : nat -> \bar R) n (P : pred nat) :
1790
+ (forall k, P k -> 0 <= f k) -> P n ->
1791
+ \sum_(0 <= k <oo | P k) f k =
1792
+ f n + \sum_(0 <= k <oo | P k && (k != n)) f k.
1793
+ Proof .
1794
+ move=> f0 Pn.
1795
+ rewrite (@nneseries_split_cond _ f 0%N n.+1 P)// add0n big_mkcond/=.
1796
+ rewrite big_nat_recr//= Pn -big_mkcond/= -addrA addrCA; congr +%E.
1797
+ rewrite [RHS]eseries_mkcondr.
1798
+ rewrite [in RHS](@nneseries_split_cond _ _ _ n.+1 P)//; last first.
1799
+ by move=> k Pk; case: ifPn => // _; exact: f0.
1800
+ rewrite add0n [X in _ = X + _]big_mkcond/= big_nat_recr//= Pn eqxx/= adde0.
1801
+ rewrite -big_mkcond//=; congr +%E.
1802
+ rewrite big_seq_cond [RHS]big_seq_cond; apply: eq_bigr => /= i.
1803
+ by rewrite mem_index_iota leq0n/= => /andP[ij Pi]; rewrite lt_eqF.
1804
+ rewrite eseries_cond [RHS]eseries_cond; apply: eq_eseriesr => i /andP[Pi ji].
1805
+ by rewrite gt_eqF.
1806
+ Qed .
1807
+
1785
1808
End nneseries_split.
1786
1809
Arguments nneseries_split {R f} _ _.
1787
1810
Arguments nneseries_split_cond {R f} _ _ _.
1811
+ Arguments nneseriesD1 {R f} n {P}.
1788
1812
1789
- Lemma nneseries_recl (R : realType) (f : nat -> \bar R) :
1790
- (forall k, 0 <= f k) -> \sum_(k <oo) f k = f 0%N + \sum_(1 <= k <oo) f k.
1813
+ Lemma nneseries_recl {R : realType} (P : pred nat) (f : nat -> \bar R) :
1814
+ (forall k, P k -> 0 <= f k) -> P 0%N ->
1815
+ \sum_(0 <= k <oo | P k) f k = f 0%N + \sum_(1 <= k <oo | P k) f k.
1791
1816
Proof .
1792
- move=> f0 ; rewrite [LHS](nneseries_split _ 1 )// add0n .
1793
- by rewrite /index_iota subn0/= big_cons big_nil addr0 .
1817
+ move=> F0 P0 ; rewrite (nneseriesD1 0%N )//; congr +%E .
1818
+ by rewrite [RHS]eseries_cond; apply: eq_eseriesl => n; rewrite lt0n .
1794
1819
Qed .
1795
1820
1796
1821
Lemma nneseries_tail_cvg (R : realType) (f : (\bar R)^nat) P :
0 commit comments