Counting sparsification -- the step is polynomial-time #
The list-level counting-sparsification step (Cslib.Logic.PL.CNF.Sparsification.countingNext),
tautology removal (Cslib.Logic.PL.CNF.Sparsification.removeTautologies), nontautological
normalization (Cslib.Logic.PL.CNF.Sparsification.countingNormalize), and comparison with the
counting thresholds countingThreshold M j = M ^ j
(Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingThreshold_le) are polynomial-time
on the framed encoding of formulas, for any encoding of the variables [OpenAI2026ETH, Appendix A.1].
Main results #
Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingThreshold_le: comparisons withcountingThreshold M.Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_removeTautologies,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingNormalize: tautology removal and nontautological normalization.Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingNextWith,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingNext: the list-level counting step, for thresholds read from a runtime parameter and for fixed thresholds.Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingThreshold_le_binary,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_isSparse_countingThreshold,Cslib.Logic.PL.CNF.Sparsification.computableInPolyTime_countingNext_countingThreshold: the thresholdscountingThreshold M, the test for sparseness and the step for a baseMgiven in binary at runtime.
References #
Comparing the counting thresholds countingThreshold M j = M ^ j with a number is
polynomial-time in unary.
Tautology testing on a clause is polynomial-time.
Removing tautological clauses from a formula is polynomial-time.
Nontautological normalization (countingNormalize) is polynomial-time.
The counting step for runtime thresholds θ p is polynomial-time, charging the encoding of
the parameter p.
The list-level counting-sparsification step is polynomial-time.
The counting thresholds for a runtime base #
Comparing the counting thresholds countingThreshold M j = M ^ j with a number is
polynomial-time for a runtime base M in binary, with j and the compared number in unary.
Sparseness for a runtime base. The test for sparseness against the thresholds
countingThreshold M, for a base M given in binary at runtime, is polynomial-time.
The counting step for a runtime base. The counting-sparsification step for the thresholds
countingThreshold M, for a base M given in binary at runtime, is polynomial-time.