Documentation

Tdaf.Analysis.Convex.Continuity

Continuity of a convex function on the relative interior of its domain #

A proper convex function on a finite-dimensional space is continuous, relative to the affine hull of its effective domain, at every relative interior point of that domain. Mathlib proves the interior statement (ConvexOn.continuousOn_interior) and leaves the relative version open, because intrinsicInterior lives in a file that does not meet Mathlib/Analysis/Convex/Continuous.lean. This file supplies it, and with it the quantitative refinements: Lipschitz continuity on compact subsets of ri (dom f), and uniform continuity on the whole space.

Main results #

Implementation notes #

The chart is a linear subspace, not the affine hull. intrinsicInterior ℝ C is defined as the interior taken inside ↥(affineSpan ℝ C), but that subtype is an AddTorsor, while Convex, ConvexOn and every Mathlib continuity theorem need a module; fixing x₀ ∈ C and moving to a subspace V spanned by C - x₀ costs one translation and buys the whole module API. The subspace is a parameter rather than a definition — every lemma takes V with hV : V = span ℝ (C - x₀) — so that instance synthesis for ↥V never has to unfold a Submodule.span; callers obtain an opaque V from ⟨_, rfl⟩. Transporting continuity back to E uses a continuous left inverse rather than the embedding, which finite-dimensionality supplies through LinearMap.linearProjOfIsCompl.

References #

The relative interior is translation invariant.

def Tdaf.ConvexAnalysis.chart {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (C : Set E) (x₀ : E) (V : Submodule ℝ E) :
Set ↥V

The chart of C at x₀ in a subspace V: the directions z ∈ V with x₀ + z ∈ C.

Equations
Instances For
    @[simp]
    theorem Tdaf.ConvexAnalysis.mem_chart {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {C : Set E} {x₀ : E} {V : Submodule ℝ E} {z : ↥V} :
    z ∈ chart C x₀ V ↔ x₀ + ↑z ∈ C
    theorem Tdaf.ConvexAnalysis.image_chart {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {C : Set E} {x₀ : E} {V : Submodule ℝ E} (hV : V = Submodule.span ℝ ((fun (x : E) => x - x₀) '' C)) :
    ⇑V.subtype '' chart C x₀ V = (fun (x : E) => x - x₀) '' C

    The chart maps onto the translate C - x₀.

    theorem Tdaf.ConvexAnalysis.zero_mem_chart {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {C : Set E} {x₀ : E} {V : Submodule ℝ E} (hx₀ : x₀ ∈ C) :
    0 ∈ chart C x₀ V
    theorem Tdaf.ConvexAnalysis.convex_chart {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {C : Set E} {x₀ : E} {V : Submodule ℝ E} (hC : Convex ℝ C) :
    Convex ℝ (chart C x₀ V)
    theorem Tdaf.ConvexAnalysis.affineSpan_chart {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {C : Set E} {x₀ : E} {V : Submodule ℝ E} (hx₀ : x₀ ∈ C) (hV : V = Submodule.span ℝ ((fun (x : E) => x - x₀) '' C)) :
    affineSpan ℝ (chart C x₀ V) = ⊤

    The chart affinely spans the chart space: that is what makes ri collapse to interior there.

    theorem Tdaf.ConvexAnalysis.relint_eq_vadd_image_interior {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {C : Set E} {x₀ : E} {V : Submodule ℝ E} (hC : Convex ℝ C) (hx₀ : x₀ ∈ C) (hV : V = Submodule.span ℝ ((fun (x : E) => x - x₀) '' C)) :

    The relative interior, computed in the chart. ri C is the translate by x₀ of the image of the ordinary interior of chart C x₀ V.

    theorem Tdaf.ConvexAnalysis.exists_chart_retraction {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {C : Set E} {x₀ : E} (hC : Convex ℝ C) (hx₀ : x₀ ∈ C) :
    ∃ (V : Submodule ℝ E) (r : E →L[ℝ] ↥V), intrinsicInterior ℝ C = x₀ +ᵥ ⇑V.subtype '' interior (chart C x₀ V) ∧ Set.MapsTo (fun (x : E) => r (x - x₀)) (intrinsicInterior ℝ C) (interior (chart C x₀ V)) ∧ ∀ x ∈ intrinsicInterior ℝ C, x₀ + ↑(r (x - x₀)) = x

    The chart, packaged for reuse. For a convex C and a point x₀ ∈ C there is a subspace V and a continuous linear retraction r : E →L[ℝ] V such that x ↦ r (x - x₀) carries ri C into interior (chart C x₀ V) and x₀ + r (x - x₀) = x there, together with the chart identity relint_eq_vadd_image_interior for that V. Continuity transports along r because r is continuous, and Lipschitz constants because r is bounded.

    theorem Tdaf.ConvexAnalysis.ConvexFn.convexOn_toReal_dom {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) :
    ConvexOn ℝ (dom f) fun (x : E) => (f x).toReal

    The real-valued restriction of f is convex on dom f, in Mathlib's sense.

    A proper convex function is continuous, relative to the affine hull of its domain, at every relative interior point — real-valued form.

    A proper convex function on a finite-dimensional space is continuous on ri (dom f), relative to the affine hull of its effective domain.

    Functions finite everywhere #

    A convex function that is finite everywhere is continuous. dom f = univ is "finite on all of Rⁿ", properness supplying the other half.

    A convex function finite everywhere is continuous, real-valued form.

    Lipschitz continuity on compact subsets of the relative interior #

    theorem Tdaf.ConvexAnalysis.ConvexOn.lipschitzOnWith_of_abs_le_of_cthickening_subset {W : Type u_1} [NormedAddCommGroup W] [NormedSpace ℝ W] {D : Set W} {ψ : W → ℝ} (hψ : ConvexOn ℝ D ψ) {S : Set W} {ε M : ℝ} (hε : 0 < ε) (hM : 0 ≤ M) (hsub : Metric.cthickening ε S ⊆ D) (hMabs : ∀ w ∈ Metric.cthickening ε S, |ψ w| ≤ M) :
    LipschitzOnWith (2 * M / ε).toNNReal ψ S

    The quantitative core. If ψ is convex on D and bounded by M in absolute value on the closed ε-collar of S, and that collar lies inside D, then ψ is Lipschitz on S with constant 2M/ε. For x ≠ y in S the point z = y + (ε / ‖y - x‖) • (y - x) sits in the collar and expresses y as a convex combination of x and z, so convexity bounds the increment by the oscillation of ψ over the collar.

    The constant is exhibited rather than existentially quantified: a family of convex functions sharing one collar and one bound is therefore equi-Lipschitzian with a single constant. Mathlib's ConvexOn.lipschitzOnWith_of_abs_le is the two-sided ball version, and the collar argument does not follow from it.

    theorem Tdaf.ConvexAnalysis.ConvexOn.exists_lipschitzOnWith_of_isCompact {W : Type u_1} [NormedAddCommGroup W] [NormedSpace ℝ W] [FiniteDimensional ℝ W] {D : Set W} {ψ : W → ℝ} (hψ : ConvexOn ℝ D ψ) {S : Set W} (hS : IsCompact S) (hSD : S ⊆ interior D) :
    ∃ (K : NNReal), LipschitzOnWith K ψ S

    The interior form: a function convex on D is Lipschitz on every compact subset of interior D. Compactness supplies an ε-collar of S still inside interior D, on which continuity bounds ψ.

    theorem Tdaf.ConvexAnalysis.ConvexFn.exists_lipschitzOnWith_of_isCompact {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) {S : Set E} (hS : IsCompact S) (hSD : S ⊆ intrinsicInterior ℝ (dom f)) :
    ∃ (K : NNReal), LipschitzOnWith K (fun (x : E) => (f x).toReal) S

    A proper convex function is Lipschitz on every compact subset of ri (dom f). The usual statement is for closed bounded subsets, which in finite dimensions is the same thing. The retraction of the chart is a continuous linear map, hence Lipschitz, so it carries Lipschitz constants back as well as continuity.

    Uniform continuity and Lipschitz continuity on the whole space #

    theorem Tdaf.ConvexAnalysis.coe_toReal_of_dom_eq_univ {E : Type u_1} {f : E → EReal} (hp : Proper f) (hdom : dom f = Set.univ) (x : E) :
    ↑(f x).toReal = f x

    A proper function whose effective domain is everything is the coercion of its real form.

    A finite convex function on the whole space is closed: it is continuous, hence lower semicontinuous, hence has a closed epigraph.

    theorem Tdaf.ConvexAnalysis.exists_recessionFn_le_of_forall_ne_top {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {f : E → EReal} (hp : Proper f) (hrec : ∀ (y : E), recessionFn f y ≠ ⊤) :
    ∃ (M : ℝ), 0 ≤ M ∧ ∀ (y : E), recessionFn f y ≤ ↑(M * ‖y‖)

    When f0⁺ is finite everywhere it is bounded by a linear function of the norm. The constant is α = sup {(f0⁺) z | ‖z‖ = 1}, finite because f0⁺ is a finite convex function, hence continuous, and the unit ball is compact; positive homogeneity spreads the bound over the whole space.

    theorem Tdaf.ConvexAnalysis.ConvexFn.exists_lipschitzWith_of_recessionFn_ne_top {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) (hdom : dom f = Set.univ) (hrec : ∀ (y : E), recessionFn f y ≠ ⊤) :
    ∃ (K : NNReal), LipschitzWith K fun (x : E) => (f x).toReal

    Sufficiency: if the recession function of a finite convex function on the whole space is finite everywhere, the function is Lipschitz, with α as constant.

    theorem Tdaf.ConvexAnalysis.ConvexFn.recessionFn_ne_top_of_uniformContinuous {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) (hdom : dom f = Set.univ) (hu : UniformContinuous fun (x : E) => (f x).toReal) (y : E) :

    Necessity: a uniformly continuous finite convex function has a finite recession function. Uniform continuity at ε = 1 bounds f (x + z) - f x by 1 uniformly in x for short z, which says (f0⁺) z ≤ 1.

    theorem Tdaf.ConvexAnalysis.ConvexFn.uniformContinuous_toReal_iff {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) (hdom : dom f = Set.univ) :
    (UniformContinuous fun (x : E) => (f x).toReal) ↔ ∀ (y : E), recessionFn f y ≠ ⊤

    A finite convex function on the whole space is uniformly continuous exactly when its recession function is finite everywhere, and then it is in fact Lipschitz (ConvexFn.exists_lipschitzWith_of_recessionFn_ne_top).

    theorem Tdaf.ConvexAnalysis.ConvexFn.exists_lipschitzWith_of_frequently_le {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) (hdom : dom f = Set.univ) (h : ∀ (y : E), ∃ (c : ℝ), ∃ᶠ (a : ℝ) in Filter.atTop, f (a • y) ≤ ↑(c * a)) :
    ∃ (K : NNReal), LipschitzWith K fun (x : E) => (f x).toReal

    For Lipschitz continuity it is enough that f (a • y) / a stay bounded above along some sequence a → ∞, in every direction y. The quotient is nondecreasing in a, so a bound reached infinitely often is a bound everywhere.

    theorem Tdaf.ConvexAnalysis.ConvexFn.exists_lipschitzWith_of_le_lipschitz {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {f : E → EReal} (hf : ConvexFn f) (hp : Proper f) (hdom : dom f = Set.univ) {g : E → ℝ} {K : NNReal} (hg : LipschitzWith K g) (hle : ∀ (x : E), f x ≤ ↑(g x)) :
    ∃ (K' : NNReal), LipschitzWith K' fun (x : E) => (f x).toReal

    A finite convex function dominated by a Lipschitz function is itself Lipschitz. The usual statement assumes the dominating g convex; the proof does not use it, so g here is an arbitrary Lipschitz function.