Theorem 3.3 — the simplex method terminates under Bland's rule
OpenVanderbeiLP.Simplex.bland_rule_terminatesConsider a standard-form linear program with data , , , and a feasible dictionary . Run the simplex method from choosing both the entering and the leaving variable by Bland's rule: among the candidates, the variable with the smallest index (indices for the decision variables and for the slacks). Then the simplex method always terminates:
- there is no infinite sequence of Bland pivots;
- there are and Bland pivots such that the method stops at : either
where is the entering variable chosen by Bland's rule in — that is, is optimal, or it shows that the problem is unbounded.
Together with Phase I, this gives a variant of the simplex method that is guaranteed to finish, the basis of the fundamental theorem of linear programming.
Formalization Note The book's statement is the termination claim; part 2 records what termination means for the method as defined on pp. 15–19 (it stops only when there is no entering candidate or no positive in the entering column), so the statement cannot hold merely because pivots fail to exist. Bland's rule compares the indices of Fin (n + m), decision variables before slacks.
import Mathlib import Definitions.Def_VanderbeiLP_Simplex_Dictionary import Definitions.Def_VanderbeiLP_Simplex_PivotRules
namespace VanderbeiLP.Simplex
/-- **Vanderbei, Theorem 3.3 (p. 31).** The simplex method always terminates provided that both
the entering and the leaving variable are chosen according to Bland's rule. Started at any
feasible dictionary `D₀`:
1. there is no infinite sequence of Bland pivots starting at `D₀`;
2. a finite sequence of Bland pivots leads from `D₀` to a dictionary at which the method stops,
either optimal (no `c̄_j > 0`) or exhibiting unboundedness (the Bland entering column has
no `ā_{ik} > 0`). -/
theorem bland_rule_terminates {m n : ℕ} (A : Matrix (Fin m) (Fin n) ℝ)
(b : Fin m → ℝ) (c : Fin n → ℝ) (D₀ : Dictionary A) (h0 : D₀.IsFeasible b) :
(¬ ∃ D : ℕ → Dictionary A, D 0 = D₀ ∧
∀ t, Dictionary.IsBlandPivot b c (D t) (D (t + 1))) ∧
∃ (T : ℕ) (D : ℕ → Dictionary A), D 0 = D₀ ∧
(∀ t < T, Dictionary.IsBlandPivot b c (D t) (D (t + 1))) ∧
(D T).IsBlandTerminal c := by sorry
end VanderbeiLP.Simplex
Confirmed by the mission captain (proposal self-audit).
Confirmed by the moderator at approval.