Sparsification -- the branching step #
The sparsification procedure of Impagliazzo, Paturi and Zane [IPZ01], in the presentation of Calabro, Impagliazzo and Paturi [CIP06] and of Calabro's thesis Calabro, Chapter 5.
Clause sets are kept reduced: no clause strictly contains another (reduce). For thresholds
θ, a set H of h ≥ 1 literals is a heavy heart for clause size c > h when at least
θ (c - h) clauses of size c contain it (Heavy); those clauses form its flower. A clause
set without heavy hearts is sparse. Otherwise the procedure picks a heavy heart with c as
small as possible and then h as large as possible (Choice), and branches: either H is
satisfied (add the clause H, the heart branch), or it is not, and then every petal C \ H
of the flower is satisfied (add the petals, the petal branch). Both branches are reduced again.
This file proves the local facts: the two branches cover the solutions and only lose solutions
of the original clause set, they preserve the width and reducedness, and the potential
∑_{C ∈ ψ} 2 ^ |C| strictly decreases, so the procedure terminates.
Main definitions #
Cslib.Logic.PL.ClauseSet.Sparsification.reduce: remove the clauses containing others.Cslib.Logic.PL.ClauseSet.Sparsification.Heavy,.Sparse,.Choice: heavy hearts, sparse clause sets and valid choices.Cslib.Logic.PL.ClauseSet.Sparsification.child: the children of a branching node.Cslib.Logic.PL.ClauseSet.Sparsification.potential: the potential∑_{C ∈ ψ} 2 ^ |C|.
Main results #
Cslib.Logic.PL.ClauseSet.Sparsification.sat_child_of_sat,Cslib.Logic.PL.ClauseSet.Sparsification.sat_of_sat_child: the branches cover the solutions and only lose solutions of the parent.Cslib.Logic.PL.ClauseSet.Sparsification.potential_child_lt: termination.
References #
Remove every clause that strictly contains another clause, keeping the minimal clauses
(mem_reduce_iff_minimal).
Instances For
No clause strictly contains another: the clauses form an antichain
(reduced_iff_isAntichain).
Instances For
The flower of H at clause size c: the clauses of size c that contain H.
Instances For
A clause set is sparse for the thresholds θ when it has no heavy heart.
Instances For
The petals C \ H of the flower of H.
Instances For
The clauses a branch introduces: the heart (false) or the petals (true).
Instances For
A child of a branching node: add the introduced clauses and reduce.
Instances For
The potential ∑_{C ∈ ψ} 2 ^ |C|, which every branching step decreases.
Instances For
Reduction #
A reduced clause set is an antichain for inclusion.
Every clause contains a clause of the reduction.
Reduction does not change the solutions.
A clause of a reduced set that is not in the reduction of a larger set strictly contains one of the added clauses.
Flowers, petals and choices #
The petal map C ↦ C \ H is injective on the flower.
Every introduced clause is nonempty and smaller than the flower's clause size.
Every introduced clause is strictly contained in a clause of the flower.
The children of a branching node #
The branches cover. A solution of the parent satisfying the heart is a solution of the heart child; a solution falsifying it is a solution of the petal child.
Children keep the width.