Theorem 2.3 — when the lifting may be indexed by all of
OpenDisjunctive.ConvexHull.tightness_lifted_representation_v2This is Theorem 2.3 of Balas's Disjunctive Programming: when the lifted representation of Theorem 2.1 may be indexed by all of instead of the (a priori unknown) set of nonempty disjuncts.
Let (), , , and . Let be the projection onto of the lifted system (2.1) over (so by Theorem 2.1) and the projection of the same system written over all of . Assume . Then
Formalization Note. The retired version omitted the book's assumption ; when every disjunct is empty, both projections are empty while , so an empty disjunct with a nonzero recession cone (e.g. ) refuted it. The new statement adds hF : F.Nonempty (equivalently ). As before, is read as equality of the -projections, which is the identity the book's proof establishes; the lifted vectors are padded by zeros outside the index set (mission convention).
import Mathlib import Definitions.Def_Disjunctive_ConvexHull_Polyhedra import Definitions.Def_Disjunctive_ConvexHull_LiftedPolyhedron
namespace Disjunctive.ConvexHull
/-- Theorem 2.3 (Balas, *Disjunctive Programming*, Springer 2018, §2.1, p. 22): assume `F ≠ ∅`.
Then `P_Q = P` if and only if every disjunct's recession cone outside `Q*` is contained in the
Minkowski sum of the recession cones inside `Q*`. `P` is the `x`-set of Theorem 2.1 (the
projection of the lifted polyhedron over `Q*`) and `P_Q` the same projection with `Q` in place
of `Q*`; the book's proof computes `P_Q = P + Σ_{k ∉ Q*} C_k`, an identity in `x`-space.
Version 2: adds the book's assumption `F ≠ ∅` (equivalently `Q* ≠ ∅`). Without it, `Q* = ∅`
makes both projections empty while the Minkowski sum over `∅` is `{0}`, so an empty disjunct with
a nonzero recession cone (e.g. `0·x ≥ 1`) refuted the retired statement. -/
theorem tightness_lifted_representation_v2 {n : ℕ} {Q : Type*} [Fintype Q] (m : Q → ℕ)
(A : (h : Q) → Matrix (Fin (m h)) (Fin n) ℝ) (b : (h : Q) → Fin (m h) → ℝ)
(hF : (DisjunctiveSet m A b).Nonempty) :
ProjX (LiftedPolyhedron m A b Set.univ) = ProjX (LiftedPolyhedron m A b (FeasibleIndices m A b)) ↔
∀ k, k ∉ FeasibleIndices m A b →
RecessionCone (A k) ⊆ MinkowskiSumOver (FeasibleIndices m A b) (fun h => RecessionCone (A h)) := by sorry
end Disjunctive.ConvexHull