Sparsification -- searching the branching tree #
A depth-first search of the branching tree of a rule (BranchingRule.searchStep) keeps a stack of
states and an accumulator. It pops the state on top; at a sparse state (a leaf) it adds the value
of a function f of the state to the accumulator, and at any other state it pushes the two
children. Started from a state s, after a number of steps less than twice the number of leaves
the stack is back to what it was below s, and the accumulator records whether f holds at some
leaf (BranchingRule.exists_iterate_searchStep). Along the way the stack holds at most h + 1
states of the tree of s, when its leaf words have length at most h.
With f a satisfiability test of the leaves, the search decides whether s is satisfiable
(BranchingRule.exists_isLeafWord_sat_iff).
Main definitions #
Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.searchStep: one step of depth-first search.
Main results #
Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.exists_iterate_searchStep: the search visits every leaf, within twice the number of leaves of steps, with a stack of bounded height.Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.exists_isLeafWord_sat_iff: a state is satisfiable exactly when one of its leaves is.
References #
One step of the depth-first search of the branching tree, on a stack of states and an
accumulator: a sparse state on top is popped and f of it is added to the accumulator; any other
state on top is replaced by its heart and petal children.
Instances For
A state is satisfiable exactly when one of its leaves is.
Depth-first search. Started from a state s above a stack rest, the search takes N
steps, at most twice the number of leaves of s, to return to rest; then the accumulator
records whether f holds at a leaf of s. If the leaf words of s have length at most h, the
stack meanwhile consists of at most h + 1 states of the tree of s, above rest.