Documentation

HexGraphIso.Nauty.Sparse.CanonPair

theorem Hex.GraphIso.Nauty.Sparse.child_canon_stab {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel level numcells tc tv : Nat} {cell : VSet n} {base st : State n} {key : Nat → Key n} {best : Option (Key n)} (h : Ready G level numcells st) (hn : 0 < n) (hl : 1 ≤ level) (first childFirst : Bool) (ht : Generic.Target State.frame level tc cell st) (hv : cell.mem tv = true) (hbase : Ready G level numcells base) (hframe : FrameOut G level level base st) (hguide : CanonGuide level tc base key best st) :
have out := (Generic.node childFirst (Graph.ofGraph G.graph) (n + 2) tcLevel fuel (level + 1) (numcells + 1) (Generic.Policy.child first level tc tv st)).snd; out.gcaCanon = level → out.canonlab.size = n → (∀ (i : Nat), i < n → out.workperm[out.canonlab[i]!]! = out.lab[i]!) → CellStab base.ptn level base.lab out.workperm

The literal canonical scatter returned by a native child stabilizes the frozen parent cells. Both labels are related to those cells by the actual call's frame and canonical-reference provenance.

theorem Hex.GraphIso.Nauty.Sparse.child_canon_pair {n k : Nat} {G : Sparse.Colored n k} {tcLevel fuel level numcells tc tv : Nat} {cell : VSet n} {base st : State n} {key : Nat → Key n} {best : Option (Key n)} (h : Ready G level numcells st) (hn : 0 < n) (hl : 1 ≤ level) (first childFirst : Bool) (ht : Generic.Target State.frame level tc cell st) (hv : cell.mem tv = true) (hbase : Ready G level numcells base) (hframe : FrameOut G level level base st) (hguide : CanonGuide level tc base key best st) :
have out := (Generic.node childFirst (Graph.ofGraph G.graph) (n + 2) tcLevel fuel (level + 1) (numcells + 1) (Generic.Policy.child first level tc tv st)).snd; out.gcaCanon = level → out.canonlab.size = n → Automorphism G out.workperm → (∀ (i : Nat), i < n → out.workperm[out.canonlab[i]!]! = out.lab[i]!) → PairOk (Graph.context G.graph).g base.ptn base.lab level (fmperm out.workperm n).fst (fmperm out.workperm n).snd

Native automorphism soundness and the actual returned scatter justify its explicit pair at the receiving parent's frozen partition.