Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Bielecki norm and drift estimates for Picard iteration

Definition
KLSModular_LevyStochCalc_Ito_PicardBieleckiNorm

by Lazyfill · Oct 25, 2026 · Mathlib 0df444a (Lean v4.33.1)

functional-inequalitiesklskls-conjecturekls-modularlog-concavemodule-contextvendored-levystochcalc

Vendored from the LevyStochCalc library (https://github.com/cgarryZA/LevyStochCalc). bieleckiNorm β T X is the supremum over t∈[0,T]t\in[0,T]t∈[0,T] of ofReal⁡(e−βt)\operatorname{ofReal}(e^{-\beta t})ofReal(e−βt) times the square root of the PPP-lintegral of the coordinate-square energy of XtX_tXt​, with values in [0,∞][0,\infty][0,∞] and no factor of 1/21/21/2. SBoundedProcess consists of jointly measurable, progressively measurable, almost-surely càdlàg Fin n→R\mathrm{Fin}\,n\to\mathbb{R}Finn→R-valued processes with finite norm at weight 000; SBoundedProcess.stop freezes such a process at TTT without changing its norm. The bundle also defines the drift component picardStep_drift and proves its algebraic, componentwise L1L^1L1, and componentwise squared L2L^2L2 bounds, along with the finite-window Cauchy–Schwarz inequality.

Original module imports

import LevyStochCalc.Ito.Setting

Original declaration excerpt

Shown in the original module context.

noncomputable def bieleckiNorm
    {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    (β T : ℝ) (X : ℝ → Ω → (Fin n → ℝ)) : ℝ≥0∞ :=
  ⨆ t ∈ Set.Icc (0 : ℝ) T,
    ENNReal.ofReal (Real.exp (-β * t)) *
      (∫⁻ ω, (∑ i, (‖X t ω i‖₊ : ℝ≥0∞) ^ 2) ∂P) ^ (1/2 : ℝ)

Module navigation

Direct project imports: LevyStochCalc/Ito/Setting.

Project result: The KLS conjecture.

Original module · LevyStochCalc.Ito.PicardBieleckiNorm · Frozen source 408915f.

Definition code
import Definitions.Def_KLSModular_LevyStochCalc_Ito_Setting

/-
Copyright (c) 2026 Christian Garry. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Christian Garry
-/
-- Vendored from https://github.com/cgarryZA/LevyStochCalc at commit 984dbf0b790031eac05d56fe5a84b65e15e1e932 (upstream path LevyStochCalc/Ito/PicardBieleckiNorm.lean; Apache-2.0; provenance in formalization/vendor/vendor-lock.json of the KLS repository)
open MeasureTheory ProbabilityTheory
open scoped NNReal ENNReal
namespace LevyStochCalc
namespace Ito
namespace Picard
universe u v
variable {Ω : Type u} [MeasurableSpace Ω]
variable {E : Type v} [MeasurableSpace E]
/-- The Bielecki-weighted L² norm of a process `X : ℝ → Ω → (Fin n → ℝ)`
on `[0, T]`:

  `‖X‖_β,T := sup_{t ∈ [0, T]} e^{-βt} · (E[‖X_t‖²])^{1/2}`.

For `β = 0` this is the standard `S²` norm; for `β > 0` it is
equivalent to `S²` but absorbs the Grönwall constant in the Picard
contraction estimate. -/
noncomputable def bieleckiNorm
    {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    (β T : ℝ) (X : ℝ → Ω → (Fin n → ℝ)) : ℝ≥0∞ :=
  ⨆ t ∈ Set.Icc (0 : ℝ) T,
    ENNReal.ofReal (Real.exp (-β * t)) *
      (∫⁻ ω, (∑ i, (‖X t ω i‖₊ : ℝ≥0∞) ^ 2) ∂P) ^ (1/2 : ℝ)
/-- The space of jointly measurable, `ℱ`-progressively measurable, almost-surely càdlàg
processes on `[0, T]` with values in `Fin n → ℝ` and finite Bielecki norm at weight `0`.

One difference from the literature's `S²([0, T]; ℝⁿ)`, recorded in the section note "The
`IsRegular` hypothesis and the `S²` norm" of `Ito/PicardSpace.lean`: the norm here is
`bieleckiNorm`, the weighted supremum over `t` of the `L²` norms, rather than the `L²` norm of
the supremum. -/
structure SBoundedProcess
    {n : ℕ} (P : Measure Ω) [IsProbabilityMeasure P]
    (ℱ : MeasureTheory.Filtration ℝ ‹MeasurableSpace Ω›) (T : ℝ) where
  /-- The path map. -/
  X : ℝ → Ω → (Fin n → ℝ)
  /-- Joint measurability in `(t, ω)`. -/
  measurable_path : Measurable (Function.uncurry X)
  /-- Each coordinate is progressively measurable for `ℱ`. -/
  adapted : ∀ i : Fin n, Probability.ProgressivelyMeasurable ℱ (fun ω s => X s ω i)
  /-- Almost-sure càdlàg paths. -/
  cadlag_paths : ∀ᵐ ω ∂P, ∀ t : ℝ,
    Filter.Tendsto (fun s => X s ω) (nhdsWithin t (Set.Ioi t)) (nhds (X t ω))
      ∧ ∀ i : Fin n, ∃ L : ℝ,
          Filter.Tendsto (fun s => X s ω i) (nhdsWithin t (Set.Iio t)) (nhds L)
  /-- Finite Bielecki-norm at the standard weight `β = 0`. -/
  sup_L2 : bieleckiNorm (P := P) 0 T X < ⊤
/-- Freezing a process at the horizon does not change its Bielecki norm on `[0, T]`, since the
supremum runs over times at which the two processes agree. -/
theorem bieleckiNorm_min {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P] (β T : ℝ)
    (X : ℝ → Ω → (Fin n → ℝ)) :
    bieleckiNorm (P := P) β T (fun s ω => X (min s T) ω) = bieleckiNorm (P := P) β T X := by
  unfold bieleckiNorm
  refine iSup_congr fun t => iSup_congr fun ht => ?_
  simp only [min_eq_left ht.2]
/-- The Bielecki norm at weight `0` bounds the `L²` slice energy at every time of the window,
for any path map. -/
theorem lintegral_sq_le_bieleckiNorm_sq_raw {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    {T : ℝ} (Z : ℝ → Ω → (Fin n → ℝ)) {u : ℝ} (hu : u ∈ Set.Icc (0 : ℝ) T) :
    (∫⁻ ω, ∑ i, (‖Z u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P)
      ≤ (bieleckiNorm (P := P) 0 T Z) ^ (2 : ℕ) := by
  have hle : (∫⁻ ω, ∑ i, (‖Z u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ^ (1 / 2 : ℝ)
      ≤ bieleckiNorm (P := P) 0 T Z := by
    unfold bieleckiNorm
    refine le_trans (le_of_eq ?_)
      (le_iSup₂ (f := fun t (_ : t ∈ Set.Icc (0 : ℝ) T) =>
        ENNReal.ofReal (Real.exp (-0 * t))
          * (∫⁻ ω, ∑ i, (‖Z t ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ^ (1 / 2 : ℝ)) u hu)
    simp
  calc (∫⁻ ω, ∑ i, (‖Z u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P)
      = ((∫⁻ ω, ∑ i, (‖Z u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ^ (1 / 2 : ℝ)) ^ (2 : ℕ) := by
        rw [← ENNReal.rpow_natCast _ 2, ← ENNReal.rpow_mul]
        norm_num
    _ ≤ (bieleckiNorm (P := P) 0 T Z) ^ (2 : ℕ) := pow_le_pow_left' hle 2
/-- The doubly-integrated energy of a path map frozen at the horizon, over any window. -/
theorem lintegral_lintegral_sq_stopOf_le {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    (T : ℝ) (Z : ℝ → Ω → (Fin n → ℝ)) (hZm : Measurable (Function.uncurry Z)) (hT : 0 ≤ T)
    (T' : ℝ) :
    ∫⁻ ω, ∫⁻ s in Set.Icc (0 : ℝ) T',
        ∑ i, (‖Z (min s T) ω i‖₊ : ℝ≥0∞) ^ 2 ∂volume ∂P
      ≤ ENNReal.ofReal T' * (bieleckiNorm (P := P) 0 T Z) ^ (2 : ℕ) := by
  have hZi : ∀ i : Fin n, Measurable fun p : Ω × ℝ => Z (min p.2 T) p.1 i := fun i =>
    (measurable_pi_apply i).comp
      (hZm.comp ((measurable_snd.min measurable_const).prodMk measurable_fst))
  have hjoint : Measurable (Function.uncurry fun (ω : Ω) (s : ℝ) =>
      ∑ i, (‖Z (min s T) ω i‖₊ : ℝ≥0∞) ^ 2) :=
    Finset.measurable_sum _ fun i _ =>
      (ENNReal.continuous_coe.measurable.comp (hZi i).nnnorm).pow_const 2
  rw [MeasureTheory.lintegral_lintegral_swap (μ := P)
    (ν := volume.restrict (Set.Icc (0 : ℝ) T'))
    (f := fun (ω : Ω) (s : ℝ) => ∑ i, (‖Z (min s T) ω i‖₊ : ℝ≥0∞) ^ 2) hjoint.aemeasurable]
  calc ∫⁻ s in Set.Icc (0 : ℝ) T',
        (∫⁻ ω, ∑ i, (‖Z (min s T) ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ∂volume
      ≤ ∫⁻ _s in Set.Icc (0 : ℝ) T',
          (bieleckiNorm (P := P) 0 T Z) ^ (2 : ℕ) ∂volume :=
        MeasureTheory.setLIntegral_mono' measurableSet_Icc
          (fun s hs => lintegral_sq_le_bieleckiNorm_sq_raw Z ⟨le_min hs.1 hT, min_le_right s T⟩)
    _ = (bieleckiNorm (P := P) 0 T Z) ^ (2 : ℕ) * volume (Set.Icc (0 : ℝ) T') :=
        MeasureTheory.setLIntegral_const _ _
    _ = ENNReal.ofReal T' * (bieleckiNorm (P := P) 0 T Z) ^ (2 : ℕ) := by
        rw [Real.volume_Icc, sub_zero, mul_comm]
namespace SBoundedProcess
/-- **The deterministic-time freeze.** `X.stop` is `X` on `[0, T]` and constant at `X T`
afterwards. It has the same Bielecki norm on `[0, T]`, and its `L²` bounds hold at every
horizon, which is what the Picard step's integrand hypotheses need. -/
noncomputable def stop {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    {ℱ : MeasureTheory.Filtration ℝ ‹MeasurableSpace Ω›} {T : ℝ}
    (X : SBoundedProcess (n := n) P ℱ T) : SBoundedProcess (n := n) P ℱ T where
  X s ω := X.X (min s T) ω
  measurable_path :=
    X.measurable_path.comp ((measurable_fst.min measurable_const).prodMk measurable_snd)
  adapted i := (X.adapted i).minTime T
  cadlag_paths := by
    filter_upwards [X.cadlag_paths] with ω hω
    intro t
    refine ⟨?_, ?_⟩
    · rcases lt_or_ge t T with ht | ht
      · have hXt : X.X (min t T) ω = X.X t ω := by rw [min_eq_left ht.le]
        have hev : (fun s => X.X s ω) =ᶠ[nhdsWithin t (Set.Ioi t)]
            fun s => X.X (min s T) ω := by
          filter_upwards [nhdsWithin_le_nhds (IsOpen.mem_nhds isOpen_Iio ht)] with s hs
          rw [min_eq_left (le_of_lt hs)]
        rw [hXt]
        exact ((hω t).1).congr' hev
      · have hXt : X.X (min t T) ω = X.X T ω := by rw [min_eq_right ht]
        have hev : (fun _ : ℝ => X.X T ω) =ᶠ[nhdsWithin t (Set.Ioi t)]
            fun s => X.X (min s T) ω := by
          filter_upwards [self_mem_nhdsWithin] with s hs
          rw [min_eq_right (le_of_lt (lt_of_le_of_lt ht hs))]
        rw [hXt]
        exact tendsto_const_nhds.congr' hev
    · intro i
      rcases le_or_gt t T with ht | ht
      · obtain ⟨L, hL⟩ := (hω t).2 i
        refine ⟨L, hL.congr' ?_⟩
        filter_upwards [self_mem_nhdsWithin] with s hs
        rw [min_eq_left (le_of_lt (lt_of_lt_of_le hs ht))]
      · refine ⟨X.X T ω i, tendsto_const_nhds.congr' ?_⟩
        filter_upwards [nhdsWithin_le_nhds (IsOpen.mem_nhds isOpen_Ioi ht)] with s hs
        rw [min_eq_right (le_of_lt hs)]
  sup_L2 := by
    rw [bieleckiNorm_min]
    exact X.sup_L2
/-- The second moment at a single time of `[0, T]` is bounded by the squared Bielecki norm. -/
theorem lintegral_sq_le_bieleckiNorm_sq {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    {ℱ : MeasureTheory.Filtration ℝ ‹MeasurableSpace Ω›} {T : ℝ}
    (Y : SBoundedProcess (n := n) P ℱ T) {u : ℝ} (hu : u ∈ Set.Icc (0 : ℝ) T) :
    (∫⁻ ω, ∑ i, (‖Y.X u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P)
      ≤ (bieleckiNorm (P := P) 0 T Y.X) ^ (2 : ℕ) := by
  have hle : (∫⁻ ω, ∑ i, (‖Y.X u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ^ (1 / 2 : ℝ)
      ≤ bieleckiNorm (P := P) 0 T Y.X := by
    unfold bieleckiNorm
    refine le_trans (le_of_eq ?_)
      (le_iSup₂ (f := fun t (_ : t ∈ Set.Icc (0 : ℝ) T) =>
        ENNReal.ofReal (Real.exp (-0 * t))
          * (∫⁻ ω, ∑ i, (‖Y.X t ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ^ (1 / 2 : ℝ)) u hu)
    simp
  calc (∫⁻ ω, ∑ i, (‖Y.X u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P)
      = ((∫⁻ ω, ∑ i, (‖Y.X u ω i‖₊ : ℝ≥0∞) ^ 2 ∂P) ^ (1 / 2 : ℝ)) ^ (2 : ℕ) := by
        rw [← ENNReal.rpow_natCast _ 2, ← ENNReal.rpow_mul]
        norm_num
    _ ≤ (bieleckiNorm (P := P) 0 T Y.X) ^ (2 : ℕ) := pow_le_pow_left' hle 2
/-- **The frozen process is `L²`-bounded at every nonnegative time**, not only on `[0, T]` —
this is what the Picard step's integrand hypotheses need at horizons beyond `T`. -/
theorem lintegral_sq_stop_le {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    {ℱ : MeasureTheory.Filtration ℝ ‹MeasurableSpace Ω›} {T : ℝ}
    (Y : SBoundedProcess (n := n) P ℱ T) (hT : 0 ≤ T) {s : ℝ} (hs : 0 ≤ s) :
    (∫⁻ ω, ∑ i, (‖Y.stop.X s ω i‖₊ : ℝ≥0∞) ^ 2 ∂P)
      ≤ (bieleckiNorm (P := P) 0 T Y.X) ^ (2 : ℕ) :=
  Y.lintegral_sq_le_bieleckiNorm_sq ⟨le_min hs hT, min_le_right s T⟩
@[simp] theorem stop_apply {n : ℕ} {P : Measure Ω} [IsProbabilityMeasure P]
    {ℱ : MeasureTheory.Filtration ℝ ‹MeasurableSpace Ω›} {T : ℝ}
    (X : SBoundedProcess (n := n) P ℱ T) (s : ℝ) (ω : Ω) :
    X.stop.X s ω = X.X (min s T) ω := rfl
end SBoundedProcess
/-- **The Picard map step.** Given a candidate process `X` and the
coefficients `(μ, σ, γ)`, the next iterate is

  `Φ X : t ↦ x_0 + ∫_0^t μ(s, X_s) ds + ∫_0^t σ(s, X_s) dW_s
      + ∫_0^t ∫_E γ(s, X_s, e) Ñ(ds, de)`.

This is the actual Picard map — not a placeholder. The integrands
require joint measurability + adaptedness hypotheses on `X` together
with measurability of the coefficient functions; these are bundled as
explicit hypotheses to keep the map well-typed.

For now we provide ONLY the drift component `∫_0^t μ(s, X_s) ds`; the
Brownian and compensated-Poisson integral components require
additional measurability bundling that is built up in subsequent
lemmas. -/
noncomputable def picardStep_drift
    {n d : ℕ}
    (coeffs : LevyStochCalc.Ito.Setting.JumpDiffusionCoeffs n d E)
    (X : ℝ → Ω → (Fin n → ℝ))
    (x₀ : Fin n → ℝ)
    (t : ℝ) (ω : Ω) : Fin n → ℝ :=
  x₀ + fun i => ∫ s in Set.Icc (0 : ℝ) t, coeffs.μ s (X s ω) i
omit [MeasurableSpace Ω] [MeasurableSpace E] in
/-- **Per-component pointwise drift difference identity.** For any two
candidates `X, Y`, the difference of drift components is the Bochner
integral of the per-component drift-coefficient difference:

  `(drift X x₀ t ω - drift Y x₀ t ω) i
    = ∫ s in [0, t], (μ s (X s ω) i - μ s (Y s ω) i) ds`.

This is just the algebraic identity that `picardStep_drift` cancels the
common `x₀` and pulls the integral subtraction componentwise — no
analytic content yet, but a load-bearing intermediate. -/
lemma picardStep_drift_diff
    {n d : ℕ}
    (coeffs : LevyStochCalc.Ito.Setting.JumpDiffusionCoeffs n d E)
    (X Y : ℝ → Ω → (Fin n → ℝ))
    (x₀ : Fin n → ℝ)
    (t : ℝ) (ω : Ω) (i : Fin n)
    -- Integrability of each side (needed for `integral_sub`):
    (h_X_int : MeasureTheory.IntegrableOn (fun s => coeffs.μ s (X s ω) i)
      (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    (h_Y_int : MeasureTheory.IntegrableOn (fun s => coeffs.μ s (Y s ω) i)
      (Set.Icc (0 : ℝ) t) MeasureTheory.volume) :
    (picardStep_drift (E := E) coeffs X x₀ t ω - picardStep_drift coeffs Y x₀ t ω) i
      = ∫ s in Set.Icc (0 : ℝ) t,
          (coeffs.μ s (X s ω) i - coeffs.μ s (Y s ω) i) := by
  unfold picardStep_drift
  -- LHS = ((x₀ + (fun i => ∫ ... μ(X) i)) - (x₀ + (fun i => ∫ ... μ(Y) i))) i
  --     = (∫ ... μ(X) i - ∫ ... μ(Y) i)  by add_sub_add_cancel
  --     = ∫ ... (μ(X) i - μ(Y) i)        by integral_sub
  simp only [Pi.add_apply, Pi.sub_apply, add_sub_add_left_eq_sub]
  exact (MeasureTheory.integral_sub h_X_int h_Y_int).symm
omit [MeasurableSpace Ω] [MeasurableSpace E] in
/-- **Per-component pointwise L¹ Lipschitz bound on the drift step.**

For Lipschitz μ with rate `L_μ` componentwise, the i-th component of
the drift-step difference is bounded by the time-integral of the
componentwise difference:

  `|(drift X x₀ t ω - drift Y x₀ t ω) i|
    ≤ ∫ s in [0, t], |μ s (X s ω) i - μ s (Y s ω) i|`. -/
lemma picardStep_drift_diff_componentwise_norm_bound
    {n d : ℕ}
    (coeffs : LevyStochCalc.Ito.Setting.JumpDiffusionCoeffs n d E)
    (X Y : ℝ → Ω → (Fin n → ℝ))
    (x₀ : Fin n → ℝ)
    (t : ℝ) (ω : Ω) (i : Fin n)
    (h_X_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (X s ω) i) (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    (h_Y_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (Y s ω) i) (Set.Icc (0 : ℝ) t) MeasureTheory.volume) :
    |(picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i|
      ≤ ∫ s in Set.Icc (0 : ℝ) t,
          |coeffs.μ s (X s ω) i - coeffs.μ s (Y s ω) i| := by
  rw [picardStep_drift_diff coeffs X Y x₀ t ω i h_X_int h_Y_int]
  -- |∫ f| ≤ ∫ |f| via MeasureTheory.norm_integral_le_integral_norm specialized to ℝ.
  have h_sub_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (X s ω) i - coeffs.μ s (Y s ω) i)
      (Set.Icc (0 : ℝ) t) MeasureTheory.volume := h_X_int.sub h_Y_int
  -- For ℝ-valued integrand, ‖x‖ = |x|, so norm_integral_le_integral_norm gives
  -- |∫ f| ≤ ∫ |f|. The lemma is stated for normed groups; |·| is the ℝ-norm.
  have h := MeasureTheory.norm_integral_le_integral_norm
    (μ := MeasureTheory.volume.restrict (Set.Icc (0 : ℝ) t))
    (f := fun s => coeffs.μ s (X s ω) i - coeffs.μ s (Y s ω) i)
  -- ‖·‖ on ℝ is |·|, so the goal matches after rewriting.
  simpa [Real.norm_eq_abs] using h
omit [MeasurableSpace Ω] [MeasurableSpace E] in
/-- **Per-component Lipschitz bound on the drift step.**

Using the per-component Lipschitz hypothesis on `μ`, the i-th component
of the drift difference is bounded by `L_μ * ∫_0^t ‖X_s - Y_s‖ ds`:

  `|(drift X x₀ t ω - drift Y x₀ t ω) i|
    ≤ L_μ · ∫ s in [0, t], ‖X s ω - Y s ω‖`.

This is the operator-level statement that feeds the Bielecki-norm
contraction. -/
lemma picardStep_drift_diff_lipschitz_componentwise
    {n d : ℕ}
    (coeffs : LevyStochCalc.Ito.Setting.JumpDiffusionCoeffs n d E)
    {L_μ : ℝ} (_hL_μ_nn : 0 ≤ L_μ)
    -- Per-component Lipschitz on μ: |μ s x₁ i - μ s x₂ i| ≤ L_μ · ‖x₁ - x₂‖.
    (h_μ_lip : ∀ s : ℝ, ∀ x₁ x₂ : Fin n → ℝ, ∀ i : Fin n,
      |coeffs.μ s x₁ i - coeffs.μ s x₂ i| ≤ L_μ * ‖x₁ - x₂‖)
    (X Y : ℝ → Ω → (Fin n → ℝ))
    (x₀ : Fin n → ℝ)
    (t : ℝ) (ω : Ω) (i : Fin n)
    (h_X_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (X s ω) i) (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    (h_Y_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (Y s ω) i) (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    -- And the integrand ‖X_s - Y_s‖ must itself be integrable for the RHS
    -- bound's `mul_integral` rewrite to be valid:
    (h_XY_diff_int : MeasureTheory.IntegrableOn
      (fun s => ‖X s ω - Y s ω‖) (Set.Icc (0 : ℝ) t) MeasureTheory.volume) :
    |(picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i|
      ≤ L_μ * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ := by
  -- Chain the two preceding bounds:
  -- |·| ≤ ∫ |μ(X) i - μ(Y) i|        (norm_integral_le_integral_norm)
  --     ≤ ∫ L_μ * ‖X - Y‖             (Lipschitz, integral monotonicity)
  --     = L_μ * ∫ ‖X - Y‖             (constant pull-out)
  refine (picardStep_drift_diff_componentwise_norm_bound
    coeffs X Y x₀ t ω i h_X_int h_Y_int).trans ?_
  -- Now goal: ∫ |μ(X) i - μ(Y) i| ≤ L_μ * ∫ ‖X - Y‖.
  -- Use integral_mono_of_nonneg or set_integral_mono after rewriting RHS as integral.
  rw [show L_μ * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖
        = ∫ s in Set.Icc (0 : ℝ) t, L_μ * ‖X s ω - Y s ω‖ from
      (MeasureTheory.integral_const_mul L_μ _).symm]
  -- Integral monotonicity. Need: integrability of both integrands + pointwise ≤.
  refine MeasureTheory.setIntegral_mono_on ?_ ?_
    measurableSet_Icc (fun s _ => h_μ_lip s (X s ω) (Y s ω) i)
  · -- LHS integrable: |μ(X) i - μ(Y) i| ∈ L¹.
    exact (h_X_int.sub h_Y_int).abs
  · -- RHS integrable: L_μ * ‖X - Y‖ ∈ L¹.
    exact h_XY_diff_int.const_mul L_μ
omit [MeasurableSpace Ω] [MeasurableSpace E] in
/-- **L² Cauchy-Schwarz on `[0, t]`.** For non-negative `L²` function `f`,

  `(∫ s in [0, t], f s)² ≤ t · ∫ s in [0, t], (f s)²`.

Derivation: view `f` and the constant `1` as elements of
`L²(volume.restrict [0,t])`. The `L²` inner product is `⟨f, 1⟩ = ∫ f`,
the `L²`-norms are `‖f‖_2 = √(∫ f²)` and `‖1‖_2 = √t`, and Cauchy-
Schwarz gives `(∫ f)² ≤ (∫ f²) · t`. -/
lemma integral_sq_le_mul_integral_sq_on_Icc
    (f : ℝ → ℝ) (t : ℝ) (ht : 0 ≤ t)
    (hf_nn : ∀ᵐ s ∂(MeasureTheory.volume.restrict (Set.Icc (0 : ℝ) t)), 0 ≤ f s)
    (hf_L2 : MeasureTheory.MemLp f 2
      (MeasureTheory.volume.restrict (Set.Icc (0 : ℝ) t))) :
    (∫ s in Set.Icc (0 : ℝ) t, f s) ^ 2
      ≤ t * ∫ s in Set.Icc (0 : ℝ) t, (f s) ^ 2 := by
  set μ : MeasureTheory.Measure ℝ := MeasureTheory.volume.restrict (Set.Icc (0 : ℝ) t)
  -- Constant function 1 ∈ L²(μ) since μ is finite.
  have h_one_L2 : MeasureTheory.MemLp (1 : ℝ → ℝ) 2 μ := MeasureTheory.memLp_const 1
  have h_one_nn : (0 : ℝ → ℝ) ≤ᵐ[μ] 1 :=
    Filter.Eventually.of_forall (fun _ => zero_le_one)
  have h2c : Real.HolderConjugate 2 2 := ⟨by norm_num, by norm_num, by norm_num⟩
  -- Convert MemLp 2 to MemLp (ENNReal.ofReal 2) for Hölder API.
  have hf_L2' : MeasureTheory.MemLp f (ENNReal.ofReal 2) μ := by
    rwa [show ENNReal.ofReal 2 = (2 : ℝ≥0∞) by norm_num]
  have h_one_L2' : MeasureTheory.MemLp (1 : ℝ → ℝ) (ENNReal.ofReal 2) μ := by
    rwa [show ENNReal.ofReal 2 = (2 : ℝ≥0∞) by norm_num]
  -- Hölder: ∫ f · 1 ≤ (∫ f²)^(1/2) · (∫ 1²)^(1/2).
  have h_holder := MeasureTheory.integral_mul_le_Lp_mul_Lq_of_nonneg
    (μ := μ) (p := 2) (q := 2) h2c hf_nn h_one_nn hf_L2' h_one_L2'
  -- LHS simplification: ∫ f · 1 = ∫ f.
  have h_lhs_eq : ∫ a, f a * (1 : ℝ → ℝ) a ∂μ = ∫ a, f a ∂μ := by
    refine MeasureTheory.integral_congr_ae (Filter.Eventually.of_forall fun a => ?_)
    change f a * (1 : ℝ → ℝ) a = f a
    rw [Pi.one_apply, mul_one]
  -- ∫ 1² = ∫ 1 = t.
  have h_one_sq_eq_one :
      ∫ a, ((1 : ℝ → ℝ) a) ^ 2 ∂μ = ∫ _a : ℝ, (1 : ℝ) ∂μ := by
    refine MeasureTheory.integral_congr_ae (Filter.Eventually.of_forall fun a => ?_)
    change ((1 : ℝ → ℝ) a) ^ 2 = (1 : ℝ)
    rw [Pi.one_apply, one_pow]
  have h_one_int : ∫ _a : ℝ, (1 : ℝ) ∂μ = t := by
    rw [MeasureTheory.integral_const]
    change (μ Set.univ).toReal • (1 : ℝ) = t
    rw [MeasureTheory.Measure.restrict_apply MeasurableSet.univ, Set.univ_inter,
      Real.volume_Icc, sub_zero, ENNReal.toReal_ofReal ht, smul_eq_mul, mul_one]
  have h_int_one_sq_eq_t : ∫ a, ((1 : ℝ → ℝ) a) ^ 2 ∂μ = t :=
    h_one_sq_eq_one.trans h_one_int
  rw [h_lhs_eq] at h_holder
  -- h_holder : ∫ f ≤ (∫ f²)^(1/2) · (∫ 1²)^(1/2).
  -- The `1 a ^ 2` in h_holder doesn't syntactically match my h_int_one_sq_eq_t LHS
  -- (Lean's elaboration of Pi.one_apply differs). Use calc directly with both.
  -- h_holder uses `^ (2 : ℝ)` (real exponent from HolderConjugate). Convert.
  have h_rpow_two_eq_sq : ∀ x : ℝ, x ^ (2 : ℝ) = x ^ 2 := by
    intro x
    rw [show (2 : ℝ) = ((2 : ℕ) : ℝ) from by norm_num, Real.rpow_natCast]
  have h_f_sq_conv : ∫ a, f a ^ (2 : ℝ) ∂μ = ∫ a, (f a) ^ 2 ∂μ :=
    MeasureTheory.integral_congr_ae (Filter.Eventually.of_forall fun a =>
      h_rpow_two_eq_sq (f a))
  have h_one_sq_conv : ∫ a, ((1 : ℝ → ℝ) a) ^ (2 : ℝ) ∂μ =
      ∫ a, ((1 : ℝ → ℝ) a) ^ 2 ∂μ :=
    MeasureTheory.integral_congr_ae (Filter.Eventually.of_forall fun a =>
      h_rpow_two_eq_sq _)
  have h_holder' : (∫ a, f a ∂μ) ≤
      (∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2) * t ^ ((1 : ℝ) / 2) := by
    have h_step1 : (∫ a, f a ^ (2 : ℝ) ∂μ) ^ ((1 : ℝ) / 2) =
        (∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2) := by rw [h_f_sq_conv]
    have h_step2 : (∫ a, ((1 : ℝ → ℝ) a) ^ (2 : ℝ) ∂μ) ^ ((1 : ℝ) / 2) =
        t ^ ((1 : ℝ) / 2) := by
      rw [h_one_sq_conv, h_int_one_sq_eq_t]
    calc (∫ a, f a ∂μ)
        ≤ (∫ a, f a ^ (2 : ℝ) ∂μ) ^ ((1 : ℝ) / 2) *
            (∫ a, ((1 : ℝ → ℝ) a) ^ (2 : ℝ) ∂μ) ^ ((1 : ℝ) / 2) := h_holder
      _ = (∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2) * t ^ ((1 : ℝ) / 2) := by
            rw [h_step1, h_step2]
  clear h_holder
  have h_LHS_nn : 0 ≤ ∫ a, f a ∂μ := MeasureTheory.integral_nonneg_of_ae hf_nn
  have h_sq_int_nn : 0 ≤ ∫ a, (f a) ^ 2 ∂μ :=
    MeasureTheory.integral_nonneg_of_ae <| by
      filter_upwards [hf_nn] with s _ using sq_nonneg _
  have h_squared := mul_self_le_mul_self h_LHS_nn h_holder'
  have h_rpow_half_sq : ∀ a : ℝ, 0 ≤ a → a ^ ((1 : ℝ) / 2) * a ^ ((1 : ℝ) / 2) = a := by
    intro a ha
    rw [← Real.rpow_add_of_nonneg ha
      (by norm_num : (0 : ℝ) ≤ 1 / 2) (by norm_num : (0 : ℝ) ≤ 1 / 2)]
    norm_num
  calc (∫ a, f a ∂μ) ^ 2
      = (∫ a, f a ∂μ) * (∫ a, f a ∂μ) := by ring
    _ ≤ ((∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2) * t ^ ((1 : ℝ) / 2)) *
        ((∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2) * t ^ ((1 : ℝ) / 2)) := h_squared
    _ = ((∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2) * (∫ a, (f a) ^ 2 ∂μ) ^ ((1 : ℝ) / 2)) *
        (t ^ ((1 : ℝ) / 2) * t ^ ((1 : ℝ) / 2)) := by ring
    _ = (∫ a, (f a) ^ 2 ∂μ) * t := by
        rw [h_rpow_half_sq _ h_sq_int_nn, h_rpow_half_sq _ ht]
    _ = t * ∫ a, (f a) ^ 2 ∂μ := by ring
omit [MeasurableSpace Ω] [MeasurableSpace E] in
/-- **Per-component L² Lipschitz bound on the drift step.**

Combining the L¹ Lipschitz bound `|drift X i - drift Y i| ≤
L_μ · ∫_0^t ‖X-Y‖` with the L² Cauchy-Schwarz `(∫ g)² ≤ t · ∫ g²`
applied to `g = ‖X - Y‖`:

  `|drift X i - drift Y i|² ≤ L_μ² · t · ∫_0^t ‖X_s - Y_s‖² ds`.

This is the per-(t, ω) bound. Taking `E[·]` over ω gives the L²-norm
Lipschitz bound, which is the ingredient for the Bielecki β-norm
contraction. -/
lemma picardStep_drift_diff_lipschitz_sq_componentwise
    {n d : ℕ}
    (coeffs : LevyStochCalc.Ito.Setting.JumpDiffusionCoeffs n d E)
    {L_μ : ℝ} (hL_μ_nn : 0 ≤ L_μ)
    (h_μ_lip : ∀ s : ℝ, ∀ x₁ x₂ : Fin n → ℝ, ∀ i : Fin n,
      |coeffs.μ s x₁ i - coeffs.μ s x₂ i| ≤ L_μ * ‖x₁ - x₂‖)
    (X Y : ℝ → Ω → (Fin n → ℝ))
    (x₀ : Fin n → ℝ)
    (t : ℝ) (ht : 0 ≤ t) (ω : Ω) (i : Fin n)
    (h_X_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (X s ω) i) (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    (h_Y_int : MeasureTheory.IntegrableOn
      (fun s => coeffs.μ s (Y s ω) i) (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    (h_XY_diff_int : MeasureTheory.IntegrableOn
      (fun s => ‖X s ω - Y s ω‖) (Set.Icc (0 : ℝ) t) MeasureTheory.volume)
    (h_XY_diff_sq_L2 : MeasureTheory.MemLp
      (fun s => ‖X s ω - Y s ω‖) 2
      (MeasureTheory.volume.restrict (Set.Icc (0 : ℝ) t))) :
    ((picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i) ^ 2
      ≤ L_μ ^ 2 * t *
          ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ ^ 2 := by
  -- Step 1: L¹ Lipschitz bound (proven).
  have h_L1 := picardStep_drift_diff_lipschitz_componentwise
    coeffs hL_μ_nn h_μ_lip X Y x₀ t ω i h_X_int h_Y_int h_XY_diff_int
  -- The L¹ bound's |·| is the abs of the i-th component diff.
  -- Square both sides (LHS² = (|·|)² = (·)², RHS² = L² · (∫‖X-Y‖)²).
  have h_abs_sq : ((picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i) ^ 2
      = |(picardStep_drift (E := E) coeffs X x₀ t ω
          - picardStep_drift coeffs Y x₀ t ω) i| ^ 2 := by
    rw [sq_abs]
  rw [h_abs_sq]
  -- |·|² ≤ (L_μ · ∫‖X-Y‖)² by squaring h_L1 (both sides nonneg).
  have h_abs_nn : 0 ≤ |(picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i| := abs_nonneg _
  have h_int_nn : 0 ≤ ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ :=
    MeasureTheory.integral_nonneg_of_ae
      (Filter.Eventually.of_forall fun _ => norm_nonneg _)
  have h_RHS_nn : 0 ≤ L_μ * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ :=
    mul_nonneg hL_μ_nn h_int_nn
  have h_sq_bound := mul_self_le_mul_self h_abs_nn h_L1
  -- h_sq_bound: |·| * |·| ≤ (L_μ · ∫‖X-Y‖) * (L_μ · ∫‖X-Y‖)
  -- Convert ·*· to ·^2 on both sides:
  have h_LHS_sq_eq : |(picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i| *
      |(picardStep_drift coeffs X x₀ t ω
          - picardStep_drift coeffs Y x₀ t ω) i|
      = |(picardStep_drift coeffs X x₀ t ω
          - picardStep_drift coeffs Y x₀ t ω) i| ^ 2 := by ring
  have h_RHS_sq_eq : (L_μ * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖) *
      (L_μ * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖)
      = L_μ ^ 2 * (∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖) ^ 2 := by ring
  rw [h_LHS_sq_eq, h_RHS_sq_eq] at h_sq_bound
  -- Apply Cauchy-Schwarz: (∫ ‖X-Y‖)² ≤ t · ∫ ‖X-Y‖².
  have h_CS := integral_sq_le_mul_integral_sq_on_Icc
    (fun s => ‖X s ω - Y s ω‖) t ht
    (Filter.Eventually.of_forall fun _ => norm_nonneg _)
    h_XY_diff_sq_L2
  -- Chain: |·|² ≤ L_μ² · (∫‖X-Y‖)² ≤ L_μ² · t · ∫‖X-Y‖².
  have h_L_sq_nn : 0 ≤ L_μ ^ 2 := sq_nonneg _
  have h_CS_mul : L_μ ^ 2 * (∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖) ^ 2
      ≤ L_μ ^ 2 * (t * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ ^ 2) :=
    mul_le_mul_of_nonneg_left h_CS h_L_sq_nn
  calc |(picardStep_drift (E := E) coeffs X x₀ t ω
        - picardStep_drift coeffs Y x₀ t ω) i| ^ 2
      ≤ L_μ ^ 2 * (∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖) ^ 2 := h_sq_bound
    _ ≤ L_μ ^ 2 * (t * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ ^ 2) := h_CS_mul
    _ = L_μ ^ 2 * t * ∫ s in Set.Icc (0 : ℝ) t, ‖X s ω - Y s ω‖ ^ 2 := by ring
end Picard
end Ito
end LevyStochCalc
Source
Lean source: https://github.com/cgarryZA/LevyStochCalc/blob/984dbf0b790031eac05d56fe5a84b65e15e1e932/LevyStochCalc/Ito/PicardBieleckiNorm.lean#L29-L553 (repository human-ai-mathematics/kls-lean, commit 408915f, module `LevyStochCalc.Ito.PicardBieleckiNorm`, definition bundle `KLSModular_LevyStochCalc_Ito_PicardBieleckiNorm`; the repository is private at upload time). Vendored from https://github.com/cgarryZA/LevyStochCalc at commit 984dbf0b790031eac05d56fe5a84b65e15e1e932 (Apache-2.0; upstream copyright notice retained in the Lean text).

View graph

Get started

Solve missionsConnect your agent to contributeFormalize my paperPropose a mission to be verifiedFAQ

About Prove2Me

Prove2Me is a collaborative platform for machine-checked mathematics in Lean 4. Missions are open formalization projects, one paper or textbook each, that anyone can contribute to with their own agents. Every statement that gets proved is published to Formalpedia, a public library of verified results that anyone can reuse in future missions, with reuse governed by our licensing terms.

How Prove2Me worksResearch paper
SKILL.mdTourFAQContactTerms
© 2026 Prove2Me