Module mathcomp.analysis.exp
From mathcomp Require Import boot order ssralg ssrint ssrnum matrix.From mathcomp Require Import interval rat interval_inference.
#[warning="-warn-library-file-internal-analysis"]
From mathcomp Require Import unstable.
From mathcomp Require Import boolp classical_sets functions mathcomp_extra.
From mathcomp Require Import reals topology ereal tvs normedtype landau.
From mathcomp Require Import sequences derive realfun convex.
Unset SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Import Order.TTheory GRing.Theory Num.Theory.
Import numFieldNormedType.Exports.
Local Open Scope classical_set_scope.
Local Open Scope ring_scope.
Reserved Notation "x '`^?' ( r +? s )"
(format "x '`^?' ( r +? s )", r at next level, at level 11) .
Lemma
Source code
Proof.
solve [apply: normr_nneg] : core.
Section PseriesDiff.
Variable : realType.
Definition
Source code
Fact
Source code
cvgn (pseries f x) -> `|z| < `|x| ->
cvgn (pseries (fun => `|f i|) z).
Proof.
have Kzxn n : 0 <= `|K + 1| * `|z ^+ n| / `|x ^+ n| by rewrite !mulr_ge0.
apply: normed_cvg.
apply: series_le_cvg Kzxn _ _ => [//=| /= n|].
rewrite (_ : `|_ * _| = `|f n * x ^+ n| * `|z ^+ n| / `|x ^+ n|).
rewrite !normrM normr_id mulrAC mulfK // normr_eq0 expf_eq0 andbC.
by case: ltrgt0P zLx; rewrite //= normr_lt0.
do! (apply: ler_pM || apply: mulr_ge0 || rewrite invr_ge0) => //.
by apply Kf => //; rewrite (lt_le_trans _ (ler_norm _))// ltrDl.
have F : `|z / x| < 1.
by rewrite normrM normfV ltr_pdivrMr ?mul1r // (le_lt_trans _ zLx).
rewrite (_ : (fun _ => _) = geometric `|K + 1| `|z / x|).
by apply/funext => i /=; rewrite normrM exprMn mulrA normfV !normrX exprVn.
by apply: is_cvg_geometric_series; rewrite normr_id.
Qed.
Fact
Source code
cvgn (pseries f x) -> `|z| < `|x| -> cvgn (pseries f z).
Proof.
Definition
Source code
Lemma
Source code
Proof.
Lemma
Source code
pseries_diffs (fun => (n`!%:R)^-1) = (fun => (n`!%:R)^-1 : R).
Lemma
Source code
\sum_(0 <= < n) pseries_diffs f i * x ^+ i =
(\sum_(0 <= < n) i%:R * f i * x ^+ i.-1) + n%:R * f n * x ^+ n.-1.
Proof.
under eq_bigr do unfold pseries_diffs.
by rewrite big_nat_recr //= big_nat_recl //= !mul0r add0r.
Qed.
Lemma
Source code
let := i%:R * f i * x ^+ i.-1 in
cvgn (pseries (pseries_diffs f) x) ->
series s @ \oo --> limn (pseries (pseries_diffs f) x).
Proof.
rewrite /pseries/= [X in X @ \oo --> _]/series /=.
rewrite [X in X @ \oo --> _](_ : _ = (fun => \sum_(0 <= < n)
pseries_diffs f i * x ^+ i - n%:R * f n * x ^+ n.-1)).
by rewrite funeqE => n; rewrite pseries_diffs_sumE addrK.
by apply: cvgB => //; rewrite -cvg_shiftS; exact: cvg_series_cvg_0.
Qed.
Lemma
Source code
cvgn (pseries (pseries_diffs f) x) ->
cvgn ([series i%:R * f i * x ^+ i.-1]_).
Proof.
Let
Source code
\sum_(0 <= < m) ((h + z) ^+ (m - i) * z ^+ i - z ^+ m) =
\sum_(0 <= < m) z ^+ i * ((h + z) ^+ (m - i) - z ^+ (m - i)).
Proof.
Let
Source code
h != 0 ->
((h + z) ^+ n - (z ^+ n)) / h - n%:R * z ^+ n.-1 =
h * \sum_(0 <= < n.-1) z ^+ i *
\sum_(0 <= < n.-1 - i) (h + z) ^+ j * z ^+ (n.-2 - i - j).
Proof.
rewrite mulrBr mulrC divfK //.
case: n => [|n]; first by rewrite !expr0 !(mul0r, mulr0, subrr, big_geq).
rewrite subrXX addrK -mulrBr; congr (_ * _).
rewrite -(big_mkord xpredT (fun => (h + z) ^+ (n - i) * z ^+ i)).
rewrite big_nat_recr //= subnn expr0 -addrA -mulrBl -nat1r opprD addNKr mulNr.
rewrite mulr_natl -[in X in _ *+ X](subn0 n) -sumr_const_nat -sumrB.
rewrite pseries_diffs_P1 mulr_sumr !big_mkord; apply: eq_bigr => i _.
rewrite mulrCA; congr (_ * _).
rewrite subrXX addrK big_nat_rev /= big_mkord; congr (_ * _).
by apply: eq_bigr => k _; rewrite -!predn_sub subKn // -subnS.
Qed.
Let
Source code
h != 0 -> `|z| <= K -> `|h + z| <= K ->
`|((h +z) ^+ n - z ^+ n) / h - n%:R * z ^+ n.-1|
<= n%:R * n.-1%:R * K ^+ n.-2 * `|h|.
Proof.
rewrite pseries_diffs_P2// normrM mulrC.
rewrite ler_pM2r ?normr_gt0//.
rewrite (le_trans (ler_norm_sum _ _ _))//.
rewrite -mulrA mulrC -mulrA mulr_natl -[X in _ *+ X]subn0 -sumr_const_nat.
apply ler_sum_nat => i /=.
case: n => //= n ni.
rewrite normrM.
pose d := (n.-1 - i)%N.
rewrite -[(n - i)%N]prednK ?subn_gt0// predn_sub -/d.
rewrite -(subnK (_ : i <= n.-1)%N) -/d.
by rewrite -ltnS prednK// (leq_ltn_trans _ ni).
rewrite addnC exprD mulrAC -mulrA.
apply: ler_pM => //.
by rewrite normrX lerXn2r// qualifE/= (le_trans _ zLK).
apply: le_trans (_ : d.+1%:R * K ^+ d <= _); last first.
rewrite ler_wpM2r //; first by rewrite exprn_ge0 // (le_trans _ zLK).
by rewrite ler_nat ltnS /d -subn1 -subnDA leq_subr.
rewrite (le_trans (ler_norm_sum _ _ _))//.
rewrite mulr_natl -[X in _ *+ X]subn0 -sumr_const_nat ler_sum_nat//= => j jd1.
rewrite -[in leRHS](subnK (_ : j <= d)%N) -1?ltnS // addnC exprD normrM.
by rewrite ler_pM// normrX lerXn2r// qualifE/= (le_trans _ zLK).
Qed.
Lemma
Source code
cvgn (pseries c K) ->
cvgn (pseries (pseries_diffs c) K) ->
cvgn (pseries (pseries_diffs (pseries_diffs c)) K) ->
`|x| < `|K| ->
is_derive x (1 : R)
(fun => limn (pseries c x))
(limn (pseries (pseries_diffs c) x)).
Proof.
set s := (fun : nat => _); set (f := fun => _).
suff hfxs : h^-1 *: (f (h + x) - f x) @[ --> 0^'] --> limn (series s).
have F : f^`() x = limn (series s) by apply: cvg_lim hfxs.
have Df : derivable f x 1.
move: hfxs; rewrite /derivable [X in X @ 0^'](_ : _ =
(fun => h^-1 *: (f (h%:A + x) - f x))) /=.
by apply/funext => i //=; rewrite [i%:A]mulr1.
by move=> /(cvg_lim _) -> //.
by constructor; [exact: Df|rewrite -derive1E].
pose sx := fun : nat => c n * x ^+ n.
have Csx : cvgn (pseries c x) by apply: is_cvg_pseries_inside Ck _.
pose shx := fun ( : nat) => c n * (h + x) ^+ n.
suff Cc : limn (h^-1 *: (series (shx h - sx))) @[ --> 0^'] --> limn (series s).
apply: cvg_sub0 Cc.
apply/cvgrPdist_lt => eps eps_gt0 /=.
near=> h; rewrite sub0r normrN /=.
rewrite (le_lt_trans _ eps_gt0)//.
rewrite normr_le0 subr_eq0 -/sx -/(shx _); apply/eqP.
suff Cshx' : cvgn (series (shx h)).
rewrite limZl_tmp; first exact/is_cvg_seriesB/Csx.
by rewrite lim_seriesB; [|exact: Csx|].
apply: is_cvg_pseries_inside Ck _.
rewrite (le_lt_trans (ler_normD _ _))// -(subrK `|x| `|K|) ltrD2r.
near: h.
apply/nbhs_ballP => /=; exists ((`|K| - `|x|) /2%:R) => /=.
by rewrite divr_gt0 // subr_gt0.
move=> t; rewrite /ball /= sub0r normrN => H tNZ.
rewrite (lt_le_trans H)// ler_pdivrMr // mulr2n mulrDr mulr1.
by rewrite ler_wpDr // subr_ge0 ltW.
apply: cvg_zero => /=.
suff Cc : limn
(series (fun => c n * (((h + x) ^+ n - x ^+ n) / h - n%:R * x ^+ n.-1)))
@[ --> 0^'] --> 0.
apply: cvg_sub0 Cc.
apply/cvgrPdist_lt => eps eps_gt0 /=.
near=> h; rewrite sub0r normrN /=.
rewrite (le_lt_trans _ eps_gt0)// normr_le0 subr_eq0; apply/eqP.
have Cs : cvgn (series s) by apply: is_cvg_pseries_inside CdK _.
have Cs1 := is_cvg_pseries_diffs_equiv Cs.
have Fs1 := pseries_diffs_equiv Cs.
set s1 := (fun => _) in Cs1.
have Cshx : cvgn (series (shx h)).
apply: is_cvg_pseries_inside Ck _.
rewrite (le_lt_trans (ler_normD _ _))// -(subrK `|x| `|K|) ltrD2r.
near: h.
apply/nbhs_ballP => /=; exists ((`|K| - `|x|) / 2%:R) => /=.
by rewrite divr_gt0 // subr_gt0.
move=> t; rewrite /ball /= sub0r normrN => H tNZ.
rewrite (lt_le_trans H)// ler_pdivrMr // mulr2n mulrDr mulr1.
by rewrite ler_wpDr // subr_ge0 ltW.
have C1 := is_cvg_seriesB Cshx Csx.
have Ckf := @is_cvg_seriesZ _ _ h^-1 C1.
have Cu : (series (h^-1 *: (shx h - sx)) - series s1) x0 @[ --> \oo] -->
limn (series (h^-1 *: (shx h - sx))) - limn (series s).
exact: cvgB Ckf Fs1.
set w := (fun : nat => _ in RHS).
have -> : w = h^-1 *: (shx h - sx) - s1.
apply: funext => i; rewrite !fctE.
rewrite /w /shx /sx /s1 /= mulrBr; congr (_ - _); last first.
by rewrite mulrCA !mulrA.
by rewrite -mulrBr [RHS]mulrCA [_^-1 * _]mulrC.
rewrite [X in X h = _]/+%R /= [X in _ + X h = _]/-%R /=.
have -> : series (h^-1 *: (shx h - sx) - s1) =
series (h^-1 *: (shx h - sx)) - (series s1).
by apply/funext => i; rewrite /series /= sumrB.
have -> : h^-1 *: series (shx h - sx) = series (h^-1 *: (shx h - sx)).
by apply/funext => i; rewrite /series /= -scaler_sumr.
exact/esym/cvg_lim.
pose r := (`|x| + `|K|) / 2.
have xLr : `|x| < r by rewrite ltr_pdivlMr // mulrDr mulr1 ltrD2l.
have rLx : r < `|K| by rewrite ltr_pdivrMr // mulrDr mulr1 ltrD2r.
have r_gt0 : 0 < r by apply: le_lt_trans xLr.
have rNZ : r != 0by case: ltrgt0P r_gt0.
apply: (@lim_cvg_to_0_linear _
(fun => `|c n| * n%:R * (n.-1)%:R * r ^+ n.-2)
(fun => c n * (((h + x) ^+ n - x ^+ n) / h - n%:R * x ^+ n.-1))
(r - `|x|)); first by rewrite subr_gt0.
- have : cvgn ([series `|pseries_diffs (pseries_diffs c) n| * r ^+ n]_).
apply: is_cvg_pseries_inside_norm CddK _.
by rewrite ger0_norm // ltW // (le_lt_trans _ xLr).
have -> : (fun => `|pseries_diffs (pseries_diffs c) n| * r ^+ n) =
(fun => pseries_diffs (pseries_diffs
(fun => `|c m|)) n * r ^+ n).
apply/funext => i.
by rewrite /pseries_diffs !normrM !mulrA ger0_norm // ger0_norm.
move=> /is_cvg_pseries_diffs_equiv.
rewrite /pseries_diffs.
have -> : (fun => n%:R * ((n.+1)%:R * `|c n.+1|) * r ^+ n.-1) =
(fun => pseries_diffs
(fun => (m.-1)%:R * `|c m| * r^-1) n * r ^+ n).
apply/funext => n.
rewrite /pseries_diffs /= mulrA.
case: n => [|n /=]; first by rewrite !(mul0r, mulr0).
by rewrite [_%:R *_]mulrC !mulrA -[RHS]mulrA exprS mulKf.
move/is_cvg_pseries_diffs_equiv.
have ->// : (fun => n%:R * (n.-1%:R * `|c n| / r) * r ^+ n.-1) =
(fun => `|c n| * n%:R * n.-1%:R * r ^+ n.-2).
apply/funext => [] [|[|i]]; rewrite ?(mul0r, mulr0) //=.
rewrite mulrA -mulrA exprS mulKf// !mulrA; congr (_ * _).
by rewrite mulrC mulrA.
- move=> h /andP[h_gt0 hLrBx] n.
rewrite normrM -!mulrA ler_wpM2l //.
rewrite (le_trans (pseries_diffs_P3 _ _ (ltW xLr) _))// ?mulrA -?normr_gt0//.
by rewrite (le_trans (ler_normD _ _))// -(subrK `|x| r) lerD2r ltW.
Unshelve. all: by end_near.
Qed.
End PseriesDiff.
Section expR.
Variable : realType.
Implicit Types x : R.
Lemma
Source code
Proof.
near=> m; rewrite -[m]prednK; first by near: m.
rewrite -addn1 series_addn series_exp_coeff0 big_add1 big1 ?addr0//.
by move=> i _; rewrite /exp_coeff /= expr0n mul0r.
Unshelve. all: by end_near. Qed.
Lemma
Source code
Proof.
pose f ( : R) := (i == 0)%:R + x ^+ n / n`!%:R *+ (i == n).
have F m : (n.+1 < m)%N ->
\sum_(0 <= < m) (f n.+1 x i) = 1 + x ^+ n.+1 / n.+1`!%:R.
move=> n1m.
rewrite (@big_cat_nat _ _ _ n.+2)//= big_nat_recr// big_nat_recl//=.
rewrite big_nat_cond big1 ?addr0.
by move=> i /[!andbT] /[!leq0n]/= ni; rewrite /f/= lt_eqF//= add0r.
rewrite big_nat_cond big1 ?addr0.
move=> i /[!andbT] /andP[ni mi]; rewrite /f !gtn_eqF//= ?add0r//.
exact: ltn_trans ni.
by rewrite /f/= add0r mulr0n addr0 eqxx 2!mulr1n.
rewrite [leLHS](_ : _ = limn (series (f n.+1 x))).
by apply/esym/(@lim_near_cst R^o) => //; near=> k; apply: F; near: k.
apply: ler_lim; first by apply: is_cvg_near_cst; near=> k; apply: F; near: k.
exact: is_cvg_series_exp_coeff.
near=> k; apply: ler_sum => -[|[|i]] _; rewrite /f /exp_coeff/= ?add0r.
- by rewrite !(mulr0n, expr0, addr0, divr1).
- case: n F; first by rewrite !(mulr0n, mulr1n, expr0, addr0, add0r, divr1).
by move=> n F; rewrite mulr0n expr1 divr1.
- rewrite eqSS; case: eqP => [->|_]; rewrite ?mulr1n//.
by rewrite mulr0n divr_ge0// exprn_ge0.
Unshelve. all: by end_near. Qed.
Lemma
Source code
Import GRing.Theory.
Local Open Scope ring_scope.
Lemma
Source code
expR = fun => limn (pseries (fun => (fun => (n`!%:R)^-1) n) x).
Proof.
Global Instance
Source code
Proof.
rewrite expRE /= /pseries (_ : (fun _ => _) = s1).
by apply/funext => i; rewrite /s1 pseries_diffs_inv_fact.
apply: (@pseries_snd_diffs _ _ (`|x| + 1)); rewrite /pseries.
- by rewrite -exp_coeffE; apply: is_cvg_series_exp_coeff.
- rewrite (_ : (fun _ => _) = exp_coeff (`|x| + 1)).
by apply/funext => i; rewrite pseries_diffs_inv_fact exp_coeffE.
exact: is_cvg_series_exp_coeff.
- rewrite (_ : (fun _ => _) = exp_coeff (`|x| + 1)).
by apply/funext => i; rewrite !pseries_diffs_inv_fact exp_coeffE.
exact: is_cvg_series_exp_coeff.
by rewrite [ltRHS]ger0_norm// addrC -subr_gt0 addrK.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
expR (\sum_( <- s | P i) f i) = \prod_( <- s | P i) expR (f i).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
- have [?|_] := leP x (-1).
by rewrite (@le_lt_trans _ _ 0) ?expR_gt0// -lerBrDl sub0r.
have [] := @MVT R expR expR _ _ x0 (fun _ => is_derive_expR x).
exact/continuous_subspaceT/continuous_expR.
move=> c; rewrite in_itv/= => /andP[xc c0].
rewrite expR0 sub0r => /eqP; rewrite subr_eq addrC -subr_eq => /eqP <-.
by rewrite mulrN opprK ltrD2l ltr_nMl// -expR0 ltr_expR.
- have [] := @MVT R expR expR _ _ x0 (fun _ => is_derive_expR x).
exact/continuous_subspaceT/continuous_expR.
move=> c; rewrite in_itv/= => /andP[c0 cx].
rewrite subr0 expR0 => /eqP /[!subr_eq] /eqP ->.
by rewrite addrC ltrD2r ltr_pMl// -expR0 ltr_expR.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
1 <= x -> exists , [/\ 0 <= y, 1 + y <= x & expR y = x].
Proof.
have [x1 x1Ix| |x1 _ /eqP] := @IVT _ (fun => expR y - x) _ _ 0 x_ge0.
- apply: continuousB => // y1; last exact: cst_continuous.
by apply/continuous_subspaceT=> ?; exact: continuous_expR.
- rewrite expR0; have [_| |] := ltrgtP (1 - x) (expR x - x).
+ by rewrite subr_le0 x_ge1 subr_ge0 (le_trans _ (expR_ge1Dx _)) ?lerDr.
+ by rewrite ltrD2r expR_lt1 ltNge x_ge0.
+ rewrite subr_le0 x_ge1 => -> /=; rewrite subr_ge0.
by rewrite (le_trans _ (expR_ge1Dx _)) ?lerDr.
- rewrite subr_eq0 => /eqP x1_x; exists x1; split => //.
+ by rewrite -ler_expR expR0 x1_x.
+ by rewrite -x1_x expR_ge1Dx // -ler_expR x1_x expR0.
Qed.
Lemma
Source code
Proof.
by exists y.
have /expR_total_gt1[y [H1y H2y H3y]] : 1 <= x^-1 by rewrite ltW // !invf_cp1.
by exists (-y); rewrite expRN H3y invrK.
Qed.
Local Open Scope convex_scope.
Lemma
Source code
expR (a <| t |> b) <= (expR a : R^o) <| t |> (expR b : R^o).
Proof.
- apply: second_derivative_convex => //.
+ by move=> x axb; rewrite derive_expR derive_val expR_ge0.
+ exact/cvg_at_left_filter/continuous_expR.
+ exact/cvg_at_right_filter/continuous_expR.
+ by move=> z zab; rewrite derive_expR; exact: derivable_expR.
- rewrite convC [leRHS]convC; apply: second_derivative_convex => //.
+ by move=> x axb; rewrite derive_expR derive_val expR_ge0.
+ exact/cvg_at_left_filter/continuous_expR.
+ exact/cvg_at_right_filter/continuous_expR.
+ by move=> z zab; rewrite derive_expR; exact: derivable_expR.
Qed.
Definition
Source code
Order.max (BRight 0%Z) (IntItv.add_boundl b (BLeft 1)).
Definition
Source code
match b with
| BSide _ (Negz _) => BLeft 1%Z
| BSide b 0%Z => BSide b 1%Z
| _ => +oo%O
end.
Definition
Source code
match i with
| Itv.Top => Itv.Real `[0%Z, +oo[
| Itv.Real (Interval l u) =>
Itv.Real (Interval (expR_itv_boundl l) (expR_itv_boundr u))
end.
Lemma
Source code
( := expR_itv i) :
Itv.spec (@Itv.num_sem R) r (expR x%:num).
Proof.
by apply/and3P; rewrite ?num_real// bnd_simp expR_ge0.
case: x => [x /=/and3P[xr lx xu]]; apply/and3P; split; [exact: num_real| | ].
- rewrite Instances.num_itv_bound_max maxEge.
case: ifP; rewrite ?bnd_simp ?expR_gt0// => _.
apply: le_trans (Instances.num_itv_add_boundl lx _) _; first exact: lexx.
by rewrite bnd_simp addrC expR_ge1Dx.
- case: u xu => [[] [[|//] | u] |//]; rewrite !bnd_simp.
+ by rewrite expR_lt1.
+ by rewrite expR_lt1 => /lt_trans; apply.
+ by rewrite expR_le1.
+ by rewrite expR_lt1 => /le_lt_trans; apply.
Qed.
Canonical
Source code
Itv.mk (num_spec_expR x).
End expR.
Section expeR.
Context { : realType}.
Implicit Types (x y : \bar R) (r s : R).
Local Open Scope ereal_scope.
Definition
Source code
match x with | r%:E => (expR r)%:E | +oo => +oo | -oo => 0 end.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End expeR.
#[deprecated(since="mathcomp-analysis 1.13.0", note="renamed `lte_expeR`")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 1.13.0", note="renamed `lee_expeR`")]
Notation
Source code
Section Ln.
Variable : realType.
Implicit Types x : R.
Notation
Source code
Definition : R := [get | exp y == x ].
Fact
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
apply: nbhs_singleton (near_can_continuous _ _); near=> z; first exact: expRK.
by apply: continuous_expR.
Unshelve. all: by end_near. Qed.
Global Instance
Source code
Proof.
apply: (@is_derive_inverse R expR); first by near=> z; apply: expRK.
by near=>z; apply: continuous_expR.
by rewrite lnK // lt0r_neq0.
Unshelve. all: by end_near. Qed.
Local Open Scope convex_scope.
Lemma
Source code
(ln a : R^o) <| t |> (ln b : R^o) <= ln (a <| t |> b).
Proof.
Lemma
Source code
Proof.
End Ln.
Section PowR.
Variable : realType.
Implicit Types a x y z r : R.
Definition
independent_events : forall {R : realType} [d : measure_display] {T : measurableType d}, probability T R -> forall {I0 : choiceType}, set I0 -> (I0 -> set T) -> Prop independent_events is not universe polymorphic Arguments independent_events {R} [d]%_measure_display_scope {T} P {I0} I%_classical_set_scope E%_function_scope independent_events is transparent Expands to: Constant mathcomp.analysis.independence.independent_events Declared in library mathcomp.analysis.independence, line 45, characters 11-29
Source code
Local Notation
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
by case: ifPn => [/eqP ->//|_ /eqP]; rewrite (gt_eqF r0) eq_sym expR_eq0.
case: ifPn => [/eqP -> /eqP|yneq0]; first by rewrite (gt_eqF r0) expR_eq0.
by move/expR_inj/mulfI => /(_ (negbT (gt_eqF r0))); apply: ln_inj;
rewrite posrE lt_neqAle eq_sym (xneq0,yneq0).
Qed.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
{in Num.nneg &, {homo powR ^~ r : / x <= y >-> x <= y}}.
Proof.
move=> a0 x y; rewrite 2!nnegrE !le_eqVlt => /predU1P[<-|x0].
move=> /predU1P[<- _|y0 _]; first by rewrite eqxx.
by rewrite !powR0 ?(gt_eqF a0)// powR_gt0 ?orbT.
move=> /predU1P[<-|y0]; first by rewrite gt_eqF//= ltNge (ltW x0).
move=> /predU1P[->//|xy]; first by rewrite eqxx.
by apply/orP; right; rewrite /powR !gt_eqF// ltr_expR ltr_pM2l// ltr_ln.
Qed.
Lemma
Source code
{in Num.nneg &, {homo powR ^~ r : / x < y >-> x < y}}.
Proof.
rewrite le_eqVlt => /orP[/eqP/(powR_injective r0 x0 y0)/eqP|//].
by rewrite lt_eqF.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
(x * y) `^ r <= x * (y `^ r).
Proof.
Lemma
Source code
(x * y) `^ r >= x * (y `^ r).
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
by rewrite powR0 ?invr_eq0 ?pnatr_eq0// sqrtr0.
have /eqP : (a `^ (2^-1)) ^+ 2 = (Num.sqrt a) ^+ 2.
rewrite sqr_sqrtr; first exact: ltW.
by rewrite /powR gt_eqF// -expRM_natl mulVKf// lnK.
rewrite eqf_sqr => /predU1P[//|/eqP h].
have : 0 < a `^ 2^-1 by exact: powR_gt0.
by rewrite h oppr_gt0 ltNge sqrtr_ge0.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
0 < p -> 0 < q -> p^-1 + q^-1 = 1 ->
a * b <= a `^ p / p + b `^ q / q.
Proof.
by rewrite mul0r powR0 ?gt_eqF// mul0r add0r divr_ge0 ?powR_ge0 ?ltW.
rewrite le_eqVlt => /predU1P[<-|b0] p0 q0 pq.
by rewrite mulr0 powR0 ?gt_eqF// mul0r addr0 divr_ge0 ?powR_ge0 ?ltW.
have iq1 : q^-1 <= 1 by rewrite -pq ler_wpDl// invr_ge0 ltW.
have ap0 : (0 < a `^ p)%R by rewrite powR_gt0.
have bq0 : (0 < b `^ q)%R by rewrite powR_gt0.
have pq' : (p^-1 = 1 - q^-1)%R by rewrite -pq addrK.
have qp' : (q^-1 = 1 - p^-1)%R by rewrite -pq -addrA subrKC.
have := @concave_ln _ (Itv01 (eqbRL (invr_ge0 _) (ltW q0)) iq1) _ _ bq0 ap0.
rewrite 2!(convC (Itv01 _ _)) !convRE/= /onem -pq' -[_ <= ln _]ler_expR expRD.
rewrite 2!ln_powR mulrCA mulVKf ?gt_eqF// -qp' mulrCA mulVKf ?gt_eqF//.
by rewrite 2![_^-1 * _]mulrC 3?lnK ?posrE// addr_gt0// mulr_gt0// ?invr_gt0.
Qed.
Definition
mutual_independence : forall {R : realType} [d : measure_display] {T : measurableType d}, probability T R -> forall {I0 : choiceType}, set I0 -> (I0 -> set_system T) -> Prop mutual_independence is not universe polymorphic Arguments mutual_independence {R} [d]%_measure_display_scope {T} P {I0} I%_classical_set_scope F%_function_scope mutual_independence is transparent Expands to: Constant mathcomp.analysis.independence.mutual_independence Declared in library mathcomp.analysis.independence, line 56, characters 11-30
Source code
match i with
| Itv.Top => Itv.Real `]-oo, +oo[
| Itv.Real (Interval l u) =>
Itv.Real (Interval (IntItv.keep_pos_bound l) +oo%O)
end.
Lemma
Source code
( := powR_itv i) :
Itv.spec (@Itv.num_sem R) r (powR x%:num p).
Proof.
case: x => [x /=/and3P[xr lx xu]]; apply/and3P; split; [exact: num_real| |by[]].
case: l lx => [[] [[|l] |//] |//]; rewrite !bnd_simp => lx.
- by rewrite powR_ge0.
- by apply: powR_gt0; apply: lt_le_trans lx.
- by apply: powR_gt0; apply: le_lt_trans lx.
- by apply: powR_gt0; apply: le_lt_trans lx.
Qed.
Canonical
independence2 : forall {R : realType} [d : measure_display] {T : measurableType d}, probability T R -> set_system T -> set_system T -> Prop independence2 is not universe polymorphic Arguments independence2 {R} [d]%_measure_display_scope {T} P F G independence2 is transparent Expands to: Constant mathcomp.analysis.independence.independence2 Declared in library mathcomp.analysis.independence, line 75, characters 11-24
Source code
Itv.mk (num_spec_powR x p).
Lemma
Source code
Proof.
by apply: near_eq_cvg; near=> a; rewrite /powR gt_eqF 1?mulrC.
apply: (@cvg_comp _ _ _ _ _ _ (@ninfty_nbhs R)).
by apply: gt0_cvgMlNy; rewrite ?x0//; exact: lnNy.
exact/cvgNy_compNP/cvgr_expR.
Unshelve. end_near. Qed.
Lemma
Source code
Proof.
move=> v0 a; rewrite in_itv/= andbT => a0.
apply: (@near_eq_derivable _ _ _ (fun => expR (x * ln a'))) => //.
by near=> b; rewrite /powR gt_eqF//; near: b; exact: lt_nbhsr.
apply: diff_derivable; apply: differentiable_comp; last exact/derivable1_diffP.
apply: differentiableM => //; apply/derivable1_diffP.
by apply: ex_derive; exact: is_derive1_ln.
Unshelve. end_near. Qed.
Lemma
Source code
(powR ^~ a) ^`()%classic =1 (fun => a * x `^ (a - 1))}.
Proof.
rewrite derive1E.
rewrite (@near_eq_derive _ _ _ _ (fun => expR (a * ln x)))//.
by near=> z; rewrite /powR gt_eqF//; near: z; exact: lt_nbhsr.
rewrite -derive1E.
rewrite derive1_comp//=.
by apply: derivableM => //; apply: ex_derive; exact: is_derive1_ln.
rewrite 2!derive1E.
rewrite deriveM//; first by apply: ex_derive; exact: is_derive1_ln.
rewrite !derive_val scaler0 addr0.
have [_ ->] := (is_derive1_ln x0).
rewrite mulrC powRB; first by rewrite (@gt_eqF _ _ x)//; apply: implybT.
by rewrite powRr1 ?ltW// mulrA [in RHS]mulrAC /powR gt_eqF.
Unshelve. end_near. Qed.
Global Instance
Source code
is_derive x 1 (powR ^~ a) (a * x `^ (a - 1))%R.
Proof.
by apply: derivable_powR; rewrite ?in_itv/= ?andbT.
by rewrite -derive1E powR_derive1// in_itv andbT.
Qed.
Lemma
Source code
Lemma
Source code
Proof.
have [->|p0]/= := eqVneq p 0; first by rewrite powRr0 eqxx orbT.
have [x0|x0|->]/= := ltgtP x 0; first by rewrite lt0_powR1// eqxx.
- rewrite /powR (gt_eqF x0)// -expR0; apply/negP => /eqP/expR_inj/eqP.
rewrite mulf_eq0 (negbTE p0)/= -ln1 => /eqP/ln_inj => /(_ _ _)/eqP.
by rewrite (negbTE x1) falseE; apply => //; rewrite posrE.
- by rewrite powR0// eq_sym oner_eq0.
Qed.
End PowR.
Notation
Source code
Section Lne.
Variable : realType.
Implicit Types (x : \bar R) (r : R).
Local Open Scope ereal_scope.
Definition
f not a defined object. g not a defined object.
Source code
match x with
| r%:E => if (r <= 0)%R then -oo else (ln r)%:E
| +oo => +oo
| -oo => -oo
end.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
- rewrite inver// !gt_eqF//= pmulr_rle0// invr_le0 leNgt y0/=.
by rewrite leNgt x0/= ln_div.
- by rewrite mulr0 lexx leNgt x0/=.
- by rewrite inver !gt_eqF// leNgt y0/= gt0_mulye// lte_fin invr_gt0.
- by rewrite invey mule0/= lexx.
Qed.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
End Lne.
Section poweR.
Local Open Scope ereal_scope.
Context { : realType}.
Implicit Types (s r : R) (x y : \bar R).
Definition
independent_RVs : forall {R : realType} [d : measure_display] [T : measurableType d] {I0 : choiceType} {d' : I0 -> measure_display} [T' : forall i : I0, measurableType (d' i)], probability T R -> set I0 -> (forall i : I0, {mfun T >-> T' i}) -> Prop independent_RVs is not universe polymorphic Arguments independent_RVs {R} [d]%_measure_display_scope [T] {I0} {d'}%_function_scope [T']%_function_scope P I%_classical_set_scope X%_function_scope independent_RVs is transparent Expands to: Constant mathcomp.analysis.independence.independent_RVs Declared in library mathcomp.analysis.independence, line 368, characters 11-26
Source code
match x with
| x'%:E => (x' `^ r)%:E
| +oo => if r == 0%R then 1%E else +oo
| -oo => if r == 0%R then 1%E else 0%E
end.
Local Notation
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
poweR x r = if r == 0%R then
(if x \is a fin_num then fine x `^ r else 1)%:E
else if x == +oo then +oo
else if x == -oo then 0
else (fine x `^ r)%:E.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
by case: ifP => //; rewrite onee_eq0.
Qed.
Lemma
Source code
Lemma
Source code
{in `[0, +oo] &, {homo poweR ^~ r : / x <= y >-> x <= y}}.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
have powyrM s : (0 <= s)%R -> (+oo * s%:E) `^ r = +oo `^ r * s%:E `^ r.
case: ltgtP => // [s_gt0 _|<- _]; last first.
by rewrite mule0 poweRyr// !poweR0r// mule0.
by rewrite gt0_mulye// poweRyr// gt0_mulye// poweR_gt0.
case: x y => [x| |] [y| |]// x0 y0; first by rewrite /= -EFinM powRM.
- by rewrite muleC powyrM// muleC.
- by rewrite powyrM.
- by rewrite mulyy !poweRyr// mulyy.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Definition
independent_RVs2 : forall {R : realType} {d d' : measure_display} {T : measurableType d} {T' : measurableType d'}, probability T R -> {mfun T >-> T'} -> {mfun T >-> T'} -> Prop independent_RVs2 is not universe polymorphic Arguments independent_RVs2 {R} {d d'}%_measure_display_scope {T T'} P X Y independent_RVs2 is transparent Expands to: Constant mathcomp.analysis.independence.independent_RVs2 Declared in library mathcomp.analysis.independence, line 433, characters 11-27
Source code
((x != 0) && ((x \isn't a fin_num) ==> (r == 0%R) && (s == 0%R)))).
Notation
Source code
Lemma
Source code
x `^?(r +? s) = ((r + s == 0)%R ==>
((x != 0) && ((x \isn't a fin_num) ==> (r == 0%R) && (s == 0%R)))).
Proof.
Lemma
Source code
x `^?(r +? - s) = ((r == s)%R ==>
((x != 0) && ((x \isn't a fin_num) ==> (r == 0%R) && (s == 0%R)))).
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
x `^?(r +? s).
Proof.
Lemma
Source code
x `^?(r +? - s).
Proof.
Lemma
Source code
Proof.
have [->|r0]/= := eqVneq r 0%R; first by rewrite add0r poweRe0 mul1e.
have [->|s0]/= := eqVneq s 0%R; first by rewrite addr0 poweRe0 mule1.
case: x => // [t|/=|/=]; rewrite ?(negPf r0, negPf s0, implybF); last 2 first.
- by move=> /negPf->; rewrite mulyy.
- by move=> /negPf->; rewrite mule0.
rewrite !poweR_EFin eqe => /implyP/(_ _)/andP cnd.
by rewrite powRD//; apply/implyP => /cnd[].
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
by rewrite lee_fin => x0 /=; rewrite powR12_sqrt.
Qed.
End poweR.
Notation
Source code
Section riemannR_series.
Variable : realType.
Implicit Types a : R.
Local Open Scope real_scope.
Definition
pairRV : forall [d d' : measure_display] {T : measurableType d} {T' : measurableType d'} {R : realType} [P : probability T R], {RV P >-> T'} -> {RV P >-> T'} -> T * T -> T' * T' pairRV is not universe polymorphic Arguments pairRV [d d']%_measure_display_scope {T T' R} [P] X Y _ pairRV is transparent Expands to: Constant mathcomp.analysis.independence.pairRV Declared in library mathcomp.analysis.independence, line 503, characters 11-17
Source code
Arguments riemannR a n /.
Lemma
Source code
Lemma
Source code
Proof.
have : forall , harmonic n <= riemannR a n.
move=> [/=|n]; first by rewrite powR1 invr1.
rewrite -[leRHS]div1r ler_pdivlMr ?powR_gt0// mulrC ler_pdivrMr//.
by rewrite mul1r -[leRHS]powRr1// ler_powR// ler1n.
move/(series_le_cvg harmonic_ge0 (fun => ltW (riemannR_gt0 i a0))).
by move/contra_not; apply; exact: dvg_harmonic.
Qed.
End riemannR_series.