Skip to content

Commit a0ec512

Browse files
DavidLedvinkaDavid Ledvinka
andcommitted
feat(Probability): add Adapted (leanprover-community#32882)
Add `Adapted` which is a version of `StronglyAdapted` for `Measurable `rather than `StronglyMeasurable`. Also add theorems which state when one property implies the other and when they are equivalent. - [x] depends on: leanprover-community#33063 Co-authored-by: David Ledvinka <dledvinka.ledvinka@mail.utoronto.ca>
1 parent 8999a5a commit a0ec512

File tree

6 files changed

+64
-94
lines changed

6 files changed

+64
-94
lines changed

Mathlib/Probability/Kernel/Disintegration/Density.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,6 @@ lemma stronglyAdapted_densityProcess (κ : Kernel α (γ × β)) (ν : Kernel α
163163
StronglyAdapted (countableFiltration γ) (fun n x ↦ densityProcess κ ν n a x s) :=
164164
fun n ↦ stronglyMeasurable_countableFiltration_densityProcess κ ν n a hs
165165

166-
@[deprecated (since := "2025-12-19")] alias adapted_densityProcess := stronglyAdapted_densityProcess
167-
168166
lemma densityProcess_nonneg (κ : Kernel α (γ × β)) (ν : Kernel α γ) (n : ℕ)
169167
(a : α) (x : γ) (s : Set β) :
170168
0 ≤ densityProcess κ ν n a x s :=

Mathlib/Probability/Martingale/BorelCantelli.lean

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ theorem StronglyAdapted.isStoppingTime_leastGE (r : ℝ) (hf : StronglyAdapted
5757
IsStoppingTime ℱ (leastGE f r) :=
5858
hittingAfter_isStoppingTime hf measurableSet_Ici
5959

60-
@[deprecated (since := "2025-12-19")]
61-
alias Adapted.isStoppingTime_leastGE := StronglyAdapted.isStoppingTime_leastGE
62-
6360
/-- The stopped process of `f` above `r` is the process that is equal to `f` until `leastGE f r`
6461
(the first time `f` passes above `r`), and then is constant afterwards. -/
6562
noncomputable def stoppedAbove (f : ℕ → Ω → ℝ) (r : ℝ) : ℕ → Ω → ℝ :=
@@ -251,9 +248,6 @@ theorem stronglyAdapted_process (hs : ∀ n, MeasurableSet[ℱ n] (s n)) :
251248
fun _ => Finset.stronglyMeasurable_sum _ fun _ hk =>
252249
stronglyMeasurable_one.indicator <| ℱ.mono (Finset.mem_range.1 hk) _ <| hs _
253250

254-
@[deprecated (since := "2025-12-19")]
255-
alias adapted_process := stronglyAdapted_process
256-
257251
theorem martingalePart_process_ae_eq (ℱ : Filtration ℕ m0) (μ : Measure Ω) (s : ℕ → Set Ω) (n : ℕ) :
258252
martingalePart (process s) ℱ μ n =
259253
∑ k ∈ Finset.range n, ((s (k + 1)).indicator 1 - μ[(s (k + 1)).indicator 1|ℱ k]) := by

Mathlib/Probability/Martingale/Centering.lean

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,10 @@ theorem stronglyAdapted_predictablePart :
5757
fun _ => Finset.stronglyMeasurable_sum _ fun _ hin =>
5858
stronglyMeasurable_condExp.mono (ℱ.mono (Finset.mem_range_succ_iff.mp hin))
5959

60-
@[deprecated (since := "2025-12-19")]
61-
alias adapted_predictablePart := stronglyAdapted_predictablePart
62-
6360
theorem stronglyAdapted_predictablePart' : StronglyAdapted ℱ fun n => predictablePart f ℱ μ n :=
6461
fun _ => Finset.stronglyMeasurable_sum _ fun _ hin =>
6562
stronglyMeasurable_condExp.mono (ℱ.mono (Finset.mem_range_le hin))
6663

67-
@[deprecated (since := "2025-12-19")]
68-
alias adapted_predictablePart' := stronglyAdapted_predictablePart'
69-
7064
/-- Any `ℕ`-indexed stochastic process can be written as the sum of a martingale and a predictable
7165
process. This is the martingale. See `predictablePart` for the predictable process. -/
7266
noncomputable def martingalePart {m0 : MeasurableSpace Ω} (f : ℕ → Ω → E) (ℱ : Filtration ℕ m0)
@@ -85,9 +79,6 @@ theorem martingalePart_eq_sum : martingalePart f ℱ μ = fun n =>
8579
theorem stronglyAdapted_martingalePart (hf : StronglyAdapted ℱ f) :
8680
StronglyAdapted ℱ (martingalePart f ℱ μ) := hf.sub stronglyAdapted_predictablePart'
8781

88-
@[deprecated (since := "2025-12-19")]
89-
alias adapted_martingalePart := stronglyAdapted_martingalePart
90-
9182
theorem integrable_martingalePart (hf_int : ∀ n, Integrable (f n) μ) (n : ℕ) :
9283
Integrable (martingalePart f ℱ μ n) μ := by
9384
rw [martingalePart_eq_sum]

Mathlib/Probability/Martingale/Upcrossing.lean

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -330,23 +330,14 @@ theorem StronglyAdapted.isStoppingTime_crossing (hf : StronglyAdapted ℱ f) :
330330
refine isStoppingTime_hittingBtwn_isStoppingTime this ?_ measurableSet_Iic hf _
331331
simp [upperCrossingTime_le]
332332

333-
@[deprecated (since := "2025-12-19")]
334-
alias Adapted.isStoppingTime_crossing := StronglyAdapted.isStoppingTime_crossing
335-
336333
theorem StronglyAdapted.isStoppingTime_upperCrossingTime (hf : StronglyAdapted ℱ f) :
337334
IsStoppingTime ℱ (fun ω ↦ (upperCrossingTime a b f N n ω : ℕ)) :=
338335
hf.isStoppingTime_crossing.1
339336

340-
@[deprecated (since := "2025-12-19")]
341-
alias Adapted.isStoppingTime_upperCrossingTime := StronglyAdapted.isStoppingTime_upperCrossingTime
342-
343337
theorem StronglyAdapted.isStoppingTime_lowerCrossingTime (hf : StronglyAdapted ℱ f) :
344338
IsStoppingTime ℱ (fun ω ↦ (lowerCrossingTime a b f N n ω : ℕ)) :=
345339
hf.isStoppingTime_crossing.2
346340

347-
@[deprecated (since := "2025-12-19")]
348-
alias Adapted.isStoppingTime_lowerCrossingTime := StronglyAdapted.isStoppingTime_lowerCrossingTime
349-
350341
/-- `upcrossingStrat a b f N n` is 1 if `n` is between a consecutive pair of lower and upper
351342
crossings and is 0 otherwise. `upcrossingStrat` is shifted by one index so that it is adapted
352343
rather than predictable. -/
@@ -390,9 +381,6 @@ theorem StronglyAdapted.upcrossingStrat (hf : StronglyAdapted ℱ f) :
390381
simp_rw [← not_le]
391382
exact hl.inter hu.compl
392383

393-
@[deprecated (since := "2025-12-19")]
394-
alias Adapted.upcrossingStrat := StronglyAdapted.upcrossingStrat
395-
396384
theorem Submartingale.sum_upcrossingStrat_mul [IsFiniteMeasure μ] (hf : Submartingale f ℱ μ)
397385
(a b : ℝ) (N : ℕ) : Submartingale (fun n : ℕ =>
398386
∑ k ∈ Finset.range n, upcrossingStrat a b f N k * (f (k + 1) - f k)) ℱ μ :=
@@ -769,9 +757,6 @@ theorem StronglyAdapted.measurable_upcrossingsBefore (hf : StronglyAdapted ℱ f
769757
simpa only [ENat.some_eq_coe, Nat.cast_lt] using
770758
hf.isStoppingTime_upperCrossingTime.measurableSet_lt_of_pred N
771759

772-
@[deprecated (since := "2025-12-19")]
773-
alias Adapted.measurable_upcrossingsBefore := StronglyAdapted.measurable_upcrossingsBefore
774-
775760
theorem StronglyAdapted.integrable_upcrossingsBefore [IsFiniteMeasure μ]
776761
(hf : StronglyAdapted ℱ f) (hab : a < b) :
777762
Integrable (fun ω => (upcrossingsBefore a b f N ω : ℝ)) μ :=
@@ -782,9 +767,6 @@ theorem StronglyAdapted.integrable_upcrossingsBefore [IsFiniteMeasure μ]
782767
⟨Measurable.aestronglyMeasurable (measurable_from_top.comp (hf.measurable_upcrossingsBefore hab)),
783768
.of_bounded this⟩
784769

785-
@[deprecated (since := "2025-12-19")]
786-
alias Adapted.integrable_upcrossingsBefore := StronglyAdapted.integrable_upcrossingsBefore
787-
788770
/-- The number of upcrossings of a realization of a stochastic process (`upcrossings` takes value
789771
in `ℝ≥0∞` and so is allowed to be `∞`). -/
790772
noncomputable def upcrossings [Preorder ι] [OrderBot ι] [InfSet ι] (a b : ℝ) (f : ι → Ω → ℝ)
@@ -795,9 +777,6 @@ theorem StronglyAdapted.measurable_upcrossings (hf : StronglyAdapted ℱ f) (hab
795777
Measurable (upcrossings a b f) :=
796778
.iSup fun _ => measurable_from_top.comp (hf.measurable_upcrossingsBefore hab)
797779

798-
@[deprecated (since := "2025-12-19")]
799-
alias Adapted.measurable_upcrossings := StronglyAdapted.measurable_upcrossings
800-
801780
theorem upcrossings_lt_top_iff :
802781
upcrossings a b f ω < ∞ ↔ ∃ k, ∀ N, upcrossingsBefore a b f N ω ≤ k := by
803782
have : upcrossings a b f ω < ∞ ↔ ∃ k : ℝ≥0, upcrossings a b f ω ≤ k := by

Mathlib/Probability/Process/Adapted.lean

Lines changed: 64 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ public import Mathlib.Topology.Instances.Discrete
1111
/-!
1212
# Adapted and progressively measurable processes
1313
14-
This file defines the related notions of a process `u` being `StronglyAdapted` or `ProgMeasurable`
15-
(progressively measurable) with respect to a filtration `f`, and proves some basic facts about them.
14+
This file defines the related notions of a process `u` being `Adapted`, `StronglyAdapted`
15+
or `ProgMeasurable` (progressively measurable) with respect to a filter `f`, and proves
16+
some basic facts about them.
1617
1718
## Main definitions
1819
20+
* `MeasureTheory.Adapted`: a sequence of functions `u` is said to be adapted to a
21+
filtration `f` if at each point in time `i`, `u i` is `f i`-measurable
1922
* `MeasureTheory.StronglyAdapted`: a sequence of functions `u` is said to be strongly adapted to a
2023
filtration `f` if at each point in time `i`, `u i` is `f i`-strongly measurable
2124
* `MeasureTheory.ProgMeasurable`: a sequence of functions `u` is said to be progressively
@@ -44,11 +47,55 @@ namespace MeasureTheory
4447

4548
variable {Ω ι : Type*} {m : MeasurableSpace Ω} [Preorder ι] {f : Filtration ι m}
4649

50+
section Adapted
51+
52+
variable {β : ι → Type*} [∀ i, MeasurableSpace (β i)] {u v : (i : ι) → Ω → β i}
53+
54+
/-- A sequence of functions `u` is adapted to a filtration `f` if for all `i`,
55+
`u i` is `f i`-measurable. -/
56+
def Adapted (f : Filtration ι m) (u : (i : ι) → Ω → β i) : Prop :=
57+
∀ i : ι, Measurable[f i] (u i)
58+
59+
namespace Adapted
60+
61+
@[to_additive]
62+
protected theorem mul [∀ i, Mul (β i)] [∀ i, MeasurableMul₂ (β i)]
63+
(hu : Adapted f u) (hv : Adapted f v) :
64+
Adapted f (u * v) := fun i => (hu i).mul (hv i)
65+
66+
@[to_additive]
67+
protected theorem div [∀ i, Div (β i)] [∀ i, MeasurableDiv₂ (β i)]
68+
(hu : Adapted f u) (hv : Adapted f v) :
69+
Adapted f (u / v) := fun i => (hu i).div (hv i)
70+
71+
@[to_additive]
72+
protected theorem inv [∀ i, Group (β i)] [∀ i, MeasurableInv (β i)] (hu : Adapted f u) :
73+
Adapted f u⁻¹ := fun i => (hu i).inv
74+
75+
protected theorem smul {𝕂 : Type*} [MeasurableSpace 𝕂]
76+
[∀ i, SMul 𝕂 (β i)] [∀ i, MeasurableSMul 𝕂 (β i)] (c : 𝕂) (hu : Adapted f u) :
77+
Adapted f (c • u) := fun i => (hu i).const_smul c
78+
79+
protected theorem measurable {i : ι} (hf : Adapted f u) : Measurable[m] (u i) :=
80+
(hf i).mono (f.le i) (by rfl)
81+
82+
theorem measurable_le {i j : ι} (hf : Adapted f u) (hij : i ≤ j) : Measurable[f j] (u i) :=
83+
(hf i).mono (f.mono hij) (by rfl)
84+
85+
end Adapted
86+
87+
theorem adapted_const' (f : Filtration ι m) (x : (i : ι) → β i) : Adapted f fun i _ ↦ x i :=
88+
fun _ ↦ measurable_const
89+
90+
theorem adapted_const {β : Type*} [MeasurableSpace β] (f : Filtration ι m) (x : β) :
91+
Adapted f fun _ _ ↦ x := adapted_const' _ _
92+
93+
end Adapted
94+
4795
section StronglyAdapted
4896

4997
variable {β : ι → Type*} [∀ i, TopologicalSpace (β i)] {u v : (i : ι) → Ω → β i}
5098

51-
5299
/-- A sequence of functions `u` is strongly adapted to a filtration `f` if for all `i`,
53100
`u i` is `f i`-strongly measurable. -/
54101
def StronglyAdapted (f : Filtration ι m) (u : (i : ι) → Ω → β i) : Prop :=
@@ -82,6 +129,20 @@ theorem stronglyMeasurable_le {i j : ι} (hf : StronglyAdapted f u) (hij : i ≤
82129

83130
end StronglyAdapted
84131

132+
theorem StronglyAdapted.adapted [mΒ : ∀ i, MeasurableSpace (β i)] [∀ i, BorelSpace (β i)]
133+
[∀ i, PseudoMetrizableSpace (β i)] (hf : StronglyAdapted f u) :
134+
Adapted f u := fun _ ↦ (hf _).measurable
135+
136+
theorem Adapted.stronglyAdapted [mΒ : ∀ i, MeasurableSpace (β i)]
137+
[∀ i, OpensMeasurableSpace (β i)] [∀ i, PseudoMetrizableSpace (β i)]
138+
[∀ i, SecondCountableTopology (β i)] (hf : Adapted f u) :
139+
StronglyAdapted f u := fun _ ↦ (hf _).stronglyMeasurable
140+
141+
theorem stronglyAdapted_iff_adapted [mΒ : ∀ i, MeasurableSpace (β i)]
142+
[∀ i, BorelSpace (β i)] [∀ i, PseudoMetrizableSpace (β i)]
143+
[∀ i, SecondCountableTopology (β i)] :
144+
StronglyAdapted f u ↔ Adapted f u := ⟨fun h ↦ h.adapted, fun h ↦ h.stronglyAdapted⟩
145+
85146
theorem stronglyAdapted_const' (f : Filtration ι m) (x : (i : ι) → β i) :
86147
StronglyAdapted f fun i _ ↦ x i :=
87148
fun _ ↦ stronglyMeasurable_const
@@ -218,41 +279,4 @@ theorem Predictable.stronglyAdapted {f : Filtration ℕ m} {u : ℕ → Ω →
218279
| 0 => hu0
219280
| n + 1 => (hu n).mono (f.mono n.le_succ)
220281

221-
section Deprications
222-
223-
@[deprecated (since := "2025-12-19")] alias Adapted := StronglyAdapted
224-
225-
@[deprecated (since := "2025-12-19")] alias Adapted.mul := StronglyAdapted.mul
226-
227-
@[deprecated (since := "2025-12-19")] alias Adapted.div := StronglyAdapted.div
228-
229-
@[deprecated (since := "2025-12-19")] alias Adapted.smul := StronglyAdapted.smul
230-
231-
@[deprecated (since := "2025-12-19")]
232-
alias Adapted.stronglyMeasurable := StronglyAdapted.stronglyMeasurable
233-
234-
@[deprecated (since := "2025-12-19")] alias adapted_const' := stronglyAdapted_const'
235-
236-
@[deprecated (since := "2025-12-19")] alias adapted_const := stronglyAdapted_const
237-
238-
@[deprecated (since := "2025-12-19")] alias adapted_zero' := stronglyAdapted_zero'
239-
240-
@[deprecated (since := "2025-12-19")] alias adapted_zero := stronglyAdapted_zero
241-
242-
@[deprecated (since := "2025-12-19")]
243-
alias Filtration.adapted_natural := Filtration.stronglyAdapted_natural
244-
245-
@[deprecated (since := "2025-12-19")] alias ProgMeasurable.adapted := ProgMeasurable.stronglyAdapted
246-
247-
@[deprecated (since := "2025-12-19")]
248-
alias Adapted.progMeasurable_of_continuous := StronglyAdapted.progMeasurable_of_continuous
249-
250-
@[deprecated (since := "2025-12-19")]
251-
alias Adapted.progMeasurable_of_discrete := StronglyAdapted.progMeasurable_of_discrete
252-
253-
@[deprecated (since := "2025-12-19")]
254-
alias Predictable.adapted := Predictable.stronglyAdapted
255-
256-
end Deprications
257-
258282
end MeasureTheory

Mathlib/Probability/Process/Stopping.lean

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -869,9 +869,6 @@ theorem ProgMeasurable.stronglyAdapted_stoppedProcess [PseudoMetrizableSpace ι]
869869
StronglyAdapted f (MeasureTheory.stoppedProcess u τ) :=
870870
(h.stoppedProcess hτ).stronglyAdapted
871871

872-
@[deprecated (since := "2025-12-19")]
873-
alias ProgMeasurable.adapted_stoppedProcess := ProgMeasurable.stronglyAdapted_stoppedProcess
874-
875872
theorem ProgMeasurable.stronglyMeasurable_stoppedProcess [PseudoMetrizableSpace ι]
876873
(hu : ProgMeasurable f u) (hτ : IsStoppingTime f τ) (i : ι) :
877874
StronglyMeasurable (MeasureTheory.stoppedProcess u τ i) :=
@@ -1125,35 +1122,22 @@ theorem StronglyAdapted.stoppedProcess [MetrizableSpace ι] (hu : StronglyAdapte
11251122
StronglyAdapted f (stoppedProcess u τ) :=
11261123
((hu.progMeasurable_of_continuous hu_cont).stoppedProcess hτ).stronglyAdapted
11271124

1128-
@[deprecated (since := "2025-12-19")]
1129-
alias Adapted.stoppedProcess := StronglyAdapted.stoppedProcess
1130-
11311125
/-- If the indexing order has the discrete topology, then the stopped process of a strongly adapted
11321126
process is strongly adapted. -/
11331127
theorem StronglyAdapted.stoppedProcess_of_discrete [DiscreteTopology ι] (hu : StronglyAdapted f u)
11341128
(hτ : IsStoppingTime f τ) : StronglyAdapted f (MeasureTheory.stoppedProcess u τ) :=
11351129
(hu.progMeasurable_of_discrete.stoppedProcess hτ).stronglyAdapted
11361130

1137-
@[deprecated (since := "2025-12-19")]
1138-
alias Adapted.stoppedProcess_of_discrete := StronglyAdapted.stoppedProcess_of_discrete
1139-
11401131
theorem StronglyAdapted.stronglyMeasurable_stoppedProcess [MetrizableSpace ι]
11411132
(hu : StronglyAdapted f u) (hu_cont : ∀ ω, Continuous fun i => u i ω) (hτ : IsStoppingTime f τ)
11421133
(n : ι) : StronglyMeasurable (MeasureTheory.stoppedProcess u τ n) :=
11431134
(hu.progMeasurable_of_continuous hu_cont).stronglyMeasurable_stoppedProcess hτ n
11441135

1145-
@[deprecated (since := "2025-12-19")]
1146-
alias Adapted.stronglyMeasurable_stoppedProcess := StronglyAdapted.stronglyMeasurable_stoppedProcess
1147-
11481136
theorem StronglyAdapted.stronglyMeasurable_stoppedProcess_of_discrete [DiscreteTopology ι]
11491137
(hu : StronglyAdapted f u) (hτ : IsStoppingTime f τ) (n : ι) :
11501138
StronglyMeasurable (MeasureTheory.stoppedProcess u τ n) :=
11511139
hu.progMeasurable_of_discrete.stronglyMeasurable_stoppedProcess hτ n
11521140

1153-
@[deprecated (since := "2025-12-19")]
1154-
alias Adapted.stronglyMeasurable_stoppedProcess_of_discrete :=
1155-
StronglyAdapted.stronglyMeasurable_stoppedProcess_of_discrete
1156-
11571141
end StronglyAdaptedStoppedProcess
11581142

11591143
section Nat

0 commit comments

Comments
 (0)