Every off-path operation preserves the canonical row cache; a better verdict supplies the candidate prefix required by installation.
theorem
Hex.GraphIso.Nauty.sweep_store
{n : Nat}
{ctx : Ctx n}
{first : Bool}
{inf tcLevel fuel cfuel level numcells tc tv1 index : Nat}
{cursor : Option Nat}
{cell : VSet n}
{st : Search n}
(h : CanongInv ctx st.canong st.canonlab st.samerows)
(hpast : Generic.Past first tv1 cursor)
:
Later siblings preserve the canonical row-store invariant through every exit.
theorem
Hex.GraphIso.Nauty.firstPath_canong
{n : Nat}
{ctx : Ctx n}
{tcLevel fuel level numcells last : Nat}
{st leaf : Search n}
(hpath : Generic.FirstPath ctx tcLevel fuel level numcells st last leaf)
:
Before its first leaf the search has not changed the canonical row array.
theorem
Hex.GraphIso.Nauty.firstPath_store
{n : Nat}
{ctx : Ctx n}
{inf tcLevel fuel level numcells last : Nat}
{st leaf : Search n}
(hpath : Generic.FirstPath ctx tcLevel fuel level numcells st last leaf)
(hsize : st.canong.size = n)
:
A successful first-path call initializes and preserves the canonical row cache.