The generator-store cap. Beyond it, admission overwrites the last slot (bounded replacement) rather than stopping.
Equations
Instances For
Untrusted automorphism state threaded through the pruning producers.
Verified generators paired with their inverses.
- gen : Nat
Bumped on every successful admission (including cap-slot replacement), so per-node filter caches know when to refresh.
Union-find orbit array over vertices, for admission control.
- numorbits : Nat
Number of orbit classes of
orbits. The first leaf labelling seen by the current pass.
The previous leaf labelling seen by the current pass.
A fixed reference leaf from an earlier pass (the achiever).
Remaining node budget;
noneis unbounded.- exhausted : Bool
The budget ran out; the caller must discard the result.
Instances For
Fresh state over nn vertices.
Equations
- Hex.GraphIso.Nauty.AutState.init nn budget = { orbits := Array.range nn, numorbits := nn, budget := budget }
Instances For
Charge one node against the budget.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Hex.GraphIso.Nauty.isIdentity γ nn = (List.range nn).all fun (v : Nat) => γ[v]! == v
Instances For
Admit one candidate automorphism: reject the identity and
duplicates, verify with the checker's own checkAutom, and store the
inverse alongside. Admission past the cap overwrites the last slot,
preferring generators that merge orbits.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Harvest generators at a leaf: compose the leaf labelling against the pass's first leaf, the previous leaf, and the fixed reference leaf.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Does γ map every cell bitset onto itself? Since the cells
partition the vertices and γ is a bijection, per-cell image equality
is exactly setwise cell preservation. Untrusted fast filter.
Equations
- Hex.GraphIso.Nauty.respectsMasks masks γ = masks.all fun (m : Hex.GraphIso.Nauty.VSet n) => Hex.GraphIso.Nauty.VSet.image (fun (w : Nat) => γ[w]!) m == m
Instances For
The emission predicate for witness-composed automorphisms: the trusted automorphism check, the earlier-offset requirement, and the replay's cell-transport check. Rechecking the witness here makes certificate-store validity local to the producer: a malformed cached generator or composition can only turn this prune into an ordinary descent, rather than invalidate the whole candidate certificate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Search for a witness pruning target-cell offset o onto an
earlier offset: breadth-first search from v = rsLab[tc + o] over the
filtered generators and their inverses, composing the witness along
the path. The caller decides how to validate the returned witness:
the key search may rely on the untrusted filters alone (a wrong skip
is caught by the trusted replay), while certificate emission runs the
literal checker predicate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The per-node generator filter, cached against the admission generation: recompute only when generators were admitted since the cache was built (freezing at node entry would lose prunes from generators discovered under earlier children).
Equations
Instances For
Build the certificate tree for the final best key, emitting
.autom records for target-cell offsets reachable from an earlier
offset through verified automorphisms. Untrusted; checkKey
revalidates everything.
Equations
- One or more equations did not get rendered due to their size.
- Hex.GraphIso.Nauty.certifyNodeAutom ctx tcLevel 0 x✝⁶ x✝⁵ x✝⁴ x✝³ x✝² x✝¹ x✝ = (Hex.GraphIso.Nauty.CertNode.codePrune, x✝)
Instances For
Trace-driven candidate production: the transcribed search runs once with tracing on, and the certificate pass translates its trace into a certificate against the traced key. The trace supplies the harvested generators, the achieving labelling, and the recorded code chain, which the checker accepts because the specification and the search share one code coordinate system. No second search runs. The node budget bounds the traced walk. This produces a candidate only. Nothing here is trusted.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Produce a checked canonical-key certificate: the pruned
branch-and-bound search finds the best key, the pruning certificate
pass rebuilds the tree against it, and the trusted checkKey replay
validates the pair. budget caps the traced walk's node count; with
none the walk is unbounded. none is returned on budget exhaustion
as well as on validation failure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every key a successful certifyKey? returns is the spec key.