theorem
Hex.GraphIso.Nauty.Generation.match_recover
{n : Nat}
{st : SearchSt n}
{level inf : Nat}
(hlevel : level ≤ st.eqlevFirst)
:
Recovering a matching ancestor keeps the first-reference comparison live at precisely that ancestor.
theorem
Hex.GraphIso.Nauty.Generation.match_target
{n : Nat}
{ctx : Ctx n}
{lab ptn : Array Nat}
{level tcLevel : Nat}
(heq : Equitable ctx level lab ptn)
(hlab : LabOk lab n)
(hlsz : lab.size = n)
(hpsz : ptn.size = n)
(hend : ptn[ptn.size - 1]! ≤ level)
{hint : Int}
(hhint : hint = Int.ofNat (specTargetcell ctx lab ptn level tcLevel))
:
A first-reference target hint equal to the specification's choice cannot demote the first-reference comparison.
theorem
Hex.GraphIso.Nauty.Generation.scatter_renaming
{n : Nat}
{ref : Array Nat}
(σ : Renaming n)
(hsize : ref.size = n)
(hperm : ref.toList.Perm (List.range n))
:
Scattering a permutation labelling onto its renamed copy reconstructs the renaming's complete array.
theorem
Hex.GraphIso.Nauty.Generation.match_emits
{n k : Nat}
{G : Colored n k}
{st : SearchSt n}
{level : Nat}
{p : Perm n}
(hp : IsIso G G p)
(hsize : st.firstlab.size = n)
(hperm : st.firstlab.toList.Perm (List.range n))
(hlab : st.lab = Array.map (renamingOf p).toFun st.firstlab)
(hlevel : st.eqlevFirst = level)
(hsent : st.firstcode[level + 1]! = codeSentinel)
:
(processnode { g := rowsOf G } level n st).snd.genTrace = st.genTrace.push (renamingArray (renamingOf p))
Reaching the renamed first-reference leaf emits that exact permutation, even if the canonical incumbent is strictly greater.