Module mathcomp.experimental_reals.distr
From mathcomp Require Import boot order algebra.
From mathcomp.classical Require Import boolp classical_sets mathcomp_extra.
From mathcomp Require Import xfinmap constructive_ereal reals discrete.
From mathcomp Require Import realseq realsum.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Unset SsrOldRewriteGoalsOrder.
Import Order.TTheory GRing.Theory Num.Theory.
Local Open Scope ring_scope.
Local Notation
Source code
Reserved Notation "\dlet_ ( i <- d ) E"
(at level 36, E at level 36, i, d at level 50,
format "'[' \dlet_ ( i <- d ) '/ ' E ']'").
Reserved Notation "\dlim_ ( n ) E"
(at level 36, E at level 36, n at level 50,
format "'[' \dlim_ ( n ) '/ ' E ']'").
Reserved Notation "\P_[ mu ] E" (at level 2, format "\P_[ mu ] E").
Reserved Notation "\P_[ mu , A ] E" (at level 2, format "\P_[ mu , A ] E").
Reserved Notation "\E?_[ mu ] f" (at level 2, format "\E?_[ mu ] f").
Reserved Notation "\E_[ mu ] f" (at level 2, format "\E_[ mu ] f").
Reserved Notation "\E_[ mu , A ] f" (at level 2, format "\E_[ mu , A ] f").
Local Notation
Source code
Section Distribution.
Variables ( : realType) ( : choiceType).
Structure
Source code
:> T -> R;
_ : forall , 0 <= mu x;
_ : summable mu;
_ : PosSum.psum mu <= 1
}.
Definition
distr_of : forall [R : realType] [T : choiceType], phant R -> phant T -> Type distr_of is not universe polymorphic Arguments distr_of [R T] _ _ distr_of is transparent Expands to: Constant mathcomp.experimental_reals.distr.distr_of Declared in library mathcomp.experimental_reals.distr, line 52, characters 11-19
Source code
End Distribution.
Notation
Source code
(at level 0, T at level 2, format "{ 'distr' T / R }")
: type_scope.
Section DistrCoreTh.
Context { : realType} ( : choiceType) ( : {distr T / R}).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
#[global] Hint Extern 0 (is_true (0 <= _)) => solve [apply: ge0_mu] : core.
#[global] Hint Resolve le1_mu summable_mu : core.
Section Clamp.
Context { : realType}.
Definition
clamp : forall {R : realType}, R -> R clamp is not universe polymorphic Arguments clamp {R} x%_ring_scope clamp is transparent Expands to: Constant mathcomp.experimental_reals.distr.clamp Declared in library mathcomp.experimental_reals.distr, line 80, characters 11-16
Source code
Num.max (Num.min x 1) 0.
Lemma
Source code
Lemma
Source code
Definition
cp01_clamp : forall {R : realType}, (forall x : R, (0 <= clamp x)%R) * (forall x : R, (clamp x <= 1)%R) cp01_clamp is not universe polymorphic Arguments cp01_clamp {R} cp01_clamp is transparent Expands to: Constant mathcomp.experimental_reals.distr.cp01_clamp Declared in library mathcomp.experimental_reals.distr, line 89, characters 11-21
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Section StdDefs.
Context { : realType} ( : choiceType).
Implicit Types (mu : {distr T / R}) (A B E : pred T) (f : T -> R).
Definition
dinsupp : forall {R : realType} [T : choiceType], {distr T / R} -> T -> bool dinsupp is not universe polymorphic Arguments dinsupp {R} [T] mu x dinsupp is transparent Expands to: Constant mathcomp.experimental_reals.distr.dinsupp Declared in library mathcomp.experimental_reals.distr, line 110, characters 11-18
Source code
Lemma
Source code
(x \in dinsupp mu) = (mu x != 0).
Proof.
Lemma
Source code
Lemma
Source code
Definition
pr : forall {R : realType} [T : choiceType], {distr T / R} -> pred T -> R pr is not universe polymorphic Arguments pr {R} [T] mu E pr is transparent Expands to: Constant mathcomp.experimental_reals.distr.pr Declared in library mathcomp.experimental_reals.distr, line 122, characters 11-13
Source code
Definition
prc : forall {R : realType} [T : choiceType], {distr T / R} -> pred T -> pred T -> R prc is not universe polymorphic Arguments prc {R} [T] mu E A prc is transparent Expands to: Constant mathcomp.experimental_reals.distr.prc Declared in library mathcomp.experimental_reals.distr, line 123, characters 11-14
Source code
Definition
esp : forall {R : realType} [T : choiceType], {distr T / R} -> (T -> R) -> R esp is not universe polymorphic Arguments esp {R} [T] mu f%_function_scope esp is transparent Expands to: Constant mathcomp.experimental_reals.distr.esp Declared in library mathcomp.experimental_reals.distr, line 124, characters 11-14
Source code
Definition
espc : forall {R : realType} [T : choiceType], {distr T / R} -> (T -> R) -> pred T -> R espc is not universe polymorphic Arguments espc {R} [T] mu f%_function_scope A espc is transparent Expands to: Constant mathcomp.experimental_reals.distr.espc Declared in library mathcomp.experimental_reals.distr, line 125, characters 11-15
Source code
Definition
has_esp : forall {R : realType} [T : choiceType], {distr T / R} -> (T -> R) -> Prop has_esp is not universe polymorphic Arguments has_esp {R} [T] mu f%_function_scope has_esp is transparent Expands to: Constant mathcomp.experimental_reals.distr.has_esp Declared in library mathcomp.experimental_reals.distr, line 127, characters 11-18
Source code
End StdDefs.
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Section DistrTheory.
Context { : realType} { : choiceType} ( : T -> R).
Definition
isdistr : forall {R : realType} {T : choiceType}, (T -> R) -> Prop isdistr is not universe polymorphic Arguments isdistr {R T} mu%_function_scope isdistr is transparent Expands to: Constant mathcomp.experimental_reals.distr.isdistr Declared in library mathcomp.experimental_reals.distr, line 141, characters 11-18
Source code
(forall , 0 <= mu x) /\ (forall , uniq J -> \sum_( <- J) mu j <= 1).
Hypothesis
Source code
Local Lemma
Source code
Proof.
Local Lemma
Source code
Proof.
Local Lemma
Source code
Proof.
by exists 0, fset0; rewrite big_fset0.
apply/ubP=> y [x ->]; rewrite big_fset_seq /=.
by case: isd => _; apply; case: x => x /= /canonical_uniq.
Qed.
Definition
mkdistr : forall {R : realType} {T : choiceType} [mu : T -> R], isdistr mu -> distr R T mkdistr is not universe polymorphic Arguments mkdistr {R T} [mu]%_function_scope isd mkdistr is transparent Expands to: Constant mathcomp.experimental_reals.distr.mkdistr Declared in library mathcomp.experimental_reals.distr, line 164, characters 11-18
Source code
Lemma
Source code
Proof.
Definition
ispredistr : forall {R : realType} {T : choiceType}, (T -> R) -> Prop ispredistr is not universe polymorphic Arguments ispredistr {R T} mu%_function_scope ispredistr is transparent Expands to: Constant mathcomp.experimental_reals.distr.ispredistr Declared in library mathcomp.experimental_reals.distr, line 169, characters 11-21
Source code
[/\ forall , 0 <= mu x & summable mu].
End DistrTheory.
Lemma
Source code
(isdistr mu) <-> (forall , 0 <= mu x) /\ (\sum_ mu j <= 1).
Proof.
Lemma
Source code
{ : realType} { : choiceType} ( : {distr T / R}) : mu x <= 1.
Proof.
Section DistrD.
Context { : realType} { : choiceType} ( : T -> R).
Definition
mnull : forall {R : realType} {T : choiceType}, T -> R mnull is not universe polymorphic Arguments mnull {R T} x mnull is transparent Expands to: Constant mathcomp.experimental_reals.distr.mnull Declared in library mathcomp.experimental_reals.distr, line 192, characters 11-16
Source code
Lemma
Source code
Definition
dnull : forall {R : realType} {T : choiceType}, distr R T dnull is not universe polymorphic Arguments dnull {R T} dnull is transparent Expands to: Constant mathcomp.experimental_reals.distr.dnull Declared in library mathcomp.experimental_reals.distr, line 197, characters 11-16
Source code
Lemma
Source code
Proof.
Definition
mkdistrd : forall {R : realType} {T : choiceType}, (T -> R) -> {distr T / R} mkdistrd is not universe polymorphic Arguments mkdistrd {R T} mu%_function_scope mkdistrd is transparent Expands to: Constant mathcomp.experimental_reals.distr.mkdistrd Declared in library mathcomp.experimental_reals.distr, line 202, characters 11-19
Source code
if @idP `[< isdistr mu >] is ReflectT Px then
mkdistr (asboolW Px)
else dnull.
End DistrD.
Lemma
Source code
dnull <=1 mu.
Section Restr.
Context { : realType} { : choiceType} ( : pred T).
Definition
mrestr : forall {R : realType} {T : choiceType}, pred T -> {distr T / R} -> T -> R mrestr is not universe polymorphic Arguments mrestr {R T} p mu x mrestr is transparent Expands to: Constant mathcomp.experimental_reals.distr.mrestr Declared in library mathcomp.experimental_reals.distr, line 217, characters 11-17
Source code
fun => if p x then mu x else 0.
Lemma
Source code
Proof.
Definition
drestr : forall {R : realType} {T : choiceType}, pred T -> {distr T / R} -> distr R T drestr is not universe polymorphic Arguments drestr {R T} p mu drestr is transparent Expands to: Constant mathcomp.experimental_reals.distr.drestr Declared in library mathcomp.experimental_reals.distr, line 229, characters 11-17
Source code
Lemma
Source code
drestr mu x = if p x then mu x else 0.
Proof.
Section RestrTheory.
Context { : realType} { : choiceType}.
Lemma
Source code
mu x = drestr p mu x + drestr (predC p) mu x.
Lemma
Source code
(x \in dinsupp (drestr p mu)) = (x \in dinsupp mu) && p x.
Proof.
Section DRat.
Context { : realType} ( : choiceType).
Local Notation
Source code
Implicit Types (s : seq T).
Definition
mrat : forall {R : realType} [T : choiceType], seq T -> T -> R mrat is not universe polymorphic Arguments mrat {R} [T] s%_seq_scope _ mrat is transparent Expands to: Constant mathcomp.experimental_reals.distr.mrat Declared in library mathcomp.experimental_reals.distr, line 261, characters 11-15
Source code
fun : T => (count (pred1 x) s)%:R / (size s)%:R.
Lemma
Source code
Local Lemma
Source code
Proof.
by move=> ->; rewrite invr0 mulr0 ler01.
move=> /eqP nz_s; rewrite ler_pdivrMr ?ltr0n ?lt0n // mul1r.
rewrite ler_nat (bigID (mem s)) /= [X in (_+X)%N]big1 ?addn0.
by move=> i /count_memPn.
have ->: (size s = \sum_( <- undup s) count_mem i s)%N.
rewrite -sum1_size -big_undup_iterop_count; apply: eq_bigr => i _.
by rewrite Monoid.iteropE iter_addn addn0 mul1n.
rewrite [X in (_<=X)%N](bigID (mem J)) /= -ltnS -addSn.
rewrite ltn_addr //= ltnS -big_filter -[X in (_<=X)%N]big_filter.
rewrite leq_eqVlt; apply/orP; left; apply/eqP/perm_big.
apply/uniq_perm; rewrite ?filter_uniq ?undup_uniq //.
by move=> x; rewrite !mem_filter mem_undup andbC.
Qed.
Local Lemma
Source code
\sum_( <- undup s) mrat s i = 1.
Proof.
Local Lemma
Source code
Proof.
by move=> j _; rewrite ger0_norm ?ge0_mrat.
by apply/has_sup_mrat.
Qed.
Lemma
Source code
Proof.
Definition
drat : forall {R : realType} [T : choiceType], seq T -> distr R T drat is not universe polymorphic Arguments drat {R} [T] s%_seq_scope drat is transparent Expands to: Constant mathcomp.experimental_reals.distr.drat Declared in library mathcomp.experimental_reals.distr, line 304, characters 11-15
Source code
Lemma
Source code
drat s x = (count_mem x s)%:R / (size s)%:R.
Definition
dunit : forall {R : realType} [T : choiceType], T -> distr R T dunit is not universe polymorphic Arguments dunit {R} [T] x dunit is transparent Expands to: Constant mathcomp.experimental_reals.distr.dunit Declared in library mathcomp.experimental_reals.distr, line 310, characters 11-16
Source code
Definition
duni : forall {R : realType} [T : choiceType], seq T -> distr R T duni is not universe polymorphic Arguments duni {R} [T] s%_seq_scope duni is transparent Expands to: Constant mathcomp.experimental_reals.distr.duni Declared in library mathcomp.experimental_reals.distr, line 311, characters 11-15
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
t' \in dinsupp (dunit t) -> t' = t :> T.
End DRat.
Section Flip.
Context { : realType}.
Definition
mflip : forall {R : realType}, R -> bool -> R mflip is not universe polymorphic Arguments mflip {R} xt%_ring_scope b%_bool_scope mflip is transparent Expands to: Constant mathcomp.experimental_reals.distr.mflip Declared in library mathcomp.experimental_reals.distr, line 332, characters 11-16
Source code
fun => if b then clamp xt else 1 - clamp xt.
Lemma
Source code
Proof.
+ by case: b; rewrite ?subr_ge0 cp01_clamp.
+ by rewrite /index_enum !unlock /= addr0 addrC subrK.
Qed.
Definition
dflip : forall {R : realType}, R -> distr R Datatypes_bool__canonical__choice_Choice dflip is not universe polymorphic Arguments dflip {R} xt%_ring_scope dflip is transparent Expands to: Constant mathcomp.experimental_reals.distr.dflip Declared in library mathcomp.experimental_reals.distr, line 341, characters 11-16
Source code
Lemma
Source code
End Flip.
Section Std.
Context { : realType}.
Local Notation
Source code
Implicit Types (T U : choiceType).
Section Bind.
Context { : choiceType} ( : T -> distr U) ( : distr T).
Definition
mlet : forall {R : realType} {T U : choiceType}, (T -> {distr U / R}) -> {distr T / R} -> U -> R mlet is not universe polymorphic Arguments mlet {R T U} f%_function_scope mu y mlet is transparent Expands to: Constant mathcomp.experimental_reals.distr.mlet Declared in library mathcomp.experimental_reals.distr, line 359, characters 11-15
Source code
Lemma
Source code
Proof.
rewrite /mlet psum_bigop; first by move=> y x; rewrite mulr_ge0.
move=> u; apply/(le_summable (F2 := mu)) => //.
by move=> x; rewrite mulr_ge0 //= ler_piMr ?le1_mu1.
apply/(le_trans _ (le1_mu mu))/le_psum => //.
move=> x; rewrite sumr_ge0 /= => [y _|]; first by rewrite mulr_ge0.
rewrite -mulr_sumr ler_piMr //; apply/(le_trans _ (le1_mu (f x))).
have := summable_mu (f x) => /gerfinseq_psum => /(_ _ uqJ).
by apply/(le_trans _)/ler_sum=> y _; apply/ler_norm.
Qed.
Definition
dlet : forall {R : realType} {T U : choiceType}, (T -> {distr U / R}) -> {distr T / R} -> distr R U dlet is not universe polymorphic Arguments dlet {R T U} f%_function_scope mu dlet is transparent Expands to: Constant mathcomp.experimental_reals.distr.dlet Declared in library mathcomp.experimental_reals.distr, line 374, characters 11-15
Source code
Lemma
Source code
Proof.
Notation
Source code
Definition
dlift : forall {R : realType} {A : choiceType}, (A -> {distr A / R}) -> {distr A / R} -> distr R A dlift is not universe polymorphic Arguments dlift {R A} f%_function_scope d dlift is transparent Expands to: Constant mathcomp.experimental_reals.distr.dlift Declared in library mathcomp.experimental_reals.distr, line 382, characters 11-16
Source code
fun => \dlet_( <- d) f x.
Definition
diter : forall {R : realType} {A : choiceType}, nat -> (A -> {distr A / R}) -> A -> {distr A / R} diter is not universe polymorphic Arguments diter {R A} n%_nat_scope f%_function_scope a diter is transparent Expands to: Constant mathcomp.experimental_reals.distr.diter Declared in library mathcomp.experimental_reals.distr, line 385, characters 11-16
Source code
fun => (iter n (dlift f) (dunit a)).
Section BindTheory.
Variables ( : choiceType).
Implicit Types (f g : T -> distr U) (mu nu : distr T).
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
dlet f mu =1 dlet g nu.
Proof.
Lemma
Source code
(forall , 0 <= f x <= 1) -> summable (fun => mu x * f x).
Proof.
exists 1 => x; case/andP: (in01_f x) => ge0_fx le1_fx.
by rewrite ger0_norm.
Qed.
Lemma
Source code
Proof.
Lemma
Source code
dlet f mu <=1 dlet g mu.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
mu <=1 nu
-> {in dinsupp mu, forall , f x <=1 g x}
-> \dlet_( <- mu) f x <=1 \dlet_( <- nu) g x.
Proof.
Lemma
Source code
(\dlet_(_ <- mu) nu) y = (dweight mu) * (nu y).
Proof.
Lemma
Source code
y \in dinsupp (\dlet_( <- mu) f x) ->
exists2 , x \in dinsupp mu & f x y != 0.
Proof.
Lemma
Source code
x \in dinsupp mu -> f x y != 0 -> y \in dinsupp (dlet f mu).
Proof.
Lemma
Source code
{in dinsupp mu, forall , f x != y} -> (\dlet_( <- mu) dunit (f x)) y = 0.
Proof.
Lemma
Source code
(\dlet_( <- mu) F x) y = 0 -> forall , x \in dinsupp mu -> F x y = 0.
Proof.
Section DLetDLet.
Context { : choiceType} ( : T -> distr U) ( : U -> distr V).
Lemma
Source code
\dlet_( <- \dlet_( <- mu) f1 y) f2 x
=1 \dlet_( <- mu) (\dlet_( <- f1 y) f2 x).
Proof.
pose S := mu x * (f1 x y * f2 y z).
rewrite (eq_psum (F2 := fun => PosSum.psum (S^~ y))) => [x|].
by rewrite -psumZ //; apply/eq_psum => y /=.
rewrite interchange_psum.
+ by move=> x; apply/summableZ/summable_mlet.
+ rewrite {}/S; apply/(le_summable (F2 := mu)) => //.
move=> x; rewrite ge0_psum /= psumZ ?ler_piMr //.
apply/(le_trans _ (le1_mu (f1 x)))/le_psum => //.
by move=> y; rewrite mulr_ge0 //= ler_piMr ?le1_mu1.
apply/eq_psum=> y /=; rewrite -psumZr //.
by apply/eq_psum=> x /=; rewrite {}/S mulrA.
Qed.
End DLetDLet.
Section DLetAlg.
Context { : choiceType} (
Source code
Source code
Lemma
Source code
(forall , mu x = mu1 x + mu2 x) -> (\dlet_( <- mu) f x) z =
(\dlet_( <- mu1) f x) z + (\dlet_( <- mu2) f x) z.
Proof.
by move=> x; rewrite mulr_ge0. by move=> x; rewrite mulr_ge0.
by apply/summable_mlet. by apply/summable_mlet.
by apply/eq_psum=> x /=; rewrite -mulrDl -muD.
Qed.
Definition
mlim : forall {R : realType} [T : choiceType], (nat -> {distr T / R}) -> T -> R mlim is not universe polymorphic Arguments mlim {R} [T] f%_function_scope _ mlim is transparent Expands to: Constant mathcomp.experimental_reals.distr.mlim Declared in library mathcomp.experimental_reals.distr, line 544, characters 11-15
Source code
fun => fine (nlim (fun => f n x)).
Lemma
Source code
Proof.
case: nlimP=> // l cvSl; apply/fine_ge0/(ncvg_geC _ cvSl).
by move=> n; apply/ge0_mu.
move=> uqJ; pose F :=
if `[< iscvg (fun => f n j) >] then fun => f n j else 0%:S.
apply/(@le_trans _ _ (\sum_( <- J) (fine (nlim (F j) (*: R*))))).
apply/ler_sum=> j _; rewrite /F; case/boolP: `[< _ >] => //.
move/asboolPn=> h; rewrite nlimC; case: nlimP=> //.
by case=> // l cf; case: h; exists l.
rewrite -lee_fin -nlim_sumR => [i _|].
rewrite /F; case/boolP: `[< _ >] => [/asboolP //|].
by move=> _; apply/iscvgC.
rewrite leNgt; apply/negP; pose s := \sum_( <- J) F j n.
move/ncvg_gt=> -/(_ s (nlim_ncvg _)) [].
suff: iscvg s by case=> l cs; exists l%:E.
apply/iscvg_sum=> j _; rewrite /F; case/boolP: `[< _ >].
by move/asboolP. by move=> _; apply/iscvgC.
move=> K /(_ _ (leqnn K)) /=; apply/negP; rewrite -leNgt.
apply/(@le_trans _ _ (\sum_( <- J) f K j)); last first.
have /(gerfinseq_psum uqJ) := summable_mu (f K).
move/le_trans=> -/(_ _ (le1_mu (f K)))=> h.
by apply/(le_trans _ h)/ler_sum=> i _; apply/ler_norm.
by apply/ler_sum=> j _; rewrite /F; case/boolP: `[< _ >].
Qed.
Definition
dlim : forall {R : realType} [T : choiceType], (nat -> {distr T / R}) -> distr R T dlim is not universe polymorphic Arguments dlim {R} [T] f%_function_scope dlim is transparent Expands to: Constant mathcomp.experimental_reals.distr.dlim Declared in library mathcomp.experimental_reals.distr, line 574, characters 11-15
Source code
locked (mkdistr (isd_mlim f)).
Notation
Source code
Lemma
Source code
(\dlim_() f n) x = fine (nlim (fun => f n x)).
Proof.
Section DLimTheory.
Variables ( : choiceType).
Implicit Types (f g : nat -> distr T) (h : T -> {distr U / R}).
Implicit Types (mu : {distr T / R}).
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
(forall , (K <= n)%N -> f n =1 g n) -> dlim f =1 dlim g.
Proof.
by apply/(eq_from_nlim (K := K)); move=> n /eq_fg /(_ x).
Qed.
Definition
dlim_bump : forall {R : realType} [T : choiceType] (mu0 : nat -> {distr T / R}), \dlim_(n) mu0 n.+1 =1 \dlim_(n) mu0 n dlim_bump is not universe polymorphic Arguments dlim_bump {R} [T] mu%_function_scope x dlim_bump is opaque Expands to: Constant mathcomp.experimental_reals.distr.dlim_bump Declared in library mathcomp.experimental_reals.distr, line 606, characters 11-20
Source code
dlim (fun => mu n.+1) =1 dlim mu.
Definition
dlim_lift : forall {R : realType} [T : choiceType] (mu0 : nat -> {distr T / R}) (p : nat), \dlim_(n) mu0 (n + p) =1 \dlim_(n) mu0 n dlim_lift is not universe polymorphic Arguments dlim_lift {R} [T] mu%_function_scope p%_nat_scope x dlim_lift is opaque Expands to: Constant mathcomp.experimental_reals.distr.dlim_lift Declared in library mathcomp.experimental_reals.distr, line 610, characters 11-20
Source code
dlim (fun => mu (n + p)%N) =1 dlim mu.
Proof.
Definition
dcvg : forall {R : realType} {T : choiceType}, (nat -> {distr T / R}) -> Prop dcvg is not universe polymorphic Arguments dcvg {R T} f%_function_scope dcvg is transparent Expands to: Constant mathcomp.experimental_reals.distr.dcvg Declared in library mathcomp.experimental_reals.distr, line 614, characters 11-15
Source code
forall , exists , ncvg (fun => f n x) l.
Definition
ducvg : forall {R : realType} {T : choiceType}, (nat -> {distr T / R}) -> Prop ducvg is not universe polymorphic Arguments ducvg {R T} f%_function_scope ducvg is transparent Expands to: Constant mathcomp.experimental_reals.distr.ducvg Declared in library mathcomp.experimental_reals.distr, line 617, characters 11-16
Source code
exists , forall , ncvg (fun => f n x) l.
CoInductive
Source code
|
Source code
ncvg (fun => f n x) l%:E -> dlim_spec f x l
|
Source code
dlim_spec f x 0.
Lemma
Source code
Proof.
Lemma
Source code
exists2 , (0 <= l <= 1) & ncvg (f^~ x) l%:E.
Proof.
Lemma
Source code
(forall , (n <= m)%N -> f n <=1 f m) -> dcvg f.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
(forall , f n <=1 g n) -> dcvg g -> dlim f <=1 dlim g.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
(forall , (n <= m)%N -> f n <=1 f m) -> f k <=1 dlim f.
Proof.
Lemma
Source code
\dlet_( <- dlim f) h x =1 \dlim_() \dlet_( <- f n) h x.
Proof.
Lemma
Source code
(forall , (n <= m)%N -> f n x <=1 f m x) ->
\dlim_() \dlet_( <- mu) (f n x) =1
\dlet_( <- mu) \dlim_() (f n x).
Proof using Type. End DLimTheory.
#[deprecated(since="mathcomp-analysis 0.6.2",
note="lacks proof, use __admitted__dlet_lim explicitly if you really want to use this lemma")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 0.6.2",
note="lacks proof, use __admitted__dlim_let explicitly if you really want to use this lemma")]
Notation
Source code
Section Marginals.
Variable ( : choiceType) ( : T -> U) ( : distr T).
Definition
dmargin : forall {R : realType} [T U : choiceType], (T -> U) -> {distr T / R} -> distr R U dmargin is not universe polymorphic Arguments dmargin {R} [T U] h%_function_scope mu dmargin is transparent Expands to: Constant mathcomp.experimental_reals.distr.dmargin Declared in library mathcomp.experimental_reals.distr, line 706, characters 11-18
Source code
Lemma
Source code
Proof.
Section MarginalsTh.
Variable ( : choiceType).
Lemma
Source code
(dmargin f mu) y = PosSum.psum (fun => (f x == y)%:R * mu x).
Lemma
Source code
\dlet_( <- dmargin f mu) g u =1 \dlet_( <- mu) (g (f t)).
Proof.
Lemma
Source code
dmargin f (\dlet_( <- mu) g t) =1 \dlet_( <- mu) (dmargin f (g t)).
Proof.
Lemma
Source code
dmargin f (dunit t) =1 dunit (f t) :> {distr U / R}.
Proof.
End Std.
#[deprecated(since="1.17.0", note="use `dmargin_dlet` instead")]
Notation
Source code
#[deprecated(since="1.17.0", note="use `dlet_dmargin` instead")]
Notation
Source code
#[deprecated(since="1.17.0", note="use `dlet_dlet` instead")]
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Section DSwap.
Context { : realType} { : choiceType} ( : {distr (A * B) / R}).
Definition
dswap : forall {R : realType} {A B : choiceType}, {distr (A * B) / R} -> {distr (B * A) / R} dswap is not universe polymorphic Arguments dswap {R A B} mu dswap is transparent Expands to: Constant mathcomp.experimental_reals.distr.dswap Declared in library mathcomp.experimental_reals.distr, line 758, characters 11-16
Source code
dmargin (fun => (xy.2, xy.1)) mu.
End DSwap.
Section DSwapCoreTheory.
Context { : realType} { : choiceType} ( : {distr (A * B) / R}).
Lemma
Source code
Proof.
Section DSwapTheory.
Context { : realType} { : choiceType} ( : {distr (A * B) / R}).
Lemma
Source code
Proof.
Lemma
Source code
xy \in dinsupp (dswap mu).
Lemma
Source code
Proof.
by move=> _ t /=; rewrite dlet_unit /=.
Qed.
Lemma
Source code
Proof.
by move=> _ t /=; rewrite dlet_unit /=.
Qed.
#[deprecated(since="1.17.0", note="use `dfst_dswap` instead")]
Notation
Source code
#[deprecated(since="1.17.0", note="use `dsnd_dswap` instead")]
Notation
Source code
Section DFst.
Context { : realType} { : choiceType}.
Lemma
Source code
dfst mu x = PosSum.psum (fun => mu (x, y)).
Proof.
rewrite (reindex_psum (P := [pred | z.1 == x]) (h := h)) /=.
+ case=> a b; rewrite !inE/= mulf_eq0 => /norP[].
by rewrite pnatr_eq0 eqb0 negbK.
+ by exists snd => [z|[z1 z2]]; rewrite !inE //= => /eqP ->.
by apply/eq_psum => y; rewrite eqxx mul1r.
Qed.
Lemma
Source code
summable (fun => mu (x, y)).
Proof.
apply/summable_seqP; exists M => // J uqJ; pose X := [seq (x, y) | <- J].
apply/(le_trans _ (h X _)); last by rewrite map_inj_uniq // => y1 y2 [].
by rewrite le_eqVlt big_map eqxx.
Qed.
Section DSnd.
Context { : realType} { : choiceType}.
Lemma
Source code
dsnd mu y = PosSum.psum (fun => mu (x, y)).
Proof.
Lemma
Source code
summable (fun => mu (x, y)).
Proof.
#[deprecated(since="1.17.0", note="use `dsndE` instead")]
Notation
Source code
Section PrCoreTheory.
Context { : realType} { : choiceType}.
Implicit Types (mu : {distr T / R}) (A B E : pred T).
Lemma
Source code
Proof.
by rewrite mulr_ge0 ?ler0n //= ler_piMl // lern1 leq_b1.
Qed.
Lemma
Source code
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
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
{in dinsupp mu, A =i B} -> \P_[mu] A = \P_[mu] B.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
{in dinsupp mu, f1 =1 f2} -> \E_[mu] f1 = \E_[mu] f2.
Proof.
Lemma
Source code
E =1 pred0 -> \P_[mu] E = 0.
End PrCoreTheory.
Section PrTheory.
Context { : realType} { : choiceType} { : eqType}.
Implicit Types (mu : {distr T / R}) (A B E : pred T).
Lemma
Source code
\P_[dlet f mu] E = \E_[mu] (fun => \P_[f x] E).
Proof.
rewrite /pr; unlock dlet => /=; rewrite /mlet /=.
pose F := (E x)%:R * (mu y * f y x).
transitivity (PosSum.psum (fun => PosSum.psum (fun => F x y))); rewrite {}/F.
by apply/eq_psum => x; rewrite -psumZ ?ler0n.
rewrite interchange_psum /=; last first.
apply/eq_psum=> y /=; rewrite mulrC -psumZ //.
by apply/eq_psum=> x /=; rewrite mulrCA.
+ have := summable_pr E (dlet f mu); apply/eq_summable.
by move=> x; rewrite /= dletE psumZ ?ler0n.
+ by move=> t; exact/summable_condl/summable_mlet.
Qed.
Lemma
Source code
\P_[dmargin f mu] E = \P_[mu] [pred | f x \in E].
Lemma
Source code
(forall , x \in dinsupp mu -> x \notin A) -> \P_[mu] A = 0.
Proof.
Lemma
Source code
(forall , x \in dinsupp mu -> x \in B -> x \notin A)
-> \P_[mu, B] A = 0.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
f1 <=1 f2 -> \E_[mu] f1 <= \E_[mu] f2.
Lemma
Source code
(forall , x \in dinsupp mu -> x \in E1 -> x \in E2) ->
\P_[mu] E1 <= \P_[mu] E2.
Proof.
Lemma
Source code
(forall , x \in dinsupp nu -> x \in A -> nu x <= mu x)
-> \P_[nu] A <= \P_[mu] A.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
PosSum.psum (fun => \P_[mu, A] (pred1 x)) = 1.
Proof.
rewrite (eq_psum (F2 := (fun => (A x)%:R * mu x))); last first.
by rewrite divff // gt_eqF.
move=> x /=; rewrite /pr (psum_finseq (r := [:: x])) ?big_seq1 //=.
move=> y; rewrite !inE; case: (y == x) => //=.
by rewrite mul0r eqxx.
by rewrite !inE eqxx -topredE ger0_norm ?mulr_ge0 ?ler0n.
Qed.
Lemma
Source code
Proof.
by move: xE; rewrite -topredE /= => ->; rewrite mul1r.
Qed.
Lemma
Source code
\P_[mu] A = \P_[mu] [predI A & B] + \P_[mu] [predI A & predC B].
Proof.
Lemma
Source code
(forall , x \in A -> x \notin B) ->
\P_[mu] [predU A & B] = \P_[mu] A + \P_[mu] B.
Proof.
Lemma
Source code
\P_[mu] [pred | f x \in r]
= \sum_( <- r) \P_[mu] [pred | f x == y].
Proof.
case/andP=> yNr /ih {ih}h; rewrite big_cons -h -pr_or_indep.
by move=> x; rewrite !inE => /eqP->. by apply/eq_pr.
Qed.
Lemma
Source code
\P_[mu] [pred | x \in r] = \sum_( <- r) mu x.
Proof.
case/andP=> yNr /ih {ih}h; rewrite big_cons /= pr_pred1.
by rewrite -h -pr_or_indep // => x /eqP ->.
Qed.
Lemma
Source code
uniq r
-> (forall , p1 != p2 -> p1 \in r -> p2 \in r -> x \in P p1 -> x \notin P p2)
-> \P_[mu] [pred | has [pred | x \in P p] r]
= \sum_( <- r) \P_[mu] (P p).
Proof.
rewrite (eq_pr (B := S)) => [x|]; first by rewrite !inE -big_has.
rewrite {}/S; elim: r uq_r dj => [_|p r ih /andP[pNr /ih {ih}h]] dj.
by rewrite big_nil pr_pred0_eq // => x; rewrite big_nil.
rewrite big_cons -h => [p1 p2 x ne_p p1r p2r|].
by apply/dj=> //; rewrite in_cons (p1r, p2r) orbT.
rewrite -pr_or_indep => [x xNPp|].
rewrite -topredE /= big_has; apply/hasPn => y y_in_r.
apply/(dj p); rewrite ?in_cons ?(eqxx, y_in_r, orbT) //.
by apply/contra: pNr=> /eqP->.
by apply/eq_pr=> x; rewrite -!topredE /= big_cons.
Qed.
Lemma
Source code
\P_[mu] A + \P_[mu] B - \P_[mu] [predI A & B].
Proof.
Lemma
Source code
\P_[mu] A + \P_[mu] B - \P_[mu] [predU A & B].
Lemma
Source code
\P_[mu] [predU A & B] <= \P_[mu] A + \P_[mu] B.
Lemma
Source code
\P_[mu] [predI A & B] <= \P_[mu] A + \P_[mu] B.
Lemma
Source code
Proof.
Lemma
Source code
\P_[mu] B * \P_[mu, B] A
+ \P_[mu] (predC B) * \P_[mu, predC B] A.
Proof.
by rewrite (prID _ B); congr (_ + _); apply/h.
rewrite /prc mulrCA; have [] := eqVneq (\P_[mu] B') 0; last first.
by move=> nzPB'; rewrite divff // mulr1.
move=> zPB'; rewrite zPB' invr0 !mulr0; apply/eq0_pr.
move=> x mux; move/pr_eq0: zPB' => /(_ x) h; rewrite !inE.
by apply/negP=> /andP[_ /h] /dinsuppP.
Qed.
Lemma
Source code
\P_[mu] A * \E_[mu, A] f
+ \P_[mu] (predC A) * \E_[mu, predC A] f.
Proof using Type.
Lemma
Source code
(exists , forall , `|f x| < M) -> \E?_[mu] f.
Proof.
case=> M ltM; rewrite /has_esp; apply/summable_seqP.
exists (Num.max M 0); first by rewrite le_max lexx orbT.
move=> J uqJ; apply/(@le_trans _ _ (\sum_( <- J) M * mu j)).
apply/ler_sum=> j _; rewrite normrM [X in _*X]ger0_norm //.
by apply/ler_wpM2r=> //; apply/ltW.
case: (ltrP M 0) => [lt0_M|ge0_M].
rewrite ?(ltW lt0_M) // -mulr_sumr.
by rewrite nmulr_rle0 //; apply/sumr_ge0.
by rewrite -mulr_sumr ler_piMr // -pr_mem ?le1_pr.
Qed.
Lemma
Source code
(exists , forall , `|F x| <= M) -> \E?_[mu] F.
Proof.
Lemma
Source code
Proof.
Lemma
Source code
0 <= M -> (forall , `|F x| <= M) -> \E_[mu] F <= M.
Proof.
Lemma
Source code
(forall
Source code
\E_[dlet nu mu] F = \E_[mu] (fun => \E_[nu x] F).
Proof using Type*. End PrTheory.
#[deprecated(since="1.17.0", note="use `pr_dlet` instead")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 0.6.2",
note="lacks proof, use __admitted__exp_split explicitly if you really want to use this lemma")]
Notation
Source code
#[deprecated(since="mathcomp-analysis 0.6.2",
note="lacks proof, use __admitted__exp_dlet explicitly is you really want to use this lemma")]
Notation
Source code
Section Jensen.
Context { : realType} { : finType}.
Definition
convexon : forall {R : realType}, \bar R -> \bar R -> (R -> R) -> Prop convexon is not universe polymorphic Arguments convexon {R} (a b)%_ereal_scope f%_function_scope convexon is transparent Expands to: Constant mathcomp.experimental_reals.distr.convexon Declared in library mathcomp.experimental_reals.distr, line 1220, characters 11-19
Source code
forall , (a <= x%:E <= b)%E -> (a <= y%:E <= b)%E ->
forall , 0 <= t <= 1 ->
f (t * x + (1 - t) * y) <= t * (f x) + (1 - t) * (f y).
Notation
Source code
Section Jensen.
Context ( : R -> R) ( : I -> R).
Hypothesis
Source code
Hypothesis
Source code
Hypothesis
Source code
Lemma
Source code
Proof.
by move/esym/eqP; rewrite oner_eq0.
elim: {i} s (l i) (ge0_l i) (x i) => [|j s ih] li ge0_li xi.
by rewrite !big_nil !addr0 => ->; rewrite !mul1r.
rewrite !big_cons; have := ge0_l j; rewrite le_eqVlt.
case/orP => [/eqP<-|gt0_lj].
by rewrite !Monoid.simpm /= !Monoid.simpm; apply/ih.
rewrite !addrA => eq1; pose z := (li * xi + l j * x j) / (li + l j).
have nz_lij: li + l j != 0 by rewrite gt_eqF ?ltr_wpDl.
have/ih := eq1 => -/(_ _ z); rewrite [_ * (_ / _)]mulrC.
rewrite mulfVK // => {}ih; apply/(le_trans (ih _)).
by rewrite addr_ge0 ?ge0_l.
rewrite lerD2r {ih}/z [_ / _]mulrDl ![_*_/_]mulrAC.
set c1 : R := _ / _; set c2 : R := _ / _; have eqc2: c2 = 1 - c1.
apply/(mulfI nz_lij); rewrite mulrBr mulr1 ![(li + l j)*_]mulrC.
by apply/eqP; rewrite !mulfVK // eq_sym subr_eq addrC.
set c := (li + l j); pose z := (c * c1 * f xi + c * c2 * f (x j)).
apply/(@le_trans _ _ z); last by rewrite /z ![_*(_/_)]mulrC !mulfVK.
rewrite {}/z -![c * _ * _]mulrA -mulrDr ler_wpM2l ?addr_ge0 //.
rewrite eqc2 cvx_f // ?leNye ?leey // divr_ge0 ?addr_ge0 //=.
by rewrite ler_pdivrMr ?mul1r ?lerDl ?ltr_wpDl.
Qed.
End Jensen.
Notation
Source code