Samplinglib
Lean gate passed 2026-08-19T06:32:39.895922+00:00 · 7bcd37294df1
production module

AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.RandomStoppingL2Contraction

5 named declarations scanned from AutoSamplingTheory/TechnicalLemmas/StochasticProcesses/RandomStoppingL2Contraction.lean.

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

Declarations

def AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.RandomStoppingL2Contraction.stoppingSet Compiled Not mapped

- Product-space event on which a closed stopped integrand is active.

def stoppingSet (tau : Omega → WithTop ℝ≥0) : Set (Omega × ℝ≥0) :=
  {z | (z.2 : WithTop ℝ≥0) ≤ tau z.1}

/-- Chewi's closed stopped integrand is literally multiplication by the
product-space stopping indicator. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.RandomStoppingL2Contraction.processFunction_stoppedIntegrand_eq_indicator Compiled Not mapped

- Chewi's closed stopped integrand is literally multiplication by the product-space stopping indicator.

theorem processFunction_stoppedIntegrand_eq_indicator
    (eta : ℝ≥0 → Omega → ℝ) (tau : Omega → WithTop ℝ≥0) :
    processFunction (stoppedIntegrand eta tau) =
      (stoppingSet tau).indicator (processFunction eta) := by
  funext z
  by_cases h : (z.2 : WithTop ℝ≥0) ≤ tau z.1
  · have hz : z ∈ stoppingSet tau := by
      simpa only [stoppingSet, Set.mem_ofPred_eq] using h
    rw [Set.indicator_of_mem hz]
    simp only [processFunction, stoppedIntegrand, if_pos h]
  · have hz : z ∉ stoppingSet tau := by
      simpa only [stoppingSet, Set.mem_ofPred_eq] using h
    rw [show (stoppingSet tau).indicator (processFunction eta) z = 0 by
      simp [Set.indicator, hz]]
    change (if (z.2 : WithTop ℝ≥0) ≤ tau z.1 then eta z.2 z.1 else 0) = 0
    rw [if_neg h]

/-- **Stopping contraction.**  Any two already-constructed closed stopped
representatives are no farther apart in product-space `L²` than their original
integrands. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.RandomStoppingL2Contraction.norm_stopped_sub_le Compiled Not mapped

Stopping contraction. Any two already-constructed closed stopped representatives are no farther apart in product-space `L²` than their original integrands.

theorem norm_stopped_sub_le
    (eta xi etaStop xiStop : ProgressiveL2Integrand filtration mu T)
    (tau : Omega → WithTop ℝ≥0)
    (hetaStop :
      processFunction etaStop.process =ᵐ[processTimeMeasure mu T]
        processFunction (stoppedIntegrand eta.process tau))
    (hxiStop :
      processFunction xiStop.process =ᵐ[processTimeMeasure mu T]
        processFunction (stoppedIntegrand xi.process tau)) :
    ‖etaStop.toLp - xiStop.toLp‖ ≤ ‖eta.toLp - xi.toLp‖ := by
  rw [← toLp_sub etaStop xiStop, ← toLp_sub eta xi]
  simp only [ProgressiveL2Integrand.toLp, Lp.norm_toLp]
  apply ENNReal.toReal_mono (sub eta xi).memLp.2.ne
  have hEq :
      processFunction (sub etaStop xiStop).process =ᵐ[processTimeMeasure mu T]
        (stoppingSet tau).indicator (processFunction (sub eta xi).process) := by
    filter_upwards [hetaStop, hxiStop] with z heta hxi
    have heta' : etaStop.process z.2 z.1 =
        stoppedIntegrand eta.process tau z.2 z.1 := heta
    have hxi' : xiStop.process z.2 z.1 =
        stoppedIntegrand xi.process tau z.2 z.1 := hxi
    simp only [sub_process, Pi.sub_apply, processFunction]
    rw [heta', hxi']
    by_cases hactive : (z.2 : WithTop ℝ≥0) ≤ tau z.1
    · have hz : z ∈ stoppingSet tau := by
        simpa only [stoppingSet, Set.mem_ofPred_eq] using hactive
      rw [Set.indicator_of_mem hz]
      simp only [stoppedIntegrand, if_pos hactive, processFunction, Pi.sub_apply]
    · have hz : z ∉ stoppingSet tau := by
        simpa only [stoppingSet, Set.mem_ofPred_eq] using hactive
      rw [show (stoppingSet tau).indicator
          (processFunction (eta.process - xi.process)) z = 0 by
        simp [Set.indicator, hz]]
      change
        (if (z.2 : WithTop ℝ≥0) ≤ tau z.1 then eta.process z.2 z.1 else 0) -
            (if (z.2 : WithTop ℝ≥0) ≤ tau z.1 then xi.process z.2 z.1 else 0) = 0
      rw [if_neg hactive, if_neg hactive]
      exact sub_self 0
  rw [eLpNorm_congr_ae hEq]
  exact eLpNorm_indicator_le _

/-- Specialization of the contraction to a dyadic elementary approximant and
its legal closed random stop. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.RandomStoppingL2Contraction.norm_stoppedElementary_sub_target_le Compiled Not mapped

- Specialization of the contraction to a dyadic elementary approximant and its legal closed random stop.

theorem norm_stoppedElementary_sub_target_le [IsFiniteMeasure mu]
    (eta target : ProgressiveL2Integrand filtration mu T)
    (q : DyadicElementaryProcess filtration T)
    (tau : Omega → ℝ≥0)
    (htau : StoppingTime.IsChewiStoppingTime filtration
      (fun omega => (tau omega : WithTop ℝ≥0)))
    (htauT : ∀ omega, tau omega ≤ T)
    (htarget :
      processFunction target.process =ᵐ[processTimeMeasure mu T]
        processFunction (stoppedIntegrand eta.process
          (fun w => (tau w : WithTop ℝ≥0)))) :
    ‖(stoppedProgressiveL2 (mu := mu) q tau htau htauT).toLp - target.toLp‖ ≤
      ‖q.toLp mu - eta.toLp‖ := by
  let qL2 := toProgressiveL2 q.process mu T
  let qStop := stoppedProgressiveL2 (mu := mu) q tau htau htauT
  have hqStop :
      processFunction qStop.process =ᵐ[processTimeMeasure mu T]
        processFunction (stoppedIntegrand qL2.process
          (fun w => (tau w : WithTop ℝ≥0))) := by
    filter_upwards [] with z
    simp [qStop, qL2, processFunction]
  have hcontract := norm_stopped_sub_le qL2 eta qStop target
    (fun w => (tau w : WithTop ℝ≥0)) hqStop htarget
  simpa only [qL2, qStop, DyadicElementaryProcess.toLp,
    ProgressiveL2Integrand.toLp] using hcontract

/-- Closed stopping preserves convergence of the canonical elementary density
sequence.  This is the analytic extension step needed before stochastic
integration can be commuted with a bounded random stopping time for an arbitrary
progressive `L²` integrand. -/
theorem AutoSamplingTheory.TechnicalLemmas.StochasticProcesses.RandomStoppingL2Contraction.tendsto_stoppedCanonicalApprox_toLp Compiled Not mapped

- Closed stopping preserves convergence of the canonical elementary density sequence. This is the analytic extension step needed before stochastic integration can be commuted with a bounded random stopping time for an arbitrary progressive `L²` integrand.

theorem tendsto_stoppedCanonicalApprox_toLp [IsFiniteMeasure mu]
    (eta target : ProgressiveL2Integrand filtration mu T)
    (hT : 0 < T)
    (tau : Omega → ℝ≥0)
    (htau : StoppingTime.IsChewiStoppingTime filtration
      (fun omega => (tau omega : WithTop ℝ≥0)))
    (htauT : ∀ omega, tau omega ≤ T)
    (htarget :
      processFunction target.process =ᵐ[processTimeMeasure mu T]
        processFunction (stoppedIntegrand eta.process
          (fun w => (tau w : WithTop ℝ≥0)))) :
    Tendsto
      (fun n =>
        (stoppedProgressiveL2 (mu := mu)
          (canonicalElementaryApprox eta hT n) tau htau htauT).toLp)
      atTop (𝓝 target.toLp) := by
  apply tendsto_iff_norm_sub_tendsto_zero.mpr
  apply squeeze_zero
    (fun n => norm_nonneg
      ((stoppedProgressiveL2 (mu := mu)
        (canonicalElementaryApprox eta hT n) tau htau htauT).toLp - target.toLp))
    (fun n => norm_stoppedElementary_sub_target_le eta target
      (canonicalElementaryApprox eta hT n) tau htau htauT htarget)
  exact tendsto_iff_norm_sub_tendsto_zero.mp
    (tendsto_canonicalElementaryApprox_toLp eta hT)

end RandomStoppingL2Contraction
end StochasticProcesses
end TechnicalLemmas
end AutoSamplingTheory