Require Import QArith.
Require Import Morphisms.
Require Import Equivalence.
Require Import Program.Basics.
Require Import Lra Lia.
Require Import Classical ClassicalChoice RelationClasses.
Require Import FunctionalExtensionality.
Require Import IndefiniteDescription ClassicalDescription.
Require Export ConditionalExpectation.
Require Import RbarExpectation.
Require Import Event.
Require Import Almost DVector.
Require Import utils.Utils.
Require Import List.
Require Import PushNeg.
Require Import Reals.
Require Import Coquelicot.Rbar Coquelicot.Lim_seq.
Require Import Martingale.
Set Bullet Behavior "
Strict Subproofs".
Section stopped_process.
Local Open Scope R.
Local Existing Instance Rge_pre.
Local Existing Instance Rbar_le_pre.
Local Existing Instance Rle_pre.
Context {
Ts:
Type}.
Definition lift1_min (
x:
nat) (
y :
option nat)
:=
match y with
|
None =>
x
|
Some b =>
min x b
end.
Lemma lift1_lift2_min (
x:
nat) (
y :
option nat) :
lift2_min (
Some x)
y =
Some (
lift1_min x y).
Proof.
destruct y; reflexivity.
Qed.
Definition process_stopped_at (
Y :
nat ->
Ts ->
R) (
T:
Ts ->
option nat) (
n:
nat) (
x :
Ts) :
R
:=
Y (
lift1_min n (
T x))
x.
Definition process_stopped_at_alt (
Y :
nat ->
Ts ->
R) (
T:
Ts ->
option nat) (
n:
nat) :
Ts ->
R
:=
match n with
| 0%
nat =>
Y 0%
nat
|
S n =>
rvplus
(
rvsum (
fun t =>
rvmult
(
Y t)
(
EventIndicator (
stopping_time_pre_event_dec T t)))
n%
nat)
(
rvmult
(
Y (
S n))
(
EventIndicator
(
classic_dec (
pre_event_complement (
stopping_time_pre_event_alt T n%
nat)))))
end.
Lemma process_stopped_at_as_alt (
Y :
nat ->
Ts ->
R) (
T:
Ts ->
option nat) :
forall n,
rv_eq (
process_stopped_at Y T n) (
process_stopped_at_alt Y T n).
Proof.
Context
{
dom:
SigmaAlgebra Ts}
(
prts:
ProbSpace dom).
Section process_stopped_at_props.
Context (
Y :
nat ->
Ts ->
R) (
F :
nat ->
SigmaAlgebra Ts)
{
filt:
IsFiltration F}
{
sub:
IsSubAlgebras dom F}
(
T:
Ts ->
option nat)
{
is_stop:
IsStoppingTime T F}.
Global Instance process_stopped_at_rv
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)} :
forall n,
RandomVariable dom borel_sa (
process_stopped_at Y T n).
Proof.
Global Instance process_stopped_at_adapted
{
adapt:
IsAdapted borel_sa Y F} :
IsAdapted borel_sa (
process_stopped_at Y T)
F.
Proof.
Global Instance process_stopped_at_isfe
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
forall n,
IsFiniteExpectation prts (
process_stopped_at Y T n).
Proof.
Instance process_stopped_at_alt_rv
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)} :
forall n,
RandomVariable dom borel_sa (
process_stopped_at_alt Y T n).
Proof.
Instance process_stopped_at_alt_isfe
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
forall n,
IsFiniteExpectation prts (
process_stopped_at_alt Y T n).
Proof.
Instance process_stopped_at_alt_adapted
{
adapt:
IsAdapted borel_sa Y F} :
IsAdapted borel_sa (
process_stopped_at_alt Y T)
F.
Proof.
Lemma process_stopped_at_alt_diff1_eq n :
rv_eq (
rvminus
(
process_stopped_at_alt Y T (
S n))
(
process_stopped_at_alt Y T n))
(
rvmult
(
rvminus
(
Y (
S n))
(
Y n))
(
EventIndicator (
classic_dec (
pre_event_complement (
stopping_time_pre_event_alt T n%
nat))))).
Proof.
Instance process_stopped_at_alt_diff1_rv
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
n
:
RandomVariable dom borel_sa
(
rvmult (
rvminus (
Y (
S n)) (
Y n))
(
EventIndicator
(
classic_dec (
pre_event_complement (
stopping_time_pre_event_alt T n))))).
Proof.
Instance process_stopped_at_alt_diff1_isfe n
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
IsFiniteExpectation prts
(
rvmult (
rvminus (
Y (
S n)) (
Y n))
(
EventIndicator
(
classic_dec (
pre_event_complement (
stopping_time_pre_event_alt T n))))).
Proof.
Lemma process_stopped_at_sub_martingale
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rle Y F} :
IsMartingale prts Rle (
process_stopped_at Y T)
F.
Proof.
Lemma process_stopped_at_opp n :
rv_eq (
rvopp (
process_stopped_at Y T n))
(
process_stopped_at (
fun n =>
rvopp (
Y n))
T n).
Proof.
reflexivity.
Qed.
End process_stopped_at_props.
Section process_stopped_at_props_ext.
Context (
Y :
nat ->
Ts ->
R) (
F :
nat ->
SigmaAlgebra Ts)
{
filt:
IsFiltration F}
{
sub:
IsSubAlgebras dom F}
(
T:
Ts ->
option nat)
{
is_stop:
IsStoppingTime T F}.
Lemma process_stopped_at_super_martingale
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rge Y F} :
IsMartingale prts Rge (
process_stopped_at Y T)
F.
Proof.
Lemma process_stopped_at_martingale
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts eq Y F} :
IsMartingale prts eq (
process_stopped_at Y T)
F.
Proof.
Lemma process_stopped_at_0 :
rv_eq ((
process_stopped_at Y T) 0%
nat)
(
Y 0).
Proof.
Lemma expectation_process_stopped_at_0
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
FiniteExpectation prts ((
process_stopped_at Y T) 0%
nat) =
FiniteExpectation prts (
Y 0).
Proof.
Lemma process_stopped_at_sub_martingale_expectation_0
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rle Y F} :
forall n,
FiniteExpectation prts ((
process_stopped_at Y T)
n) >=
FiniteExpectation prts (
Y 0).
Proof.
Lemma process_stopped_at_super_martingale_expectation_0
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rge Y F} :
forall n,
FiniteExpectation prts ((
process_stopped_at Y T)
n) <=
FiniteExpectation prts (
Y 0).
Proof.
Lemma process_stopped_at_martingale_expectation_0
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts eq Y F} :
forall n,
FiniteExpectation prts ((
process_stopped_at Y T)
n) =
FiniteExpectation prts (
Y 0).
Proof.
Lemma process_stopped_at_martingale_expectation
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts eq Y F} :
forall s t,
FiniteExpectation prts ((
process_stopped_at Y T)
s) =
FiniteExpectation prts (
Y t).
Proof.
End process_stopped_at_props_ext.
Section process_under_props.
Context (
Y :
nat ->
Ts ->
R) (
F :
nat ->
SigmaAlgebra Ts)
{
filt:
IsFiltration F}
{
sub:
IsSubAlgebras dom F}
(
T:
Ts ->
option nat)
{
is_stop:
IsStoppingTime T F}.
Definition process_under (
Y :
nat ->
Ts ->
R) (
T:
Ts ->
option nat) (
x :
Ts) :
R
:=
match T x with
|
None => 0
|
Some n =>
Y n x
end.
Lemma process_stopped_at_fin_limit :
forall ts,
T ts <>
None ->
is_lim_seq (
fun n =>
process_stopped_at Y T n ts) (
process_under Y T ts).
Proof.
Lemma process_stopped_at_almost_fin_limit :
almost prts (
fun ts =>
T ts <>
None) ->
almost prts (
fun ts =>
is_lim_seq (
fun n =>
process_stopped_at Y T n ts) (
process_under Y T ts)).
Proof.
Global Instance process_under_rv
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)} :
RandomVariable dom borel_sa (
process_under Y T).
Proof.
End process_under_props.
Section opt_stop_thm.
Context (
Y :
nat ->
Ts ->
R) (
F :
nat ->
SigmaAlgebra Ts)
{
filt:
IsFiltration F}
{
sub:
IsSubAlgebras dom F}
(
T:
Ts ->
option nat)
{
is_stop:
IsStoppingTime T F}.
Section variant_a.
Context (
N:
nat)
(
Nbound:
almost prts (
fun ts =>
match T ts with
|
Some k => (
k <=
N)%
nat
|
None =>
False
end)).
Instance optional_stopping_time_a_isfe
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
IsFiniteExpectation prts (
process_under Y T).
Proof.
Lemma optional_stopping_time_a_stopped_eq :
almostR2 prts eq (
process_stopped_at Y T N) (
process_under Y T).
Proof.
Lemma optional_stopping_time_a
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts eq Y F} :
FiniteExpectation prts (
Y 0%
nat) =
FiniteExpectation prts (
process_under Y T).
Proof.
Lemma optional_stopping_time_sub_a
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rle Y F} :
FiniteExpectation prts (
process_under Y T) >=
FiniteExpectation prts (
Y 0%
nat).
Proof.
Lemma optional_stopping_time_super_a
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rge Y F} :
FiniteExpectation prts (
process_under Y T) <=
FiniteExpectation prts (
Y 0%
nat).
Proof.
End variant_a.
Section variant_b.
Context (
Tfin:
almost prts (
fun ts =>
T ts <>
None))
(
K:
R)
(
Kbound:
forall n,
almost prts (
fun ω =>
Rabs (
Y n ω) <
K)).
Lemma Kbound_stopped :
forall n :
nat,
almostR2 prts Rle (
rvabs (
process_stopped_at Y T n)) (
const K).
Proof.
Instance optional_stopping_time_b_isfe
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
IsFiniteExpectation prts (
process_under Y T).
Proof.
Global Instance rvlim_rv' (
f:
nat ->
Ts ->
R)
{
rv :
forall n,
RandomVariable dom borel_sa (
f n)} :
RandomVariable dom borel_sa (
rvlim f).
Proof.
Instance optional_stopping_time_b_isfe'
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
Rbar_IsFiniteExpectation prts (
Rbar_rvlim (
process_stopped_at Y T)).
Proof.
Lemma optional_stopping_time_b_eq
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
FiniteExpectation prts (
process_under Y T) =
Rbar_FiniteExpectation prts (
Rbar_rvlim (
process_stopped_at Y T)).
Proof.
Lemma optional_stopping_time_b_helper
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
is_lim_seq
(
fun n :
nat =>
Rbar_FiniteExpectation prts (
fun x :
Ts =>
process_stopped_at Y T n x) (
isfe:= (
IsFiniteExpectation_Rbar prts (
fun x :
Ts =>
process_stopped_at Y T n x)
(
process_stopped_at_isfe Y F T n))))
(
Rbar_FiniteExpectation prts
(
Rbar_rvlim (
fun (
n :
nat) (
x :
Ts) =>
process_stopped_at Y T n x))).
Proof.
Lemma optional_stopping_time_b_helper'
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
Lim_seq
(
fun n :
nat =>
Rbar_FiniteExpectation prts (
fun x :
Ts =>
process_stopped_at Y T n x) (
isfe:= (
IsFiniteExpectation_Rbar prts (
fun x :
Ts =>
process_stopped_at Y T n x)
(
process_stopped_at_isfe Y F T n)))) =
Finite (
Rbar_FiniteExpectation prts
(
Rbar_rvlim (
fun (
n :
nat) (
x :
Ts) =>
process_stopped_at Y T n x))).
Proof.
Lemma optional_stopping_time_b
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts eq Y F} :
FiniteExpectation prts (
process_under Y T) =
FiniteExpectation prts (
Y 0%
nat).
Proof.
Lemma optional_stopping_time_sub_b
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rle Y F} :
FiniteExpectation prts (
process_under Y T) >=
FiniteExpectation prts (
Y 0%
nat).
Proof.
Lemma optional_stopping_time_super_b
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rge Y F} :
FiniteExpectation prts (
process_under Y T) <=
FiniteExpectation prts (
Y 0%
nat).
Proof.
End variant_b.
Section variant_c.
Context (
ETfin:
Rbar_IsFiniteExpectation
prts
(
fun ts =>
match T ts with
|
Some n =>
INR n
|
None =>
p_infty
end))
(
K:
R)
(
Kbound:
forall n,
almost prts (
fun ω =>
Rabs (
Y (
S n) ω -
Y n ω) <=
K)).
Instance optional_stopping_time_sub_c_ET_rv :
RandomVariable dom Rbar_borel_sa
(
fun ts =>
match T ts with
|
Some n =>
INR n
|
None =>
p_infty
end).
Proof.
Lemma optional_stopping_time_sub_c_Kbound_stopped_telescope :
forall n :
nat,
rv_eq (
process_stopped_at Y T n)
(
rvplus
(
Y 0%
nat)
(
fun ts =>
match lift1_min n (
T ts)
with
| 0%
nat => 0%
R
|
S n =>
rvsum (
fun k =>
rvminus (
Y (
S k)) (
Y k))
n ts
end)).
Proof.
Lemma Rabs_sum_n_triang f n :
Rabs (@
Hierarchy.sum_n Hierarchy.R_AbelianGroup f n) <= @
Hierarchy.sum_n Hierarchy.R_AbelianGroup (
fun k =>
Rabs (
f k))
n.
Proof.
Definition optional_stopping_time_sub_c_Kbound
:= (
Rbar_rvplus
(
Rbar_rvabs (
Y 0%
nat))
(
Rbar_rvmult (
const (
Finite K)) (
fun ts =>
match T ts with
|
Some n =>
INR n
|
None =>
p_infty
end))).
Instance optional_stopping_time_sub_c_Kbound_rv
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
:
RandomVariable dom Rbar_borel_sa optional_stopping_time_sub_c_Kbound.
Proof.
Instance optional_stopping_time_sub_c_Kbound_isfe
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
Rbar_IsFiniteExpectation prts optional_stopping_time_sub_c_Kbound.
Proof.
Lemma optional_stopping_time_sub_c_Kbound_stopped :
forall n :
nat,
almostR2 prts Rbar_le (
rvabs (
process_stopped_at Y T n))
optional_stopping_time_sub_c_Kbound.
Proof.
Lemma optional_stopping_time_c_Tfin :
almost prts (
fun ts :
Ts =>
T ts <>
None).
Proof.
Instance optional_stopping_time_c_isfe
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)} :
IsFiniteExpectation prts (
process_under Y T).
Proof.
Instance optional_stopping_time_c_isfe'
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
Rbar_IsFiniteExpectation prts (
Rbar_rvlim (
process_stopped_at Y T)).
Proof.
Lemma optional_stopping_time_c_eq
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
FiniteExpectation prts (
process_under Y T) =
Rbar_FiniteExpectation prts (
Rbar_rvlim (
process_stopped_at Y T)).
Proof.
Lemma optional_stopping_time_c_helper
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
is_lim_seq
(
fun n :
nat =>
Rbar_FiniteExpectation prts (
fun x :
Ts =>
process_stopped_at Y T n x) (
isfe:= (
IsFiniteExpectation_Rbar prts (
fun x :
Ts =>
process_stopped_at Y T n x)
(
process_stopped_at_isfe Y F T n))))
(
Rbar_FiniteExpectation prts
(
Rbar_rvlim (
fun (
n :
nat) (
x :
Ts) =>
process_stopped_at Y T n x))).
Proof.
Lemma optional_stopping_time_c_helper'
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F} :
Lim_seq
(
fun n :
nat =>
Rbar_FiniteExpectation prts (
fun x :
Ts =>
process_stopped_at Y T n x) (
isfe:= (
IsFiniteExpectation_Rbar prts (
fun x :
Ts =>
process_stopped_at Y T n x)
(
process_stopped_at_isfe Y F T n)))) =
Finite (
Rbar_FiniteExpectation prts
(
Rbar_rvlim (
fun (
n :
nat) (
x :
Ts) =>
process_stopped_at Y T n x))).
Proof.
Lemma optional_stopping_time_c
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts eq Y F} :
FiniteExpectation prts (
process_under Y T) =
FiniteExpectation prts (
Y 0%
nat).
Proof.
Lemma optional_stopping_time_sub_c
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rle Y F} :
FiniteExpectation prts (
process_under Y T) >=
FiniteExpectation prts (
Y 0%
nat).
Proof.
Lemma optional_stopping_time_super_c
{
rv:
forall n,
RandomVariable dom borel_sa (
Y n)}
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
{
adapt:
IsAdapted borel_sa Y F}
{
mart:
IsMartingale prts Rge Y F} :
FiniteExpectation prts (
process_under Y T) <=
FiniteExpectation prts (
Y 0%
nat).
Proof.
End variant_c.
End opt_stop_thm.
End stopped_process.
Local Existing Instance Rge_pre.
Local Existing Instance Rle_pre.
Section optional_stopping_time_thm.
Optional Stopping Theorem (Fair Games Theorem)
This presents a statement and proof of the optional stopping time theorem,
also known as the fair games theorem, for discrete-time (sub/super)-martingales
over general probability spaces.
Context (* Given *)
{
Ts:
Type}
(* a sample space, *)
{σ:
SigmaAlgebra Ts}
(* a σ-Algebra over the sample space, *)
(
prts:
ProbSpace σ)
(* and a probability space defined over the σ-Algebra *)
(
F :
nat ->
SigmaAlgebra Ts)
(* a sequence of σ-algebra *)
{
filt:
IsFiltration F}
(* that form a filtration *)
{
sub:
IsSubAlgebras σ
F}
(* and are all contained in the base σ-algebra *)
(τ:
Ts ->
option nat)
(* a random time *)
{
is_stop:
IsStoppingTime τ
F}
(* that is a stopping time with respect to the given filtration *)
(
Y :
nat ->
Ts ->
R)
(* a stochastic process *)
{
rv:
forall n,
RandomVariable σ
borel_sa (
Y n)}
(* all of whose components are measurable *)
{
isfe:
forall n,
IsFiniteExpectation prts (
Y n)}
(* and have finite expectation (∀ n, E (Y n) < ∞) *)
{
adapt:
IsAdapted borel_sa Y F}
(* , where the process is adapted to the filtration *)
(
conditions:
(* and one of these conditions holds: *)
(
exists (
N:
nat),
(* There is a natural number N such that *)
almost prts (
fun ω =>
match τ ω
with (* τ <= N almost surely *)
|
Some k => (
k <=
N)%
nat
|
None =>
False
end))
\/
(* OR *)
(
almost prts (
fun ω => τ ω <>
None)
(* the stopping time is almost surely finite *)
/\
exists (
K:
R),
(* and there is a real number K, such that *)
(
forall n,
almost prts (
fun ω =>
Rabs (
Y n ω) <
K)))
(* ∀ n, | (Y n) | < K, almost surely *)
\/
(* OR *)
(
Rbar_IsFiniteExpectation (* E(τ) < ∞ *)
prts
(
fun ω =>
match τ ω
with
|
Some n =>
INR n
|
None =>
p_infty
end)
/\
exists (
K:
R),
(* and there is a real number K, such that *)
forall n,
almost prts (
fun ω =>
Rabs (
Y (
S n) ω -
Y n ω) <=
K))
(* ∀ n, | Y (n + 1) - Y n | <= K, almost surely *)
).
Instance optional_stopping_time_isfe :
IsFiniteExpectation prts (
process_under Y τ).
(* The process Y stopped at time τ has finite expectation *)
Proof.
Theorem optional_stopping_time
{
mart:
IsMartingale prts eq Y F}
(* If the stochastic process is a martingale with respect to the filtration *)
:
(* then the expectation of the stopped process is the same as when the process started *)
FiniteExpectation prts (
process_under Y τ) =
FiniteExpectation prts (
Y 0%
nat).
Proof.
Theorem optional_stopping_time_sub
{
mart:
IsMartingale prts Rle Y F}
(* If the stochastic process is a sub-martingale with respect to the filtration *)
:
(* then the expectation of the stopped process is greater than or equal to when the process started *)
FiniteExpectation prts (
process_under Y τ) >=
FiniteExpectation prts (
Y 0%
nat).
Proof.
Theorem optional_stopping_time_super
{
mart:
IsMartingale prts Rge Y F}
(* If the stochastic process is a super-martingale with respect to the filtration *)
:
(* then the expectation of the stopped process is less than or equal to when the process started *)
FiniteExpectation prts (
process_under Y τ) <=
FiniteExpectation prts (
Y 0%
nat).
Proof.
End optional_stopping_time_thm.