theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.visit
{n k : Nat}
{G : Sparse.Colored n k}
{base cells level numcells : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(hp : Ready G base cells root)
(hi : NodeInv G level numcells st)
(hn : 0 < n)
(hb : 1 ≤ base)
(hlevel : base < level)
:
TraceFrame G base root (Sparse.visit (Graph.ofGraph G.graph) level numcells st).snd.snd
A native visit below the frozen ancestor preserves its references and trace while refining the current partition inside the ancestor cells.
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.record
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(level code : Nat)
:
TraceFrame G base root (recordFirst level code st)
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.compare
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(level code : Nat)
:
TraceFrame G base root (compareCodes level code st)
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.target
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(first : Bool)
(tcLevel level numcells : Nat)
:
TraceFrame G base root (chooseTarget first (Graph.ofGraph G.graph) tcLevel level numcells st).snd.snd.snd
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.cheap
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(first : Bool)
(level : Nat)
:
TraceFrame G base root (cheapCheck first level st)
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.terminal
{n k : Nat}
{G : Sparse.Colored n k}
{base cells level numcells : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(hp : Ready G base cells root)
(hr : Ready G level numcells st)
(hn : 0 < n)
(hb : 1 ≤ base)
(hlevel : base ≤ level)
:
TraceFrame G base root (firstterminal level st)
Installing a first leaf places both references in the current labels, which the incoming frame already locates inside the suspended ancestor.
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.child
{n k : Nat}
{G : Sparse.Colored n k}
{base cells level numcells : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(hp : Ready G base cells root)
(hr : Ready G level numcells st)
(hn : 0 < n)
(hb : 1 ≤ base)
(hlevel : base ≤ level)
(first : Bool)
{tc tv : Nat}
{cell : VSet n}
(ht : Generic.Target State.frame level tc cell st)
(hv : cell.mem tv = true)
:
TraceFrame G base root (Generic.Policy.child first level tc tv st)
Actual individualization stays inside every suspended ancestor frame, retaining its references and all previously emitted stabilizers.
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.afterChild
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(level tv : Nat)
:
TraceFrame G base root (afterChildFirst level tv st)
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.leave
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(tv : Nat)
:
TraceFrame G base root (Generic.Policy.leaveChild tv st)
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.recover
{n k : Nat}
{G : Sparse.Colored n k}
{base cells level : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(hp : Ready G base cells root)
(hn : 0 < n)
(hb : 1 ≤ base)
(hlevel : base ≤ level)
(hbound : level ≤ n)
:
TraceFrame G base root (Generic.Policy.recover (n + 2) level st)
Recovering a still-active ancestor preserves every coarser frozen frame and its references; the invalidated sparse cache retains its bounds.
theorem
Hex.GraphIso.Nauty.Sparse.TraceFrame.afterSweep
{n k : Nat}
{G : Sparse.Colored n k}
{base : Nat}
{root st : State n}
(h : TraceFrame G base root st)
(first : Bool)
(level size index : Nat)
:
TraceFrame G base root (Generic.Policy.afterSweep first level size index st)