Documentation

HexGraphIso.Nauty.Sparse.MaxGuideBack

theorem Hex.GraphIso.Nauty.Sparse.Max.Parent.Guided.canon_return {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel : Nat} {p : Parent n} {after : Option (Key n)} (h : Guided G.graph tcLevel p) (hp : Valid G tcLevel p) (first : Bool) (hb : p.state.gcaCanon ≤ p.node.level) (hg : Grows (State.key G.graph p.bs p.state) after) (hd : Covers (key G.graph tcLevel p p.chosen) after) :
have ch := child G.graph tcLevel p; have raw := (Generic.node first (Graph.ofGraph G.graph) (n + 2) tcLevel fuel ch.level ch.numcells ch.entry).snd; have left := Generic.Policy.leaveChild p.chosen (if first = true then afterChildFirst p.node.level p.chosen raw else raw); CanonGuide p.node.level p.tc p.state (key G.graph tcLevel p) after (Generic.Policy.recover (n + 2) p.node.level left)

A completed native child supplies the canonical reference guide at recovery. Its coverage is the local induction premise; the reference's origin and containment follow from the executed child call.

theorem Hex.GraphIso.Nauty.Sparse.Max.Parent.Guided.back {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel : Nat} {p : Parent n} {ds fs : List Nat} {cell : VSet n} {tv : Nat} (h : Guided G.graph tcLevel p) (hp : Valid G tcLevel p) (hb : p.state.gcaCanon ≤ p.node.level) (hg : Grows (State.key G.graph p.bs p.state) (State.key G.graph ds (Parent.back G.graph tcLevel fuel p))) (hr : have ch := child G.graph tcLevel p; ReturnCodes G.graph ch.codes ds fs (Generic.node false (Graph.ofGraph G.graph) (n + 2) tcLevel fuel ch.level ch.numcells ch.entry).snd) (hd : have ch := child G.graph tcLevel p; Covers (Frame.key G.graph tcLevel ch) (State.best G.graph (Generic.node false (Graph.ofGraph G.graph) (n + 2) tcLevel fuel ch.level ch.numcells ch.entry).snd)) :
Guided G.graph tcLevel (p.next (Parent.back G.graph tcLevel fuel p) ds cell tv)

Returning from an actual off-path child establishes the covered references for the next sibling in its recovered label ordering.