Sparsification -- the step is polynomial-time #
The list-level sparsification step (Cslib.Logic.PL.CNF.Sparsification.next), the test for
sparseness (Cslib.Logic.PL.CNF.Sparsification.isSparse) and normalization
(Cslib.Logic.PL.CNF.Sparsification.normalize) are polynomial-time on the framed encoding of
formulas, for any encoding of the variables. The width k is fixed, so a clause has a constant
number of candidate hearts; the thresholds enter only through comparisons θ j ≤ n, which must
themselves be polynomial-time in unary. They are for the explicit thresholds
(Cslib.Logic.PL.ClauseSet.Sparsification.computableInPolyTime_threshold_le).
The thresholds may also be read from a runtime parameter p, as θ p: the …With certificates
take the parameter as part of the input and charge its encoding, so one machine serves every
parameter value. The certificates for fixed thresholds are their specializations to a constant
parameter.
Main results #
Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_nextWith,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_next: the step, for runtime and fixed thresholds.Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_isSparseWith,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_isSparse: the test for sparseness.Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_heavyWith,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_choiceWith: the heavy-heart test and the choice, for runtime thresholds.Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_normalize: normalization.Cslib.Logic.PL.ClauseSet.Sparsification.computableInPolyTime_threshold_le: comparisons with the explicit thresholds.
References #
Comparing the explicit thresholds with a number is polynomial-time in unary.
The list-level reduction is polynomial-time.
Removing duplicate clauses with identical literal sets is polynomial-time.
Computing the flower of a clause size and heart is polynomial-time.
Testing a candidate against runtime thresholds. Testing whether a candidate (c, H) is
heavy for thresholds θ p read from a runtime parameter p is polynomial-time, charging the
encoding of p.
A fixed threshold comparison, read through a constant runtime parameter. This specializes the
…With certificates to fixed thresholds.
Testing whether a candidate (c, H) is heavy is polynomial-time.
Listing the candidate pairs (c, H) of a formula is polynomial-time.
The choice for runtime thresholds is polynomial-time, charging the encoding of the parameter.
The computed choice is polynomial-time.
The test for sparseness against runtime thresholds is polynomial-time, charging the encoding of the parameter.
The list-level test for sparseness is polynomial-time.
The list-level step for runtime thresholds is polynomial-time, charging the encoding of the parameter.
The list-level step is polynomial-time.
Normalization is polynomial-time.