Sparsification -- the branching tree #
A branching rule (BranchingRule) makes the procedure deterministic: it is a step on states
that represent clause sets, which at every state that is not sparse takes the heart (false) or
the petal (true) child for one valid choice. Any valid choice will do, so a rule may compute its
choice, and its states may be any representation of clause sets. The canonical rule
(chooseRule) works on clause sets themselves, with a valid choice made by chooseBranch.
A word w : List Bool names the state reached by taking the heart (false) or petal (true)
branch at each step (walk). A node word is one whose proper prefixes reach states that are
not sparse (IsNodeWord); a leaf word is a node word that reaches a sparse state
(IsLeafWord). Every leaf word yields a Path with the same length and the same petal steps
(exists_path_of_isLeafWord), every node word extends to a leaf word
(IsNodeWord.exists_isLeafWord_append), and leaf words are determined by their petal steps
(IsLeafWord.eq_of_getD_eq).
Every solution of the root reaches a leaf containing it (exists_isLeafWord_sat, by induction on
the potential). The leaves are recovered from the positions of their petal steps: following any
branch sequence f : ℕ → Bool until a sparse state is reached (walkSeq) ends at the leaf of
every leaf word that agrees with f (walkSeq_eq_walk).
Main definitions #
Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule: a deterministic branching step.Cslib.Logic.PL.ClauseSet.Sparsification.chooseRule: the canonical rule on clause sets.Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.walk,.IsNodeWord,.IsLeafWord: the branching tree of a rule.
Main results #
Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.exists_isLeafWord_sat: every solution reaches a leaf.Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.exists_path_of_isLeafWord: leaf words are branches.Cslib.Logic.PL.ClauseSet.Sparsification.BranchingRule.IsLeafWord.eq_of_getD_eq: leaf words are determined by their petal steps.
References #
A branching rule for the thresholds θ: a deterministic step next on states σ, each
representing the clause set toClauseSet s, which at every state that is not sparse takes the
heart (false) or petal (true) child for one valid choice.
- toClauseSet : σ → ClauseSet V
The clause set a state represents.
- next : σ → Bool → σ
The heart (
false) or petal (true) child of a state. - exists_choice_next (s : σ) : ¬Sparse θ (self.toClauseSet s) → ∃ (c : ℕ) (H : Finset (Literal V)), Choice θ (self.toClauseSet s) c H ∧ ∀ (b : Bool), self.toClauseSet (self.next s b) = child (self.toClauseSet s) c H b
At a state that is not sparse, both children are taken for one valid choice.
Instances For
The canonical branching rule on clause sets, with the choice chooseBranch.
Instances For
The state reached along a word of branches.
Instances For
A node word: its proper prefixes reach states that are not sparse.
Instances For
A leaf word: its proper prefixes reach states that are not sparse and it reaches a sparse state.
Instances For
Follow the branch sequence f for at most n steps, stopping at a sparse state.
Instances For
One step #
Termination. Each branching step strictly decreases the potential.
Words #
Leaf words are determined by their petal steps. Two leaf words with petal steps at the same positions are equal.
Termination and covering #
Every state has a leaf word.
Every node word extends to a leaf word.
Every clause reached along a node word is contained in a clause of the start.
Every clause reached by following branches is contained in a clause of the start.
Covering. Every solution of a state reaches a leaf of which it is a solution.
Solutions of a state reached along a node word are solutions of the start.
Following a branch sequence that agrees with a leaf word, for at least as many steps, ends at that leaf.
A leaf word is a branch. From a reduced state, it yields a Path with the same length,
ending in a sparse node, whose nodes are the states along the word and whose petal steps are the
positions of true in the word.