Require Import Qreals.
Require Import Lra Lia Reals RealAdd RandomVariableL2 Coquelicot.Coquelicot.
Require Import Morphisms Finite List ListAdd Permutation infprod Almost NumberIso.
Require Import Sums SimpleExpectation PushNeg.
Require Import EquivDec.
Require Import Classical.
Require Import ClassicalChoice.
Require Import IndefiniteDescription ClassicalDescription.
Require QArith.
Require Import BorelSigmaAlgebra.
Require Import utils.Utils.
Require Import ConditionalExpectation.
Set Bullet Behavior "
Strict Subproofs".
Set Default Goal Selector "!".
Import ListNotations.
Section slln.
Lemma ash_6_1_1_a {
x :
nat ->
R}{
a :
nat ->
nat ->
R} (
ha :
forall j,
is_lim_seq (
fun n => (
a n j)) 0)
(
hb1 :
forall n,
ex_series(
fun j =>
Rabs(
a n j)))
(
hb2 :
exists c,
forall n,
Series (
fun j =>
Rabs (
a n j)) <
c)
(
hx1 :
bounded x) (
hx2 :
is_lim_seq x 0) :
let y :=
fun n =>
Series (
fun j => (
a n j)*(
x j))
in is_lim_seq y 0.
Proof.
intros y.
destruct hx1 as [
M HMx].
destruct hb2 as [
c Hc].
assert (
hy1 :
forall n j,
Rabs (
a n j *
x j) <=
M*
Rabs(
a n j))
by (
intros ;
rewrite Rabs_mult,
Rmult_comm ;
apply Rmult_le_compat_r;
auto;
apply Rabs_pos).
assert (
hy2 :
forall n M,
ex_series(
fun j =>
M*
Rabs(
a n j)))
by (
intros;
now apply (
ex_series_scal_l)
with (
a0 :=
fun j =>
Rabs(
a n j))).
assert (
hy3 :
forall n,
ex_series (
fun j :
nat =>
Rabs(
a n j *
x j))).
{
intros n.
apply (
ex_series_le (
fun j =>
Rabs (
a n j *
x j)) (
fun j =>
M*
Rabs(
a n j)));
trivial.
intros.
rewrite Rabs_Rabsolu;
auto.
}
assert (
hy6 :
forall n N, (0 <
N)%
nat ->
Rabs(
y n) <=
sum_f_R0 (
fun j =>
Rabs (
a n j *
x j)) (
pred N)
+
Series (
fun j =>
Rabs (
a n (
N +
j)%
nat *
x (
N +
j)%
nat)))
by (
intros;
unfold y;
eapply Rle_trans;
try (
apply Series_Rabs;
trivial);
right;
apply Series_incr_n with (
a :=
fun j =>
Rabs (
a n j *
x j));
trivial).
rewrite is_lim_seq_Reals;
unfold Un_cv,
R_dist;
simpl.
intros eps Heps.
setoid_rewrite Rminus_0_r.
assert (
Hcc :
c > 0).
{
specialize (
Hc 0%
nat).
eapply Rle_lt_trans;
try (
apply Hc).
eapply Rle_trans;
try (
apply sum_f_R0_nonneg_le_Series;
eauto).
+
apply sum_f_R0_Rabs_pos.
Unshelve.
exact 0%
nat.
+
intros;
apply Rabs_pos.
}
assert (
hy7 :
exists N,
forall j, (
j >=
N)%
nat ->
Rabs(
x j) <
eps/(2*
c)).
{
rewrite is_lim_seq_Reals in hx2.
assert (
Heps' :
eps/(2*
c) > 0).
{
apply Rlt_gt.
apply RIneq.Rdiv_lt_0_compat;
lra.
}
specialize (
hx2 (
eps/(2*
c))
Heps').
unfold R_dist in hx2.
setoid_rewrite Rminus_0_r in hx2.
exact hx2.
}
assert (
hy8 :
forall N,
is_lim_seq (
fun n =>
sum_f_R0 (
fun j =>
Rabs (
a n j *
x j))
N) 0).
{
intros N.
apply (
is_lim_seq_le_le (
fun _ => 0)
_ (
fun n =>
M*
sum_f_R0 (
fun j =>
Rabs(
a n j))
N)).
-
intros n.
split ;
try (
apply sum_f_R0_Rabs_pos).
rewrite <-
sum_f_R0_mult_const.
apply sum_f_R0_le;
intros.
rewrite Rmult_comm.
rewrite Rabs_mult.
apply Rmult_le_compat_r;
auto;
try (
apply Rabs_pos).
-
apply is_lim_seq_const.
-
replace (0:
Rbar)
with (
Rbar_mult M 0)
by (
apply Rbar_mult_0_r).
apply is_lim_seq_scal_l.
apply is_lim_seq_sum_f_R0;
intros;
auto.
replace 0
with (
Rabs 0)
by (
apply Rabs_R0).
apply is_lim_seq_continuous;
auto.
rewrite continuity_pt_filterlim;
apply (
continuous_Rabs 0).
}
setoid_rewrite is_lim_seq_Reals in hy8.
destruct hy7 as [
N0 HN0].
assert (
Heps' :
eps/2 > 0)
by (
apply RIneq.Rdiv_lt_0_compat;
lra).
specialize (
hy8 (
N0) (
eps/2)
Heps').
unfold R_dist in hy8.
setoid_rewrite Rminus_0_r in hy8.
destruct hy8 as [
N1 HN1].
exists N1;
intros.
specialize (
hy6 n (
N0 + 1)%
nat).
eapply Rle_lt_trans;
try (
apply hy6).
**
lia.
**
replace (
eps)
with ((
eps/2) +
c*(
eps/(2*
c)))
by (
field;
lra).
apply Rplus_le_lt_compat.
--
replace (
Init.Nat.pred (
N0 + 1))
with N0 by lia.
eapply Rle_trans;
try (
apply Rle_abs);
left;
eauto.
--
assert
(
hy7 :
Series (
fun j =>
Rabs (
a n (
N0 + 1 +
j)%
nat *
x(
N0 + 1 +
j)%
nat))
<=
Series(
fun j => (
eps/(2*
c))*
Rabs (
a n (
N0+1+
j)%
nat))).
{
apply Series_le;
intros.
+
split;
try (
apply Rabs_pos).
rewrite Rabs_mult,
Rmult_comm.
apply Rmult_le_compat_r;
try(
apply Rabs_pos).
left.
apply HN0;
lia.
+
apply (
ex_series_scal_l)
with (
c0 :=
eps/(2*
c))(
a0 :=
fun j =>
Rabs(
a n (
N0+1+
j)%
nat)).
now rewrite <-(
ex_series_incr_n)
with (
n0 := (
N0 + 1)%
nat)(
a0:=
fun j =>
Rabs (
a n j)).
}
eapply Rle_lt_trans;
eauto.
rewrite Series_scal_l.
rewrite Rmult_comm.
apply Rmult_lt_compat_r;
eauto;
try(
apply RIneq.Rdiv_lt_0_compat;
lra).
generalize (
Series_shift_le (
fun n0 =>
Rabs_pos _) (
hb1 n) (
N0 + 1));
intros.
eapply Rle_lt_trans;
eauto.
Qed.
Lemma ash_6_1_1_b {
x :
nat ->
R}{
a :
nat ->
nat ->
R} (
ha1 :
forall j,
is_lim_seq (
fun n => (
a n j)) 0)
(
hb1 :
forall n,
ex_series(
fun j =>
Rabs(
a n j)))
(
hb2 :
exists c,
forall n,
Series (
fun j =>
Rabs (
a n j)) <
c)
(
hx1 :
bounded x) (
x0 :
R) (
hx2 :
is_lim_seq x x0)
(
ha2 :
is_lim_seq (
fun n =>
Series (
fun j =>
a n j)) 1) :
let y :=
fun n =>
Series (
fun j => (
a n j)*(
x j))
in is_lim_seq y x0.
Proof.
Lemma ash_6_1_2 {
a x :
nat ->
R} {
x0 :
R}(
ha :
forall n, 0 <=
a n)
(
hb1 :
forall n, 0 <
sum_f_R0 a n)(
hb2 :
is_lim_seq (
sum_f_R0 a)
p_infty) (
hx :
is_lim_seq x x0):
is_lim_seq (
fun n => (
sum_f_R0 (
fun j =>
a j *
x j)
n)/(
sum_f_R0 a n))
x0.
Proof.
Lemma ash_6_1_3 {
b x :
nat ->
R} (
hb0:
b (0%
nat) = 0) (
hb1 :
forall n, 0 <
b (
S n) <=
b (
S (
S n))) (
hb2 :
is_lim_seq b p_infty)
(
hx :
ex_series x):
is_lim_seq (
fun n => (
sum_f_R0 (
fun j =>
b j *
x j) (
S n))/(
b (
S n))) 0.
Proof.
pose (
s :=
sum_f_R0 x).
assert (
forall n,
sum_f_R0 (
fun j =>
b j *
x j) (
S n) =
(
b (
S n))*(
s (
S n)) -
sum_f_R0 (
fun j => (
s j) * ((
b (
S j)) - (
b j)))
n).
{
intros.
induction n.
-
unfold s;
simpl.
ring_simplify;
lra.
-
replace (
S (
S n))
with (
S (
n+1))
by lia.
simpl.
replace (
n+1)%
nat with (
S n)
by lia.
rewrite IHn.
apply Rplus_eq_reg_r with (
r :=
sum_f_R0 (
fun j :
nat =>
s j * (
b (
S j) -
b j))
n).
ring_simplify.
apply Rplus_eq_reg_r with (
r := - (
b (
S n) *
s (
S n))).
ring_simplify.
unfold s.
replace (
S n)
with (
n+1)%
nat by lia.
simpl.
now ring_simplify.
}
assert (
forall n,
b (
S n) <> 0).
{
intros.
apply Rgt_not_eq.
apply hb1.
}
assert (
forall n,
(
s (
S n)) - (
sum_f_R0 (
fun j :
nat =>
s j * (
b (
S j) -
b j))
n)/(
b (
S n)) =
(
sum_f_R0 (
fun j :
nat =>
b j *
x j) (
S n))/(
b (
S n))).
{
intros.
symmetry.
unfold Rdiv.
replace (
s (
S n))
with ((
b (
S n) *
s (
S n)) * /
b (
S n)).
-
rewrite <-
Rmult_minus_distr_r.
now apply Rmult_eq_compat_r.
-
now field_simplify.
}
assert (
bser:
forall n,
b (
S n) -
b (0%
nat) =
sum_f_R0 (
fun j :
nat =>
b (
S j) -
b j)
n).
{
induction n.
-
now simpl.
-
simpl.
rewrite <-
IHn.
lra.
}
destruct hx.
apply (
is_lim_seq_ext _ _ _ H1).
rewrite <-
series_is_lim_seq in H2.
apply is_lim_seq_ext with (
v :=
s)
in H2.
-
apply is_lim_seq_minus with (
l1 :=
x0) (
l2 :=
x0).
+
now rewrite is_lim_seq_incr_1 in H2.
+
generalize (@
ash_6_1_2 (
fun j =>
b (
S j) -
b j)
s x0);
intros.
cut_to H3;
trivial.
*
eapply (
is_lim_seq_ext _ _ x0 _ H3).
*
intros.
destruct (
lt_dec 0
n).
--
specialize (
hb1 (
n-1)%
nat).
replace (
S (
n-1))
with (
n)
in hb1 by lia.
lra.
--
assert (
n = 0%
nat)
by lia.
rewrite H4.
rewrite hb0.
rewrite Rminus_0_r.
left;
apply hb1.
*
intros.
induction n.
--
simpl.
specialize (
hb1 0%
nat).
lra.
--
rewrite sum_f_R0_peel.
eapply Rlt_le_trans.
++
apply IHn.
++
assert (
b (
S (
S n)) -
b (
S n) >= 0).
**
specialize (
hb1 n);
lra.
**
lra.
*
apply (
is_lim_seq_ext _ _ _ bser).
apply is_lim_seq_minus with (
l1 :=
p_infty) (
l2 :=
b (0%
nat)).
--
now apply is_lim_seq_incr_1 in hb2.
--
apply is_lim_seq_const.
--
red;
simpl.
now red;
simpl.
+
red;
simpl.
red;
simpl.
now rewrite Rplus_opp_r.
-
unfold s.
intros.
now rewrite sum_n_Reals.
Unshelve.
intros.
simpl.
specialize (
bser n).
rewrite <-
bser.
rewrite hb0.
rewrite Rminus_0_r.
f_equal.
apply sum_f_R0_ext.
intros.
now rewrite Rmult_comm.
Qed.
Lemma sum_n_zeroval (
f :
nat ->
R) (
n:
nat) :
f 0%
nat = 0 ->
sum_n_m f 0%
nat n =
sum_n_m f 1%
nat n.
Proof.
Lemma ash_6_1_3_strong1 {
b x :
nat ->
R} (
hb1 :
forall n, 0 <
b n <=
b (
S n)) (
hb2 :
is_lim_seq b p_infty)
(
hx :
ex_series x):
is_lim_seq (
fun n => (
sum_n_m (
fun j =>
b j *
x j) 1
n)/(
b n)) 0.
Proof.
Lemma ash_6_1_3_strong {
b x :
nat ->
R} (
hb1 :
forall n, 0 <
b n <=
b (
S n)) (
hb2 :
is_lim_seq b p_infty)
(
hx :
ex_series x):
is_lim_seq (
fun n => (
sum_n (
fun j =>
b j *
x j)
n)/(
b n)) 0.
Proof.
Context {
Ts:
Type} {
dom:
SigmaAlgebra Ts}{
Prts:
ProbSpace dom}.
Global Instance frfsum (
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
FiniteRangeFunction (
X n)} (
n :
nat) :
FiniteRangeFunction (
rvsum X n).
Proof.
Global Instance frfite (
X Y :
Ts ->
R){
p :
Prop}(
dec : {
p} + {~
p})
{
rv_X :
FiniteRangeFunction X} {
rv_Y :
FiniteRangeFunction Y} :
FiniteRangeFunction (
if dec then X else Y).
Proof.
match_destr.
Qed.
Definition rvmaxlist (
X :
nat ->
Ts ->
R) (
N :
nat) :
Ts ->
R :=
fun (
omega :
Ts) =>
Rmax_list_map (
List.seq 0 (
S N)) (
fun n =>
X n omega).
Lemma rvmaxlist_monotone (
X :
nat ->
Ts ->
R) :
forall n omega,
rvmaxlist X n omega <=
rvmaxlist X (
S n)
omega.
Proof.
Global Instance frfrvmaxlist (
X :
nat ->
Ts ->
R)
{
rv :
forall n,
FiniteRangeFunction (
X n)} (
N :
nat):
FiniteRangeFunction (
rvmaxlist X N).
Proof.
Fixpoint filtration_history (
n :
nat) (
X :
nat ->
Ts ->
R)
{
frf :
forall n,
FiniteRangeFunction (
X n)}
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
:
list dec_sa_event :=
match n with
| 0%
nat => [
dsa_Ω]
|
S k =>
refine_dec_sa_partitions (
induced_sigma_generators (
frf k)) (
filtration_history k X)
end.
Lemma rvmult_zero (
f :
Ts ->
R) :
rv_eq (
rvmult f (
const 0)) (
const 0).
Proof.
Lemma part_list_history (
n :
nat) (
X :
nat ->
Ts ->
R)
{
frf :
forall n,
FiniteRangeFunction (
X n)}
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)} :
is_partition_list (
map dsa_event (
filtration_history n X)).
Proof.
Lemma part_meas_induced (
f :
Ts ->
R)
{
frf :
FiniteRangeFunction f}
{
rv :
RandomVariable dom borel_sa f} :
partition_measurable f (
map dsa_event (
induced_sigma_generators frf)).
Proof.
Global Instance partition_measurable_perm (
f :
Ts ->
R)
{
frf :
FiniteRangeFunction f}
{
rvf :
RandomVariable dom borel_sa f} :
Proper (@
Permutation _ ==>
iff) (
partition_measurable f).
Proof.
Instance partition_measurable_event_equiv (
f :
Ts ->
R)
{
frf :
FiniteRangeFunction f}
{
rvf :
RandomVariable dom borel_sa f} :
Proper (
Forall2 event_equiv ==>
iff) (
partition_measurable f).
Proof.
Lemma part_meas_refine_commute
(
f :
Ts ->
R)
(
l1 l2 :
list dec_sa_event)
{
frf :
FiniteRangeFunction f}
{
rvf :
RandomVariable dom borel_sa f} :
partition_measurable f (
map dsa_event
(
refine_dec_sa_partitions l1 l2)) <->
partition_measurable f (
map dsa_event
(
refine_dec_sa_partitions l2 l1)).
Proof.
Lemma part_meas_refine_l (
f :
Ts ->
R)
(
l1 l2 :
list dec_sa_event)
{
frf :
FiniteRangeFunction f}
{
rvf :
RandomVariable dom borel_sa f} :
(
is_partition_list (
map dsa_event l1)) ->
(
is_partition_list (
map dsa_event l2)) ->
(
partition_measurable f (
map dsa_event l1)) ->
partition_measurable f (
map dsa_event
(
refine_dec_sa_partitions l1 l2)).
Proof.
Lemma part_meas_refine (
f :
Ts ->
R)
(
l1 l2 :
list dec_sa_event)
{
frf :
FiniteRangeFunction f}
{
rvf :
RandomVariable dom borel_sa f} :
(
is_partition_list (
map dsa_event l1)) ->
(
is_partition_list (
map dsa_event l2)) ->
(
partition_measurable f (
map dsa_event l1)) \/
(
partition_measurable f (
map dsa_event l2)) ->
partition_measurable f (
map dsa_event
(
refine_dec_sa_partitions l1 l2)).
Proof.
Lemma part_meas_hist (
j k :
nat) (
X :
nat ->
Ts ->
R)
{
frf :
forall n,
FiniteRangeFunction (
X n)}
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)} :
partition_measurable (
X j) (
map dsa_event (
filtration_history ((
S j) +
k)%
nat X)).
Proof.
Instance filtration_sa_le_rv {
Td:
Type} {
cod :
SigmaAlgebra Td}
{
F :
nat ->
SigmaAlgebra Ts} (
X :
nat ->
Ts ->
Td)
(
isfilt:
IsFiltration F)
{
rv :
forall (
n:
nat),
RandomVariable (
F n)
cod (
X n)}
(
n :
nat) (
j:
nat) (
jlt: (
j <=
n)%
nat) :
RandomVariable (
F n)
cod (
X j).
Proof.
Existing Instance isfe_l2_prod.
Existing Instance isfe_sqr_seq.
Lemma expec_cross_zero_filter (
X :
nat ->
Ts ->
R)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
frf2 :
forall (
k:
nat),
IsFiniteExpectation Prts (
rvsqr (
X k))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
forall (
j k :
nat),
(
j <
k)%
nat ->
FiniteExpectation Prts (
rvmult (
X j) (
X k)) = 0.
Proof.
Lemma SimpleExpectation_rvsum {
n}
(
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
frf :
forall (
n:
nat),
FiniteRangeFunction (
X n)} :
SimpleExpectation (
rvsum X n) =
sum_n (
fun m =>
SimpleExpectation (
X m))
n.
Proof.
Lemma expec_cross_zero_sum_shift_filter (
X :
nat ->
Ts ->
R) (
m:
nat)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt:
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
frf2 :
forall (
k:
nat),
IsFiniteExpectation Prts (
rvsqr (
X k))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
forall (
j k :
nat),
(
j <
k)%
nat ->
FiniteExpectation Prts (
rvsum (
fun n =>
rvmult (
X (
n+
m)%
nat) (
X (
k+
m)%
nat))
j) = 0.
Proof.
Lemma rvsum_distr_r {
n} (
X :
nat ->
Ts ->
R) (
f :
Ts ->
R) :
rv_eq (
rvsum (
fun j =>
rvmult (
X j)
f)
n) (
rvmult (
rvsum X n)
f).
Proof.
Lemma expec_cross_zero_sum2_shift_filter (
X :
nat ->
Ts ->
R) (
m :
nat)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt:
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall (
k:
nat),
IsFiniteExpectation Prts (
rvsqr (
X k))}
{
isfe_mult_sum:
forall (
k j:
nat),
IsFiniteExpectation Prts (
rvmult (
rvsum (
fun n :
nat =>
X (
n +
m)%
nat)
j)
(
X (
k +
m)%
nat))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
forall (
j k :
nat),
(
j <
k)%
nat ->
FiniteExpectation Prts (
rvmult (
rvsum (
fun n =>
X (
n +
m)%
nat)
j) (
X (
k+
m)%
nat)) = 0.
Proof.
Fixpoint cutoff_eps (
n :
nat) (
eps :
R) (
X :
nat ->
R) :=
match n with
| 0%
nat =>
X 0%
nat
|
S k =>
if (
Rlt_dec (
Rmax_list_map (
seq 0 (
S k)) (
fun n =>
Rabs(
X n)))
eps)
then X (
S k)
else (
cutoff_eps k eps X)
end.
Lemma cutoff_eps_lt_eps eps n (
X :
nat ->
R) :
(
forall k, (
k <=
n)%
nat ->
Rabs (
X k) <
eps) -> (
cutoff_eps n eps X =
X n).
Proof.
Lemma cutoff_eps_ge_eps eps (
X :
nat ->
R) :
(
forall k:
nat,
eps <=
Rabs(
X k)) -> (
forall n,
cutoff_eps n eps X =
X 0%
nat).
Proof.
intros H n.
simpl.
induction n.
++
now simpl in H.
++
simpl.
match_destr.
assert (
Rabs(
X n) <=
Rmax_list_map (0%
nat ::
seq 1
n) (
fun n =>
Rabs(
X n))).
{
unfold Rmax_list_map.
apply Rmax_spec.
rewrite in_map_iff.
exists n;
split;
trivial.
replace (0%
nat ::
seq 1 (
n))
with (
seq 0%
nat (
S n))
by (
now simpl).
rewrite in_seq;
lia.
}
specialize (
H n).
lra.
Qed.
Lemma ne_le_succ {
k n :
nat} (
hk1 :
k <>
S n) (
hk2 : (
k <=
S n)%
nat) : (
k <=
n)%
nat.
Proof.
lia.
Qed.
Lemma cutoff_ge_eps_exists (
n :
nat) (
eps :
R) (
X :
nat ->
R ):
(
eps <=
Rabs(
cutoff_eps n eps X)) ->
exists k, (
k <=
n)%
nat /\
eps <=
Rabs(
X k).
Proof.
intros Hn.
induction n.
--
simpl in Hn.
exists 0%
nat.
split;
trivial.
--
simpl in Hn.
match_destr_in Hn.
++
exists (
S n).
split;
trivial;
lra.
++
apply Rnot_lt_ge in n0.
specialize (
IHn Hn).
destruct IHn as [
k Hk].
exists k.
destruct Hk.
split;
trivial.
etransitivity;
eauto;
lia.
Qed.
Lemma cutoff_ge_eps_exists_contrapose (
n :
nat) (
eps :
R) (
X :
nat ->
R):
(
Rabs(
cutoff_eps n eps X) <
eps) -> (
forall k, (
k <=
n)%
nat ->
Rabs(
X k) <
eps).
Proof.
intros Heps.
induction n.
+
simpl in Heps.
intros.
assert (
k = 0%
nat)
by lia;
subst;
trivial.
+
simpl in Heps.
match_destr_in Heps.
++
intros.
destruct (
k ==
S n).
--
now rewrite e.
--
apply IHn;
try(
apply ne_le_succ;
eauto).
unfold Rmax_list_map in r.
replace (0%
nat ::
seq 1
n)
with (
seq 0%
nat (
S n))
in r by (
now simpl).
rewrite Rmax_list_lt_iff in r;
try (
apply map_not_nil;
apply seq_not_nil;
lia).
rewrite cutoff_eps_lt_eps;
intros;
try (
apply r;
rewrite in_map_iff).
**
exists n;
split;
trivial.
rewrite in_seq;
lia.
**
exists k0;
split;
trivial.
rewrite in_seq;
lia.
++
intros.
specialize (
IHn Heps).
apply Rnot_lt_ge in n0.
replace (0%
nat ::
seq 1
n)
with (
seq 0%
nat (
S n))
in n0 by (
now simpl).
unfold Rmax_list_map in n0.
assert ((0 <
S n)%
nat)
by lia.
apply Rge_le in n0.
rewrite (
Rmax_list_map_seq_ge eps (
fun n =>
Rabs (
X n))
H0)
in n0.
destruct n0 as [
k1 [
Hk1 Heps1]].
assert (
k1 <=
n)%
nat by lia.
specialize (
IHn k1 H1).
exfalso;
lra.
Qed.
Lemma cutoff_ge_eps_exists_iff (
n :
nat) (
eps :
R) (
X :
nat ->
R):
(
eps <=
Rabs(
cutoff_eps n eps X)) <->
exists k, (
k <=
n)%
nat /\
eps <=
Rabs(
X k).
Proof.
Lemma cutoff_ge_eps_Rmax_list_iff (
n :
nat) (
eps :
R) (
X :
nat ->
R):
(
eps <=
Rabs(
cutoff_eps n eps X)) <->
eps <=
Rmax_list_map (
seq 0 (
S n)) (
fun n =>
Rabs (
X n)).
Proof.
Definition cutoff_eps_rv (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R) :=
fun omega =>
cutoff_eps n eps (
fun k =>
X k omega).
Lemma rvmaxlist_ge (
X :
nat ->
Ts ->
R):
forall n omega,
X n omega <=
rvmaxlist X n omega.
Proof.
Lemma cutoff_eps_rv_lt_eps eps (
X :
nat ->
Ts ->
R) :
forall omega,
(
forall k,
Rabs(
X k omega) <
eps) -> (
forall n,
cutoff_eps_rv n eps X omega =
X n omega).
Proof.
Lemma cutoff_eps_rv_ge_eps eps (
X :
nat ->
Ts ->
R) :
forall omega,
(
forall k:
nat,
eps <=
Rabs(
X k omega)) -> (
forall n,
cutoff_eps_rv n eps X omega =
X 0%
nat omega).
Proof.
Lemma cutoff_ge_eps_rv_rvmaxlist_iff (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R):
forall omega,
eps <=
Rabs(
cutoff_eps_rv n eps X omega) <->
eps <=
rvmaxlist (
fun k =>
fun omega =>
Rabs (
X k omega))
n omega.
Proof.
Lemma Rle_Rmax :
forall r1 r2 r :
R,
Rmax r1 r2 <=
r <->
r1 <=
r /\
r2 <=
r.
Proof.
Instance max_list_measurable (
k :
nat) (
X :
nat ->
Ts ->
R)
{
rm:
forall n, (
n <=
k)%
nat ->
RealMeasurable dom (
X n)} :
RealMeasurable dom (
fun omega =>
Rmax_list_map (
seq 0 (
S k)) (
fun n =>
X n omega)).
Proof.
Global Instance rvmaxlist_rv (
X :
nat ->
Ts ->
R) (
N :
nat)
{
rv :
forall n, (
n <=
N)%
nat ->
RandomVariable dom borel_sa (
X n)} :
RandomVariable dom borel_sa (
rvmaxlist X N).
Proof.
Global Instance rv_cutoff_eps_rv (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R)
{
rv:
forall k, (
k <=
n)%
nat ->
RandomVariable dom borel_sa (
X k)} :
RandomVariable dom borel_sa (
cutoff_eps_rv n eps X).
Proof.
Global Instance nnf_cutoff_eps_rv (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R)
{
nnf:
forall n,
NonnegativeFunction (
X n)} :
NonnegativeFunction (
cutoff_eps_rv n eps X).
Proof.
unfold cutoff_eps_rv.
induction n.
-
now simpl.
-
simpl.
intro x.
specialize (
IHn x).
simpl in IHn.
match_destr.
apply nnf.
Qed.
Lemma cutoff_eps_values (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R) :
forall (
x:
Ts),
exists (
k :
nat),
(
k <=
n)%
nat /\
cutoff_eps_rv n eps X x =
X k x.
Proof.
intros.
unfold cutoff_eps_rv.
induction n.
-
exists (0%
nat);
simpl.
now split;
try lia.
-
simpl.
match_destr.
+
exists (
S n).
now split;
try lia.
+
destruct IHn as [
k [? ?]].
exists k.
now split;
try lia.
Qed.
Local Obligation Tactic :=
idtac.
Global Program Instance frf_cutoff_eps_rv (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R)
{
frf:
forall n,
FiniteRangeFunction (
X n)} :
FiniteRangeFunction (
cutoff_eps_rv n eps X) := {
frf_vals :=
flat_map (
fun k =>
frf_vals (
FiniteRangeFunction :=
frf k)) (
seq 0 (
S n))
}.
Next Obligation.
Local Obligation Tactic :=
unfold complement,
equiv;
Tactics.program_simpl.
Lemma cutoff_eps_succ_minus eps (
X :
nat ->
R) :
forall n,
cutoff_eps (
S n)
eps X -
cutoff_eps n eps X =
if (
Rlt_dec (
Rmax_list_map (
seq 0 (
S n)) (
fun n =>
Rabs (
X n)))
eps)
then
(
X (
S n) -
X n)
else 0.
Proof.
intros n.
simpl.
match_destr;
intuition;
try lra.
f_equal.
replace (0%
nat ::
seq 1
n)
with (
seq 0 (
S n))
in r by (
now simpl).
induction n;
try (
now simpl).
assert (0 <
S n)%
nat by lia.
generalize (
Rmax_list_map_succ eps (
fun n =>
Rabs (
X n)) (
S n)
H r);
intros.
specialize (
IHn H0).
simpl.
match_destr;
intuition;
try lra.
Qed.
Definition pre_cutoff_event (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R) :
pre_event Ts :=
fun x =>
Rmax_list_map (
seq 0
n) (
fun n =>
Rabs (
X n x)) <
eps.
Program Definition cutoff_indicator (
n :
nat) (
eps :
R) (
X :
nat ->
Ts ->
R) :=
EventIndicator (
P :=
pre_cutoff_event n eps X)
_.
Next Obligation.
Global Instance cutoff_ind_rv (
j:
nat) (
eps:
R) (
X:
nat ->
Ts ->
R)
{
rv :
forall n, (
n<=
j)%
nat ->
RandomVariable dom borel_sa (
X n)} :
RandomVariable dom borel_sa
(
cutoff_indicator (
S j)
eps (
rvsum X)).
Proof.
Lemma partition_measurable_rvplus (
rv_X1 rv_X2 :
Ts ->
R)
{
rv1 :
RandomVariable dom borel_sa rv_X1}
{
rv2 :
RandomVariable dom borel_sa rv_X2}
{
frf1 :
FiniteRangeFunction rv_X1}
{
frf2 :
FiniteRangeFunction rv_X2}
(
l :
list (
event dom)) :
is_partition_list l ->
partition_measurable rv_X1 l ->
partition_measurable rv_X2 l ->
partition_measurable (
rvplus rv_X1 rv_X2)
l.
Proof.
Lemma partition_measurable_rvsum (
j :
nat) (
X :
nat ->
Ts ->
R)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)}
(
l :
list (
event dom)) :
is_partition_list l ->
(
forall k, (
k <=
j)%
nat ->
partition_measurable (
X k)
l) ->
partition_measurable (
rvsum X j)
l.
Proof.
unfold partition_measurable;
intros.
induction j.
-
specialize (
H0 0%
nat).
cut_to H0;
try lia;
trivial.
destruct (
H0 p H2)
as [
c ?].
exists c.
unfold rvsum.
rewrite H3.
intros ?;
simpl.
unfold pre_event_preimage;
simpl.
now rewrite sum_O.
-
unfold rvsum.
generalize H0;
intros HH0.
specialize (
H0 (
S j)).
cut_to H0;
try lia;
trivial.
cut_to IHj.
+
specialize (
H0 p H2).
destruct IHj as [
c0 ?].
destruct H0 as [
c1 ?].
exists (
c1 +
c0).
intros x;
simpl.
repeat red in H0,
H3.
unfold pre_event_preimage,
pre_event_singleton in *;
simpl in *;
intros px.
rewrite sum_Sn.
unfold plus;
simpl.
rewrite (
Rplus_comm c1 c0).
unfold rvsum in *.
f_equal;
auto.
+
intros.
apply HH0;
trivial.
lia.
Qed.
Lemma partition_measurable_rvmult (
rv_X1 rv_X2 :
Ts ->
R)
{
rv1 :
RandomVariable dom borel_sa rv_X1}
{
rv2 :
RandomVariable dom borel_sa rv_X2}
{
frf1 :
FiniteRangeFunction rv_X1}
{
frf2 :
FiniteRangeFunction rv_X2}
(
l :
list (
event dom)) :
is_partition_list l ->
partition_measurable rv_X1 l ->
partition_measurable rv_X2 l ->
partition_measurable (
rvmult rv_X1 rv_X2)
l.
Proof.
Lemma partition_measurable_indicator
{
P :
event dom}
(
dec:
forall x, {
P x} + {~
P x})
(
l :
list (
event dom)) :
(
forall (
Q :
event dom),
In Q l ->
(
event_sub Q P) \/ (
event_sub Q (
event_complement P))) ->
partition_measurable (
EventIndicator dec)
l.
Proof.
Lemma partition_measurable_indicator_pre
{
P :
pre_event Ts}
(
dec:
forall x, {
P x} + {~
P x})
{
rv :
RandomVariable dom borel_sa (
EventIndicator dec)}
(
l :
list (
event dom)) :
(
forall (
Q :
event dom),
In Q l ->
(
pre_event_sub Q P) \/ (
pre_event_sub Q (
pre_event_complement P))) ->
partition_measurable (
EventIndicator dec)
l.
Proof.
Lemma filtration_history_var_const (
X :
nat ->
Ts ->
R) (
eps :
R) (
j:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall (
Q :
event dom),
In Q (
map dsa_event (
filtration_history (
S j)
X)) ->
forall (
k:
nat),
(
k <=
j)%
nat ->
exists (
c:
R),
forall x,
Q x ->
X k x =
c.
Proof.
Lemma filtration_history_rvsum_var_const_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
m j:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall (
Q :
event dom),
In Q (
map dsa_event (
filtration_history (
S j +
m)%
nat X)) ->
forall (
k:
nat),
(
k <=
j)%
nat ->
exists (
c:
R),
forall x,
Q x ->
rvsum (
fun n =>
X(
n+
m)%
nat)
k x =
c.
Proof.
Lemma filtration_history_rvsum_var_const_ex_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
m j:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall (
Q :
event dom),
In Q (
map dsa_event (
filtration_history (
S j +
m)%
nat X)) ->
forall (
k:
nat),
(
k <=
j)%
nat ->
{
c:
R |
forall x,
Q x ->
rvsum (
fun n =>
X (
n+
m)%
nat)
k x =
c}.
Proof.
Lemma filtration_history_rvsum_var_const_fun_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
m j:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall (
Q :
event dom),
In Q (
map dsa_event (
filtration_history (
S j +
m)%
nat X)) ->
exists (
f : {
n':
nat |
n' <=
j}%
nat ->
R),
forall (
k: {
n':
nat |
n' <=
j}%
nat),
forall x,
Q x ->
rvsum (
fun n =>
X(
n+
m)%
nat) (
proj1_sig k)
x =
f k.
Proof.
Lemma pre_cutoff_event_const_history_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
j m:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall (
Q :
event dom),
In Q (
map dsa_event (
filtration_history (
S j +
m)%
nat X)) ->
exists (
c:
R),
forall x,
Q x ->
Rmax_list_map (
seq 0 (
S j))
(
fun n :
nat =>
Rabs (
rvsum (
fun k =>
X (
k +
m)%
nat)
n x)) =
c.
Proof.
Lemma partition_measurable_cutoff_ind_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
m:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall j,
partition_measurable (
cutoff_indicator (
S j)
eps (
rvsum (
fun n =>
X (
n +
m)%
nat))) (
map dsa_event (
filtration_history (
S j +
m)%
nat X)).
Proof.
Lemma partition_measurable_rvabs (
rv_X :
Ts ->
R)
{
rv :
RandomVariable dom borel_sa rv_X}
{
frf :
FiniteRangeFunction rv_X}
(
l :
list (
event dom)) :
is_partition_list l ->
partition_measurable rv_X l ->
partition_measurable (
rvabs rv_X)
l.
Proof.
Lemma partition_measurable_Rmax_list_map (
j :
nat) (
X :
nat ->
Ts ->
R)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)}
(
l :
list (
event dom)) :
is_partition_list l ->
(
forall k, (
k <=
j)%
nat ->
partition_measurable (
X k)
l) ->
partition_measurable (
fun x =>
(
Rmax_list_map (
seq 0 (
S j))
(
fun n :
nat =>
Rabs (
X n x))))
l.
Proof.
Lemma partition_measurable_Rmax_list_map_rvsum (
j :
nat) (
X :
nat ->
Ts ->
R)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)}
(
l :
list (
event dom)) :
is_partition_list l ->
(
forall k, (
k <=
j)%
nat ->
partition_measurable (
X k)
l) ->
partition_measurable (
fun x =>
(
Rmax_list_map (
seq 0 (
S j))
(
fun n :
nat =>
Rabs (
rvsum X n x))))
l.
Proof.
Lemma cutoff_eps_const_history_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
j m:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall (
Q :
event dom),
In Q (
map dsa_event (
filtration_history (
S j +
m)%
nat X)) ->
exists (
c:
R),
forall x,
Q x -> (
cutoff_eps_rv j eps (
rvsum (
fun n =>
X (
n +
m)%
nat)))
x =
c.
Proof.
Lemma event_sub_preimage_singleton (
f :
Ts ->
R)
c
(
rv :
RandomVariable dom borel_sa f):
forall (
p :
event dom),
event_sub p (
preimage_singleton f c) <->
(
forall x,
p x ->
f x =
c).
Proof.
intros;
split;
intros.
+
repeat red in H.
apply H.
unfold proj1_sig.
apply H0.
+
repeat red.
apply H.
Qed.
Lemma partition_constant_measurable
(
f :
Ts ->
R)
(
rv :
RandomVariable dom borel_sa f)
(
frf :
FiniteRangeFunction f)
(
l :
list (
event dom)) :
is_partition_list l ->
(
forall (
p :
event dom),
In p l ->
exists c,
forall x,
p x ->
f x =
c) <->
partition_measurable f l.
Proof.
unfold partition_measurable.
intros.
split;
intros.
-
destruct (
H0 p H2)
as [
c ?].
exists c.
now repeat red.
-
now apply H0.
Qed.
Lemma partition_measurable_cutoff_eps_shift (
X :
nat ->
Ts ->
R) (
eps :
R) (
m:
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
frf :
forall n,
FiniteRangeFunction (
X n)} :
forall j,
partition_measurable (
cutoff_eps_rv j eps (
rvsum (
fun n =>
X (
n+
m)%
nat)))
(
map dsa_event (
filtration_history ((
S j)+
m)%
nat X)).
Proof.
End slln.
Section slln_extra.
Context {
Ts:
Type} {
dom:
SigmaAlgebra Ts}{
Prts:
ProbSpace dom}.
Lemma cutoff_eps_in j eps X :
exists k, (
k <
S j)%
nat /\
cutoff_eps j eps X =
X k.
Proof.
induction j;
simpl.
-
exists 0%
nat.
split;
trivial;
lia.
-
destruct IHj as [
k [??]].
match_destr.
+
exists (
S j).
split;
trivial;
lia.
+
exists k.
split;
trivial;
lia.
Qed.
Lemma cutoff_eps_in_seq j eps X :
In (
cutoff_eps j eps X) (
map X (
seq 0 (
S j))).
Proof.
Lemma pre_cutoff_event_lt_eps j eps Xm (
a:
Ts) :
(
pre_cutoff_event (
S j)
eps (
rvsum Xm)
a) ->
Rabs (
cutoff_eps j eps (
fun k :
nat =>
rvsum Xm k a)) <
eps.
Proof.
Lemma indicator_prod_cross_shift_filter (
j m:
nat) (
eps:
R) (
X:
nat ->
Ts ->
R)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
isfe :
forall n,
IsFiniteExpectation _ (
X n)}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
let Xm :=
fun n =>
X (
n +
m)%
nat in
Expectation (
Prts:=
Prts)
(
rvmult (
rvmult (
cutoff_eps_rv j eps (
rvsum Xm))
(
cutoff_indicator (
S j)
eps (
rvsum Xm)))
(
X (
S (
j +
m)))) =
Some (
Rbar.Finite 0).
Proof.
Instance IsFiniteExpectation_mult_sqr X
{
isfemult :
forall k j :
nat,
IsFiniteExpectation Prts (
rvmult (
X k) (
X j))} :
forall n,
IsFiniteExpectation _ ((
rvsqr (
X n))).
Proof.
intros.
apply isfemult.
Qed.
Lemma IsFiniteExpectation_rvmult_rvmaxlist1 F G k
{
rvF:
forall n,
RandomVariable dom borel_sa (
F n)}
{
rvG:
RandomVariable dom borel_sa G}
:
(
forall a, (
a <=
k)%
nat ->
IsFiniteExpectation Prts (
rvmult (
F a)
G)) ->
IsFiniteExpectation Prts
(
rvmult (
rvmaxlist F k)
G).
Proof.
Lemma IsFiniteExpectation_rvmult_rvmaxlist F G k j
{
rvF:
forall n,
RandomVariable dom borel_sa (
F n)}
{
rvG:
forall n,
RandomVariable dom borel_sa (
G n)}
:
(
forall a b, (
a <=
k ->
b <=
j)%
nat ->
IsFiniteExpectation Prts (
rvmult (
F a) (
G b))) ->
IsFiniteExpectation Prts
(
rvmult (
rvmaxlist F k) (
rvmaxlist G j)).
Proof.
Lemma rvsqr_minus_foil (
x y:
Ts ->
R) :
rv_eq (
rvsqr (
rvminus x y)) (
rvplus (
rvminus (
rvsqr x) (
rvscale 2 (
rvmult x y))) (
rvsqr y)).
Proof.
intros ?.
rv_unfold.
unfold Rsqr.
lra.
Qed.
Lemma rvmult_rvminus_distr (
a b c:
Ts->
R) :
rv_eq (
rvmult a (
rvminus b c)) (
rvminus (
rvmult a b) (
rvmult a c)).
Proof.
intros ?.
rv_unfold.
lra.
Qed.
Instance isfe_Sum1_r_from_crossmult X m
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))} :
let Sum :=
fun j => (
rvsum (
fun n =>
X (
n +
m)%
nat)
j)
in
forall a b,
IsFiniteExpectation Prts (
rvmult (
Sum b) (
X a)).
Proof.
Instance isfe_Sum1_from_crossmult X m
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))} :
let Sum :=
fun j => (
rvsum (
fun n =>
X (
n +
m)%
nat)
j)
in
forall a b,
IsFiniteExpectation Prts (
rvmult (
X a) (
Sum b)).
Proof.
Instance isfe_Sum_from_crossmult X m
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))} :
let Sum :=
fun j => (
rvsum (
fun n =>
X (
n +
m)%
nat)
j)
in
forall a b,
IsFiniteExpectation Prts (
rvmult (
Sum a) (
Sum b)).
Proof.
Instance isfe_sqr_Sum X m
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))} :
forall a,
IsFiniteExpectation Prts (
rvsqr (
rvsum (
fun n =>
X (
n +
m)%
nat)
a)).
Proof.
Lemma ash_6_1_4_filter (
X:
nat ->
Ts ->
R) {
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
(
eps:
posreal) (
m:
nat)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
(
isfesqr :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k)))
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
let Sum :=
fun j => (
rvsum (
fun n =>
X (
n +
m)%
nat)
j)
in
forall (
isfe2:
forall n,
IsFiniteExpectation _ ((
rvsqr (
Sum n)))),
forall (
n:
nat),
ps_P (
event_ge dom (
rvmaxlist (
fun k =>
rvabs(
Sum k))
n)
eps) <=
FiniteExpectation _ (
rvsqr (
Sum n))/
eps^2.
Proof.
intros.
assert (
H1 :
event_equiv (
event_ge dom (
rvmaxlist (
fun k =>
rvabs(
Sum k))
n)
eps)
(
event_ge dom (
rvabs(
cutoff_eps_rv n eps Sum))
eps)).
{
intro omega.
unfold proj1_sig,
rvabs;
simpl.
split;
intros H;
try (
apply Rle_ge;
apply Rge_le in H).
+
now rewrite cutoff_ge_eps_rv_rvmaxlist_iff.
+
now rewrite <-
cutoff_ge_eps_rv_rvmaxlist_iff.
}
rewrite H1.
generalize (
Chebyshev_ineq_div_mean0 (
cutoff_eps_rv n eps Sum)
_ eps);
intros H3.
assert (
isfemult':
forall k j,
IsFiniteExpectation Prts
(
rvmult (
cutoff_eps_rv k eps Sum) (
cutoff_eps_rv j eps Sum))).
{
intros k j.
apply IsFiniteExpectation_abs_id;
try typeclasses eauto.
eapply (
IsFiniteExpectation_bounded _ (
const 0)
_ (
rvmult (
rvmaxlist (
fun k => (
rvabs (
Sum k)))
k) (
rvmaxlist (
fun k => (
rvabs (
Sum k)))
j))).
Unshelve.
-
intros ?;
rv_unfold.
apply Rabs_pos.
-
intros ?.
rv_unfold.
rewrite Rabs_mult.
apply Rmult_le_compat;
try apply Rabs_pos.
+
destruct (
cutoff_eps_values k eps Sum a)
as [
k' [??]].
rewrite H0.
apply Rmax_spec.
apply in_map_iff.
exists k'.
split;
trivial.
apply in_seq.
lia.
+
destruct (
cutoff_eps_values j eps Sum a)
as [
j' [??]].
rewrite H0.
apply Rmax_spec.
apply in_map_iff.
exists j'.
split;
trivial.
apply in_seq.
lia.
-
apply IsFiniteExpectation_rvmult_rvmaxlist;
try typeclasses eauto;
intros.
rewrite <-
rvmult_abs.
apply IsFiniteExpectation_abs;
try typeclasses eauto.
}
assert (
isfes:
forall n,
IsFiniteExpectation Prts (
rvsqr (
cutoff_eps_rv n eps Sum))).
{
intros j.
rewrite rvsqr_eq.
apply isfemult'.
}
rewrite <- (
FiniteNonnegExpectation_alt _ _)
in H3.
simpl in H3.
rewrite <-
Rsqr_pow2.
unfold rvabs in H3.
eapply Rle_trans; [
apply H3 |].
unfold Rdiv.
apply Rmult_le_compat_r;
[
left;
apply Rinv_0_lt_compat,
Rlt_0_sqr,
Rgt_not_eq,
cond_pos |].
assert (
Srel:
forall j,
FiniteExpectation _ (
rvsqr (
Sum (
S j))) =
FiniteExpectation _ (
rvsqr (
Sum j)) +
FiniteExpectation _ (
rvsqr (
X ((
S j)+
m)%
nat))).
{
intros.
assert (
rv_eq (
rvsqr (
Sum (
S j)))
(
rvplus (
rvsqr (
Sum j))
(
rvplus
(
rvscale 2
(
rvmult (
Sum j) (
X ((
S j)+
m)%
nat)))
(
rvsqr (
rvminus (
Sum (
S j)) (
Sum j)))))).
-
intro x.
unfold rvsqr,
rvminus,
rvopp,
rvscale,
rvplus,
rvmult.
unfold Rsqr.
replace (
Sum (
S j)
x)
with ((
Sum j x) + (
X ((
S j)+
m)%
nat x)).
+
now ring_simplify.
+
unfold Sum,
rvsum.
rewrite sum_Sn.
unfold plus;
simpl.
now unfold plus;
simpl.
-
assert (
isfep:
IsFiniteExpectation Prts
(
rvplus (
rvsqr (
Sum j))
(
rvplus (
rvscale 2 (
rvmult (
Sum j) (
X (
S j +
m)%
nat))) (
rvsqr (
rvminus (
Sum (
S j)) (
Sum j)))))).
{
eapply IsFiniteExpectation_proper; [
symmetry;
apply H | ].
typeclasses eauto.
}
rewrite (
FiniteExpectation_ext _ _ _ H).
erewrite (
FiniteExpectation_plus'
_ _ _ ).
erewrite (
FiniteExpectation_plus'
_ _ _ ).
rewrite <-
Rplus_assoc.
erewrite (
FiniteExpectation_scale'
_ _ _).
{
Unshelve.
-
shelve.
-
apply (
IsFiniteExpectation_proper _ (
rvminus (
rvplus (
rvsqr (
Sum j))
(
rvplus (
rvscale 2 (
rvmult (
Sum j) (
X (
S j +
m)%
nat))) (
rvsqr (
rvminus (
Sum (
S j)) (
Sum j)))))
((
rvsqr (
Sum j))))).
+
intros ?;
rv_unfold;
lra.
+
apply IsFiniteExpectation_minus;
typeclasses eauto.
-
rewrite rvsqr_minus_foil.
typeclasses eauto.
}
Unshelve.
assert (
isfe_mult_sum :
forall k j :
nat,
IsFiniteExpectation Prts
(
rvmult (
rvsum (
fun n :
nat =>
X (
n +
m)%
nat)
j) (
X (
k +
m)%
nat))).
{
intros.
rewrite <-
rvsum_distr_r.
apply IsFiniteExpectation_sum
;
try typeclasses eauto.
intros.
now apply isfe_sqr_seq.
}
generalize (
expec_cross_zero_sum2_shift_filter X m isfilt filt_sub HC);
intros.
replace (
FiniteExpectation Prts (
rvmult (
Sum j) (
X (
S j +
m)%
nat)))
with 0.
+
ring_simplify.
f_equal.
assert (
rv_eq (
rvsqr (
rvminus (
Sum (
S j)) (
Sum j)))
(
rvsqr (
X ((
S j)+
m)%
nat))).
*
intro x.
unfold Sum,
rvsqr.
rewrite rvminus_unfold.
unfold rvsum.
rewrite sum_Sn.
unfold plus;
simpl.
unfold Rsqr;
ring.
*
apply FiniteExpectation_ext.
apply H2.
+
specialize (
H0 j (
S j)).
rewrite <-
H0;
try lia.
unfold Sum.
apply FiniteExpectation_pf_irrel.
}
assert (
isfee:
forall j,
IsFiniteExpectation Prts (
rvsqr (
rvminus (
cutoff_eps_rv (
S j)
eps Sum)
(
cutoff_eps_rv j eps Sum)))).
{
intros.
rewrite rvsqr_minus_foil.
typeclasses eauto.
}
assert (
Zrel:
forall j,
FiniteExpectation Prts (
rvsqr (
cutoff_eps_rv (
S j)
eps Sum)) =
FiniteExpectation Prts (
rvsqr (
cutoff_eps_rv j eps Sum)) +
FiniteExpectation Prts (
rvsqr (
rvminus (
cutoff_eps_rv (
S j)
eps Sum)
(
cutoff_eps_rv j eps Sum)))).
{
intros.
assert (
rv_eq (
rvsqr (
cutoff_eps_rv (
S j)
eps Sum))
(
rvplus (
rvsqr (
cutoff_eps_rv j eps Sum))
(
rvplus
(
rvscale 2
(
rvmult (
cutoff_eps_rv j eps Sum)
(
rvminus (
cutoff_eps_rv (
S j)
eps Sum)
(
cutoff_eps_rv j eps Sum))))
(
rvsqr (
rvminus (
cutoff_eps_rv (
S j)
eps Sum)
(
cutoff_eps_rv j eps Sum)))))).
-
intro x.
unfold rvsqr,
rvminus,
rvopp,
rvscale,
rvplus,
rvmult.
unfold Rsqr.
replace (
Sum (
S j)
x)
with ((
Sum j x) + (
X ((
S j)+
m)%
nat x)).
+
now ring_simplify.
+
unfold Sum,
rvsum.
rewrite sum_Sn.
now unfold plus;
simpl.
-
rewrite (
FiniteExpectation_ext_alt _ _ _ H).
erewrite (
FiniteExpectation_plus'
_ _ _ ).
erewrite (
FiniteExpectation_plus'
_ _ _ ).
rewrite <-
Rplus_assoc.
f_equal.
erewrite (
FiniteExpectation_scale'
_ _ _).
{
Unshelve.
-
shelve.
-
apply IsFiniteExpectation_plus; [
typeclasses eauto |
typeclasses eauto | |
typeclasses eauto].
apply IsFiniteExpectation_scale.
rewrite rvmult_rvminus_distr.
apply IsFiniteExpectation_minus;
typeclasses eauto.
-
apply IsFiniteExpectation_scale.
rewrite rvmult_rvminus_distr.
apply IsFiniteExpectation_minus;
typeclasses eauto.
-
rewrite rvmult_rvminus_distr.
apply IsFiniteExpectation_minus;
typeclasses eauto.
}
Unshelve.
assert (
Expectation (
rvmult (
cutoff_eps_rv j eps Sum) (
rvminus (
cutoff_eps_rv (
S j)
eps Sum) (
cutoff_eps_rv j eps Sum))) =
Some (
Rbar.Finite 0)).
+
assert (
Heq :
rv_eq
(
rvmult (
cutoff_eps_rv j eps Sum)
(
rvmult
(
cutoff_indicator (
S j)
eps Sum)
(
X ((
S j)+
m)%
nat)))
(
rvmult
(
cutoff_eps_rv j eps Sum)
(
rvminus (
cutoff_eps_rv (
S j)
eps Sum)
(
cutoff_eps_rv j eps Sum)))).
{
intros w.
rv_unfold.
f_equal.
ring_simplify.
unfold cutoff_eps_rv,
cutoff_indicator,
EventIndicator.
rewrite (
cutoff_eps_succ_minus eps (
fun k =>
Sum k w)
j).
unfold Sum,
rvsum.
rewrite sum_Sn.
unfold plus.
simpl.
rewrite Rplus_comm.
unfold Rminus;
rewrite Rplus_assoc.
replace (
sum_n (
fun n0 :
nat =>
X (
n0+
m)%
nat w)
j + -
sum_n (
fun n0 :
nat =>
X (
n0+
m)%
nat w)
j)
with 0
by lra.
rewrite Rplus_0_r.
match_destr.
-
match_destr.
+
lra.
+
tauto.
-
match_destr.
+
tauto.
+
lra.
}
erewrite <-(
Expectation_ext Heq).
assert (
rv_eq
(
rvmult (
cutoff_eps_rv j eps Sum)
(
rvmult (
cutoff_indicator (
S j)
eps Sum) (
X ((
S j)+
m)%
nat)))
(
rvmult
(
rvmult (
cutoff_eps_rv j eps Sum)
(
cutoff_indicator (
S j)
eps Sum))
(
X ((
S j)+
m)%
nat)))
by now rewrite rvmult_assoc.
erewrite (
Expectation_ext H0).
eapply indicator_prod_cross_shift_filter;
trivial.
intros;
now apply IsFiniteExpectation_rvsqr_lower.
+
generalize (
Expectation_IsFiniteExpectation _ _ _ H0);
intros isfee2.
rewrite (
FiniteExpectation_Expectation _ _)
in H0.
invcs H0.
erewrite (
FiniteExpectation_pf_irrel)
in H4.
rewrite H4.
lra.
}
clear H1 H3.
induction n.
-
simpl.
right.
apply FiniteExpectation_ext.
intro x.
now unfold rvsqr,
Sum.
-
specialize (
Srel n).
rewrite Srel.
specialize (
Zrel n).
rewrite (
FiniteExpectation_pf_irrel _ (
rvsqr (
cutoff_eps_rv (
S n)
eps Sum))).
rewrite Zrel.
apply Rplus_le_compat;
trivial.
{
rewrite (
FiniteExpectation_pf_irrel _ (
rvsqr (
cutoff_eps_rv n eps Sum)))
in IHn.
rewrite (
FiniteExpectation_pf_irrel _ (
rvsqr (
Sum n)))
in IHn.
trivial.
}
apply FiniteExpectation_le.
intro x.
unfold rvsqr.
rewrite rvminus_unfold.
unfold cutoff_eps_rv.
simpl.
match_destr;
try (
do 2
rewrite Rsqr_pow2;
rewrite Rminus_eq_0).
+
generalize (
cutoff_eps_succ_minus eps (
fun j =>
Sum j x)
n);
intros Hcut.
simpl in Hcut.
match_destr_in Hcut;
intuition;
try (
lra).
rewrite Hcut.
unfold Sum.
right.
f_equal.
unfold rvsum.
rewrite sum_Sn.
unfold plus.
simpl.
now ring_simplify.
+
rewrite <-
Rsqr_pow2.
unfold Rsqr.
eapply Rle_trans;
try (
apply pow2_ge_0).
lra.
Qed.
Lemma ash_6_1_4 (
X:
nat ->
Ts ->
R) (
eps:
posreal) (
m:
nat)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
(
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k)))
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filtration_history_sa_sub X n) (
X (
S n)))
(
const 0)) :
let Sum :=
fun j => (
rvsum (
fun n =>
X (
n +
m)%
nat)
j)
in
forall (
isfe2:
forall n,
IsFiniteExpectation _ ((
rvsqr (
Sum n)))),
forall (
n:
nat),
ps_P (
event_ge dom (
rvmaxlist (
fun k =>
rvabs(
Sum k))
n)
eps) <=
(
FiniteExpectation Prts (
rvsqr (
Sum n)))/
eps^2.
Proof.
Lemma var_sum_cross_0_offset_filter (
X :
nat ->
Ts ->
R) (
m :
nat)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
(
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k)))
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
let Xm :=
fun n =>
X (
n +
m)%
nat in
let Sum :=
fun j => (
rvsum (
fun n =>
X (
n +
m)%
nat)
j)
in
forall j (
isfej:
IsFiniteExpectation Prts (
rvsqr (
rvsum Xm j))),
FiniteExpectation Prts (
rvsqr (
rvsum Xm j)) =
sum_n (
fun n =>
FiniteExpectation Prts (
rvsqr (
X (
n +
m)%
nat)))
j.
Proof.
Lemma sa_sigma_is_ELimInf_seq (
f :
nat ->
Ts ->
Rbar) (
c:
Rbar)
{
rv :
forall n,
RandomVariable dom Rbar_borel_sa (
f n)} :
sa_sigma (
fun omega =>
is_ELimInf_seq (
fun n =>
f n omega)
c).
Proof.
Lemma sa_sigma_is_ELimSup_seq (
f :
nat ->
Ts ->
Rbar) (
c:
Rbar)
{
rv :
forall n,
RandomVariable dom Rbar_borel_sa (
f n)} :
sa_sigma (
fun omega =>
is_ELimSup_seq (
fun n =>
f n omega)
c).
Proof.
Lemma sa_sigma_is_Elim_seq (
f :
nat ->
Ts ->
Rbar) (
c:
Rbar)
{
rv :
forall n,
RandomVariable dom Rbar_borel_sa (
f n)} :
sa_sigma (
fun omega =>
is_Elim_seq (
fun n =>
f n omega)
c).
Proof.
Lemma sa_sigma_is_lim_seq (
f :
nat ->
Ts ->
R) (
c:
Rbar)
{
rv :
forall n,
RandomVariable dom borel_sa (
f n)} :
sa_sigma (
fun omega =>
is_lim_seq (
fun n =>
f n omega)
c).
Proof.
Lemma sa_sigma_not_convergent (
X :
nat ->
Ts ->
R) (
X0 :
Ts ->
R) (
eps :
posreal) (
N :
nat)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
rv0 :
RandomVariable dom borel_sa X0} :
sa_sigma (
fun omega =>
exists n :
nat, (
n >=
N)%
nat /\
Rabs (
X n omega -
X0 omega) >=
eps).
Proof.
Lemma sa_sigma_not_cauchy (
X :
nat ->
Ts ->
R) (
eps:
posreal) (
N :
nat)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)} :
sa_sigma (
fun omega =>
exists (
n m :
nat),
(
n >=
N)%
nat /\ (
m >=
N)%
nat /\
Rabs ((
X n omega) - (
X m omega)) >=
eps) .
Proof.
Lemma sa_sigma_not_full_convergent (
X :
nat ->
Ts ->
R)
X0
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
rv0 :
RandomVariable dom borel_sa X0}:
sa_sigma (
fun omega =>
exists (
eps :
posreal),
forall N:
nat,
exists (
n :
nat),
(
n >=
N)%
nat /\
Rabs ((
X n omega) - (
X0 omega)) >=
eps).
Proof.
Lemma sa_sigma_not_full_cauchy (
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)} :
sa_sigma (
fun omega =>
exists (
eps :
posreal),
forall N:
nat,
exists (
n m :
nat),
(
n >=
N)%
nat /\ (
m >=
N)%
nat /\
Rabs ((
X n omega) - (
X m omega)) >=
eps).
Proof.
Definition cauchy_seq_at {
A :
Type}(
omega :
A) (
X :
nat ->
A ->
R) :=
forall (
eps:
posreal),
exists (
N:
nat),
forall (
n m :
nat), (
n >=
N)%
nat -> (
m >=
N)%
nat ->
Rabs ((
X n omega) - (
X m omega)) <
eps.
Lemma sa_sigma_cauchy_descending (
X :
nat ->
Ts ->
R)(
eps :
posreal)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}:
forall n,
let E :=
fun n =>
exist sa_sigma _ (
sa_sigma_not_cauchy X eps n)
in
event_sub (
E (
S n)) (
E n).
Proof.
intros n E.
repeat red. intros omega H.
red in H. destruct H as [n0 [m0 [H1 [H2 H3]]]].
exists n0; exists m0.
repeat split; try lia; trivial.
Qed.
Lemma sa_sigma_cauchy_inter_event_sub (
X :
nat ->
Ts ->
R) {
eps1 eps2 :
posreal}
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)} (
Heps :
eps2 <
eps1) (
n :
nat):
event_sub (
inter_of_collection (
fun n =>
exist sa_sigma _ (
sa_sigma_not_cauchy X eps1 n)))
(
inter_of_collection (
fun n =>
exist sa_sigma _ (
sa_sigma_not_cauchy X eps2 n))).
Proof.
repeat red. intros omega H.
repeat red in H. intros m.
specialize (H m).
destruct H as [n0 [m0 [H1 [H2 H3]]]].
exists n0; exists m0.
repeat split; try lia; try lra.
Qed.
Lemma ps_union_countable_union_iff (
coll :
nat ->
event dom):
(
forall n,
ps_P (
coll n) = 0) <-> (
ps_P (
union_of_collection coll) = 0).
Proof.
Lemma recip_pos (
m :
nat) : 0 < /(1 +
INR m).
Proof.
Lemma almost_convergent_iff (
X :
nat ->
Ts ->
R)
X0
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}
{
rv0 :
RandomVariable dom borel_sa X0}:
event_equiv ((
exist sa_sigma _ (
sa_sigma_not_full_convergent X X0)))
(
union_of_collection
(
fun m =>
inter_of_collection
(
fun k =>
exist sa_sigma _ (
sa_sigma_not_convergent X X0 (
mkposreal (/(1 +
INR m)) (
recip_pos _))
k)))).
Proof.
simpl.
intros omega.
simpl.
split;
intros.
+
destruct H as [
eps Heps].
generalize (
archimed_cor1 eps (
cond_pos eps));
intros.
destruct H as [
N [
HN1 HN2]].
assert (/(1 +
INR N) <
eps).
{
eapply Rlt_trans;
eauto.
apply Rinv_lt_contravar;
try lra.
apply Rmult_lt_0_compat;
try (
now apply lt_0_INR).
generalize (
pos_INR N).
generalize (
INR N)
as x;
intros.
lra.
}
exists N.
intros n1.
specialize (
Heps n1).
destruct Heps as [
n0 [
Hn1 Hn2]].
exists n0.
repeat split;
try trivial.
eapply Rge_trans;
eauto.
lra.
+
destruct H as [
N HN].
exists (
mkposreal (/(1 +
INR N)) (
recip_pos _)).
simpl.
intros N0.
specialize (
HN N0).
assumption.
Qed.
Lemma almost_cauchy_iff (
X :
nat ->
Ts ->
R)
{
rv :
forall n,
RandomVariable dom borel_sa (
X n)}:
event_equiv ((
exist sa_sigma _ (
sa_sigma_not_full_cauchy X)))
(
union_of_collection
(
fun m =>
inter_of_collection
(
fun k =>
exist sa_sigma _ (
sa_sigma_not_cauchy X (
mkposreal (/(1 +
INR m)) (
recip_pos _))
k)))).
Proof.
simpl.
intros omega.
simpl.
split;
intros.
+
destruct H as [
eps Heps].
generalize (
archimed_cor1 eps (
cond_pos eps));
intros.
destruct H as [
N [
HN1 HN2]].
assert (/(1 +
INR N) <
eps).
{
eapply Rlt_trans;
eauto.
apply Rinv_lt_contravar;
try lra.
apply Rmult_lt_0_compat;
try (
now apply lt_0_INR).
generalize (
pos_INR N).
generalize (
INR N)
as x;
intros.
lra.
}
exists N.
intros n1.
specialize (
Heps n1).
destruct Heps as [
n0 [
m0 [
Hn0 [
Hm0 Hnm]]]].
exists n0.
exists m0.
repeat split;
try trivial.
eapply Rge_trans;
eauto.
lra.
+
destruct H as [
N HN].
exists (
mkposreal (/(1 +
INR N)) (
recip_pos _)).
simpl.
intros N0.
specialize (
HN N0).
assumption.
Qed.
Lemma ps_P_sub_zero (
E1 E2 :
event dom) :
event_sub E1 E2 ->
ps_P E2 = 0 ->
ps_P E1 = 0.
Proof.
intros.
generalize (
ps_sub _ E1 E2 H);
intros.
rewrite H0 in H1.
generalize (
ps_pos E1);
intros.
lra.
Qed.
Lemma almost_cauchy_seq_at_iff (
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)} :
almost _ (
fun omega =>
cauchy_seq_at omega X) <->
(
forall (
eps:
posreal),
Lim_seq (
fun N =>
ps_P (
exist sa_sigma _ (
sa_sigma_not_cauchy X eps N))) = 0).
Proof.
Lemma almost_cauchy_is_lim_seq_iff (
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)} :
almost _ (
fun omega =>
cauchy_seq_at omega X) <->
(
forall (
eps:
posreal),
is_lim_seq (
fun N =>
ps_P (
exist sa_sigma _ (
sa_sigma_not_cauchy X eps N))) 0).
Proof.
Lemma almost_is_lim_seq_iff (
X :
nat ->
Ts ->
R)
X0
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
rv0 :
RandomVariable dom borel_sa X0}:
almost _ (
fun omega =>
is_lim_seq (
fun n =>
X n omega) (
X0 omega)) <->
(
forall (
eps:
posreal),
is_lim_seq (
fun N =>
ps_P (
exist sa_sigma _ (
sa_sigma_not_convergent X X0 eps N))) 0).
Proof.
Global Instance rv_max_sum_shift (
X :
nat ->
Ts ->
R) (
m n :
nat)
{
rv :
forall (
k:
nat), (
k <=
m+
n)%
nat ->
RandomVariable dom borel_sa (
X k)} :
let Sum :=
fun j => (
rvsum (
fun k w =>
X (
k+
m)%
nat w)
j)
in
RandomVariable dom borel_sa (
rvmaxlist (
fun k :
nat =>
rvabs (
Sum k))
n).
Proof.
Transparent rv_max_sum_shift.
Lemma Lim_seq_le (
u v :
nat ->
R):
(
forall n,
u n <=
v n) ->
Rbar_le (
Lim_seq u) (
Lim_seq v).
Proof.
Lemma event_ge_pf_irrel {
x}
{
rv_X :
Ts ->
R}
{
rv1 :
RandomVariable dom borel_sa rv_X}
{
rv2 :
RandomVariable dom borel_sa rv_X} :
event_equiv (
event_ge dom rv_X (
rv:=
rv1)
x)
(
event_ge dom rv_X (
rv:=
rv2)
x).
Proof.
Proof.
repeat red; intros.
split; intros; trivial.
Qed.
Lemma sqr_pos (
eps :
posreal) :
0 <
Rsqr eps.
Proof.
Lemma Ash_6_2_1_filter_helper (
X :
nat ->
Ts ->
R) (
eps :
posreal) (
m :
nat)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
(
isfesqr :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k)))
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
let Sum :=
fun j =>
rvsum (
fun k =>
X (
k+
m)%
nat)
j in
Rbar_le (
Lim_seq (
fun n =>
ps_P (
event_ge dom (
rvmaxlist (
fun k =>
rvabs (
Sum k))
n)
eps)))
(
Rbar_div_pos (
LimSup_seq (
sum_n (
fun n =>
FiniteExpectation Prts (
rvsqr (
X (
n +
m)%
nat))))) (
mkposreal _ (
sqr_pos eps))).
Proof.
Lemma Ash_6_2_1_helper2 (
X :
nat ->
Ts ->
R) (
eps :
posreal)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
(
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))) :
ex_series (
fun n =>
FiniteExpectation Prts (
rvsqr (
X n))) ->
is_lim_seq (
fun m =>
(
Rbar_div_pos (
LimSup_seq (
sum_n (
fun n =>
FiniteExpectation Prts (
rvsqr (
X (
n + (
S m))%
nat)))))
(
mkposreal _ (
sqr_pos eps)))) 0.
Proof.
Lemma list_union_rvmaxlist (
f :
nat ->
Ts ->
R) (
eps :
posreal) (
n :
nat)
(
rv:
forall n,
RandomVariable dom borel_sa (
f n)) :
event_equiv
(
list_union
(
collection_take (
fun k =>
event_ge dom (
f k)
eps) (
S n)))
(
event_ge dom (
rvmaxlist f n)
eps).
Proof.
Lemma Ash_6_2_1_helper3 (
X :
nat ->
Ts ->
R) (
eps :
posreal) (
m :
nat)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))} :
let Sum :=
fun j =>
rvsum X j in
Rbar.Finite (
ps_P (
union_of_collection (
fun k =>
event_ge dom (
rvabs (
rvminus (
Sum (
k+(
S m))%
nat) (
Sum m)))
eps))) =
Lim_seq (
fun n =>
ps_P (
event_ge dom (
rvmaxlist (
fun k =>
rvabs (
rvminus (
Sum (
k + (
S m))%
nat) (
Sum m)))
n)
eps)).
Proof.
Lemma sum_shift_diff (
X :
nat ->
R) (
m a :
nat) :
sum_n X (
a +
S m) -
sum_n X m =
sum_n (
fun n0 :
nat =>
X (
n0 +
S m)%
nat)
a.
Proof.
Lemma Ash_6_2_1_filter_helper4 (
X :
nat ->
Ts ->
R) (
eps :
posreal) (
m :
nat)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
let Sum :=
fun j =>
rvsum X j in
Rbar_le (
ps_P (
union_of_collection (
fun k =>
event_ge dom (
rvabs (
rvminus (
Sum (
k + (
S m))%
nat) (
Sum m)))
eps)))
(
Rbar_div_pos (
LimSup_seq (
sum_n (
fun n =>
FiniteExpectation Prts (
rvsqr (
X (
n + (
S m))%
nat))))) (
mkposreal _ (
sqr_pos eps))).
Proof.
Lemma Ash_6_2_1_filter_helper5 (
X :
nat ->
Ts ->
R)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
ex_series (
fun n =>
FiniteExpectation Prts (
rvsqr (
X n))) ->
let Sum :=
fun j =>
rvsum X j in
forall (
eps :
posreal),
is_lim_seq (
fun m =>
ps_P (
union_of_collection (
fun k =>
event_ge dom (
rvabs (
rvminus (
Sum (
k + (
S m))%
nat) (
Sum m)))
eps))) 0.
Proof.
Lemma Ash_6_2_1_helper6a (
X :
nat ->
Ts ->
R) (
eps :
posreal) (
N :
nat)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))} :
event_sub
(
exist sa_sigma _ (
sa_sigma_not_cauchy X eps N))
(
union_of_collection (
fun k =>
event_ge dom (
rvabs (
rvminus (
X (
k + (
S N))%
nat) (
X N))) (
eps/2))).
Proof.
unfold rvabs.
intro x;
simpl;
intros.
destruct H as [
n [
m [? [? ?]]]].
destruct (
Rge_dec (
Rabs (
X n x -
X N x)) (
eps/2)).
-
destruct (
n ==
N).
++
rewrite e in r.
rewrite Rminus_eq_0 in r.
rewrite Rabs_R0 in r.
generalize (
is_pos_div_2 eps);
intros;
lra.
++
assert (
n >
N)%
nat by (
destruct H;
try lia;
firstorder).
exists (
n - (
S N))%
nat.
rewrite rvminus_unfold.
now replace (
n -
S N +
S N)%
nat with (
n)
by lia.
-
generalize (
Rabs_triang (
X n x -
X N x) (
X N x -
X m x));
intros.
replace (
X n x -
X N x + (
X N x -
X m x))
with (
X n x -
X m x)
in H2 by lra.
assert (
Rabs (
X N x -
X m x) >=
eps/2)
by lra.
destruct (
m ==
N).
++
rewrite e in H3.
rewrite Rminus_eq_0 in H3.
rewrite Rabs_R0 in H3.
generalize (
is_pos_div_2 eps);
intros;
lra.
++
assert (
m >
N)%
nat by (
destruct H0;
try lia;
firstorder).
exists (
m - (
S N))%
nat.
rewrite rvminus_unfold.
replace (
m -
S N +
S N)%
nat with (
m)
by lia.
now rewrite Rabs_minus_sym.
Qed.
Lemma Ash_6_2_1_helper6b (
X :
nat ->
Ts ->
R) (
eps :
posreal) (
N :
nat)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))} :
event_sub
(
union_of_collection (
fun k =>
event_ge dom (
rvabs (
rvminus (
X (
k + (
S N))%
nat) (
X N)))
eps))
(
exist sa_sigma _ (
sa_sigma_not_cauchy X eps N)).
Proof.
unfold rvabs.
intro x;
simpl;
intros.
destruct H.
exists (
x0 +
S N)%
nat.
exists N.
rewrite rvminus_unfold in H.
split;
try lia.
split;
try lia;
trivial.
Qed.
Lemma Ash_6_2_1_helper6 (
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))} :
(
forall (
eps:
posreal),
is_lim_seq (
fun m =>
ps_P (
union_of_collection (
fun k =>
event_ge dom (
rvabs (
rvminus (
X (
k + (
S m))%
nat) (
X m)))
eps))) 0) <->
(
forall (
eps:
posreal),
is_lim_seq (
fun N =>
ps_P (
exist sa_sigma _ (
sa_sigma_not_cauchy X eps N))) 0).
Proof.
Lemma cauchy_seq_at_ex_series {
A :
Type} (
X :
nat ->
A ->
R)
:
forall x:
A,
cauchy_seq_at x (
fun (
n :
nat) (
omega :
A) =>
sum_n (
fun n0 :
nat =>
X n0 omega)
n)
->
ex_series (
fun n =>
X n x).
Proof.
Lemma Ash_6_2_1_filter (
X :
nat ->
Ts ->
R)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X n)}
{
isfesqr :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
ex_series (
fun n =>
FiniteExpectation Prts (
rvsqr (
X n))) ->
almost Prts (
fun (
x :
Ts) =>
ex_series (
fun n =>
X n x)).
Proof.
Lemma Ash_6_2_1 (
X :
nat ->
Ts ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filtration_history_sa_sub X n) (
X (
S n)))
(
const 0)) :
ex_series (
fun n =>
FiniteExpectation Prts (
rvsqr (
X n))) ->
almost Prts (
fun (
x :
Ts) =>
ex_series (
fun n =>
X n x)).
Proof.
Lemma induced_sigma_scale (
X :
nat ->
Ts ->
R) (
b :
nat ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
{
frf :
forall (
n:
nat),
FiniteRangeFunction (
X (
n))} :
(
forall n,
b n <> 0) ->
forall n,
Forall2 dsa_equiv (
induced_sigma_generators (
frf n)) (
induced_sigma_generators (
frfscale (/
b n) (
X n))).
Proof.
Lemma filtration_history_scale (
X :
nat ->
Ts ->
R) (
b :
nat ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
{
frf :
forall (
n:
nat),
FiniteRangeFunction (
X (
n))} :
(
forall n,
b n <> 0) ->
forall n,
Forall2 dsa_equiv (
filtration_history n X) (
filtration_history n (
fun n0 :
nat =>
rvscale (/
b n0) (
X n0))).
Proof.
Lemma SCESA_scale (
X :
nat ->
Ts ->
R) (
b :
nat ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
{
isfe :
forall k :
nat,
IsFiniteExpectation Prts (
X k)}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filtration_history_sa_sub X n) (
X (
S n)))
(
const 0)) :
(
forall n,
b n <> 0) ->
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts
(
filtration_history_sa_sub
(
fun n0 :
nat =>
rvscale (/
b n0) (
X n0))
n)
(
rvscale (/ (
b (
S n))) (
X (
S n))))
(
const 0).
Proof.
Lemma Ash_6_2_2 (
X :
nat ->
Ts ->
R) (
b :
nat ->
R)
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))}
{
isfes:
forall n,
IsFiniteExpectation Prts (
rvsqr (
rvscale (/
b n) (
X n)))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filtration_history_sa_sub X n) (
X (
S n)))
(
const 0)) :
(
forall n, 0 <
b n <=
b (
S n)) ->
is_lim_seq b p_infty ->
ex_series (
fun n =>
FiniteExpectation Prts (
rvsqr (
rvscale (/ (
b n)) (
X n)))) ->
almost Prts (
fun (
x :
Ts) =>
is_lim_seq (
fun n => (
rvscale (/ (
b n)) (
rvsum X n))
x) 0).
Proof.
Lemma Ash_6_2_2_filter (
X :
nat ->
Ts ->
R) (
b :
nat ->
R)
{
F :
nat ->
SigmaAlgebra Ts}
(
isfilt :
IsFiltration F)
(
filt_sub :
forall n,
sa_sub (
F n)
dom)
{
adapt :
IsAdapted borel_sa X F}
{
rv :
forall (
n:
nat),
RandomVariable dom borel_sa (
X (
n))}
{
isfe2 :
forall k :
nat,
IsFiniteExpectation Prts (
rvsqr (
X k))}
{
isfes:
forall n,
IsFiniteExpectation Prts (
rvsqr (
rvscale (/
b n) (
X n)))}
(
HC :
forall n,
almostR2 Prts eq
(
ConditionalExpectation Prts (
filt_sub n) (
X (
S n)))
(
const 0)) :
(
forall n, 0 <
b n <=
b (
S n)) ->
is_lim_seq b p_infty ->
ex_series (
fun n =>
FiniteExpectation Prts (
rvsqr (
rvscale (/ (
b n)) (
X n)))) ->
almost Prts (
fun (
x :
Ts) =>
is_lim_seq (
fun n => (
rvscale (/ (
b n)) (
rvsum X n))
x) 0).
Proof.
End slln_extra.