Theorem 3.3 — the constraint boundary condition
OpenDisjunctive.SequentialConvex.constraint_boundary_condition_v2This is Theorem 3.3 of Balas's Disjunctive Programming: the exact condition under which one step of sequential convexification is valid.
Let , let , i.e. , and let be the system obtained by reversing every inequality of (the closure of the complement of ). Then
holds if and only if the constraint boundary condition holds: for every and ,
where is the boundary of relative to the affine space spanned by .
Formalization Note. The retired version defined as the union , whose boundary need not be where segments from outside enter ; with the terms , in and , (3.6) held vacuously while (3.5) failed. The corrected definition Dbarj (module Disjunctive_SequentialConvex_Basic_v2) is the conjunction of the reversed inequalities, the convex set with ; the theorem is the reverse-convex result of Balas, Tama and Tind (1989) for . The relative boundary is Mathlib's intrinsicFrontier; the book's "" in (3.6) is read as set inclusion. is an arbitrary set, as in the retired statement (the equivalence holds for every ).
import Mathlib import Definitions.Def_Disjunctive_SequentialConvex_Basic_v2
namespace Disjunctive.SequentialConvex
/-- Theorem 3.3 (Balas, *Disjunctive Programming*, Springer 2018, §3.2, p. 46; Balas, Tama and
Tind 1989): `F_{j-1}` and `D_j = ⋁_{i ∈ Q_j} (d_i x ≥ d_{i0})` satisfy the
sequential-convexifiability relation (3.5) `conv[(conv F_{j-1}) ∩ D_j] = conv(F_{j-1} ∩ D_j)` if
and only if they satisfy the constraint boundary condition (3.6): for every `x ∈ F_{j-1} ∩ D̄_j`
and `y ∈ F_{j-1} ∩ D_j`, every point where the segment `[x, y]` meets the boundary of `D̄_j`
(relative to the affine hull of `D̄_j`) lies in `conv(F_{j-1} ∩ D_j)`. Here
`D̄_j = {x : d_i x ≤ d_{i0}, i ∈ Q_j}` is the system with every inequality of `D_j` reversed.
Version 2: `D̄_j` is the conjunction of the reversed inequalities (`Dbarj` of
`Disjunctive_SequentialConvex_Basic_v2`), not their union; with the union, the terms `x ≥ 0`,
`x ≥ 1` in `ℝ` and `F = {-1, 1/2}` satisfied (3.6) vacuously while (3.5) failed. -/
theorem constraint_boundary_condition_v2 {n : ℕ} (Fjm1 : Set (Fin n → ℝ)) {Qj : Type*}
[Fintype Qj] (d : Qj → Fin n → ℝ) (d0 : Qj → ℝ) :
(convexHull ℝ (convexHull ℝ Fjm1 ∩ Dj d d0) = convexHull ℝ (Fjm1 ∩ Dj d d0)) ↔
(∀ x ∈ Fjm1 ∩ Dbarj d d0, ∀ y ∈ Fjm1 ∩ Dj d d0,
segment ℝ x y ∩ intrinsicFrontier ℝ (Dbarj d d0) ⊆ convexHull ℝ (Fjm1 ∩ Dj d d0)) := by sorry
end Disjunctive.SequentialConvex