Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

MarkovProcess.Semigroup.DenseCoreConvergence

Definition
MarkovProcessModule_MarkovProcess_Semigroup_DenseCoreConvergence

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

markovprocessmarkovprocess-module-importscope-fullscott-armstrongsource-faithful

Convergence from a dense core

This module extends pointwise convergence of uniformly contractive continuous linear maps from the range of a dense map to the whole ambient space.

Complete pinned Lean module MarkovProcess.Semigroup.DenseCoreConvergence 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 Mathlib.Analysis.Normed.Operator.Basic

/-!
# Convergence from a dense core

This module extends pointwise convergence of uniformly contractive continuous
linear maps from the range of a dense map to the whole ambient space.
-/

open Filter Topology

namespace MarkovProcess

/-- A family of continuous linear contractions that converges to the identity
on the range of a dense continuous linear map converges to the identity
everywhere. -/
theorem tendsto_of_denseRange_of_opNorm_le_one
    {E F ι : Type*}
    [NormedAddCommGroup E] [NormedSpace ℝ E]
    [NormedAddCommGroup F] [NormedSpace ℝ F]
    {l : Filter ι} (T : ι → E →L[ℝ] E) (D : F →L[ℝ] E)
    (hT : ∀ i, ‖T i‖ ≤ 1) (hD : DenseRange D)
    (hcore : ∀ v, Tendsto (fun i ↦ T i (D v)) l (nhds (D v))) :
    ∀ f, Tendsto (fun i ↦ T i f) l (nhds f) := by
  intro f
  rw [Metric.tendsto_nhds]
  intro ε hε
  obtain ⟨v, hv⟩ := hD.exists_dist_lt f (div_pos hε (by norm_num : (0 : ℝ) < 3))
  have hv' : dist (D v) f < ε / 3 := by
    rw [dist_comm]
    exact hv
  have hcore_eventually : ∀ᶠ i in l, dist (T i (D v)) (D v) < ε / 3 :=
    (Metric.tendsto_nhds.mp (hcore v)) (ε / 3) (div_pos hε (by norm_num))
  filter_upwards [hcore_eventually] with i hi
  have hcontract : dist (T i f) (T i (D v)) ≤ dist f (D v) := by
    calc
      dist (T i f) (T i (D v)) ≤ ‖T i‖ * dist f (D v) := (T i).dist_le_opNorm f (D v)
      _ ≤ 1 * dist f (D v) :=
        mul_le_mul_of_nonneg_right (hT i) dist_nonneg
      _ = dist f (D v) := one_mul _
  calc
    dist (T i f) f ≤ dist (T i f) (T i (D v)) + dist (T i (D v)) f :=
      dist_triangle _ _ _
    _ ≤ dist (T i f) (T i (D v)) +
        (dist (T i (D v)) (D v) + dist (D v) f) :=
      add_le_add le_rfl (dist_triangle _ _ _)
    _ ≤ dist f (D v) + (dist (T i (D v)) (D v) + dist (D v) f) :=
      add_le_add hcontract le_rfl
    _ < ε / 3 + (ε / 3 + ε / 3) := by
      exact add_lt_add hv (add_lt_add hi hv')
    _ = ε := by ring

/-- Pointwise Cauchy convergence on the range of a dense continuous linear map
extends to the whole space for a sequence of contractions. -/
theorem cauchySeq_of_denseRange_of_opNorm_le_one
    {E F : Type*}
    [NormedAddCommGroup E] [NormedSpace ℝ E]
    [NormedAddCommGroup F] [NormedSpace ℝ F]
    (T : ℕ → E →L[ℝ] E) (D : F →L[ℝ] E)
    (hT : ∀ n, ‖T n‖ ≤ 1) (hD : DenseRange D)
    (hcore : ∀ v, CauchySeq (fun n ↦ T n (D v))) :
    ∀ x, CauchySeq (fun n ↦ T n x) := by
  intro x
  rw [Metric.cauchySeq_iff]
  intro ε hε
  obtain ⟨v, hv⟩ := hD.exists_dist_lt x (div_pos hε (by norm_num : (0 : ℝ) < 3))
  obtain ⟨N, hN⟩ := Metric.cauchySeq_iff.mp (hcore v) (ε / 3)
    (div_pos hε (by norm_num))
  refine ⟨N, fun m hm n hn ↦ ?_⟩
  have hm_contract : dist (T m x) (T m (D v)) ≤ dist x (D v) := by
    calc
      dist (T m x) (T m (D v)) ≤ ‖T m‖ * dist x (D v) :=
        (T m).dist_le_opNorm x (D v)
      _ ≤ 1 * dist x (D v) := mul_le_mul_of_nonneg_right (hT m) dist_nonneg
      _ = dist x (D v) := one_mul _
  have hn_contract : dist (T n (D v)) (T n x) ≤ dist (D v) x := by
    calc
      dist (T n (D v)) (T n x) ≤ ‖T n‖ * dist (D v) x :=
        (T n).dist_le_opNorm (D v) x
      _ ≤ 1 * dist (D v) x := mul_le_mul_of_nonneg_right (hT n) dist_nonneg
      _ = dist (D v) x := one_mul _
  have hv' : dist (D v) x < ε / 3 := by
    rw [dist_comm]
    exact hv
  calc
    dist (T m x) (T n x) ≤
        dist (T m x) (T m (D v)) + dist (T m (D v)) (T n x) :=
      dist_triangle _ _ _
    _ ≤ dist (T m x) (T m (D v)) +
        (dist (T m (D v)) (T n (D v)) + dist (T n (D v)) (T n x)) :=
      add_le_add le_rfl (dist_triangle _ _ _)
    _ < ε / 3 + (ε / 3 + ε / 3) := by
      exact add_lt_add (lt_of_le_of_lt hm_contract hv)
        (add_lt_add (hN m hm n hn) (lt_of_le_of_lt hn_contract hv'))
    _ = ε := by ring

end MarkovProcess
Source
https://github.com/scottnarmstrong/MarkovProcess/blob/1f8060caa137731fa08029592019eeaf9d997fe5/MarkovProcess/Semigroup/DenseCoreConvergence.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