theorem
Hex.GraphIso.Nauty.SearchOk.vertex_key
{n k : Nat}
{G : Colored n k}
{ctx : Ctx n}
{st : Search n}
{level numcells tc len v fuel : Nat}
{γ : Array Nat}
(h : SearchOk G level numcells st)
(hn0 : 0 < n)
(hlevel : 1 ≤ level)
(hgsz : ctx.g.size = n)
(ha : checkAutom ctx.g γ = true)
(hstab : CellStab st.ptn level st.lab γ)
(hc : IsCell st.ptn level tc len)
(hr : tc + len ≤ n)
(hv : (windowSet n st.lab tc len).mem v = true)
(hfuel : level + 1 + fuel ≤ n + 1)
(tcLevel : Nat)
:
A checked cell stabilizer identifies the child keys at the vertices it carries, independently of their offsets in the target cell.
theorem
Hex.GraphIso.Nauty.SearchOut.breakoutPerm
{n k : Nat}
{G : Colored n k}
{level numcells tc len o : Nat}
{st out : Search n}
(h : SearchOut G level level st out)
(hok : SearchOk G level numcells st)
(hout : SearchOk G level numcells out)
(hn0 : 0 < n)
(hlevel : 1 ≤ level)
(hcell : IsCell st.ptn level tc len)
(hlen : 2 ≤ len)
(hrange : tc + len ≤ n)
(ho : o < len)
:
A recovered loop state individualizes the same vertex as its frozen entry frame, possibly at a different offset within the target cell. The two resulting child labellings remain cell-equivalent.
theorem
Hex.GraphIso.Nauty.SearchOut.child_key
{n k : Nat}
{G : Colored n k}
{ctx : Ctx n}
{level numcells tc len o specFuel tcLevel : Nat}
{st out child : Search n}
(h : SearchOut G level level st out)
(hok : SearchOk G level numcells st)
(hout : SearchOk G level numcells out)
(hn0 : 0 < n)
(hlevel : 1 ≤ level)
(hcell : IsCell st.ptn level tc len)
(hlen : 2 ≤ len)
(hrange : tc + len ≤ n)
(ho : o < len)
(hclab : child.lab = (breakout n out.lab out.ptn (level + 1) tc st.lab[tc + o]!).fst)
(hcptn : child.ptn = (breakout n out.lab out.ptn (level + 1) tc st.lab[tc + o]!).snd.fst)
(hcactive : child.active = (breakout n out.lab out.ptn (level + 1) tc st.lab[tc + o]!).snd.snd)
(hcanon : child.canonlab = out.canonlab)
(hfuel : level + 1 + specFuel ≤ n + 1)
:
Individualizing the same vertex after recovering its parent leaves the specification child key unchanged, despite within-cell label movement.
theorem
Hex.GraphIso.Nauty.SearchOut.vertex_key
{n k : Nat}
{G : Colored n k}
{ctx : Ctx n}
{level numcells tc len v fuel tcLevel : Nat}
{st out : Search n}
(h : SearchOut G level level st out)
(hok : SearchOk G level numcells st)
(hout : SearchOk G level numcells out)
(hn0 : 0 < n)
(hlevel : 1 ≤ level)
(hc : IsCell st.ptn level tc len)
(hlen : 2 ≤ len)
(hr : tc + len ≤ n)
(hv : (windowSet n st.lab tc len).mem v = true)
(hfuel : level + 1 + fuel ≤ n + 1)
:
Recovery preserves each target vertex's child specification.