Theorem 6.4 — strengthening a lift-and-project cut into a cut valid for the whole mixed 0-1 program
ProvedDisjunctive.LiftProject.mip_cut_lifting_v2This is Theorem 6.4 of Balas's Disjunctive Programming. Let be the LP relaxation of a mixed 0-1 program with 0-1 index set , the system containing the bound rows and (), and let be a lift-and-project cut from for a 0-1 variable : multipliers , with and , where , . For put and
Then is valid for the mixed 0-1 feasible set .
Formalization Note. The retired version neither had the bound rows (in particular , without which coefficientwise domination proves nothing) nor required ; with , it failed at . Throughout Chapter 6 the LP relaxation is with the inequalities and () included in . This is now the explicit hypothesis HasBoundRows Atil btil N' (the system contains the rows for every and for every ); it is satisfiable with nonempty . The disjunction variable is a 0-1 variable (). The clause for is now written as in the book (equivalent to the former through hAlpha). remains an explicit hypothesis, needed for .
import Mathlib import Definitions.Def_Disjunctive_LiftProject_Basic import Definitions.Def_Disjunctive_LiftProject_BoundRows
namespace Disjunctive.LiftProject
/-- Theorem 6.4 (Balas, *Disjunctive Programming*, Springer 2018, §6.5, p. 86): let
`P = {x : Ãx ≥ b̃}` be the LP relaxation of a mixed 0-1 program with 0-1 index set `N'`, the bound
rows `x ≥ 0` and `x_k ≤ 1` (`k ∈ N'`) being rows of `Ãx ≥ b̃` (`HasBoundRows`), and let
`αx ≥ β` be a lift-and-project cut from `(CGLP)_j` for a 0-1 variable `j ∈ N'`: `u, v ≥ 0`,
`u₀, v₀ > 0`, `β = u b̃ = v b̃ + v₀`, `α_i = max{α¹_i, α²_i}` with `α¹ = uà - u₀e_j`,
`α² = và + v₀e_j`. With `m̄_k := (α²_k - α¹_k)/(u₀ + v₀)`, the strengthened inequality `γx ≥ β`,
`γ_k = min{α¹_k + u₀⌈m̄_k⌉, α²_k - v₀⌊m̄_k⌋}` (`k ∈ N'`), `γ_k = α_k` (`k ∉ N'`), is valid for
the mixed 0-1 feasible set `{x ∈ P : x_k ∈ {0,1}, k ∈ N'}`.
Corrected: the retired version allowed systems without the bound rows (in particular without
`x ≥ 0`) and a disjunction index `j` outside `N'`. -/
theorem mip_cut_lifting_v2 {n m : ℕ} (Atil : Matrix (Fin m) (Fin n) ℝ)
(btil : Fin m → ℝ) (Nprime : Finset (Fin n)) (hP : HasBoundRows Atil btil Nprime)
(j : Fin n) (hj : j ∈ Nprime)
(u v : Fin m → ℝ) (u0 v0 : ℝ) (hu0 : 0 < u0) (hv0 : 0 < v0) (α : Fin n → ℝ) (β : ℝ)
(hAlpha : ∀ i, α i = max (Alpha1_64 Atil u u0 j i) (Alpha2_64 Atil v v0 j i))
(hu : 0 ≤ u) (hv : 0 ≤ v)
(hbeta1 : β = ∑ ρ, u ρ * btil ρ) (hbeta2 : β = (∑ ρ, v ρ * btil ρ) + v0)
(γ mbar : Fin n → ℝ)
(hmbar : ∀ k ∈ Nprime, mbar k = (Alpha2_64 Atil v v0 j k - Alpha1_64 Atil u u0 j k) / (u0 + v0))
(hgamma1 : ∀ k ∈ Nprime, γ k = min (Alpha1_64 Atil u u0 j k + u0 * (⌈mbar k⌉ : ℝ))
(Alpha2_64 Atil v v0 j k - v0 * (⌊mbar k⌋ : ℝ)))
(hgamma2 : ∀ k ∉ Nprime, γ k = α k) :
∀ x ∈ MIPDisjunctiveSet Atil btil Nprime, β ≤ dotProduct γ x := by sorry
end Disjunctive.LiftProject