Tilting one row through an edge: vertex labels, graph contraction, and the first-step landing
ProvedHirsch.spindle_edge_split_label_graphLet be bounded with ; let be adjacent vertices on row , a vertex with row slack, a direction with , and the point of with . Assume every vertex of on row other than has exactly tight rows, and that the rows other than tight at have kernel contained in and meeting trivially. Replace by . Then for all sufficiently small : and are vertices of the tilted polytope, and there is a map from its vertices other than to vertices of with , sending edges between such vertices to edges of or points, and sending every neighbour of to or .
This is the geometric crux of Santos' strong -step theorem: the tilt creates the new vertex in the interior of the old edge , and the last claim is his observation that 'the first step out of the new facet lands on a facet at the same distance as before'. The proof uses finite determinant certificates for the tilt size: bases singular at give constant branches whose old face has only non-simple vertices on row , hence lies in ; rank analysis of common tight rows yields the edge statements.
import Mathlib import Definitions.Def_Hirsch_model open scoped RealInnerProductSpace open WithLp EuclideanSpace
namespace Hirsch
theorem spindle_edge_split_label_graph
(m N : ℕ) (A : Fin N → EuclideanSpace ℝ (Fin m))
(B : Fin N → ℝ) (r : Fin N)
(p q c z h : EuclideanSpace ℝ (Fin m))
(hB : ∀ i, 0 < B i)
(hbd : Bornology.IsBounded (Hpoly A B))
(hp : p ∈ Set.extremePoints ℝ (Hpoly A B))
(hq : q ∈ Set.extremePoints ℝ (Hpoly A B))
(hz : z ∈ Set.extremePoints ℝ (Hpoly A B))
(hpq : Adj (Hpoly A B) p q)
(hrp : ⟪A r, p⟫ = B r) (hrq : ⟪A r, q⟫ = B r)
(hrz : ⟪A r, z⟫ < B r)
(hhp : ⟪h, p⟫ < 0) (hhq : 0 < ⟪h, q⟫)
(hc : c ∈ segment ℝ p q) (hhc : ⟪h, c⟫ = 0)
(hsimple : ∀ x ∈ Set.extremePoints ℝ (Hpoly A B),
⟪A r, x⟫ = B r → x ≠ p → x ≠ q →
(Finset.univ.filter (fun i : Fin N => ⟪A i, x⟫ = B i)).card = m)
(hdel : ∀ e : EuclideanSpace ℝ (Fin m),
(∀ i, i ≠ r → ⟪A i, c⟫ = B i → ⟪A i, e⟫ = 0) →
⟪A r, e⟫ = 0 ∧ (⟪h, e⟫ = 0 → e = 0)) :
∃ η : ℝ, 0 < η ∧ ∀ s : ℝ, 0 < s → s < η →
let As := fun i => if i = r then A i + s • h else A i
c ∈ Set.extremePoints ℝ (Hpoly As B) ∧
z ∈ Set.extremePoints ℝ (Hpoly As B) ∧
∃ φ : EuclideanSpace ℝ (Fin m) → EuclideanSpace ℝ (Fin m),
φ z = z ∧
(∀ x ∈ Set.extremePoints ℝ (Hpoly As B), x ≠ c →
φ x ∈ Set.extremePoints ℝ (Hpoly A B)) ∧
(∀ x y, x ≠ c → y ≠ c → Adj (Hpoly As B) x y →
φ x = φ y ∨ Adj (Hpoly A B) (φ x) (φ y)) ∧
(∀ x, Adj (Hpoly As B) c x → φ x = p ∨ φ x = q) := by sorry
end Hirsch