Walks and graph distance in the vertex-edge graph of a polytope
DefinitionHirsch_walkVocabulary for diameter inductions on H-polytopes, extending the mission's base model Hirsch_model (which defines the H-polytope , adjacency , and the walk predicate ).
Reach P L u v — there is a walk of exactly steps in the vertex-edge graph of , each step either stationary () or along an edge (). This is precisely the body of : by definition,
recorded as the (definitional) lemma diamLE_iff_reach. Since stationary steps are allowed, is monotone in .
gdist P u v — the combinatorial (graph) distance from to in the vertex-edge graph of : the least with , and the junk value when no walk exists (Lean's sInf of an empty set of naturals).
These are the objects every layer-by-distance argument on polytope graphs (Barnette–Larman, Kalai–Kleitman) manipulates: distance layers from a base vertex, monotonicity and concatenation of walks, and distance comparison between a polytope and its relaxations. Publishing them as a shared definition lets such lemmas be stated on the platform without each proof re-minting a private Reach.
Formalization Note Reach and gdist are defined for an arbitrary real vector space and set , exactly as Adj and DiamLE are in Hirsch_model. gdist is noncomputable. The only lemmas included are the definitional unfolding diamLE_iff_reach and the trivial reach_zero.
import Mathlib
import Definitions.Def_Hirsch_model
/-!
# Walks and graph distance in the vertex-edge graph of a polytope
Vocabulary for diameter inductions on H-polytopes. `Reach P L u v` is the body of
`DiamLE`: a walk of exactly `L` steps from `u` to `v`, each step either stationary or
along an edge of `P`. `gdist P u v` is the least such `L` (the combinatorial distance),
with the junk value `0` when no walk exists.
-/
namespace Hirsch
/-- `Reach P L u v`: there is a walk `w 0 = u, …, w L = v` of exactly `L` steps in the
vertex-edge graph of `P`, each step either stationary (`w i = w (i+1)`) or along an
edge (`Adj P (w i) (w (i+1))`). `DiamLE P B` is exactly `∀ u v` extreme, `Reach P B u v`. -/
def Reach {E : Type*} [AddCommGroup E] [Module ℝ E] (P : Set E) (L : ℕ) (u v : E) : Prop :=
∃ w : ℕ → E, w 0 = u ∧ w L = v ∧ ∀ i < L, w i = w (i + 1) ∨ Adj P (w i) (w (i + 1))
/-- The combinatorial (graph) distance from `u` to `v` in the vertex-edge graph of `P`:
the least `L` with `Reach P L u v`, and `0` if there is no walk at all. -/
noncomputable def gdist {E : Type*} [AddCommGroup E] [Module ℝ E] (P : Set E) (u v : E) : ℕ :=
sInf {L | Reach P L u v}
theorem diamLE_iff_reach {E : Type*} [AddCommGroup E] [Module ℝ E] (P : Set E) (B : ℕ) :
DiamLE P B ↔ ∀ u ∈ Set.extremePoints ℝ P, ∀ v ∈ Set.extremePoints ℝ P, Reach P B u v :=
Iff.rfl
theorem reach_zero {E : Type*} [AddCommGroup E] [Module ℝ E] (P : Set E) (u : E) :
Reach P 0 u u :=
⟨fun _ => u, rfl, rfl, fun i hi => absurd hi (Nat.not_lt_zero i)⟩
end Hirsch