First-code agreement remains above the sentinel after the first leaf.
Equations
- Hex.GraphIso.Nauty.Depth last st = (st.eqlevFirst ≤ last ∧ st.firstcode[last + 1]! = Hex.GraphIso.Nauty.codeSentinel)
Instances For
theorem
Hex.GraphIso.Nauty.Depth.mono
{n : Nat}
{κ : Type}
{last : Nat}
{st out : SearchState n κ}
(h : Depth last st)
(hle : out.eqlevFirst ≤ st.eqlevFirst)
(href : out.reference = st.reference)
:
Depth last out
Lowering agreement while preserving the reference preserves its depth bound.
theorem
Hex.GraphIso.Nauty.compareCodes_depth
{n : Nat}
{κ : Type}
{last level code : Nat}
{st : SearchState n κ}
(h : Depth last st)
(hcode : code < codeSentinel)
:
Depth last (compareCodes level code st)
A real refinement code cannot advance agreement through the saved sentinel.
theorem
Hex.GraphIso.Nauty.chooseTarget_le
{n : Nat}
(ctx : Ctx n)
(tcLevel level numcells : Nat)
(st : Search n)
:
Target selection can only lower first-code agreement.
theorem
Hex.GraphIso.Nauty.classify_eqlev
{n : Nat}
(ctx : Ctx n)
(level numcells : Nat)
(st : Search n)
:
Classification preserves the first-code agreement counter.
theorem
Hex.GraphIso.Nauty.leafExit_eqlev
{n : Nat}
{κ : Type}
(leaf : Leaf)
(level : Nat)
(st : SearchState n κ)
:
Leaf actions preserve the first-code agreement counter.
theorem
Hex.GraphIso.Nauty.recover_le
{n : Nat}
{κ : Type}
(inf level : Nat)
(st : SearchState n κ)
:
Recovery can only lower first-code agreement.
theorem
Hex.GraphIso.Nauty.depthPolicy
{n : Nat}
(ctx : Ctx n)
(inf tcLevel last : Nat)
:
Generic.StablePolicy ctx inf tcLevel (Depth last) fun (code : Nat) => code < codeSentinel
The search preserves the sentinel depth bound on off-path calls and later siblings.
theorem
Hex.GraphIso.Nauty.sweep_depth
{n : Nat}
{ctx : Ctx n}
{first : Bool}
{inf tcLevel fuel cfuel level numcells tc tv1 index last : Nat}
{cursor : Option Nat}
{cell : VSet n}
{st : Search n}
(h : Depth last st)
(hpast : Generic.Past first tv1 cursor)
:
Later siblings preserve the same bound, including during a first-path sweep.
theorem
Hex.GraphIso.Nauty.firstPath_depth
{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.firstcode.size = n + 2)
(hlast : last ≤ n)
:
A full first-path call retains the bound installed at its actual first leaf.