Documentation

HexGraphIso.Nauty.Sparse.Descent

theorem Hex.GraphIso.Nauty.Sparse.visit_equitable {n : Nat} (G : SparseGraph n) (level numcells : Nat) (s : State n) (hp : s.lab.toList.Perm (List.range n)) (h : NodeOk n level s.lab s.ptn s.active) (hb : Scratch.Bounded n s.canong.scratch) (hc : numcells = bcount s.ptn level n) (hinv : CertInv (Graph.context G) level { lab := s.lab, ptn := s.ptn, active := s.active, numcells := numcells, hint := 0, maxpos := 0, longcode := numcells }) :
have t := (visit (Graph.ofGraph G) level numcells s).snd.snd; Equitable (Graph.context G) level t.lab t.ptn

The production visit runs the certified sparse refinement.

theorem Hex.GraphIso.Nauty.Sparse.child_equitable {n : Nat} (G : SparseGraph n) (first : Bool) (level numcells tc len o : Nat) (s : State n) (hp : s.lab.toList.Perm (List.range n)) (h : NodeOk n level s.lab s.ptn s.active) (hb : Scratch.Bounded n s.canong.scratch) (hl : level ≤ n) (hcount : numcells = bcount s.ptn level n) (heq : Equitable (Graph.context G) level s.lab s.ptn) (hc : IsCell s.ptn level tc len) (hr : tc + len ≤ n) (hn : 1 < len) (ho : o < len) :
have child := Generic.Policy.child first level tc s.lab[tc + o]! s; have result := visit (Graph.ofGraph G) (level + 1) (numcells + 1) child; result.snd.snd.lab.toList.Perm (List.range n) ∧ NodeOk n (level + 1) result.snd.snd.lab result.snd.snd.ptn result.snd.snd.active ∧ Scratch.Valid n result.snd.snd.lab result.snd.snd.ptn (level + 1) result.snd.snd.canong.scratch ∧ result.fst = bcount result.snd.snd.ptn (level + 1) n ∧ Equitable (Graph.context G) (level + 1) result.snd.snd.lab result.snd.snd.ptn

Every individualized target-cell member has an equitable child after the actual sparse policy's cache invalidation and production visit.