Samplinglib
Lean gate passed 2026-08-19T06:04:36.257124+00:00 · 77184245109a
production module

AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2

12 named declarations scanned from AutoSamplingTheory/TechnicalLemmas/StochasticProcesses/ElementaryItoDoobL2.lean.

Imports
Imported by
Placeholder scan
0 declaration(s) flagged
Gate status
Compiled

Declarations

def AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.dyadicObservationTime Compiled Not mapped

- The `k`-th point of the level-`level` dyadic observation grid.

noncomputable def dyadicObservationTime (T : ℝ≥0) (level k : ℕ) : ℝ≥0 :=
  k * dyadicMesh T level
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.dyadicObservationTime_monotone Compiled Not mapped

No declaration docstring.

theorem dyadicObservationTime_monotone (T : ℝ≥0) (level : ℕ) :
    Monotone (dyadicObservationTime T level) := by
  intro i j hij
  unfold dyadicObservationTime
  gcongr
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.dyadicObservationTime_terminal Compiled Not mapped

No declaration docstring.

@[simp] theorem dyadicObservationTime_terminal (T : ℝ≥0) (level : ℕ) :
    dyadicObservationTime T level (2 ^ level) = T := by
  simp only [dyadicObservationTime, dyadicMesh, Nat.cast_pow, Nat.cast_ofNat]
  rw [mul_comm, div_mul_cancel₀]
  positivity
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.dyadicObservationTime_refine Compiled Not mapped

No declaration docstring.

theorem dyadicObservationTime_refine (T : ℝ≥0) (level k : ℕ) :
    dyadicObservationTime T (level + 1) (2 * k) =
      dyadicObservationTime T level k := by
  apply NNReal.eq
  simp only [dyadicObservationTime, dyadicMesh, pow_succ, NNReal.coe_mul,
    Nat.cast_mul, Nat.cast_ofNat]
  norm_num
  ring_nf

/-- Finite dyadic running maxima are measurable random variables. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.measurable_runningAbsMax_dyadic Compiled Not mapped

- Finite dyadic running maxima are measurable random variables.

theorem measurable_runningAbsMax_dyadic
    {M : ℝ≥0 → Omega → ℝ} {filtration : Filtration ℝ≥0 m}
    (hM : StronglyAdapted filtration M) (T : ℝ≥0) (level : ℕ) :
    Measurable
      (runningAbsMax (fun k => M (dyadicObservationTime T level k)) (2 ^ level)) := by
  rw [show runningAbsMax (fun k => M (dyadicObservationTime T level k)) (2 ^ level) =
      fun omega => (Finset.range (2 ^ level + 1)).sup'
        Finset.nonempty_range_add_one
        (fun k => |M (dyadicObservationTime T level k) omega|) by rfl]
  convert Finset.measurable_sup' Finset.nonempty_range_add_one
      (fun k (_hk : k ∈ Finset.range (2 ^ level + 1)) =>
        ((hM (dyadicObservationTime T level k)).mono
          (filtration.le (dyadicObservationTime T level k))).measurable.abs) using 1
  funext omega
  rw [Finset.sup'_apply]

/-- Refining a dyadic observation grid can only increase its running maximum. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.runningAbsMax_dyadic_mono_level Compiled Not mapped

- Refining a dyadic observation grid can only increase its running maximum.

theorem runningAbsMax_dyadic_mono_level
    (M : ℝ≥0 → Omega → ℝ) (T : ℝ≥0) (level : ℕ) (omega : Omega) :
    runningAbsMax (fun k => M (dyadicObservationTime T level k)) (2 ^ level) omega ≤
      runningAbsMax (fun k => M (dyadicObservationTime T (level + 1) k))
        (2 ^ (level + 1)) omega := by
  unfold runningAbsMax
  rw [Finset.sup'_le_iff]
  intro k hk
  have hk' : 2 * k ∈ Finset.range (2 ^ (level + 1) + 1) := by
    simp only [Finset.mem_range] at hk ⊢
    simp only [pow_succ]
    omega
  calc
    |M (dyadicObservationTime T level k) omega| =
        |M (dyadicObservationTime T (level + 1) (2 * k)) omega| := by
      rw [dyadicObservationTime_refine]
    _ ≤ _ := Finset.le_sup'
      (fun j => |M (dyadicObservationTime T (level + 1) j) omega|) hk'

/-- Put two dyadic elementary processes on their common grid and subtract. -/
def AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.commonDifference Compiled Not mapped

- Put two dyadic elementary processes on their common grid and subtract.

noncomputable def commonDifference
    (eta xi : DyadicElementaryProcess filtration T) :
    ElementaryAdaptedProcess filtration (2 ^ commonDyadicLevel eta xi) :=
  sub
    (commonRefinementLeftProcess eta xi)
    (commonRefinementRightProcess eta xi)
    (commonRefinementProcess_times_eq eta xi)
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.elementaryItoProcess_commonDifference Compiled Not mapped

No declaration docstring.

theorem elementaryItoProcess_commonDifference
    (eta xi : DyadicElementaryProcess filtration T)
    (B : ℝ≥0 → Omega → ℝ) (S t : ℝ≥0) (omega : Omega) :
    elementaryItoProcess (commonDifference eta xi) B S t omega =
      elementaryItoProcess eta.process B S t omega -
        elementaryItoProcess xi.process B S t omega := by
  unfold elementaryItoProcess
  change elementaryItoIntegral
      (sub
        (commonRefinementLeftProcess eta xi)
        (commonRefinementRightProcess eta xi)
        (commonRefinementProcess_times_eq eta xi))
      B (min t S) omega = _
  rw [elementaryItoIntegral_sub]
  rw [show elementaryItoIntegral
      (commonRefinementLeftProcess eta xi)
      B (min t S) omega =
      elementaryItoIntegral eta.process B (min t S) omega by
        exact refineDyadic_elementaryItoIntegral_eq eta _ _ B _ omega]
  rw [show elementaryItoIntegral
      (commonRefinementRightProcess eta xi)
      B (min t S) omega =
      elementaryItoIntegral xi.process B (min t S) omega by
        exact refineDyadic_elementaryItoIntegral_eq xi _ _ B _ omega]
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.elementaryItoIntegral_commonDifference Compiled Not mapped

No declaration docstring.

theorem elementaryItoIntegral_commonDifference
    (eta xi : DyadicElementaryProcess filtration T)
    (B : ℝ≥0 → Omega → ℝ) (S : ℝ≥0) (omega : Omega) :
    elementaryItoIntegral (commonDifference eta xi) B S omega =
      elementaryItoIntegral eta.process B S omega -
        elementaryItoIntegral xi.process B S omega := by
  simpa only [elementaryItoProcess, min_self] using
    elementaryItoProcess_commonDifference eta xi B S S omega

/-- The terminal `eLpNorm` of the common-grid difference is exactly the
product-space `L2` distance of the two integrands. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.eLpNorm_commonDifference_terminal Compiled Not mapped

- The terminal `eLpNorm` of the common-grid difference is exactly the product-space `L2` distance of the two integrands.

theorem eLpNorm_commonDifference_terminal
    (eta xi : DyadicElementaryProcess filtration T)
    (hB : IsBrownianMotionWithFiltration B filtration mu) :
    eLpNorm (elementaryItoIntegral (commonDifference eta xi) B T) 2 mu =
      ‖processToLp eta hB - processToLp xi hB‖ₑ := by
  let _ : IsProbabilityMeasure mu := hB.isProbabilityMeasure
  have hterminal : elementaryItoTerminalToLp (commonDifference eta xi) hB T =
      terminalToLp eta hB - terminalToLp xi hB := by
    change elementaryItoTerminalToLp
      (sub (commonRefinementLeftProcess eta xi)
        (commonRefinementRightProcess eta xi)
        (commonRefinementProcess_times_eq eta xi)) hB T = _
    rw [elementaryItoTerminalToLp_sub]
    rw [show elementaryItoTerminalToLp (commonRefinementLeftProcess eta xi) hB T =
        terminalToLp eta hB by
          exact refineDyadic_terminalToLp_eq eta _ _ hB T]
    rw [show elementaryItoTerminalToLp (commonRefinementRightProcess eta xi) hB T =
        terminalToLp xi hB by
          exact refineDyadic_terminalToLp_eq xi _ _ hB T]
  calc
    eLpNorm (elementaryItoIntegral (commonDifference eta xi) B T) 2 mu =
        ‖elementaryItoTerminalToLp (commonDifference eta xi) hB T‖ₑ :=
      (Lp.enorm_toLp
        (elementaryItoIntegral_memLp_two (commonDifference eta xi) hB T)).symm
    _ = ‖terminalToLp eta hB - terminalToLp xi hB‖ₑ := by rw [hterminal]
    _ = ‖processToLp eta hB - processToLp xi hB‖ₑ := by
      rw [← ofReal_norm, ← ofReal_norm]
      exact congrArg ENNReal.ofReal (norm_terminal_sub_eq_process_sub eta xi hB)

/-- Finite-grid Doob control for an elementary Ito martingale. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.doobL2_elementaryItoProcess Compiled Not mapped

- Finite-grid Doob control for an elementary Ito martingale.

theorem doobL2_elementaryItoProcess
    (eta : ElementaryAdaptedProcess filtration n)
    (hB : IsBrownianMotionWithFiltration B filtration mu)
    (T : ℝ≥0) (level : ℕ) :
    eLpNorm
        (runningAbsMax
          (fun k => elementaryItoProcess eta B T (dyadicObservationTime T level k))
          (2 ^ level)) 2 mu ≤
      2 * eLpNorm (elementaryItoIntegral eta B T) 2 mu := by
  let _ : IsProbabilityMeasure mu := hB.isProbabilityMeasure
  have h := doobL2_sampled (elementaryItoProcess_martingale eta hB T)
    (dyadicObservationTime T level) (dyadicObservationTime_monotone T level) (2 ^ level)
  simpa only [dyadicObservationTime_terminal, elementaryItoProcess_terminal] using h

/-- Finite-grid Doob control for the difference of two heterogeneous dyadic
elementary Ito processes. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.ElementaryItoDoobL2.doobL2_elementaryItoProcess_sub Compiled Not mapped

- Finite-grid Doob control for the difference of two heterogeneous dyadic elementary Ito processes.

theorem doobL2_elementaryItoProcess_sub
    (eta xi : DyadicElementaryProcess filtration T)
    (hB : IsBrownianMotionWithFiltration B filtration mu)
    (level : ℕ) :
    eLpNorm
        (runningAbsMax
          (fun k => elementaryItoProcess eta.process B T
              (dyadicObservationTime T level k) -
            elementaryItoProcess xi.process B T
              (dyadicObservationTime T level k))
          (2 ^ level)) 2 mu ≤
      2 * eLpNorm
        (fun omega => elementaryItoIntegral eta.process B T omega -
          elementaryItoIntegral xi.process B T omega) 2 mu := by
  have h := doobL2_elementaryItoProcess (commonDifference eta xi) hB T level
  have hprocess :
      (fun k => elementaryItoProcess (commonDifference eta xi) B T
        (dyadicObservationTime T level k)) =
      (fun k => elementaryItoProcess eta.process B T
          (dyadicObservationTime T level k) -
        elementaryItoProcess xi.process B T
          (dyadicObservationTime T level k)) := by
    funext k omega
    exact elementaryItoProcess_commonDifference eta xi B T _ omega
  have hterminal : elementaryItoIntegral (commonDifference eta xi) B T =
      fun omega => elementaryItoIntegral eta.process B T omega -
        elementaryItoIntegral xi.process B T omega := by
    funext omega
    exact elementaryItoIntegral_commonDifference eta xi B T omega
  rwa [hprocess, hterminal] at h

end ElementaryItoDoobL2
end StochasticProcesses
end TechnicalLemmas
end AutoSamplingTheory