Smale's ninth problem: no linear-time program
ProvedSmaleNinth.smale_ninth_no_linear_timeThe mission's goal asserts the existence of a program and constants such that decides within steps for all , , , . This statement settles the case negatively.
The assertion. For every program in the fixed instruction set of the mission's machine and every constant , there are , , and such that , started on the standard encoding, does not halt with the correct verdict within steps.
Reading. The exponent in the goal is genuinely needed: no algorithm in this model runs in time linear in the number of input reals. The reason is the fixed-address structure of the machine: a single-variable instance places each coefficient exactly cells away from its right-hand side , and the one-variable lower bound shows that a linear budget leaves too few boundary crossings to combine them. Taking , the input size is , so a linear budget is a linear budget for the one-variable problem, which is excluded.
What it leaves open. Everything with . The mission's goal is the assertion that some works; this theorem only shows that does not.
import Definitions.Def_Polyhedron import Definitions.Def_SmaleNinth_BSSMachine /-! The goal statement of the mission with the exponent fixed to `d = 1` is false: no uniform program decides LP feasibility within a bound linear in the input size `mn + m + 2`. Source: corollary of the one-variable lower bound `SmaleNinth.bss_one_variable_lp_no_linear_program` (crossing-sequence argument for fixed-address real machines): the instances with `n = 1` have input size `2m + 2`, so a linear budget for the goal is a linear budget for the one-variable problem. -/ open Matrix LinearOptimization /-- **Smale's ninth problem, degree-one exclusion.** For every program `P` and constant `C`, `P` does not decide LP feasibility within `C·(mn+m+2)` steps on all instances. -/
theorem SmaleNinth.smale_ninth_no_linear_time (P : BSSProgram) (C : ℕ) :
¬ ∀ (m n : ℕ) (A : Matrix (Fin m) (Fin n) ℝ) (b : Fin m → ℝ),
∃ result : Bool,
BSSDecidesInTime P (encodeLP A b) (C * (m * n + m + 2)) result ∧
(result = true ↔ (polyhedron A b).Nonempty) := by sorry