Prove2Me
Navigate
DiscoverCollectionsFormalpediaBlogsUsersMomentumMy Missions+
Prove2Me
⌕
Log in
← Formalpedia

Fourier-Motzkin elimination decides feasibility

Proved
SmaleNinth.lp_fourier_motzkin_decides

by Zexuan Liu · Sep 8, 2026 · Mathlib 0df444a (Lean v4.33.1)

decision-procedurefourier-motzkinlinear-programmingpolyhedra

The polyhedron {x∈Rn:Ax≥b}\{x \in \mathbb{R}^n : Ax \ge b\}{x∈Rn:Ax≥b} is nonempty if and only if the Fourier–Motzkin procedure of Definitions.Def_SmaleNinth_FourierMotzkin, run on the system, ends with a constant system all of whose right-hand sides are at most 000.

This is the correctness of the elimination method in full generality: each step removes one variable, keeping the rows whose coefficient of that variable vanishes and adding, for every ordered pair of rows whose coefficients have opposite signs, the combination in which the variable cancels; after nnn steps no variables remain and the answer is read off. The proof is an induction on the number of variables, the inductive step being that a single elimination preserves feasibility and the base case being that a system with no variables is feasible exactly when every right-hand side is nonpositive.

Two consequences are worth recording. First, feasibility of a linear system over the reals is decidable by a finite, purely algebraic procedure that uses only the ordered-field operations, so the same statement and proof hold verbatim over any ordered field. Second, the procedure is of polynomial size for each fixed number of variables: a step takes a count of NNN rows to at most N+N2N + N^2N+N2, so after nnn steps there are at most (m+1)2n(m+1)^{2^n}(m+1)2n rows, and feasibility of an nnn-variable system is equivalent to a conjunction of that many sign conditions on explicit polynomial expressions in the entries of AAA and bbb.

The second point is exactly where the method stops being useful for Smale's ninth problem. The bound is polynomial in the number of constraints only when the number of variables is fixed, and it is doubly exponential in the number of variables, whereas the problem asks for a number of arithmetic operations polynomial in both.

Preamble
import Definitions.Def_Polyhedron
import Definitions.Def_SmaleNinth_FourierMotzkin

/-!
Correctness of the Fourier-Motzkin decision procedure of
`Definitions.Def_SmaleNinth_FourierMotzkin`: after eliminating all the
variables, the system is feasible exactly when every remaining constant row is
satisfiable.

Source: J. B. J. Fourier (1826) and T. Motzkin (1936); see A. Schrijver,
*Theory of Linear and Integer Programming*, Wiley 1986, Section 12.2
(Theorem 12.3), and Bertsimas-Tsitsiklis, *Introduction to Linear
Optimization*, Athena Scientific 1997, Section 2.8.
-/

open Matrix LinearOptimization

/-- **Fourier-Motzkin elimination decides feasibility in every dimension.** -/
Formal statement
theorem SmaleNinth.lp_fourier_motzkin_decides {m n : ℕ} (A : Matrix (Fin m) (Fin n) ℝ)
    (b : Fin m → ℝ) :
    (polyhedron A b).Nonempty ↔ ElimFeas n (fun i k => A i k) b := by sorry
Source
J. B. J. Fourier (1826); T. Motzkin, Beitraege zur Theorie der linearen Ungleichungen, Dissertation, Basel 1936. See A. Schrijver, Theory of Linear and Integer Programming, Wiley 1986, Section 12.2 (Theorem 12.3: elimination of a variable and its iteration), and Bertsimas-Tsitsiklis, Introduction to Linear Optimization, Athena Scientific 1997, Section 2.8.

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