theorem
Hex.GraphIso.Nauty.DescPath.append
{n : Nat}
{ctx : Ctx n}
{base level last : Nat}
{root middle leaf : RefineSt n}
{xs ys : List (Nat × Nat)}
(h₁ : DescPath ctx base root xs level middle)
(h₂ : DescPath ctx level middle ys last leaf)
:
Consecutive descents concatenate their individualization paths.
A list of target positions is stored at consecutive ancestor levels.
Equations
Instances For
theorem
Hex.GraphIso.Nauty.Follows.child
{n : Nat}
{ctx : Ctx n}
{store : Array Int}
{base level tc e o : Nat}
{root parent : RefineSt n}
(h : Follows ctx store base root level parent)
(hlevel : level < n)
(hcell : (tc, e) ∈ cells parent.ptn level n)
(hne : tc < e)
(ho : o ≤ e - tc)
(htc : store[level]! = Int.ofNat tc)
:
Individualizing a vertex in the stored target extends a descent.
theorem
Hex.GraphIso.Nauty.scatter_of_history
{n : Nat}
{ctx : Ctx n}
{st : Search n}
{level : Nat}
{cs fs : List Nat}
(hcodes : FirstCodeInv n cs fs st.firstcode st.eqlevFirst)
(heq : st.eqlevFirst = level)
(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)
{ancestor U V : RefineSt n}
(hsmall : SubtreeOk ctx st.gcaFirst ancestor)
(hU : Follows ctx st.firsttc st.gcaFirst ancestor fs.length U)
(hV : Follows ctx st.firsttc st.gcaFirst ancestor level V)
(hUd : ∀ (i : Nat), i < n → U.ptn[i]! ≤ fs.length)
(hVd : ∀ (i : Nat), i < n → V.ptn[i]! ≤ level)
(hfirst : st.firstlab = U.lab)
(hcurrent : st.lab = V.lab)
(hwork : st.workperm.size = n)
:
The first-code bound and stored descent histories justify cheap admission. Equal leaf depths and rows follow from the small-cell subtree theorem.