Accept one raw generator array from the traversal: rebuild it as a
permutation of Fin n and check that it is an automorphism. This is
the only step that admits a generator, and the admission test is
checkIso.
Equations
- Hex.GraphIso.autom? G γ = match Hex.Perm.ofNatArray? n γ with | some p => if Hex.GraphIso.checkIso G G p = true then some p else none | none => none
Instances For
theorem
Hex.GraphIso.Aut.checked_perm
{n k : Nat}
{G : Colored n k}
{γ : Array Nat}
(h : Nauty.checkAutom (Nauty.rowsOf G) γ = true)
:
The row checker supplies a typed permutation with exactly the array's entries. Colour preservation is a separate obligation.
theorem
Hex.GraphIso.Aut.admit
{n k : Nat}
{G : Colored n k}
{γ : Array Nat}
(hcheck : Nauty.checkAutom (Nauty.rowsOf G) γ = true)
(hcolor : Nauty.ColorMap G γ)
:
A row-checked array preserving the initial colours passes the public admission filter.
theorem
Hex.GraphIso.Aut.admit_scatter
{n k : Nat}
{G : Colored n k}
{γ ref cur : Array Nat}
(hn : 0 < n)
(hrefSize : ref.size = n)
(href : Nauty.CellsReach G ref)
(hcur : Nauty.CellsReach G cur)
(hcheck : Nauty.checkAutom (Nauty.rowsOf G) γ = true)
(hmap : ∀ (i : Nat), i < n → γ[ref[i]!]! = cur[i]!)
:
A scatter between two reached labellings preserves the initial colouring, so its row-check certificate passes the public filter.
theorem
Hex.GraphIso.Aut.admit_root
{n k : Nat}
{G : Colored n k}
{γ : Array Nat}
(hcheck : Nauty.checkAutom (Nauty.rowsOf G) γ = true)
(hstab : Nauty.CellStab (Nauty.initPtn n (n + 2) (Nauty.initialPartition G).snd) 1 (Nauty.initialPartition G).fst γ)
:
A root-ledger carrier preserves colours because it stabilizes every initial colour cell. This includes carriers of implicit pruning pairs.