@@ -45,122 +45,93 @@ variable {Ω : Type*} {m0 : MeasurableSpace Ω} {μ : Measure Ω} {ℱ : Filtrat
4545### One sided martingale bound
4646-/
4747
48+ /-- `leastGE f r` is the stopping time corresponding to the first time `f ≥ r`. -/
49+ noncomputable def leastGE (f : ℕ → Ω → ℝ) (r : ℝ) : Ω → ℕ∞ :=
50+ hittingAfter f (Set.Ici r) 0
4851
49- -- TODO: `leastGE` should be defined taking values in `WithTop ℕ` once the `stoppedProcess`
50- -- refactor is complete
51- /-- `leastGE f r n` is the stopping time corresponding to the first time `f ≥ r`. -/
52- noncomputable def leastGE (f : ℕ → Ω → ℝ) (r : ℝ) (n : ℕ) :=
53- hitting f (Set.Ici r) 0 n
54-
55- theorem Adapted.isStoppingTime_leastGE (r : ℝ) (n : ℕ) (hf : Adapted ℱ f) :
56- IsStoppingTime ℱ (leastGE f r n) :=
57- hitting_isStoppingTime hf measurableSet_Ici
58-
59- theorem leastGE_le {i : ℕ} {r : ℝ} (ω : Ω) : leastGE f r i ω ≤ i :=
60- hitting_le ω
61-
62- -- The following four lemmas shows `leastGE` behaves like a stopped process. Ideally we should
63- -- define `leastGE` as a stopping time and take its stopped process. However, we can't do that
64- -- with our current definition since a stopping time takes only finite indices. An upcoming
65- -- refactor should hopefully make it possible to have stopping times taking infinity as a value
66- theorem leastGE_mono {n m : ℕ} (hnm : n ≤ m) (r : ℝ) (ω : Ω) : leastGE f r n ω ≤ leastGE f r m ω :=
67- hitting_mono hnm
68-
69- theorem leastGE_eq_min (π : Ω → ℕ) (r : ℝ) (ω : Ω) {n : ℕ} (hπn : ∀ ω, π ω ≤ n) :
70- leastGE f r (π ω) ω = min (π ω) (leastGE f r n ω) := by
71- classical
72- refine le_antisymm (le_min (leastGE_le _) (leastGE_mono (hπn ω) r ω)) ?_
73- by_cases hle : π ω ≤ leastGE f r n ω
74- · rw [min_eq_left hle, leastGE]
75- by_cases h : ∃ j ∈ Set.Icc 0 (π ω), f j ω ∈ Set.Ici r
76- · refine hle.trans (Eq.le ?_)
77- rw [leastGE, ← hitting_eq_hitting_of_exists (hπn ω) h]
78- · simp only [hitting, if_neg h, le_rfl]
79- · rw [min_eq_right (not_le.1 hle).le, leastGE, leastGE, ←
80- hitting_eq_hitting_of_exists (hπn ω) _]
81- rw [not_le, leastGE, hitting_lt_iff _ (hπn ω)] at hle
82- exact
83- let ⟨j, hj₁, hj₂⟩ := hle
84- ⟨j, ⟨hj₁.1 , hj₁.2 .le⟩, hj₂⟩
85-
86- theorem stoppedValue_stoppedValue_leastGE (f : ℕ → Ω → ℝ) (π : Ω → ℕ) (r : ℝ) {n : ℕ}
87- (hπn : ∀ ω, π ω ≤ n) : stoppedValue (fun i => stoppedValue f (leastGE f r i)) π =
88- stoppedValue (stoppedProcess f (leastGE f r n)) π := by
89- ext1 ω
90- simp +unfoldPartialApp only [stoppedProcess, stoppedValue]
91- rw [leastGE_eq_min _ _ _ hπn]
92-
93- theorem Submartingale.stoppedValue_leastGE [IsFiniteMeasure μ] (hf : Submartingale f ℱ μ) (r : ℝ) :
94- Submartingale (fun i => stoppedValue f (leastGE f r i)) ℱ μ := by
95- rw [submartingale_iff_expected_stoppedValue_mono]
96- · intro σ π hσ hπ hσ_le_π hπ_bdd
97- obtain ⟨n, hπ_le_n⟩ := hπ_bdd
98- simp_rw [stoppedValue_stoppedValue_leastGE f σ r fun i => (hσ_le_π i).trans (hπ_le_n i)]
99- simp_rw [stoppedValue_stoppedValue_leastGE f π r hπ_le_n]
100- refine hf.expected_stoppedValue_mono ?_ ?_ ?_ fun ω => (min_le_left _ _).trans (hπ_le_n ω)
101- · exact hσ.min (hf.adapted.isStoppingTime_leastGE _ _)
102- · exact hπ.min (hf.adapted.isStoppingTime_leastGE _ _)
103- · exact fun ω => min_le_min (hσ_le_π ω) le_rfl
104- · exact fun i => stronglyMeasurable_stoppedValue_of_le hf.adapted.progMeasurable_of_discrete
105- (hf.adapted.isStoppingTime_leastGE _ _) leastGE_le
106- · exact fun i => integrable_stoppedValue _ (hf.adapted.isStoppingTime_leastGE _ _) hf.integrable
107- leastGE_le
52+ theorem Adapted.isStoppingTime_leastGE (r : ℝ) (hf : Adapted ℱ f) :
53+ IsStoppingTime ℱ (leastGE f r) :=
54+ hittingAfter_isStoppingTime hf measurableSet_Ici
55+
56+ /-- The stopped process of `f` above `r` is the process that is equal to `f` until `leastGE f r`
57+ (the first time `f` passes above `r`), and then is constant afterwards. -/
58+ noncomputable def stoppedAbove (f : ℕ → Ω → ℝ) (r : ℝ) : ℕ → Ω → ℝ :=
59+ stoppedProcess f (leastGE f r)
60+
61+ protected lemma Submartingale.stoppedAbove [IsFiniteMeasure μ] (hf : Submartingale f ℱ μ) (r : ℝ) :
62+ Submartingale (stoppedAbove f r) ℱ μ :=
63+ hf.stoppedProcess (hf.adapted.isStoppingTime_leastGE r)
64+
65+ @[deprecated (since := "2025-10-25")] alias Submartingale.stoppedValue_leastGE :=
66+ Submartingale.stoppedAbove
10867
10968variable {r : ℝ} {R : ℝ≥0 }
11069
111- theorem norm_stoppedValue_leastGE_le (hr : 0 ≤ r) (hf0 : f 0 = 0 )
70+ theorem stoppedAbove_le (hr : 0 ≤ r) (hf0 : f 0 = 0 )
11271 (hbdd : ∀ᵐ ω ∂μ, ∀ i, |f (i + 1 ) ω - f i ω| ≤ R) (i : ℕ) :
113- ∀ᵐ ω ∂μ, stoppedValue f (leastGE f r i) ω ≤ r + R := by
72+ ∀ᵐ ω ∂μ, stoppedAbove f r i ω ≤ r + R := by
11473 filter_upwards [hbdd] with ω hbddω
115- change f (leastGE f r i ω) ω ≤ r + R
116- by_cases heq : leastGE f r i ω = 0
117- · rw [heq , hf0, Pi.zero_apply]
118- exact add_nonneg hr R.coe_nonneg
119- · obtain ⟨k, hk⟩ := Nat.exists_eq_succ_of_ne_zero heq
120- rw [hk, add_comm, ← sub_le_iff_le_add]
121- have := notMem_of_lt_hitting (hk.symm ▸ k.lt_succ_self : k < leastGE f r i ω) (zero_le _ )
122- simp only [Set.mem_Ici, not_le] at this
74+ rw [stoppedAbove, stoppedProcess, ENat.some_eq_coe]
75+ by_cases h_zero : (min (i : ℕ∞) ( leastGE f r ω)).untopA = 0
76+ · simp only [h_zero , hf0, Pi.zero_apply]
77+ positivity
78+ obtain ⟨k, hk⟩ := Nat.exists_eq_add_one_of_ne_zero h_zero
79+ rw [hk, add_comm r , ← sub_le_iff_le_add]
80+ have := notMem_of_lt_hittingAfter (?_ : k < leastGE f r ω )
81+ · simp only [zero_le, Set.mem_Ici, not_le, forall_const ] at this
12382 exact (sub_lt_sub_left this _).le.trans ((le_abs_self _).trans (hbddω _))
83+ · suffices (k : ℕ∞) < min (i : ℕ∞) (leastGE f r ω) from this.trans_le (min_le_right _ _)
84+ have h_top : min (i : ℕ∞) (leastGE f r ω) ≠ ⊤ :=
85+ ne_top_of_le_ne_top (by simp) (min_le_left _ _)
86+ lift min (i : ℕ∞) (leastGE f r ω) to ℕ using h_top with p
87+ simp only [untopD_coe_enat, Nat.cast_lt, gt_iff_lt] at *
88+ omega
12489
125- theorem Submartingale.stoppedValue_leastGE_eLpNorm_le [IsFiniteMeasure μ] (hf : Submartingale f ℱ μ)
90+ @[deprecated (since := "2025-10-25")] alias norm_stoppedValue_leastGE_le := stoppedAbove_le
91+
92+ theorem Submartingale.eLpNorm_stoppedAbove_le [IsFiniteMeasure μ] (hf : Submartingale f ℱ μ)
12693 (hr : 0 ≤ r) (hf0 : f 0 = 0 ) (hbdd : ∀ᵐ ω ∂μ, ∀ i, |f (i + 1 ) ω - f i ω| ≤ R) (i : ℕ) :
127- eLpNorm (stoppedValue f (leastGE f r i) ) 1 μ ≤ 2 * μ Set.univ * ENNReal.ofReal (r + R) := by
128- refine eLpNorm_one_le_of_le' ((hf.stoppedValue_leastGE r).integrable _) ?_
129- (norm_stoppedValue_leastGE_le hr hf0 hbdd i)
94+ eLpNorm (stoppedAbove f r i) 1 μ ≤ 2 * μ Set.univ * ENNReal.ofReal (r + R) := by
95+ refine eLpNorm_one_le_of_le' ((hf.stoppedAbove r).integrable _) ?_
96+ (stoppedAbove_le hr hf0 hbdd i)
13097 rw [← setIntegral_univ]
131- refine le_trans ?_ ((hf.stoppedValue_leastGE r).setIntegral_le (zero_le _) MeasurableSet.univ)
132- simp_rw [stoppedValue, leastGE, hitting_of_le le_rfl, hf0, integral_zero', le_rfl]
98+ refine le_trans ?_ ((hf.stoppedAbove r).setIntegral_le (zero_le _) MeasurableSet.univ)
99+ simp [stoppedAbove, stoppedProcess, hf0]
100+
101+ @[deprecated (since := "2025-10-25")] alias Submartingale.stoppedValue_leastGE_eLpNorm_le :=
102+ Submartingale.eLpNorm_stoppedAbove_le
133103
134- theorem Submartingale.stoppedValue_leastGE_eLpNorm_le ' [IsFiniteMeasure μ]
104+ theorem Submartingale.eLpNorm_stoppedAbove_le ' [IsFiniteMeasure μ]
135105 (hf : Submartingale f ℱ μ) (hr : 0 ≤ r) (hf0 : f 0 = 0 )
136106 (hbdd : ∀ᵐ ω ∂μ, ∀ i, |f (i + 1 ) ω - f i ω| ≤ R) (i : ℕ) :
137- eLpNorm (stoppedValue f (leastGE f r i)) 1 μ ≤
138- ENNReal.toNNReal (2 * μ Set.univ * ENNReal.ofReal (r + R)) := by
139- refine (hf.stoppedValue_leastGE_eLpNorm_le hr hf0 hbdd i).trans ?_
107+ eLpNorm (stoppedAbove f r i) 1 μ
108+ ≤ ENNReal.toNNReal (2 * μ Set.univ * ENNReal.ofReal (r + R)) := by
109+ refine (hf.eLpNorm_stoppedAbove_le hr hf0 hbdd i).trans ?_
140110 simp [ENNReal.coe_toNNReal (measure_ne_top μ _), ENNReal.coe_toNNReal]
141111
112+ @[deprecated (since := "2025-10-25")] alias Submartingale.stoppedValue_leastGE_eLpNorm_le' :=
113+ Submartingale.eLpNorm_stoppedAbove_le'
114+
142115/-- This lemma is superseded by `Submartingale.bddAbove_iff_exists_tendsto`. -/
143116theorem Submartingale.exists_tendsto_of_abs_bddAbove_aux [IsFiniteMeasure μ]
144117 (hf : Submartingale f ℱ μ) (hf0 : f 0 = 0 ) (hbdd : ∀ᵐ ω ∂μ, ∀ i, |f (i + 1 ) ω - f i ω| ≤ R) :
145118 ∀ᵐ ω ∂μ, BddAbove (Set.range fun n => f n ω) → ∃ c, Tendsto (fun n => f n ω) atTop (𝓝 c) := by
146- have ht :
147- ∀ᵐ ω ∂μ, ∀ i : ℕ, ∃ c, Tendsto (fun n => stoppedValue f (leastGE f i n) ω) atTop (𝓝 c) := by
119+ have ht : ∀ᵐ ω ∂μ, ∀ i : ℕ, ∃ c, Tendsto (fun n => stoppedAbove f i n ω) atTop (𝓝 c) := by
148120 rw [ae_all_iff]
149- exact fun i => Submartingale.exists_ae_tendsto_of_bdd (hf.stoppedValue_leastGE i)
150- (hf.stoppedValue_leastGE_eLpNorm_le ' i.cast_nonneg hf0 hbdd)
121+ exact fun i ↦ Submartingale.exists_ae_tendsto_of_bdd (hf.stoppedAbove i)
122+ (hf.eLpNorm_stoppedAbove_le ' i.cast_nonneg hf0 hbdd)
151123 filter_upwards [ht] with ω hω hωb
152124 rw [BddAbove] at hωb
153125 obtain ⟨i, hi⟩ := exists_nat_gt hωb.some
154126 have hib : ∀ n, f n ω < i := by
155127 intro n
156128 exact lt_of_le_of_lt ((mem_upperBounds.1 hωb.some_mem) _ ⟨n, rfl⟩) hi
157- have heq : ∀ n, stoppedValue f (leastGE f i n) ω = f n ω := by
129+ have heq : ∀ n, stoppedAbove f i n ω = f n ω := by
158130 intro n
159- rw [leastGE]; unfold hitting; rw [stoppedValue]
160- rw [if_neg]
161- simp only [Set.mem_Icc, Set.mem_Ici]
162- push_neg
163- exact fun j _ => hib j
131+ rw [stoppedAbove, stoppedProcess, leastGE, hittingAfter_eq_top_iff.mpr]
132+ · simp only [le_top, inf_of_le_left]
133+ congr
134+ · simp [hib]
164135 simp only [← heq, hω i]
165136
166137theorem Submartingale.bddAbove_iff_exists_tendsto_aux [IsFiniteMeasure μ] (hf : Submartingale f ℱ μ)
0 commit comments