theorem
Hex.GraphIso.Nauty.classify_internal_state
{n : Nat}
{ctx : Ctx n}
{level numcells : Nat}
{st : Search n}
(h : (classify ctx level numcells st).fst = Generic.Leaf.internal)
:
An internal classification returns the input state unchanged.
theorem
Hex.GraphIso.Nauty.leafExit_trace
{n : Nat}
{κ : Type}
(leaf : Leaf)
(level : Nat)
(st : SearchState n κ)
:
The two automorphism verdicts append exactly the scratch permutation.
theorem
Hex.GraphIso.Nauty.leafExit_checked
{n : Nat}
{ctx : Ctx n}
{level : Nat}
{st : Search n}
(h : TraceOk ctx st)
(leaf : Leaf)
(hcheck : leaf = Generic.Leaf.autoFirst ∨ leaf = Generic.Leaf.autoCanon → checkAutom ctx.g st.workperm = true)
:
Only the two automorphism verdicts append a permutation. Both require a checked scratch value.
theorem
Hex.GraphIso.Nauty.Aligned.first_checked
{n k : Nat}
{G : Colored n k}
{ctx : Ctx n}
{tcLevel level numcells : Nat}
{root : RefineSt n}
{st out : Search n}
(h : Aligned ctx st.gcaFirst root level level numcells st)
(href : FirstRef ctx tcLevel st.gcaFirst root st)
(hdepth : Depth href.last st)
(hsmall : SubtreeOk ctx st.gcaFirst root)
(hok : SearchOk G level numcells st)
(hauto : Nauty.classify ctx level numcells st = (Generic.Leaf.autoFirst, out))
(hwork : st.workperm.size = n)
(hgsz : ctx.g.size = n)
(hsymm : ∀ (u v : Nat), u < n → v < n → ctx.g[u]!.mem v = ctx.g[v]!.mem u)
(hloop : ∀ (v : Nat), v < n → ctx.g[v]!.mem v = false)
:
At a discrete node, alignment supplies the two histories required by cheap admission.
theorem
Hex.GraphIso.Nauty.classify_first_scanned
{n : Nat}
{ctx : Ctx n}
{level numcells : Nat}
{st out : Search n}
(hauto : classify ctx level numcells st = (Generic.Leaf.autoFirst, out))
(hnoncheap : st.gcaFirst < st.noncheaplevel)
(hwork : st.workperm.size = n)
(hfirst : st.firstlab.size = n)
(hfirstPerm : st.firstlab.toList.Perm (List.range n))
(hlab : st.lab.size = n)
(hlabPerm : st.lab.toList.Perm (List.range n))
(hsymm : ∀ (u v : Nat), u < n → v < n → ctx.g[u]!.mem v = ctx.g[v]!.mem u)
(hloop : ∀ (v : Nat), v < n → ctx.g[v]!.mem v = false)
:
A code-one admission outside a cheap ancestor is justified by its explicit scan.