Both leaf references installed after the first descent are reached permutation labellings.
- firstReach : CellsReach G st.firstlab
- canonReach : CellsReach G st.canonlab
Instances For
A permutation inside the cells of a reached search state is still reachable from the initial coloured partition.
Installing the first leaf seeds both valid leaf references.
Every verified search fragment preserves validity of both installed leaf references.
The implicit automorphism pair remains valid while search stays
strictly below the level at which that pair was frozen. At the frozen
level itself the implication is dormant: processnode does not insert an
implicit pair there, and a failed cheap-automorphism guard will move the
boundary before the next descent.
- pair : st.noncheaplevel < level → PairOk ctx.g rptn rlab 1 (fmptn st.lab st.ptn st.noncheaplevel n).fst (fmptn st.lab st.ptn st.noncheaplevel n).snd
Instances For
At a node entry, the runtime bound turns the strict-boundary ledger
invariant into the premise consumed by processnode.
The cheap-boundary invariant depends only on the current labelling, partition, and boundary level.
Reopening below level preserves every fmptn frozen at or above
the root and at or below level.
Recovery either parks the boundary just below the next child, where the strict pair condition is dormant, or retains an older frozen pair.
Leaf processing does not move the frozen pair's defining fields.
Installing the first leaf does not move the frozen pair's defining fields.
The comparison preparation step does not move the frozen pair's defining fields.
Writing a boundary at or above the logical level suspends the pair condition without changing the partition facts needed to revive it.
A valid pair at the current boundary extends the invariant through the next logical level.
Refinement only splits at the current level and permutes within the old current cells, so every pair frozen at a strictly smaller level is unchanged.
Individualizing inside a current cell does not change the implicit pair frozen at an older cheap boundary.
The initial search boundary is one, so its strict pair condition is empty at the root.
The semantic state available after the first leaf has been installed.
The explicit level makes the package usable both at node entries and
inside their child loops. At a node entry, level = cs.length + 1
recovers DomOk. A loop instead carries the code path through its
current node, so its path has length level. The comparison sign is
unrestricted: an internal node whose code first exceeds the incumbent can
enter its child loop with sign one. Consumers that read the mutable
incumbent or return an event supply the appropriate sign premise.
- searchOk : SearchOk G level numcells st
- codeInv : CodeCmpInv n cs bs st.canoncode st.canonlevel st.eqlevCanon st.compCanon
- firstInv : FirstCodeInv n cs fs st.firstcode st.eqlevFirst
- genTraceOk : GenTraceOk ctx st (ColorMap G)
- autosOk : AutosOk ctx.g (initPtn n (n + 2) (initialPartition G).snd) (initialPartition G).fst 1 st.autos
- workspace : WorkspaceOk st
- cheap : CheapOk ctx (initialPartition G).fst (initPtn n (n + 2) (initialPartition G).snd) level st
- leafRefs : LeafRefsOk G st
- guides : GuideStore ctx tcLevel level st best trail
- trailOk : TrailOk ctx level st trail
Instances For
At a node boundary the stable package supplies the existing DomOk
record consumed by the leaf-event theorems.
The semantic incumbent threaded by the induction agrees with the stable imperative state.
The semantic state after refinement and otherNodePrep, before
processnode restores the stable comparison sign. This differs from
RunInv only in omitting compCanon ≤ 0: comparing the freshly appended
refinement code may set the sign to one.
- searchOk : SearchOk G level numcells st
- codeInv : CodeCmpInv n cs bs st.canoncode st.canonlevel st.eqlevCanon st.compCanon
- firstInv : FirstCodeInv n cs fs st.firstcode st.eqlevFirst
- genTraceOk : GenTraceOk ctx st (ColorMap G)
- autosOk : AutosOk ctx.g (initPtn n (n + 2) (initialPartition G).snd) (initialPartition G).fst 1 st.autos
- workspace : WorkspaceOk st
- cheap : CheapOk ctx (initialPartition G).fst (initPtn n (n + 2) (initialPartition G).snd) level st
- leafRefs : LeafRefsOk G st
- guides : GuideStore ctx tcLevel level st best trail
- trailOk : TrailOk ctx level st trail
Instances For
Once no immediate comparison prune is pending, the prepared state is
the ordinary state carried into a child sweep. The two records are kept
separate because RunPrep is also consumed by the leaf classifiers.
Equitability depends only on the vertex sets of the partition cells, not on their order inside each cell.
The extra certificate state needed exactly where a node is about to
call refine. RunInv is weaker because it also describes recovered
parent-loop states, whose stale active field is never refined again.
- run : RunInv G ctx tcLevel level cs bs fs numcells st best trail
Instances For
Refining a valid node entry produces the equitable frame used by its target-cell selection and child sweep.
The unhinted executable target record of an internal node is exactly the specification target record, together with its nontrivial-cell geometry.
The target record supplied by NodeInv.target exposes the node key as
the exact maximum swept by the executable child loop.
Individualization carries a stable loop state into a valid recursive node entry. The loop supplies the two facts that depend on its history: the cheap-boundary state selected by the guard and the newly active guide store. Parent equitability seeds the child's refinement certificate.
Refinement followed by the off-path comparison step enters
RunPrep. Generator validity is global, while stabilization is proved
only at the loop frame where a generator is consumed.
The state fields needed to enter the stable induction immediately
after firstterminal.
Neither first-leaf preparation nor installation raises a short-prune request.
Installing the first leaf preserves the search skeleton and records a reached canonical labelling.
The first leaf changes the pre-incumbent descent into the stable post-install invariant. Both mutable stores are still empty at this point. The ordinary node induction handles all later store growth.
Parent recovery leaves the one-shot short-prune request unchanged.
Clearing the one-shot prune request commutes with parent recovery.
Recovering a parent frame preserves both installed leaf references.
Recovering to an ancestor drops any guide aimed at the receiving frame and preserves every strictly older located guide.
A leaf event preserves every older guide when the first reference is unchanged and any changed canonical reference is installed at the current level.
State returned by a node event before its caller applies recover.
The second comparison-machine case is the row-rejection reset: the
mutable sign is negative while the retained proof is stated at sign zero,
exactly as required by recover_codeInv_reset.
- machines : st.compCanon ≤ 0 ∧ CodeCmpInv n cs bs st.canoncode st.canonlevel st.eqlevCanon st.compCanon ∨ st.compCanon < 0 ∧ CodeCmpInv n cs bs st.canoncode st.canonlevel st.eqlevCanon 0
- firstInv : FirstCodeInv n cs fs st.firstcode st.eqlevFirst
- genTraceOk : GenTraceOk ctx st (ColorMap G)
- autosOk : AutosOk ctx.g (initPtn n (n + 2) (initialPartition G).snd) (initialPartition G).fst 1 st.autos
- workspace : WorkspaceOk st
- cheap : CheapOk ctx (initialPartition G).fst (initPtn n (n + 2) (initialPartition G).snd) current st
- leafRefs : LeafRefsOk G st
- guides : GuideStore ctx tcLevel current st best trail
- trailOk : TrailOk ctx current st trail
Instances For
A stable state is already a valid event state.
Applying recover to an event state restores the ordinary stable
invariant at the selected ancestor prefix. Search reachability and cell
stabilization are supplied by the surrounding loop, whose frozen frame
determines the recovered partition.
Valid installed leaf references, a valid current search labelling, and
the row store are the exact hypotheses needed to preserve the generator
store through processnode. This avoids packaging the post-refinement
state in DomOk, whose path index describes a node before its next
refinement code is appended.
The same correctly indexed leaf-state hypotheses identify any newly admitted generator as a checked carrier from the first or canonical leaf.
processnode either retains the canonical reference or installs the
current reached labelling.
processnode either preserves the canonical guide and its reference,
or installs the current leaf with the guide parked at the current level.
Leaf-reference validity crosses every processnode outcome.
Once an incumbent exists, processnode either retains its positive
level or replaces it by the current positive level.