Skip to content

Commit e1f3ae3

Browse files
committed
feat(ProbabilityTheory): add APIs for predicationPart and martingalePart (#38267)
Upstream results from RemyDegenne/brownian-motion#422
1 parent 5b04143 commit e1f3ae3

1 file changed

Lines changed: 88 additions & 1 deletion

File tree

Mathlib/Probability/Martingale/Centering.lean

Lines changed: 88 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ open scoped NNReal ENNReal MeasureTheory ProbabilityTheory
4141
namespace MeasureTheory
4242

4343
variable {Ω E : Type*} {m0 : MeasurableSpace Ω} {μ : Measure Ω} [NormedAddCommGroup E]
44-
[NormedSpace ℝ E] [CompleteSpace E] {f : ℕ → Ω → E} {ℱ : Filtration ℕ m0}
44+
[NormedSpace ℝ E] [CompleteSpace E] {f g : ℕ → Ω → E} {ℱ : Filtration ℕ m0}
4545

4646
/-- Any `ℕ`-indexed stochastic process can be written as the sum of a martingale and a predictable
4747
process. This is the predictable process. See `martingalePart` for the martingale. -/
@@ -52,11 +52,70 @@ noncomputable def predictablePart {m0 : MeasurableSpace Ω} (f : ℕ → Ω →
5252
theorem predictablePart_zero : predictablePart f ℱ μ 0 = 0 := by
5353
simp_rw [predictablePart, Finset.range_zero, Finset.sum_empty]
5454

55+
lemma predictablePart_add_one (n : ℕ) :
56+
predictablePart f ℱ μ (n + 1) =
57+
predictablePart f ℱ μ n + μ[f (n + 1) - f n | ℱ n] := by
58+
simp [predictablePart, Finset.sum_range_add]
59+
60+
lemma predictablePart_smul (c : ℝ) (n : ℕ) :
61+
predictablePart (c • f) ℱ μ n =ᵐ[μ] c • predictablePart f ℱ μ n := by
62+
simp only [predictablePart, Finset.smul_sum]
63+
refine eventuallyEq_sum fun i hi => ?_
64+
simp [← smul_sub, condExp_smul]
65+
66+
lemma predictablePart_add (hfint : ∀ n, Integrable (f n) μ)
67+
(hgint : ∀ n, Integrable (g n) μ) (n : ℕ) :
68+
predictablePart (f + g) ℱ μ n =ᵐ[μ] predictablePart f ℱ μ n + predictablePart g ℱ μ n := by
69+
simp only [predictablePart, ← Finset.sum_add_distrib]
70+
refine eventuallyEq_sum fun i hi => ?_
71+
calc
72+
_ =ᵐ[μ] μ[(f (i + 1) - f i) + (g (i + 1) - g i) | ℱ i] := by simp; abel_nf; rfl
73+
_ =ᵐ[μ] _ := by apply condExp_add ((hfint (i + 1)).sub (hfint i)) ((hgint (i + 1)).sub (hgint i))
74+
75+
lemma Martingale.predictablePart_eq_zero (hf : Martingale f ℱ μ) (n : ℕ) :
76+
predictablePart f ℱ μ n =ᵐ[μ] 0 := by
77+
rw [predictablePart, ← Finset.sum_const_zero (s := Finset.range n)]
78+
refine eventuallyEq_sum fun i hi => ?_
79+
calc
80+
_ =ᵐ[μ] μ[f (i + 1) | ℱ i] - μ[f i | ℱ i] := by
81+
simp [condExp_sub (hf.integrable (i + 1)) (hf.integrable i) (ℱ i)]
82+
_ =ᵐ[μ] f i - f i := (hf.condExp_ae_eq (Nat.le_succ i)).sub (hf.condExp_ae_eq le_rfl)
83+
_ =ᵐ[μ] 0 := by simp
84+
85+
lemma Submartingale.monotone_predictablePart [PartialOrder E] [IsOrderedAddMonoid E]
86+
(hf : Submartingale f ℱ μ) :
87+
∀ᵐ ω ∂μ, Monotone (predictablePart f ℱ μ · ω) := by
88+
have := ae_all_iff.2 <| fun n : ℕ ↦ hf.condExp_sub_nonneg n.le_succ
89+
filter_upwards [this] with ω h
90+
simp only [Pi.zero_apply, Nat.succ_eq_add_one, ← ge_iff_le] at h
91+
refine monotone_nat_of_le_succ fun n ↦ (?_ : _ ≥ _)
92+
grw [predictablePart_add_one, Pi.add_apply, h n, add_zero]
93+
94+
lemma Submartingale.predictablePart_nonneg [PartialOrder E] [IsOrderedAddMonoid E]
95+
(hf : Submartingale f ℱ μ) :
96+
∀ᵐ ω ∂μ, ∀ n, 0 ≤ predictablePart f ℱ μ n ω := by
97+
filter_upwards [hf.monotone_predictablePart] with ω hω n
98+
simpa [predictablePart_zero] using hω (Nat.zero_le n)
99+
100+
lemma IsPredictable.predictablePart_eq [SecondCountableTopology E] [MeasurableSpace E]
101+
[BorelSpace E] [SigmaFiniteFiltration μ ℱ] (hf : IsPredictable ℱ f)
102+
(hfint : ∀ n, Integrable (f n) μ) (n : ℕ) :
103+
predictablePart f ℱ μ n =ᵐ[μ] f n - f 0 := by
104+
simp only [predictablePart, ← Finset.sum_range_sub]
105+
exact eventuallyEq_sum fun i hi => (condExp_of_stronglyMeasurable (ℱ.le i)
106+
((hf.measurable_add_one i).stronglyMeasurable.sub (hf.adapted i))
107+
((hfint (i + 1)).sub (hfint i))).eventuallyEq
108+
55109
theorem stronglyAdapted_predictablePart :
56110
StronglyAdapted ℱ fun n => predictablePart f ℱ μ (n + 1) :=
57111
fun _ => Finset.stronglyMeasurable_sum _ fun _ hin =>
58112
stronglyMeasurable_condExp.mono (ℱ.mono (Finset.mem_range_succ_iff.mp hin))
59113

114+
lemma isPredictable_predictablePart [SecondCountableTopology E] [MeasurableSpace E] [BorelSpace E] :
115+
IsPredictable ℱ (predictablePart f ℱ μ) :=
116+
isPredictable_of_measurable_add_one (by simp [measurable_const'])
117+
fun n ↦ (stronglyAdapted_predictablePart n).measurable
118+
60119
theorem stronglyAdapted_predictablePart' : StronglyAdapted ℱ fun n => predictablePart f ℱ μ n :=
61120
fun _ => Finset.stronglyMeasurable_sum _ fun _ hin =>
62121
stronglyMeasurable_condExp.mono (ℱ.mono (Finset.mem_range_le hin))
@@ -66,6 +125,34 @@ process. This is the martingale. See `predictablePart` for the predictable proce
66125
noncomputable def martingalePart {m0 : MeasurableSpace Ω} (f : ℕ → Ω → E) (ℱ : Filtration ℕ m0)
67126
(μ : Measure Ω) : ℕ → Ω → E := fun n => f n - predictablePart f ℱ μ n
68127

128+
@[simp]
129+
lemma martingalePart_zero : martingalePart f ℱ μ 0 = f 0 := by
130+
simp [martingalePart]
131+
132+
lemma martingalePart_smul (c : ℝ) (n : ℕ) :
133+
martingalePart (c • f) ℱ μ n =ᵐ[μ] c • martingalePart f ℱ μ n := by
134+
filter_upwards [predictablePart_smul (f := f) c n] with ω hω
135+
simpa [martingalePart, smul_sub]
136+
137+
lemma martingalePart_add (hfint : ∀ n, Integrable (f n) μ)
138+
(hgint : ∀ n, Integrable (g n) μ) (n : ℕ) :
139+
martingalePart (f + g) ℱ μ n =ᵐ[μ] martingalePart f ℱ μ n + martingalePart g ℱ μ n := by
140+
filter_upwards [predictablePart_add (ℱ := ℱ) hfint hgint n] with ω hω
141+
simp_all [martingalePart]
142+
abel
143+
144+
lemma Martingale.martingalePart_eq (hf : Martingale f ℱ μ) (n : ℕ) :
145+
martingalePart f ℱ μ n =ᵐ[μ] f n := by
146+
filter_upwards [hf.predictablePart_eq_zero n] with ω hω
147+
simp [martingalePart, hω]
148+
149+
lemma IsPredictable.martingalePart_eq [SecondCountableTopology E] [MeasurableSpace E]
150+
[BorelSpace E] [SigmaFiniteFiltration μ ℱ] (hf : IsPredictable ℱ f)
151+
(hfint : ∀ n, Integrable (f n) μ) (n : ℕ) :
152+
martingalePart f ℱ μ n =ᵐ[μ] f 0 := by
153+
filter_upwards [hf.predictablePart_eq (μ := μ) hfint n] with ω hω
154+
simp [martingalePart, hω, sub_eq_add_neg]
155+
69156
theorem martingalePart_add_predictablePart (ℱ : Filtration ℕ m0) (μ : Measure Ω) (f : ℕ → Ω → E) :
70157
martingalePart f ℱ μ + predictablePart f ℱ μ = f :=
71158
sub_add_cancel _ _

0 commit comments

Comments
 (0)