Subexponential model counting for bounded-width CNF formulas #
For every fixed clause width k, one native machine computes the number of satisfying
assignments CNF.modelCount φ of every formula φ with clauses of at most k literals. It
runs in time 2 ^ (A * interpolationScale n) times a polynomial in the encoding length, where
n = φ.numVars, and in space polynomial in the encoding length.
This restates CountingNativeEndpoint.exists_declaredCounter on the plain formula: the machine
relabels the variables densely, declares their number, and runs the declared counter. The
resource bounds are folded into ComputableInO.
More generally:
CountingNativeEndpoint.exists_counter_of_polyTime_toDeclaredcomposesCountingNativeEndpoint.exists_declaredCounterwith any polynomial-time reductiong : α → ℕ × CNF ℕand polynomial-time validity guardvalid : α → Bool.CountingNativeEndpoint.exists_shiftedCounter_of_polyTime_toCNFcomposesCountingNativeEndpoint.exists_modelCounterwith any polynomial-time CNF compilationφ : α → CNF ℕ, unary binary-power shiftshift : α → ℕ, validity guardvalid : α → Bool, and linear variable-count bound(φ x).numVars ≤ C * μ x + D, multiplying(φ x).modelCountby2 ^ shift xin binary while rescaling the subexponential rate toμ x.
Main results #
CountingNativeEndpoint.exists_counter_of_polyTime_toDeclared: compose the declaredk-CNF counter with any polynomial-time reduction and validity guard.CountingNativeEndpoint.exists_modelCounter: the bounded-width model counter.CountingNativeEndpoint.exists_shiftedCounter_of_polyTime_toCNF: compose the bounded-width model counter with a2 ^ shiftfactor and a linearnumVars ≤ C * μ + Drescaling.
References #
- OpenAI, The Exponential Time Hypothesis is False, Proposition 6.4.
General composition of CountingNativeEndpoint.exists_declaredCounter with any polynomial-time
reduction g : α → ℕ × CNF ℕ and polynomial-time validity guard valid : α → Bool.
Subexponential bounded-width model counting. For each width k, one machine computes
φ.modelCount on every formula φ whose clauses have at most k literals, in time
2 ^ (A * interpolationScale φ.numVars) times a polynomial in the encoding length, and in
polynomial space.
Compose CountingNativeEndpoint.exists_modelCounter with a polynomial-time CNF compilation
φ : α → CNF ℕ, a polynomial-time unary binary-exponent shift shift : α → ℕ, a polynomial-time
validity guard valid : α → Bool, and a linear variable-count bound (φ x).numVars ≤ C * μ x + D
under valid x = true, multiplying (φ x).modelCount in binary by 2 ^ shift x while rescaling
the interpolationScale exponent to μ x.