Documentation

HexGraphIso.Nauty.Sparse.MaxFirstSweep

theorem Hex.GraphIso.Nauty.Sparse.Max.FirstEntry.sweep_upper {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel tv last : Nat} {f : Frame n} {leaf : State n} {parents : Parents n} (h : FirstEntry G f) (hs : Scope G tcLevel f [] f.entry parents) (hi : (visit (Graph.ofGraph G.graph) f.level f.numcells f.entry).fst < n) (htv : (Generic.prepareFirst (Graph.ofGraph G.graph) tcLevel f.level f.numcells f.entry).snd.snd.fst.nextElem none = some tv) (horbit : (cheapCheck true f.level (Generic.prepareFirst (Graph.ofGraph G.graph) tcLevel f.level f.numcells f.entry).snd.snd.snd.snd).orbits[tv]! = tv) (path : have p := Frame.firstParent G.graph tcLevel f [] tv; Generic.FirstPath (Graph.ofGraph G.graph) tcLevel fuel (Parent.child G.graph tcLevel p).level (Parent.child G.graph tcLevel p).numcells (Parent.child G.graph tcLevel p).entry last leaf) (hf : n ≤ f.level + fuel) (hchild : have p := Frame.firstParent G.graph tcLevel f [] tv; have ch := Parent.child G.graph tcLevel p; Bounded (Frame.key G.graph tcLevel ch) none (State.best G.graph (Generic.node true (Graph.ofGraph G.graph) (n + 2) tcLevel fuel ch.level ch.numcells ch.entry).snd)) :
have p := Frame.firstParent G.graph tcLevel f [] tv; Bounded (Frame.key G.graph tcLevel f) none (State.best G.graph (Generic.sweep true (Graph.ofGraph G.graph) (n + 2) tcLevel fuel (n + 1) f.level (Frame.target G.graph tcLevel f).numcells p.tc tv (some tv) p.cell 0 p.state).snd.snd)

The actual first-child bound extends through the complete native sibling sweep, including local filters and nonlocal returns.

Native first preparation enters the literal sibling continuation when its refined partition remains nondiscrete.