def
Hex.GraphIso.Nauty.Sparse.Limited.tail
{n : Nat}
{σ γ : Type}
[Generic.Policy σ n]
(next : Generic.SweepFn σ n)
(first : Bool)
(level nc tc size : Nat)
(cell : VSet n)
(s : σ)
:
The literal common tail of Generic.nodeStep, for either state type.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Hex.GraphIso.Nauty.Sparse.Limited.nodeStep_eq
{n : Nat}
{σ γ : Type}
[Generic.Policy σ n]
(g : γ)
(tcLevel : Nat)
(next : Generic.SweepFn σ n)
(first : Bool)
(level nc : Nat)
(s : σ)
:
Generic.nodeStep g tcLevel next first level nc s = have r := Generic.Policy.visit g level nc s;
have recorded :=
if first = true then Generic.Policy.recordFirst level r.snd.fst r.snd.snd
else Generic.Policy.compareCodes level r.snd.fst r.snd.snd;
have t := Generic.Policy.chooseTarget first g tcLevel level r.fst recorded;
if first = true then
if (r.fst == n) = true then
(Generic.Exit.unwind (level - 1) false, Generic.Policy.firstterminal level t.snd.snd.snd)
else tail next first level r.fst t.fst.toNat t.snd.snd.fst t.snd.fst t.snd.snd.snd
else have c := Generic.Policy.classify g level r.fst t.snd.snd.snd;
have e := Generic.Policy.leafExit c.fst level c.snd;
match e.fst with
| Generic.Exit.done => tail next first level r.fst t.fst.toNat t.snd.snd.fst t.snd.fst e.snd
| x => e
This decomposition is definitionally the executed node step.
theorem
Hex.GraphIso.Nauty.Sparse.Limited.cheap_ready
{n : Nat}
(first : Bool)
(level : Nat)
(s : State n)
:
theorem
Hex.GraphIso.Nauty.Sparse.Limited.afterSweep_ready
{n : Nat}
(first : Bool)
(level size index : Nat)
(s : State n)
:
theorem
Hex.GraphIso.Nauty.Sparse.Limited.afterSweep_value
{n : Nat}
(first : Bool)
(level size index : Nat)
{s : State n}
(hs : Ready s)
:
(Generic.Policy.afterSweep first level size index s).value = Generic.Policy.afterSweep first level size index s.value
theorem
Hex.GraphIso.Nauty.Sparse.Limited.tail_eq
{n : Nat}
{next : Generic.SweepFn (State n) n}
{plain : Generic.SweepFn (Sparse.State n) n}
(hn : SweepEq next plain)
(first : Bool)
(level nc tc size : Nat)
(cell : VSet n)
(s : State n)
(h : Ready (tail next first level nc tc size cell s).snd)
:
theorem
Hex.GraphIso.Nauty.Sparse.Limited.nodeStep_exhausted
{n : Nat}
(g : Graph n)
(tcLevel : Nat)
(next : Generic.SweepFn (State n) n)
(first : Bool)
(level nc : Nat)
(s : State n)
(hg : (s.exhausted || s.remaining == 0) = true)
:
Rejecting a visit produces an exhausted node immediately; it cannot call the supplied sibling continuation or execute native callbacks.
theorem
Hex.GraphIso.Nauty.Sparse.Limited.nodeStep_value
{n : Nat}
{next : Generic.SweepFn (State n) n}
{plain : Generic.SweepFn (Sparse.State n) n}
(hn : SweepEq next plain)
(g : Graph n)
(tcLevel : Nat)
(first : Bool)
(level nc : Nat)
(s : State n)
(h : Ready (Generic.nodeStep g tcLevel next first level nc s).snd)
:
Ready s ∧ nodeValue (Generic.nodeStep g tcLevel next first level nc s) = Generic.nodeStep g tcLevel plain first level nc s.value
An accepted bounded node takes exactly the native visit, classification and child-sweep path. Rejected visits cannot produce an accepted return.