Ridge-visible neighbour in the one-collision regime
ProvedHirsch.ridge_visible_neighbor_of_n_eq_two_d_add_twoLet be a bounded simple H-polytope with inequalities. Simplicity means every vertex is tight on exactly rows. Let be a describing row that is tight at two distinct vertices . Then every vertex of is ridge-visible to row , or is adjacent to a ridge-visible vertex.
Ridge-visible means is tight on row , or tight on some other row that meets row inside . The cases (distance ) and (distance at most , by leave-one ray shooting) are already proved. The new layer is .
If is not ridge-visible, its tight rows are far from , and contribute at least near rows. That leaves at most one leftover far inequality . Every leave-one extreme ray from that misses the near rows must therefore enter this same . The feasible region is then contained in the simplicial cone at cut by the halfspace of , which is the simplex spanned by and its neighbours. Every generator of that simplex is strictly slack on row , so every point of is strictly slack on row , contradicting tightness of .
for simple bounded H-polytopes, on any row attained at two vertices.
This is the one-collision layer of the ridge-visible recurrence. It does not treat , where two leftover far rows appear and the far polyhedron may be a product of simplices, and it does not by itself close the polynomial Hirsch conjecture.
Formalization Note Boundedness guarantees that each extreme ray from a simple vertex hits a new inequality in finite time. Dual-basis leave-one directions give barycentric coordinates on the simplex. The adjacent vertices are constructed by ray shooting; the segment cut by the remaining equalities is an edge.
import Mathlib import Definitions.Def_Hirsch_model open scoped RealInnerProductSpace open Set Hirsch
namespace Hirsch
theorem ridge_visible_neighbor_of_n_eq_two_d_add_two
{d n : ℕ} (hn : n ≤ 2 * d + 2)
(a : Fin n → EuclideanSpace ℝ (Fin d)) (b : Fin n → ℝ)
(hbd : Bornology.IsBounded (Hpoly a b))
(hsimple : ∀ x ∈ extremePoints ℝ (Hpoly a b),
(Finset.univ.filter (fun j : Fin n => ⟪a j, x⟫ = b j)).card = d)
(i : Fin n)
{z₁ z₂ : EuclideanSpace ℝ (Fin d)}
(hz₁ : z₁ ∈ extremePoints ℝ (Hpoly a b))
(hz₂ : z₂ ∈ extremePoints ℝ (Hpoly a b))
(hne : z₁ ≠ z₂)
(hzi₁ : ⟪a i, z₁⟫ = b i)
(hzi₂ : ⟪a i, z₂⟫ = b i)
(u : EuclideanSpace ℝ (Fin d))
(hu : u ∈ extremePoints ℝ (Hpoly a b)) :
(⟪a i, u⟫ = b i ∨
∃ r : Fin n, r ≠ i ∧ ⟪a r, u⟫ = b r ∧
∃ x ∈ Hpoly a b, ⟪a i, x⟫ = b i ∧ ⟪a r, x⟫ = b r) ∨
∃ w, w ∈ extremePoints ℝ (Hpoly a b) ∧ Adj (Hpoly a b) u w ∧
(⟪a i, w⟫ = b i ∨
∃ r : Fin n, r ≠ i ∧ ⟪a r, w⟫ = b r ∧
∃ x ∈ Hpoly a b, ⟪a i, x⟫ = b i ∧ ⟪a r, x⟫ = b r) := by sorry
end Hirsch