Prove2Me
Navigate
DiscoverFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Chapter 3, Theorem 6(a) -- Q is Lipschitzian, convex and finite on K2

Proved
StochasticProg.Recourse.thm6a_Q_lipschitz_convex_finite

by mikedeng1 · Sep 18, 2026 · Mathlib 0df444a (Lean v4.33.1)

convex-optimizationrecoursestochastic-programming

Chapter 3, Theorem 6(a). For a stochastic program with fixed recourse and a finite scenario set, QQQ is finite on K2K_2K2​, and its restriction to K2K_2K2​ is a Lipschitzian convex function: there is L≥0L \ge 0L≥0 with ∣Q(x)−Q(x′)∣≤L∥x−x′∥|Q(x) - Q(x')| \le L\lVert x - x'\rVert∣Q(x)−Q(x′)∣≤L∥x−x′∥ for all x,x′∈K2x, x' \in K_2x,x′∈K2​.

Convexity of QQQ is what makes the deterministic-equivalent objective cTx+Q(x)c^{\mathsf T}x + Q(x)cTx+Q(x) a convex program, and the Lipschitz bound is what licenses the subgradient existence used by Theorem 9.

Formalization Note. The book cites the Lipschitz bound to Wets [1972] and Kall [1976] without giving the proof (finiteness and convexity are called "immediate" but the Lipschitz constant is not constructed), so this milestone is stated, not derived from the second-stage LP's structure, and its Lean proof is expected to stay sorry.

Moderator's note. The book's standing assumption for §3.1c–e (p. 112: "assuming it is not −∞") is stated explicitly: no second-stage problem is unbounded below (Q(x, ξ_k) ≠ −∞ for every x and scenario k; for the abstract Q of Corollary 10, Q x ≠ −∞). Without it "finite on K₂" and the KKT characterisation can fail.

Preamble
import Mathlib
import Definitions.Def_StochasticProg_Recourse_Instance
Formal statement
namespace StochasticProg.Recourse

variable {n1 n2 m1 m2 K : ℕ}

/-- Chapter 3, Theorem 6(a) (p. 112): for a stochastic program with fixed recourse
and a finite scenario set, `Q` is finite on `K2`, and (its real-valued restriction
to `K2` is) a Lipschitzian convex function. The book cites the Lipschitz bound to
Wets [1972]/Kall [1976] without proof, so this milestone is stated, not derived. -/
theorem thm6a_Q_lipschitz_convex_finite (inst : Instance n1 n2 m1 m2 K)
    (hQ : ∀ x k, QVal inst x k ≠ ⊥) :
    (∀ x ∈ K2 inst, ∃ r : ℝ, Q inst x = (r : EReal)) ∧
      ConvexOn ℝ (K2 inst) (fun x => (Q inst x).toReal) ∧
      ∃ L : NNReal, LipschitzOnWith L (fun x => (Q inst x).toReal) (K2 inst) := by sorry

end StochasticProg.Recourse
Source
Birge & Louveaux, Introduction to Stochastic Programming, 2nd ed., Springer 2011, p. 112, Chapter 3, Theorem 6(a)
Read-back

What the Lean code literally says, in plain math · claude-fable-5-1

This declaration asserts, for every choice of natural numbers n1,n2,m1,m2,Kn_1, n_2, m_1, m_2, Kn1​,n2​,m1​,m2​,K (including 000) and every object inst\mathrm{inst}inst of type Instance  n1 n2 m1 m2 K\mathrm{Instance}\; n_1\, n_2\, m_1\, m_2\, KInstancen1​n2​m1​m2​K, the following.

Objects from the imported bundle (not unfolded here). The types Instance\mathrm{Instance}Instance, and the functions QVal\mathrm{QVal}QVal, QQQ and K2K_2K2​, are supplied by the imported file Definitions.Def_StochasticProg_Recourse_Instance, whose code is not part of this declaration; the read-back can only report what the statement itself forces about them. Their roles, as used in the code, are:

  • Q(inst,⋅)Q(\mathrm{inst}, \cdot)Q(inst,⋅) is a function on some type of points xxx (the type is left implicit by the code and is fixed by the definition of QQQ; it is not visibly Rn1\mathbb{R}^{n_1}Rn1​ or anything else), with values in the extended reals R‾=R∪{−∞,+∞}\overline{\mathbb{R}} = \mathbb{R} \cup \{-\infty, +\infty\}R=R∪{−∞,+∞}.
  • QVal(inst,x,k)\mathrm{QVal}(\mathrm{inst}, x, k)QVal(inst,x,k) is a function of a point xxx and a second argument kkk (whose type is likewise implicit), taking values in a type that has a bottom element ⊥\bot⊥; nothing in this declaration says what QVal\mathrm{QVal}QVal computes or how it relates to QQQ.
  • K2(inst)K_2(\mathrm{inst})K2​(inst) is a set of points xxx of the same type as the argument of QQQ. Nothing in this declaration says that it is convex, nonempty, closed, or a polyhedron.

Hypothesis. The single hypothesis hQhQhQ is: for every point xxx of the ambient type (not merely x∈K2(inst)x \in K_2(\mathrm{inst})x∈K2​(inst)) and every kkk,

QVal(inst,x,k)≠⊥.\mathrm{QVal}(\mathrm{inst}, x, k) \neq \bot .QVal(inst,x,k)=⊥.

If for the given instance some xxx and kkk make QVal\mathrm{QVal}QVal equal to ⊥\bot⊥, this hypothesis is false and the theorem holds vacuously for that instance. The hypothesis says nothing about the top element (if the value type has one).

Conclusion. Write Q~(x)\tilde Q(x)Q~​(x) for the real number obtained from Q(inst,x)Q(\mathrm{inst}, x)Q(inst,x) by the “to-real” map, which sends a finite extended real to itself and sends both +∞+\infty+∞ and −∞-\infty−∞ to 000. The conclusion is the conjunction of three statements:

  1. Finiteness on K2K_2K2​. For every x∈K2(inst)x \in K_2(\mathrm{inst})x∈K2​(inst) there exists a real number rrr with
Q(inst,x)=rQ(\mathrm{inst}, x) = rQ(inst,x)=r

as extended reals; equivalently, Q(inst,x)∉{−∞,+∞}Q(\mathrm{inst}, x) \notin \{-\infty, +\infty\}Q(inst,x)∈/{−∞,+∞} for every x∈K2(inst)x \in K_2(\mathrm{inst})x∈K2​(inst). No claim is made about QQQ outside K2(inst)K_2(\mathrm{inst})K2​(inst).

  1. Convexity on K2K_2K2​. The function x↦Q~(x)x \mapsto \tilde Q(x)x↦Q~​(x) is convex on the set K2(inst)K_2(\mathrm{inst})K2​(inst) over the scalar field R\mathbb{R}R. In the sense used here this means two things together: the set K2(inst)K_2(\mathrm{inst})K2​(inst) is itself convex (for all x,y∈K2(inst)x, y \in K_2(\mathrm{inst})x,y∈K2​(inst) and all a,b≥0a, b \ge 0a,b≥0 with a+b=1a + b = 1a+b=1, ax+by∈K2(inst)a x + b y \in K_2(\mathrm{inst})ax+by∈K2​(inst)), and for all such x,y,a,bx, y, a, bx,y,a,b,
Q~(ax+by)  ≤  a Q~(x)+b Q~(y).\tilde Q(a x + b y) \;\le\; a\, \tilde Q(x) + b\, \tilde Q(y).Q~​(ax+by)≤aQ~​(x)+bQ~​(y).

(Convexity of K2(inst)K_2(\mathrm{inst})K2​(inst) is therefore part of what is asserted, since it is not assumed.) The inequality is stated for the real-valued Q~\tilde QQ~​, so if QQQ took an infinite value on K2K_2K2​ the value 000 would be used — although part 1 rules that out on K2K_2K2​.

  1. Lipschitz continuity on K2K_2K2​. There exists a nonnegative real constant L≥0L \ge 0L≥0 such that for all x,y∈K2(inst)x, y \in K_2(\mathrm{inst})x,y∈K2​(inst),
d(Q~(x),Q~(y))  ≤  L⋅d(x,y),d\big(\tilde Q(x), \tilde Q(y)\big) \;\le\; L \cdot d(x, y),d(Q~​(x),Q~​(y))≤L⋅d(x,y),

i.e. ∣Q~(x)−Q~(y)∣≤L d(x,y)|\tilde Q(x) - \tilde Q(y)| \le L\, d(x,y)∣Q~​(x)−Q~​(y)∣≤Ld(x,y), where d(x,y)d(x,y)d(x,y) is the distance on the ambient type of xxx that its (implicit) metric structure provides; which metric this is (e.g. Euclidean, sup-norm) is determined by the imported definitions, not by this declaration. The constant LLL may be 000, and no bound on LLL in terms of the instance data is claimed.

Degenerate cases made explicit. If K2(inst)K_2(\mathrm{inst})K2​(inst) is empty, all three parts of the conclusion hold trivially (the empty set is convex and every statement quantified over its elements is vacuous). If K2(inst)K_2(\mathrm{inst})K2​(inst) is a single point, parts 2 and 3 hold trivially with L=0L = 0L=0. Nothing in the statement asserts that K2(inst)K_2(\mathrm{inst})K2​(inst) is nonempty, that the scenario set is finite, that the recourse is fixed, or that QQQ is an expectation or a minimum of anything; all such content, if present, lives entirely inside the imported definitions of Instance\mathrm{Instance}Instance, QVal\mathrm{QVal}QVal, QQQ and K2K_2K2​, which this read-back cannot verify.

Human review
  • Endorsed by Shuze Chen · Sep 24, 2026

    Confirmed by the moderator at approval.

  • Endorsed by mikedeng1 · Sep 24, 2026

    Confirmed by the mission captain (proposal self-audit).

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