def
Hex.GraphIso.Nauty.Sparse.CountTrace.Control.binary
{n : Nat}
(c : Control n)
(first cut last : Nat)
:
Control n
Control at the singleton splitter's conditional fragment finalization. Uniform predicate classes do not close a boundary or enqueue a fragment.
Equations
Instances For
theorem
Hex.GraphIso.Nauty.Sparse.binary_control
{n : Nat}
(level first cut last : Nat)
(s : RefineSt n)
(lab starts : Array Nat)
:
have r :=
(have s := s;
have starts := starts;
have __do_jp := fun (__r : PUnit) (s : RefineSt n) (starts : Array Nat) =>
pure
{ lab := lab, ptn := s.ptn, active := s.active, queue := s.queue, cellstart := starts, cellend := s.cellend,
indexed := s.indexed, hits := s.hits, marks := s.marks, vmarks := s.vmarks, stamp := s.stamp,
numcells := s.numcells, longcode := s.longcode };
if (cut != last && cut != first) = true then
have __do_jp := fun (__r : PUnit) (starts : Array Nat) =>
have __do_jp := fun (__r : PUnit) (starts : Array Nat) =>
have s :=
{ lab := s.lab, ptn := s.ptn.set! (cut - 1) level, active := s.active, queue := s.queue,
cellstart := s.cellstart, cellend := (s.cellend.set! first (cut - 1)).set! cut (last - 1),
indexed := s.indexed, hits := s.hits, marks := s.marks, vmarks := s.vmarks, stamp := s.stamp,
numcells := s.numcells + 1, longcode := s.longcode };
have s := s.hash cut;
if (decide (cut - first ≤ last - cut) && !s.active.mem first) = true then
have s := s.push first;
__do_jp PUnit.unit s starts
else have s := s.push cut;
__do_jp PUnit.unit s starts;
if (last == cut + 1) = true then
have starts := starts.set! lab[cut]! n;
__do_jp PUnit.unit starts
else __do_jp PUnit.unit starts;
if (cut == first + 1) = true then
have starts := starts.set! lab[first]! n;
__do_jp PUnit.unit starts
else __do_jp PUnit.unit starts
else __do_jp PUnit.unit s starts).run;
Binary.Result level first cut last s lab starts r
The singleton splitter's actual endpoint, sentinel, hash and queue finalization has the stated observations; the label and cache arrays keep their executed representation and ownership transfers.