Theorem: MeasureTheory.Adapted.isStoppingTime_crossing
File: Mathlib/Probability/Martingale/Upcrossing.lean

tactic: induction' n with k ih
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N n) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N n)
state_after: case zero
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N 0) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N 0)

case succ
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
ih : IsStoppingTime ℱ (upperCrossingTime a b f N k) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N k)
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))

tactic: refine ⟨isStoppingTime_const _ 0, ?_⟩
state_before: case zero
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N 0) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N 0)
state_after: case zero
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
⊢ IsStoppingTime ℱ (lowerCrossingTime a b f N 0)

tactic: simp [hitting_isStoppingTime hf measurableSet_Iic]
state_before: case zero
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
⊢ IsStoppingTime ℱ (lowerCrossingTime a b f N 0)
state_after: no goals

tactic: obtain ⟨_, ih₂⟩ := ih
state_before: case succ
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
ih : IsStoppingTime ℱ (upperCrossingTime a b f N k) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N k)
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))
state_after: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))

tactic: have : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) := by
  intro n
  simp_rw [upperCrossingTime_succ_eq]
  exact isStoppingTime_hitting_isStoppingTime ih₂ (fun _ => lowerCrossingTime_le)
    measurableSet_Ici hf _
state_before: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))
state_after: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
this : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))

tactic: refine ⟨this, ?_⟩
state_before: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
this : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1)) ∧ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))
state_after: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
this : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
⊢ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))

tactic: intro n
state_before: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
this : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
⊢ IsStoppingTime ℱ (lowerCrossingTime a b f N (k + 1))
state_after: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
this : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
n : ℕ
⊢ MeasurableSet {ω | lowerCrossingTime a b f N (k + 1) ω ≤ n}

tactic: exact isStoppingTime_hitting_isStoppingTime this (fun _ => upperCrossingTime_le)
  measurableSet_Iic hf _
state_before: case succ.intro
Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
this : IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
n : ℕ
⊢ MeasurableSet {ω | lowerCrossingTime a b f N (k + 1) ω ≤ n}
state_after: no goals

tactic: intro n
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
⊢ IsStoppingTime ℱ (upperCrossingTime a b f N (k + 1))
state_after: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
n : ℕ
⊢ MeasurableSet {ω | upperCrossingTime a b f N (k + 1) ω ≤ n}

tactic: simp_rw [upperCrossingTime_succ_eq]
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
n : ℕ
⊢ MeasurableSet {ω | upperCrossingTime a b f N (k + 1) ω ≤ n}
state_after: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
n : ℕ
⊢ MeasurableSet {ω | hitting f (Set.Ici b) (lowerCrossingTime a b f N k ω) N ω ≤ n}

tactic: exact isStoppingTime_hitting_isStoppingTime ih₂ (fun _ => lowerCrossingTime_le)
  measurableSet_Ici hf _
state_before: Ω : Type u_1
ι : Type u_2
m0 : MeasurableSpace Ω
μ : Measure Ω
a b : ℝ
f : ℕ → Ω → ℝ
N n✝ m : ℕ
ω : Ω
ℱ : Filtration ℕ m0
hf : Adapted ℱ f
k : ℕ
left✝ : IsStoppingTime ℱ (upperCrossingTime a b f N k)
ih₂ : IsStoppingTime ℱ (lowerCrossingTime a b f N k)
n : ℕ
⊢ MeasurableSet {ω | hitting f (Set.Ici b) (lowerCrossingTime a b f N k ω) N ω ≤ n}
state_after: no goals