Every active frozen frame has the expected labelling size, and each installed leaf reference reaches all active frames no deeper than its current greatest-common-ancestor control.
Instances For
The off-path comparison step leaves the first GCA control unchanged.
The off-path comparison step leaves the canonical GCA control unchanged.
The off-path comparison step leaves the cheap-automorphism boundary unchanged.
The empty trail imposes no reference history.
Installing the first leaf seeds both reference histories from the current descent, while retaining the accumulated frozen-frame sizes.
When both installed references are the current labelling, the active trail itself supplies their complete history.
Reference history depends only on the two references and their GCA controls.
Refinement and the off-path comparison step retain both reference histories.
Recovering an ancestor preserves both reference histories. The canonical control may be clamped to the recovered level, which only weakens the reach it asserts.
A leaf event retains the first history. It either retains the canonical history as well or installs the current reached labelling as the new canonical reference.
processnode preserves the ordering of the first and canonical GCA
controls. Installing a new canonical leaf parks its control at the
current level, above the bounded first control.
Leaf cleanup changes neither installed reference nor its GCA control.
Pushing a child frame extends reference history. At the new frame, the loop's two reference receipts discharge the cases whose GCA control is exactly the parent level.
The concrete child state created by a verified sweep inherits both
reference histories. FrameRefs supplies the new parent-frame case.
All shallower frames come directly from the incoming history.
A scatter from the first reference onto the current labelling
stabilizes every active frame to which gcaFirst permits a return.
Appending a first-reference scatter preserves complete return
stabilization at gcaFirst.
A scatter from the canonical reference onto the current labelling
stabilizes every active frame through any bound no deeper than
gcaCanon. The smaller bound is needed by code two's orbit return to
gcaFirst.
Appending a canonical-reference scatter preserves complete return stabilization through any resumable bound below its GCA.
The exact canonical-GCA instance of canonStabTo.
A successful code-one admission extends the inherited ancestor stabilization and returns exactly to the first-reference GCA.
A code-two admission stabilizes either advertised return: the direct
canonical return uses the full canonical history, while the special orbit
return uses gcaFirst ≤ gcaCanon.
Refinement and the off-path comparison step leave the generator store unchanged.
A recursive result state with a faithful comparison path and every ancestor stabilization enabled by its returned level.
- intro {n k : Nat} {G : Colored n k} {ctx : Ctx n} {tcLevel : Nat} {stem fs : List Nat} {out : SearchSt n} {best : Option (Key n)} {trail : FrameTrail} {r : Int} (current : Nat) (codes bestCodes : List Nat) (event : RunEvent G ctx tcLevel current codes bestCodes fs out best trail) (depth : current = codes.length) (stemEq : List.take stem.length codes = stem) (past : stem.length < current) (returned : r ≤ Int.ofNat current) (stable : ReturnStab trail (min r (Int.ofNat out.gcaFirst)) out) (history : RefTrail ctx current out trail) : EventOut G ctx tcLevel stem fs out best trail r
Instances For
Every event state reads back the semantic incumbent recorded by its comparison machine. The row-rejection arm uses its reset zero-sign machine.
Fixed-point bookkeeping changes none of an event state's logical fields.
Clearing the one-shot short-prune flag changes none of an event state's logical fields.
Updating the first-path agreement counter changes none of an event state's logical fields.
Installing the first-path return controls preserves an event state once the caller supplies the new guide and numeric bounds.
Parking the cheap-automorphism boundary above the current event level preserves the event invariant.
The comparison-blind cleanup after an empty leaf sweep preserves an event state.
Leaf cleanup leaves the recorded-generator store unchanged.
A packaged event reads back its semantic incumbent.
Every event output retains a full-size canonical reference.
Every pair in a result workspace remains valid at the initial coloured partition.
Every event output exposes stabilization through the smaller of its return target and live first-reference GCA. Direct carrier returns need no stronger statement, while the orbit-return arm targets this GCA.
Recovering an event that returned exactly to level produces the
stable parent-loop state and retains its generator stabilization.
A stable state with a nonpositive comparison sign is an event output at its own code depth.
Weakening the returned level preserves an event output.
Fixed-point cleanup preserves the full result-side package.
Clearing the short-prune request preserves the full result package.
Updating the first-path agreement counter preserves the full result package.
An output trail retains every frame that was active on entry. A node may additionally replace deeper scratch entries used by its own recursive sweep.
Equations
- Hex.GraphIso.Nauty.TrailExt level before after = ∀ (target : Nat), target < level → after target = before target
Instances For
Retaining a pushed child trail retains every older parent frame.
Retaining a pushed child trail keeps the newly active parent frame at its exact level.
Location evidence can be moved between trails that agree at the unwind target.
A loop receipt depends on its trail only below the loop level.
The semantic node receipt and the concrete result state produced by one recursive node call.
- receipt : NodeReceipt receiptTrail ctx tcLevel specFuel runFuel level cs st out numcells best outBest r
- event : EventOut G ctx tcLevel cs fs out outBest eventTrail r
- preserved : TrailExt level receiptTrail eventTrail
Instances For
Forgetting the concrete result invariant recovers the semantic node result consumed by the root reduction.
At a parent boundary, a child outcome either supplies its exact subtree maximum or a located unwind whose generator store stabilizes the receiving frozen frame.
A positive-fuel child that does not unwind past its parent returns exactly to that parent level.
An off-path node additionally leaves the first-path guide unchanged.
It also preserves live guide ordering. Unlike a first-path node, it never
raises gcaFirst while returning through its child loop. These are the
facts its parent needs before recovering a completed child.
- node : NodeOutcome G ctx tcLevel specFuel runFuel level cs fs st out numcells best outBest receiptTrail eventTrail r
Instances For
The integer return represented by a loop result. Exhausting the sweep completes its parent node one level up.
Equations
- Hex.GraphIso.Nauty.loopReturn level (some r) = r
- Hex.GraphIso.Nauty.loopReturn level none = Int.ofNat level - 1
Instances For
A loop receipt coupled to the concrete result invariant ultimately
returned by its parent node. stem is the parent node's entry prefix.
The loop's own codes include that node's refinement code.
- receipt : LoopReceipt receiptTrail ctx tcLevel specFuel runFuel loopFuel level codes rsLab rsPtn tc len numcells tcell cursor bound st out best outBest r
- event : EventOut G ctx tcLevel stem fs out outBest eventTrail (loopReturn level r)
- preserved : TrailExt level receiptTrail eventTrail
Instances For
A loop that returns an integer supplies its parent node outcome.
A completed loop with sufficient cursor fuel supplies its parent node's completed outcome.
Prepending a semantic loop fragment leaves the concrete result package unchanged.
Changing the mutable entry workset does not affect a completed loop outcome.
One successful cursor step preserves the coupled loop outcome.
A coupled loop outcome can be rebased onto an entry trail that agrees below the loop level.
First-path exit bookkeeping preserves a node outcome.
The first discrete leaf closes the result package. Its generator store is still empty, so every return-frame stabilization holds vacuously.
A coupled child-loop outcome supplies the complete outcome of a non-discrete first-path node.
Once the imperative prefix exposes an off-path child loop, its coupled outcome constructs the corresponding node outcome.