Skip to content

Commit 647a101

Browse files
committed
feat: lemmas on the stopped process and stopped value (#31557)
1 parent 9a94141 commit 647a101

File tree

1 file changed

+65
-17
lines changed

1 file changed

+65
-17
lines changed

Mathlib/Probability/Process/Stopping.lean

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ stopping time, stochastic process
5050
5151
-/
5252

53-
open Filter Order TopologicalSpace
53+
open Filter Order TopologicalSpace WithTop
5454

5555
open scoped MeasureTheory NNReal ENNReal Topology
5656

@@ -99,7 +99,7 @@ theorem IsStoppingTime.measurableSet_lt_of_pred [PredOrder ι] (hτ : IsStopping
9999
cases τ ω with
100100
| top => simp
101101
| coe t =>
102-
simp only [WithTop.coe_lt_coe, WithTop.coe_le_coe]
102+
simp only [coe_lt_coe, coe_le_coe]
103103
rw [le_pred_iff_of_not_isMin hi_min]
104104
rw [this]
105105
exact f.mono (pred_le i) _ (hτ.measurableSet_le <| pred i)
@@ -219,7 +219,7 @@ theorem IsStoppingTime.measurableSet_lt (hτ : IsStoppingTime f τ) (i : ι) :
219219
exact hτ.measurableSet_lt_of_isLUB i' hi'_lub
220220
· have h_lt_eq_preimage : {ω : Ω | τ ω < i} = τ ⁻¹' Set.Iio i := rfl
221221
have h_Iio_eq_Iic' : Set.Iio (i : WithTop ι) = Set.Iic (i' : WithTop ι) := by
222-
rw [← WithTop.image_coe_Iio, ← WithTop.image_coe_Iic, h_Iio_eq_Iic]
222+
rw [← image_coe_Iio, ← image_coe_Iic, h_Iio_eq_Iic]
223223
rw [h_lt_eq_preimage, h_Iio_eq_Iic']
224224
exact f.mono (lub_Iio_le i hi'_lub) _ (hτ.measurableSet_le i')
225225

@@ -299,7 +299,7 @@ theorem add_const [AddGroup ι] [Preorder ι] [AddRightMono ι]
299299
simp only
300300
have h_eq : {ω | τ ω + i ≤ j} = {ω | τ ω ≤ j - i} := by
301301
ext ω
302-
simp only [Set.mem_setOf_eq, WithTop.coe_sub]
302+
simp only [Set.mem_setOf_eq, coe_sub]
303303
cases τ ω with
304304
| top => simp
305305
| coe a => norm_cast; simp_rw [← le_sub_iff_add_le]
@@ -729,32 +729,80 @@ noncomputable
729729
def stoppedProcess (u : ι → Ω → β) (τ : Ω → WithTop ι) : ι → Ω → β :=
730730
fun i ω => u (min (i : WithTop ι) (τ ω)).untopA ω
731731

732-
theorem stoppedProcess_eq_stoppedValue {u : ι → Ω → β} {τ : Ω → WithTop ι} :
732+
variable {u : ι → Ω → β} {τ σ : Ω → WithTop ι}
733+
734+
theorem stoppedProcess_eq_stoppedValue :
733735
stoppedProcess u τ = fun i : ι => stoppedValue u fun ω => min i (τ ω) := rfl
734736

735-
theorem stoppedValue_stoppedProcess {u : ι → Ω → β} {τ σ : Ω → WithTop ι} :
737+
theorem stoppedProcess_eq_stoppedValue_apply (i : ι) (ω : Ω) :
738+
stoppedProcess u τ i ω = stoppedValue u (fun ω ↦ min i (τ ω)) ω := rfl
739+
740+
theorem stoppedValue_stoppedProcess :
736741
stoppedValue (stoppedProcess u τ) σ =
737742
fun ω ↦ if σ ω ≠ ⊤ then stoppedValue u (fun ω ↦ min (σ ω) (τ ω)) ω
738743
else stoppedValue u (fun ω ↦ min (Classical.arbitrary ι) (τ ω)) ω := by
739744
ext ω
740745
simp only [stoppedValue, stoppedProcess, ne_eq, ite_not]
741746
cases σ ω <;> cases τ ω <;> simp
742747

743-
theorem stoppedValue_stoppedProcess_ae_eq {u : ι → Ω → β} {τ σ : Ω → WithTop ι} {μ : Measure Ω}
748+
theorem stoppedValue_stoppedProcess_apply {ω : Ω} (hω : σ ω ≠ ⊤) :
749+
stoppedValue (stoppedProcess u τ) σ ω = stoppedValue u (fun ω ↦ min (σ ω) (τ ω)) ω := by
750+
simp [stoppedValue_stoppedProcess, hω]
751+
752+
theorem stoppedValue_stoppedProcess_ae_eq {μ : Measure Ω}
744753
(hσ : ∀ᵐ ω ∂μ, σ ω ≠ ⊤) :
745754
stoppedValue (stoppedProcess u τ) σ =ᵐ[μ] stoppedValue u (fun ω ↦ min (σ ω) (τ ω)) := by
746755
filter_upwards [hσ] with ω hσ using by simp [stoppedValue_stoppedProcess, hσ]
747756

748-
theorem stoppedProcess_eq_of_le {u : ι → Ω → β} {τ : Ω → WithTop ι} {i : ι} {ω : Ω} (h : i ≤ τ ω) :
757+
theorem stoppedProcess_eq_of_le {i : ι} {ω : Ω} (h : i ≤ τ ω) :
749758
stoppedProcess u τ i ω = u i ω := by simp [stoppedProcess, min_eq_left h]
750759

751-
theorem stoppedProcess_eq_of_ge {u : ι → Ω → β} {τ : Ω → WithTop ι} {i : ι} {ω : Ω} (h : τ ω ≤ i) :
760+
theorem stoppedProcess_eq_of_ge {i : ι} {ω : Ω} (h : τ ω ≤ i) :
752761
stoppedProcess u τ i ω = u (τ ω).untopA ω := by simp [stoppedProcess, min_eq_right h]
753762

763+
lemma stoppedProcess_indicator_comm [Zero β] {s : Set Ω} (i : ι) :
764+
stoppedProcess (fun i ↦ s.indicator (u i)) τ i = s.indicator (stoppedProcess u τ i) := by
765+
ext ω
766+
by_cases hω : ω ∈ s <;> simp [stoppedProcess, hω]
767+
768+
lemma stoppedProcess_indicator_comm' [Zero β] {s : Set Ω} :
769+
stoppedProcess (fun i ↦ s.indicator (u i)) τ = fun i ↦ s.indicator (stoppedProcess u τ i) := by
770+
ext i ω
771+
rw [stoppedProcess_indicator_comm]
772+
773+
@[simp]
774+
theorem stoppedProcess_stoppedProcess :
775+
stoppedProcess (stoppedProcess u τ) σ = stoppedProcess u (σ ⊓ τ) := by
776+
ext i ω
777+
simp_rw [stoppedProcess]
778+
by_cases hτ : τ ω = ⊤
779+
· simp [hτ]
780+
by_cases hσ : σ ω = ⊤
781+
· simp [hσ]
782+
by_cases hστ : σ ω ≤ τ ω
783+
· rw [min_eq_left, untopA_eq_untop coe_ne_top]
784+
· simp [hστ]
785+
· refine le_trans ?_ hστ
786+
simp [untopA_eq_untop]
787+
· nth_rewrite 2 [untopA_eq_untop]
788+
· rw [coe_untop, min_assoc]
789+
rfl
790+
· exact (lt_of_le_of_lt (min_le_right _ _) <| lt_top_iff_ne_top.2 hσ).ne
791+
792+
theorem stoppedProcess_stoppedProcess' :
793+
stoppedProcess (stoppedProcess u τ) σ = stoppedProcess u (fun ω ↦ min (σ ω) (τ ω)) := by
794+
rw [stoppedProcess_stoppedProcess]; rfl
795+
796+
theorem stoppedProcess_stoppedProcess_of_le_right (h : σ ≤ τ) :
797+
stoppedProcess (stoppedProcess u τ) σ = stoppedProcess u σ := by simp [h]
798+
799+
theorem stoppedProcess_stoppedProcess_of_le_left (h : τ ≤ σ) :
800+
stoppedProcess (stoppedProcess u τ) σ = stoppedProcess u τ := by simp [h]
801+
754802
section ProgMeasurable
755803

756804
variable [MeasurableSpace ι] [TopologicalSpace ι] [OrderTopology ι] [SecondCountableTopology ι]
757-
[BorelSpace ι] [TopologicalSpace β] {u : ι → Ω → β} {τ : Ω → WithTop ι} {f : Filtration ι m}
805+
[BorelSpace ι] [TopologicalSpace β] {f : Filtration ι m}
758806

759807
theorem progMeasurable_min_stopping_time [PseudoMetrizableSpace ι] (hτ : IsStoppingTime f τ) :
760808
ProgMeasurable f fun i ω ↦ (min (i : WithTop ι) (τ ω)).untopA := by
@@ -776,7 +824,7 @@ theorem progMeasurable_min_stopping_time [PseudoMetrizableSpace ι] (hτ : IsSto
776824
have h_set_eq : (fun x : s => τ (x : Set.Iic i × Ω).snd) ⁻¹' Set.Iic j =
777825
(fun x : s => (x : Set.Iic i × Ω).snd) ⁻¹' {ω | τ ω ≤ min i j} := by
778826
ext1 ω
779-
simp only [Set.mem_preimage, Set.mem_Iic, WithTop.coe_min, le_inf_iff,
827+
simp only [Set.mem_preimage, Set.mem_Iic, coe_min, le_inf_iff,
780828
Set.preimage_setOf_eq, Set.mem_setOf_eq, iff_and_self]
781829
exact fun _ => ω.prop
782830
rw [h_set_eq]
@@ -823,7 +871,7 @@ theorem ProgMeasurable.stronglyMeasurable_stoppedProcess [PseudoMetrizableSpace
823871

824872
theorem stronglyMeasurable_stoppedValue_of_le (h : ProgMeasurable f u) (hτ : IsStoppingTime f τ)
825873
{n : ι} (hτ_le : ∀ ω, τ ω ≤ n) : StronglyMeasurable[f n] (stoppedValue u τ) := by
826-
have hτ_le' ω : (τ ω).untopA ≤ n := WithTop.untopA_le (hτ_le ω)
874+
have hτ_le' ω : (τ ω).untopA ≤ n := untopA_le (hτ_le ω)
827875
have : stoppedValue u τ =
828876
(fun p : Set.Iic n × Ω => u (↑p.fst) p.snd) ∘ fun ω => (⟨(τ ω).untopA, hτ_le' ω⟩, ω) := by
829877
ext1 ω; simp only [stoppedValue, Function.comp_apply]
@@ -867,7 +915,7 @@ theorem measurable_stoppedValue [PseudoMetrizableSpace β] [MeasurableSpace β]
867915
by_cases h : τ ω = ⊤
868916
· exact .inr h
869917
· lift τ ω to ι using h with t
870-
simp only [WithTop.coe_le_coe, WithTop.coe_ne_top, or_false]
918+
simp only [coe_le_coe, coe_ne_top, or_false]
871919
rw [tendsto_atTop] at h_seq_tendsto
872920
exact (h_seq_tendsto t).exists
873921
rw [this]
@@ -877,7 +925,7 @@ theorem measurable_stoppedValue [PseudoMetrizableSpace β] [MeasurableSpace β]
877925
· have : stoppedValue u τ ⁻¹' t ∩ {ω | τ ω = ⊤}
878926
= (fun ω ↦ u (Classical.arbitrary ι) ω) ⁻¹' t ∩ {ω | τ ω = ⊤} := by
879927
ext ω
880-
simp only [Set.mem_inter_iff, Set.mem_preimage, stoppedValue, WithTop.untopA,
928+
simp only [Set.mem_inter_iff, Set.mem_preimage, stoppedValue, untopA,
881929
Set.mem_setOf_eq, and_congr_left_iff]
882930
intro h
883931
simp [h]
@@ -942,13 +990,13 @@ theorem stoppedProcess_eq_of_mem_finset [LinearOrder ι] [AddCommMonoid E] {s :
942990
specialize hbdd ω h
943991
lift τ ω to ι using h_top with i hi
944992
rw [Finset.sum_eq_single_of_mem i]
945-
· simp only [WithTop.untopD_coe]
993+
· simp only [untopD_coe]
946994
rw [Set.indicator_of_notMem, zero_add, Set.indicator_of_mem] <;> rw [Set.mem_setOf]
947995
· exact hi.symm
948996
· rw [← hi]
949997
exact not_le.2 h
950998
· rw [Finset.mem_filter]
951-
simp only [Set.mem_image, Finset.mem_coe, WithTop.coe_eq_coe, exists_eq_right] at hbdd
999+
simp only [Set.mem_image, Finset.mem_coe, coe_eq_coe, exists_eq_right] at hbdd
9521000
exact ⟨hbdd, mod_cast h⟩
9531001
· intro b _ hneq
9541002
rw [Set.indicator_of_notMem]
@@ -1100,7 +1148,7 @@ theorem stoppedValue_sub_eq_sum [AddCommGroup β] (hle : τ ≤ π) (hπ : ∀
11001148
stoppedValue u π - stoppedValue u τ = fun ω =>
11011149
(∑ i ∈ Finset.Ico (τ ω).untopA (π ω).untopA, (u (i + 1) - u i)) ω := by
11021150
ext ω
1103-
have h_le' : (τ ω).untopA ≤ (π ω).untopA := WithTop.untopA_mono (mod_cast hπ ω) (hle ω)
1151+
have h_le' : (τ ω).untopA ≤ (π ω).untopA := untopA_mono (mod_cast hπ ω) (hle ω)
11041152
rw [Finset.sum_Ico_eq_sub _ h_le', Finset.sum_range_sub, Finset.sum_range_sub]
11051153
simp [stoppedValue]
11061154

0 commit comments

Comments
 (0)