The running invariants of the optimality induction #
The depth-first search prunes three ways — invariant pruning, orbit pruning and backjumping — and each needs its own reason why the leaves it skips were already accounted for. This file sets up the bookkeeping for the third and hardest one, backjumping.
take_getElemD,pathPre_of_take—PathPreand "the firstjentries agree" say the same thing.ancReach_full,ancReach_push,ancReach_child— the leaves below the depth-jancestor of a path, related toReachat the node itself and toSubRat one of its children.mem_usableAutos— the generators the search is willing to prune with really do fix the path.Rec/Pth/Jmp/JmpC— the invariants themselves.Jmpsays every branch a recorded leaf went down and the current path has already left behind consists of keys the caller has already accounted for;JmpCis the variant that holds while a node works through its own children.leaf_abort_dom— the payoff: the backjump a leaf update requests never skips a leaf that is not already dominated. This isjump_soundfed byJmp.
Prefixes #
Ancestors #
Usable automorphisms #
The running invariants #
No recorded leaf lies below the current node.
Equations
- IsoGraph.Canon.Pth st path = ∀ (l : IsoGraph.Canon.Leaf), IsoGraph.Canon.Rec st l → ¬IsoGraph.Canon.PathPre path l.path
Instances For
The backjump invariant, relative to a target predicate P on leaf keys. Every branch a
recorded leaf went down and that the current path has already left behind consists entirely of
keys satisfying P. At the use site P is "dominated by the incumbent, or already accounted
for by the caller".
Equations
- One or more equations did not get rendered due to their size.
Instances For
The same, also covering the branches leaving the current node itself: what holds while a node is working through its children.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The leaf case of the optimality induction #
The backjump a leaf update requests is covered by the jump invariant.