Live first-path and canonical guides, each tied to its active ancestor frame.
Instances For
Forgetting frame locations recovers the guide invariant used by the leaf-event lemmas.
Growing a guide's incumbent changes neither its frame nor its location in the active trail.
Both located guide ledgers survive an incumbent increase.
The root has no live guide, independently of the empty trail.
Descending through a newly recorded parent child preserves every older guide and installs any guide whose control points at the parent.
The two last premises state the only new requirement: a control equal to
level must be backed by a guide in the newly extended trail.
Reindex a located guide invariant across state fields that do not change either guide control or reference labelling.
Cell-equivalent node labellings with the same partition and active set have the same specification key.
Exact completion of a key-equivalent executable child covers the corresponding frozen specification child.
A key-equivalent completed child advances the mutable sweep.
A node outcome whose generator unwind, when present, is tied to the
active frame trail. The constructors match those of NodeResult.
Keeping the location in the unwind constructor prevents a caller from
forgetting the only evidence that lets the receiving loop consume that
return.
- complete {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel level : Nat} {cs : List Nat} {st out : SearchSt n} {numcells : Nat} {best outBest : Option (Key n)} {r : Int} (sound : NodeSound ctx tcLevel specFuel level cs st numcells best outBest) (returned : r = Int.ofNat level - 1) (installed : out.canonlevel ≠ 0) (read : stInc ctx out = outBest) (full : outBest = some (incMax best (nodeKey ctx tcLevel specFuel level cs st numcells))) : NodeReceipt trail ctx tcLevel specFuel runFuel level cs st out numcells best outBest r
- unwind {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel level : Nat} {cs : List Nat} {st out : SearchSt n} {numcells : Nat} {best outBest : Option (Key n)} {r : Int} (sound : NodeSound ctx tcLevel specFuel level cs st numcells best outBest) (target : Nat) (returned : r = Int.ofNat target) (below : target < level) (payload : Unwind ctx tcLevel target out outBest) (located : Unwind.Located trail payload) : NodeReceipt trail ctx tcLevel specFuel runFuel level cs st out numcells best outBest r
- pruned {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel level : Nat} {cs : List Nat} {st out : SearchSt n} {numcells : Nat} {best outBest : Option (Key n)} {r : Int} (sound : NodeSound ctx tcLevel specFuel level cs st numcells best outBest) (target : Int) (returned : r = target) (below : target < Int.ofNat level) (installed : out.canonlevel ≠ 0) (read : stInc ctx out = outBest) (full : outBest = some (incMax best (nodeKey ctx tcLevel specFuel level cs st numcells))) : NodeReceipt trail ctx tcLevel specFuel runFuel level cs st out numcells best outBest r
- exhausted {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel level : Nat} {cs : List Nat} {st out : SearchSt n} {numcells : Nat} {best outBest : Option (Key n)} {r : Int} (empty : runFuel = 0) (returned : r = 0) (unchanged : out = st) (bestUnchanged : outBest = best) : NodeReceipt trail ctx tcLevel specFuel runFuel level cs st out numcells best outBest r
Instances For
Forgetting a node receipt's frame location recovers its ordinary semantic result.
A positive-fuel receipt always carries the node soundness shared by its non-exhausted outcomes.
A loop outcome with every transported generator unwind located in the active frame trail.
- complete {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel loopFuel level : Nat} {cs : List Nat} {rsLab rsPtn : Array Nat} {tc len numcells : Nat} {tcell : VSet n} {cursor : Option Nat} {bound : Key n} {st out : SearchSt n} {best outBest : Option (Key n)} {r : Option Int} (returned : r = none) (sound : LoopSound ctx bound best outBest) (installed : out.canonlevel ≠ 0) (read : stInc ctx out = outBest) (finalSet : VSet n) (finalCursor : Option Nat) (cover : SweepCover ctx tcLevel specFuel level cs rsLab rsPtn tc len numcells finalSet finalCursor outBest) (empty : ∀ (o : Nat), ¬ChildLive rsLab tc len finalSet finalCursor o) : LoopReceipt trail ctx tcLevel specFuel runFuel loopFuel level cs rsLab rsPtn tc len numcells tcell cursor bound st out best outBest r
- unwind {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel loopFuel level : Nat} {cs : List Nat} {rsLab rsPtn : Array Nat} {tc len numcells : Nat} {tcell : VSet n} {cursor : Option Nat} {bound : Key n} {st out : SearchSt n} {best outBest : Option (Key n)} {r : Option Int} (sound : LoopSound ctx bound best outBest) (target : Nat) (returned : r = some (Int.ofNat target)) (below : target < level) (payload : Unwind ctx tcLevel target out outBest) (located : Unwind.Located trail payload) : LoopReceipt trail ctx tcLevel specFuel runFuel loopFuel level cs rsLab rsPtn tc len numcells tcell cursor bound st out best outBest r
- pruned {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel loopFuel level : Nat} {cs : List Nat} {rsLab rsPtn : Array Nat} {tc len numcells : Nat} {tcell : VSet n} {cursor : Option Nat} {bound : Key n} {st out : SearchSt n} {best outBest : Option (Key n)} {r : Option Int} (target : Int) (returned : r = some target) (below : target < Int.ofNat level) (sound : LoopSound ctx bound best outBest) (installed : out.canonlevel ≠ 0) (read : stInc ctx out = outBest) (full : outBest = some (incMax best bound)) : LoopReceipt trail ctx tcLevel specFuel runFuel loopFuel level cs rsLab rsPtn tc len numcells tcell cursor bound st out best outBest r
- exhausted {n : Nat} {trail : FrameTrail} {ctx : Ctx n} {tcLevel specFuel runFuel loopFuel level : Nat} {cs : List Nat} {rsLab rsPtn : Array Nat} {tc len numcells : Nat} {tcell : VSet n} {cursor : Option Nat} {bound : Key n} {st out : SearchSt n} {best outBest : Option (Key n)} {r : Option Int} (returned : r = none) (sound : LoopSound ctx bound best outBest) (finalSet : VSet n) (finalCursor : Option Nat) (cover : SweepCover ctx tcLevel specFuel level cs rsLab rsPtn tc len numcells finalSet finalCursor outBest) (progress : cursorRank cursor + loopFuel ≤ cursorRank finalCursor) (bounded : ∀ (v : Nat), finalCursor = some v → v < n) : LoopReceipt trail ctx tcLevel specFuel runFuel loopFuel level cs rsLab rsPtn tc len numcells tcell cursor bound st out best outBest r
Instances For
Forgetting a loop receipt's frame location recovers its ordinary semantic result.
At a parent boundary, a located child receipt either supplies the exact child maximum or a located unwind addressed to that parent.
A resolved child receipt advances its parent's coverage. Exact children may use cell-permutation key equivalence. Generator children use their location in the just-pushed parent frame, and only an orbit-pointer unwind requires stabilization.
A located unwind from an off-path child cannot use the orbit arm at
its parent: that arm returns to gcaFirst, which is strictly below this
loop. The two direct carrier arms therefore advance coverage without a
cosetindex premise.
Updating the first-path return controls preserves the source location of a generator unwind.
Removing a loop's temporary fixed vertex preserves the source location of a generator unwind.
A located child unwind strictly past its parent lifts through the parent loop's fixed-vertex cleanup.
A located loop return carrying an integer lifts directly through its parent node.
A located completed loop with enough cursor fuel lifts to node completion.
Prepending a sound child fragment preserves the location carried by every recursive loop outcome.
Reindex the entry set of a located loop result.
One successful cursor step preserves located recursive outcomes.
Once both ends of a loop frame are recovered at the same level, the
SearchOut low-boundary contract identifies their partitions exactly.
The labelling may still differ by a within-cell permutation.
A recovered loop state individualizes the same vertex as its frozen entry frame, possibly at a different offset within the target cell. The two resulting child labellings remain cell-equivalent.
Individualizing the same frozen vertex after a recovered within-cell
permutation produces the same specification child key. This carries
SearchOut.breakoutPerm to the exact key premise consumed by
SweepCover.receipt.
First-path exit bookkeeping preserves the location of a transported generator unwind.
Every located node receipt crosses the first-path exit-counter update.
A located child-loop receipt supplies the complete outcome of a non-discrete first-path node.
Once the imperative prefix exposes an off-path child loop, its located receipt constructs the corresponding located node receipt.
An off-path child generator unwind strictly past this loop returns with its frame location intact after fixed-vertex cleanup.
First-path loop fuel exhaustion is retained as a distinct located receipt.
Off-path loop fuel exhaustion is retained as a distinct located receipt.
An absent next child completes a positive-fuel first-path loop.
An absent next child completes a positive-fuel off-path loop.
A non-root orbit pointer skips the current first-path child while retaining located outcomes from the recursive tail.
An off-path child of the first-path loop transports a located unwind strictly past the loop.
The guiding child transports a located unwind strictly past the loop after installing its first-path return controls.
After an ordinary child completes without either filter, an off-path loop continues while retaining every located recursive outcome.
After an ordinary non-guiding child completes without requesting a short prune, the first-path loop recovers its parent frame and continues. The child call is exposed as one equation so the mutual induction need not duplicate its output expression in every premise.
After the guiding child completes without requesting a short prune, the first-path loop installs its return controls, recovers the parent frame, and continues with every recursive location intact.
When the guiding child of an off-path loop completes without a short prune, the long-pruned recursive sweep reindexes to the loop's original entry set while retaining located outcomes.
A short-pruned off-path sweep whose current child is not the guiding vertex reindexes its recursive receipt to the original entry set.
When both executable filters fire, their composed target set still reindexes to the original off-path loop entry while locations are retained.
A short-pruned non-guiding first-path child reindexes the recursive sweep to the original loop entry while retaining located outcomes.
A short-pruned guiding first-path child installs the guide controls before reindexing the recursive sweep to its original entry set.