@@ -320,9 +320,9 @@ rewrite -addn1 series_addn series_exp_coeff0 big_add1 big1 ?addr0//.
320320by move=> i _; rewrite /exp_coeff /= expr0n mul0r.
321321Unshelve. all: by end_near. Qed .
322322
323- Lemma expR_ge1Dx x : 0 <= x -> 1 + x <= expR x.
323+ Local Lemma expR_ge1Dx_subproof x : 0 <= x -> 1 + x <= expR x.
324324Proof .
325- move=> x_gt0 ; rewrite /expR.
325+ move=> x_ge0 ; rewrite /expR.
326326pose f (x : R) i := (i == 0%nat)%:R + x *+ (i == 1%nat).
327327have F n : (1 < n)%nat -> \sum_(0 <= i < n) (f x i) = 1 + x.
328328 move=> /subnK<-.
@@ -387,7 +387,7 @@ Proof. by rewrite -[X in _ X * _ = _]addr0 expRxDyMexpx expR0. Qed.
387387
388388Lemma pexpR_gt1 x : 0 < x -> 1 < expR x.
389389Proof .
390- by move=> x_gt0 ; rewrite (lt_le_trans _ (expR_ge1Dx (ltW x_gt0 )))// ltrDl.
390+ by move=> x0 ; rewrite (lt_le_trans _ (expR_ge1Dx_subproof (ltW x0 )))// ltrDl.
391391Qed .
392392
393393Lemma expR_gt0 x : 0 < expR x.
@@ -458,6 +458,28 @@ case: (ltrgtP x y) => [xLy|yLx|<-]; last by rewrite lexx.
458458- by rewrite leNgt ltr_expR yLx.
459459Qed .
460460
461+ Lemma expR_gt1Dx x : x != 0 -> 1 + x < expR x.
462+ Proof .
463+ rewrite neq_lt => /orP[x0|x0].
464+ - have [?|_] := leP x (-1).
465+ by rewrite (@le_lt_trans _ _ 0) ?expR_gt0// -lerBrDl sub0r.
466+ have [] := @MVT R expR expR _ _ x0 (fun x _ => is_derive_expR x).
467+ exact/continuous_subspaceT/continuous_expR.
468+ move=> c; rewrite in_itv/= => /andP[xc c0].
469+ rewrite expR0 sub0r => /eqP; rewrite subr_eq addrC -subr_eq => /eqP <-.
470+ by rewrite mulrN opprK ltrD2l ltr_nMl// -expR0 ltr_expR.
471+ - have [] := @MVT R expR expR _ _ x0 (fun x _ => is_derive_expR x).
472+ exact/continuous_subspaceT/continuous_expR.
473+ move=> c; rewrite in_itv/= => /andP[c0 cx].
474+ rewrite subr0 expR0 => /eqP /[!subr_eq] /eqP ->.
475+ by rewrite addrC ltrD2r ltr_pMl// -expR0 ltr_expR.
476+ Qed .
477+
478+ Lemma expR_ge1Dx x : 1 + x <= expR x.
479+ Proof .
480+ by have [->|/expR_gt1Dx/ltW//] := eqVneq x 0; rewrite expR0 addr0.
481+ Qed .
482+
461483Lemma expR_inj : injective (@expR R).
462484Proof .
463485move=> x y exE.
@@ -471,11 +493,11 @@ move=> x_ge1; have x_ge0 : 0 <= x by apply: le_trans x_ge1.
471493have [x1 x1Ix| |x1 _ /eqP] := @IVT _ (fun y => expR y - x) _ _ 0 x_ge0.
472494- apply: continuousB => // y1; last exact: cst_continuous.
473495 by apply/continuous_subspaceT=> ?; exact: continuous_expR.
474- - rewrite expR0; have [_| |] := ltrgtP (1- x) (expR x - x).
496+ - rewrite expR0; have [_| |] := ltrgtP (1 - x) (expR x - x).
475497 + by rewrite subr_le0 x_ge1 subr_ge0 (le_trans _ (expR_ge1Dx _)) ?lerDr.
476498 + by rewrite ltrD2r expR_lt1 ltNge x_ge0.
477499 + rewrite subr_le0 x_ge1 => -> /=; rewrite subr_ge0.
478- by rewrite (le_trans _ (expR_ge1Dx x_ge0 )) ?lerDr.
500+ by rewrite (le_trans _ (expR_ge1Dx _ )) ?lerDr.
479501- rewrite subr_eq0 => /eqP x1_x; exists x1; split => //.
480502 + by rewrite -ler_expR expR0 x1_x.
481503 + by rewrite -x1_x expR_ge1Dx // -ler_expR x1_x expR0.
@@ -543,8 +565,11 @@ case: x => /= [r| |]; last by rewrite mul0e.
543565 + by rewrite mulyy.
544566Qed .
545567
546- Lemma expeR_ge1Dx x : 0 <= x -> 1 + x <= expeR x.
547- Proof . by case: x => //= r; rewrite -EFinD !lee_fin; exact: expR_ge1Dx. Qed .
568+ Lemma expeR_ge1Dx x : 1 + x <= expeR x.
569+ Proof .
570+ case : x => //= [r|]; last by rewrite addeNy.
571+ by rewrite -EFinD !lee_fin; exact: expR_ge1Dx.
572+ Qed .
548573
549574Lemma ltr_expeR : {mono expeR : x y / x < y}.
550575Proof .
@@ -646,10 +671,10 @@ move=> x_gt0; elim: n => [|n ih] /=; first by rewrite expr0 ln1 mulr0n.
646671by rewrite !exprS lnM ?qualifE//= ?exprn_gt0// mulrS ih.
647672Qed .
648673
649- Lemma le_ln1Dx x : 0 <= x -> ln (1 + x) <= x.
674+ Lemma le_ln1Dx x : -1 < x -> ln (1 + x) <= x.
650675Proof .
651- move=> x_ge0 ; rewrite -ler_expR lnK ?expR_ge1Dx //.
652- by apply: lt_le_trans (_ : 0 < 1) _; rewrite // lerDl .
676+ move=> N1x ; rewrite -ler_expR lnK ?expR_ge1Dx //.
677+ by rewrite posrE addrC -ltrBlDr sub0r .
653678Qed .
654679
655680Lemma ln_sublinear x : 0 < x -> ln x < x.
0 commit comments