Documentation

HexGraphIso.Nauty.Sparse.MaxFirstPairs

theorem Hex.GraphIso.Nauty.Sparse.Max.FirstInput.pairs_out {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel last : Nat} {f : Frame n} {parents : Parents n} {leaf : State n} (h : FirstInput G tcLevel f parents) (path : Generic.FirstPath (Graph.ofGraph G.graph) tcLevel fuel f.level f.numcells f.entry last leaf) :
PairsOk G (Generic.node true (Graph.ofGraph G.graph) (n + 2) tcLevel fuel f.level f.numcells f.entry).snd

First-descent entry invariants supply valid pruning pairs throughout the complete executed first call, including its later siblings.

theorem Hex.GraphIso.Nauty.Sparse.Max.FirstInput.pairs_back {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel tv last : Nat} {f : Frame n} {parents : Parents n} {leaf : State n} {bs fs : List Nat} (h : FirstInput G tcLevel f 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) (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) (resume : have p := Frame.firstParent G.graph tcLevel f [] tv; Resumed G tcLevel p bs fs (Parent.firstBack G.graph tcLevel fuel p) parents) :
have p := Frame.firstParent G.graph tcLevel f [] tv; PairsReady G tcLevel f.level (Frame.target G.graph tcLevel f).numcells (Parent.firstBack G.graph tcLevel fuel p)

Native first-child cleanup and recovery restore the complete pruning workspace at its parent. The fixed-point set is restored literally, and the implicit-pair boundary is inherited from the actual first call.