Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

MarkovProcess.Path.Shift

Definition
MarkovProcessModule_MarkovProcess_Path_Shift

by WillR · Oct 27, 2026 · Mathlib 0df444a (Lean v4.33.1)

markovprocessmarkovprocess-module-importscope-mainscott-armstrongsource-faithful

Deterministic shifts of continuous paths

This file defines translation by a fixed nonnegative time on canonical continuous-path space. The shift is jointly continuous in the shift time and path for the compact-open topology. It also records the corresponding deterministic relation between the canonical filtrations.

No random-time shift, Markov property, strong Markov property, or Hunt-process assertion is made.

Complete pinned Lean module MarkovProcess.Path.Shift by Scott Armstrong (Apache-2.0). Contains the original definitions, instances, theorems and proofs in their original declaration order. Only local MarkovProcess import directives have been rewritten for Prove2Me; source mathematical declarations are unchanged. The bundle must pass Prove2Me's remote compiler before it can be used as a dependency.

Definition code
/-
Copyright (c) 2026 Scott Armstrong. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Armstrong
-/
import Definitions.Def_MarkovProcessModule_MarkovProcess_Path_Basic

/-!
# Deterministic shifts of continuous paths

This file defines translation by a fixed nonnegative time on canonical continuous-path space.
The shift is jointly continuous in the shift time and path for the compact-open topology.  It also
records the corresponding deterministic relation between the canonical filtrations.

No random-time shift, Markov property, strong Markov property, or Hunt-process assertion is made.
-/

open MeasureTheory

namespace MarkovProcess
namespace ContinuousPath

variable {alpha : Type*} [TopologicalSpace alpha]

/-- Translation of nonnegative time by `S`, as a continuous self-map of `NNReal`. -/
def timeTranslation (S : NNReal) : C(NNReal, NNReal) where
  toFun t := S + t
  continuous_toFun := continuous_const.add continuous_id

@[simp]
theorem timeTranslation_apply (S t : NNReal) : timeTranslation S t = S + t := rfl

/-- Shift a continuous path forward by the deterministic time `S`. -/
def shift (S : NNReal) (omega : ContinuousPath alpha) : ContinuousPath alpha :=
  omega.comp (timeTranslation S)

@[simp]
theorem shift_apply (S t : NNReal) (omega : ContinuousPath alpha) :
    shift S omega t = omega (S + t) := rfl

@[simp]
theorem shift_zero (omega : ContinuousPath alpha) : shift 0 omega = omega := by
  ext t
  simp only [shift_apply, zero_add]

theorem shift_add (S T : NNReal) (omega : ContinuousPath alpha) :
    shift T (shift S omega) = shift (S + T) omega := by
  ext t
  simp only [shift_apply, add_assoc]

/-- The family of time translations is continuous for the compact-open topology. -/
theorem continuous_timeTranslation : Continuous (timeTranslation : NNReal → C(NNReal, NNReal)) := by
  apply ContinuousMap.continuous_of_continuous_uncurry
  exact continuous_fst.add continuous_snd

/-- Deterministic path shifting is jointly continuous in the shift time and the path. -/
theorem continuous_shift :
    Continuous (fun p : NNReal × ContinuousPath alpha ↦ shift p.1 p.2) := by
  exact ContinuousMap.continuous_comp'.comp
    ((continuous_timeTranslation.comp continuous_fst).prodMk continuous_snd)

/-- Shifting by a fixed deterministic time is continuous. -/
theorem continuous_shift_fixed (S : NNReal) :
    Continuous (shift S : ContinuousPath alpha → ContinuousPath alpha) :=
  continuous_shift.comp (continuous_const.prodMk continuous_id)

/-- Shifting by a fixed deterministic time is Borel measurable. -/
theorem measurable_shift_fixed (S : NNReal) :
    Measurable[borel (ContinuousPath alpha), borel (ContinuousPath alpha)]
      (shift S : ContinuousPath alpha → ContinuousPath alpha) :=
  (continuous_shift_fixed S).borel_measurable

/-- A shifted event observable by shifted time `t` is observable by original time `S + t`. -/
theorem measurable_shift_canonicalFiltration [MeasurableSpace alpha] [BorelSpace alpha]
    (S t : NNReal) :
    Measurable[canonicalFiltration (alpha := alpha) (S + t),
      canonicalFiltration (alpha := alpha) t]
      (shift S : ContinuousPath alpha → ContinuousPath alpha) := by
  apply Measurable.of_comap_le
  rw [canonicalFiltration, MeasurableSpace.comap_iSup]
  rw [iSup_le_iff]
  intro u
  rw [MeasurableSpace.comap_comp]
  have hfun : coordinateProcess (alpha := alpha) u ∘ shift S =
      coordinateProcess (alpha := alpha) (S + u) := by
    funext omega
    exact shift_apply S u omega
  rw [hfun]
  exact le_iSup_of_le
    (⟨S + u.1, by simpa only [add_comm] using! add_le_add_left u.2 S⟩ :
      Set.Iic (S + t)) le_rfl

end ContinuousPath
end MarkovProcess
Source
https://github.com/scottnarmstrong/MarkovProcess/blob/1f8060caa137731fa08029592019eeaf9d997fe5/MarkovProcess/Path/Shift.lean

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