@@ -170,9 +170,9 @@ rewrite -mulrA mulrC -mulrA mulr_natl -[X in _ *+ X]subn0 -sumr_const_nat.
170170apply ler_sum_nat => i /=.
171171case: n => //= n ni.
172172rewrite normrM.
173- pose d := (n.-1 - i)%nat .
174- rewrite -[(n - i)%nat ]prednK ?subn_gt0// predn_sub -/d.
175- rewrite -(subnK (_ : i <= n.-1)%nat ) -/d; last first.
173+ pose d := (n.-1 - i)%N .
174+ rewrite -[(n - i)%N ]prednK ?subn_gt0// predn_sub -/d.
175+ rewrite -(subnK (_ : i <= n.-1)%N ) -/d; last first.
176176 by rewrite -ltnS prednK// (leq_ltn_trans _ ni).
177177rewrite addnC exprD mulrAC -mulrA.
178178apply: ler_pM => //.
@@ -182,7 +182,7 @@ apply: le_trans (_ : d.+1%:R * K ^+ d <= _); last first.
182182 by rewrite ler_nat ltnS /d -subn1 -subnDA leq_subr.
183183rewrite (le_trans (ler_norm_sum _ _ _))//.
184184rewrite mulr_natl -[X in _ *+ X]subn0 -sumr_const_nat ler_sum_nat//= => j jd1.
185- rewrite -[in leRHS](subnK (_ : j <= d)%nat ) -1?ltnS // addnC exprD normrM.
185+ rewrite -[in leRHS](subnK (_ : j <= d)%N ) -1?ltnS // addnC exprD normrM.
186186by rewrite ler_pM// normrX lerXn2r// qualifE/= (le_trans _ zLK).
187187Qed .
188188
@@ -319,23 +319,33 @@ rewrite -addn1 series_addn series_exp_coeff0 big_add1 big1 ?addr0//.
319319by move=> i _; rewrite /exp_coeff /= expr0n mul0r.
320320Unshelve. all: by end_near. Qed .
321321
322- Local Lemma expR_ge1Dx_subproof x : 0 <= x -> 1 + x <= expR x.
322+ Lemma expR_ge1Dxn x n : 0 <= x -> 1 + x ^+ n.+1 / n.+1`!%:R <= expR x.
323323Proof .
324324move=> x_ge0; rewrite /expR.
325- pose f (x : R) i := (i == 0%nat)%:R + x *+ (i == 1%nat).
326- have F n : (1 < n)%nat -> \sum_(0 <= i < n) (f x i) = 1 + x.
327- move=> /subnK<-.
328- by rewrite addn2 !big_nat_recl //= /f /= mulr1n !mulr0n big1 ?add0r ?addr0.
329- have -> : 1 + x = limn (series (f x)).
330- by apply/esym/lim_near_cst => //; near=> n; apply: F; near: n.
331- apply: ler_lim; first by apply: is_cvg_near_cst; near=> n; apply: F; near: n.
325+ pose f n (x : R) i := (i == 0)%:R + x ^+ n / n`!%:R *+ (i == n).
326+ have F m : (n.+1 < m)%N ->
327+ \sum_(0 <= i < m) (f n.+1 x i) = 1 + x ^+ n.+1 / n.+1`!%:R.
328+ move=> n1m.
329+ rewrite (@big_cat_nat _ _ _ n.+2)//= big_nat_recr// big_nat_recl//=.
330+ rewrite big_nat_cond big1 ?addr0; last first.
331+ by move=> i /[!andbT] /[!leq0n]/= ni; rewrite /f/= lt_eqF//= add0r.
332+ rewrite big_nat_cond big1 ?addr0; last first.
333+ move=> i /[!andbT] /andP[ni mi]; rewrite /f !gtn_eqF//= ?add0r//.
334+ exact: ltn_trans ni.
335+ by rewrite /f/= add0r mulr0n addr0 eqxx 2!mulr1n.
336+ rewrite [leLHS](_ : _ = limn (series (f n.+1 x))); last first.
337+ by apply/esym/(@lim_near_cst R^o) => //; near=> k; apply: F; near: k.
338+ apply: ler_lim; first by apply: is_cvg_near_cst; near=> k; apply: F; near: k.
332339 exact: is_cvg_series_exp_coeff.
333- by near=> n; apply: ler_sum => -[|[|i]] _;
334- rewrite /f /exp_coeff /= !(mulr0n, mulr1n, expr0, expr1, divr1, addr0, add0r)
335- // exp_coeff_ge0.
340+ near=> k; apply: ler_sum => -[|[|i]] _; rewrite /f /exp_coeff/= ?add0r.
341+ - by rewrite !(mulr0n, expr0, addr0, divr1).
342+ - case: n F; first by rewrite !(mulr0n, mulr1n, expr0, addr0, add0r, divr1).
343+ by move=> n F; rewrite mulr0n expr1 divr1.
344+ - rewrite eqSS; case: eqP => [->|_]; rewrite ?mulr1n//.
345+ by rewrite mulr0n divr_ge0// exprn_ge0.
336346Unshelve. all: by end_near. Qed .
337347
338- Lemma exp_coeffE x : exp_coeff x = ( fun n => (fun n => (n`!%:R)^-1) n * x ^+ n) .
348+ Lemma exp_coeffE x : exp_coeff x = fun n => (fun n => (n`!%:R)^-1) n * x ^+ n.
339349Proof . by apply/funext => i; rewrite /exp_coeff /= mulrC. Qed .
340350
341351Import GRing.Theory.
@@ -386,7 +396,8 @@ Proof. by rewrite -[X in _ X * _ = _]addr0 expRxDyMexpx expR0. Qed.
386396
387397Lemma pexpR_gt1 x : 0 < x -> 1 < expR x.
388398Proof .
389- by move=> x0; rewrite (lt_le_trans _ (expR_ge1Dx_subproof (ltW x0)))// ltrDl.
399+ move=> x0; rewrite (lt_le_trans _ (expR_ge1Dxn 0%N (ltW x0)))// ltrDl.
400+ by rewrite expr1 divr1.
390401Qed .
391402
392403Lemma expR_gt0 x : 0 < expR x.
0 commit comments