Documentation

HexGraphIso.Nauty.Sparse.DistanceTransport

theorem Hex.GraphIso.Nauty.Sparse.split_distances_equiv {n : Nat} (σ : Renaming n) (level : Nat) (s t : RefineSt n) (hs : RefineSt.Valid level s) (ht : RefineSt.Valid level t) (hv : ∀ (v : Nat), v < n → s.hits[v]! ≤ n) (hw : ∀ (v : Nat), v < n → t.hits[v]! ≤ n) (hkeys : ∀ (v : Nat), v < n → t.hits[σ.toFun v]! = s.hits[v]!) (he : RefineSt.Equiv σ level s t) :
have run := fun (s : RefineSt n) => (have state := s; have first := 0; do let __s ← forIn [:n] (state, first) fun (x : Nat) (__s : RefineSt n × Nat) => have state := __s.fst; have first := __s.snd; if first ≥ n then pure (ForInStep.done (state, first)) else have last := state.cellend[first]!; have __do_jp := fun (__r : PUnit) (state : RefineSt n) => have first := last + 1; pure (ForInStep.yield (state, first)); if first < last then have state := splitCounts level first true state; __do_jp PUnit.unit state else __do_jp PUnit.unit state have state : RefineSt n := __s.fst pure state).run; RefineSt.Equiv σ level (run s) (run t)

The complete literal distance-cell loop preserves all refinement observations under renaming, given transported native distances.