Picard-Lindelöf with explicit confinement conjunct (vendored from Mathlib) #
This file is vendored from Mathlib/Analysis/ODE/PicardLindelof.lean
(Yury Kudryashov, Winston Yin): it copies two upstream theorems and adds one
conjunct to each public conclusion; the proofs are otherwise the upstream proofs.
The two upstream sources were
IsPicardLindelof.exists_forall_mem_closedBall_eq_hasDerivWithinAt_lipschitzOnWith
and IsPicardLindelof.exists_forall_mem_closedBall_eq_forall_mem_Icc_hasDerivWithinAt
(present in Mathlib/Analysis/ODE/PicardLindelof.lean through mathlib
v4.29.1; the local-flow refactor later moved these public wrappers to
Mathlib/Analysis/ODE/ExistUnique.lean, which this file does not import,
while keeping the FunSpace machinery this file's proofs actually use —
exists_isFixedPt_next, compProj_*, hasDerivWithinAt_picard_Icc,
exists_forall_closedBall_funSpace_dist_le_mul — in place, so the proofs
below still elaborate against current mathlib unchanged). The single difference from each
original is marked inline below with a Vendored addition comment.
The new conjunct exposes FunSpace.compProj_mem_closedBall's guarantee at the
public theorem level: every flow trajectory α x t stays inside
closedBall x₀ a (the outer ball where the field is Lipschitz). The underlying
property is already proved upstream in Mathlib; in fact, the upstream public
proof of exists_forall_mem_closedBall_eq_hasDerivWithinAt_lipschitzOnWith
(now in Mathlib/Analysis/ODE/ExistUnique.lean)
already invokes compProj_mem_closedBall hf.mul_max_le internally (to
constrain the iterate to the Lipschitz region). We are only re-exporting that
invariant through the public conclusion.
Intended upstreaming: this file is structured as a near-mechanical patch
to Mathlib/Analysis/ODE/PicardLindelof.lean; the eventual Mathlib PR would
drop the _confined suffix and replace the two original theorems with their
strengthened forms (no API breaks for downstream consumers, since the
conclusion only grows).
In-project consumer: Vlasov.OT.CharacteristicFlow (where
exists_vlasov_extend_one_window threads the confinement conjunct through
to Helper 1, vlasov_window_confinement).
Picard-Lindelöf with confinement (vendored from Mathlib, awaiting
upstream PR). Same conclusion as
exists_forall_mem_closedBall_eq_hasDerivWithinAt_lipschitzOnWith plus an
additional conjunct ∀ t ∈ Icc tmin tmax, α x t ∈ closedBall x₀ a —
exposing the FunSpace confinement guarantee at the public API level. The
underlying property is already proved upstream (the existing proof of
_lipschitzOnWith invokes FunSpace.compProj_mem_closedBall hf.mul_max_le
internally to constrain the iterate to the Lipschitz region); we only
re-export it.
Picard-Lindelöf with confinement, thin wrapper (vendored). Drops the
Lipschitz-in-initial-point conjunct from _lipschitzOnWith_confined. This is
the form exists_vlasov_extend_one_window consumes — Vlasov doesn't need the
flow's Lipschitz dependence on the initial point.