Documentation

CslibFrontier.Computability.Complexity.CookLevin.Counting

The parsimonious Cook–Levin theorem #

The Cook–Levin reduction is polynomial-time (computableInPolyTime_reduce) and parsimonious (modelCount_reduce): applied to the verifier of a function f in #P, it maps an instance a to a formula with exactly f a satisfying assignments. Together with SharpSAT.mem_SharpP, this proves that #SAT is #P-complete under parsimonious polynomial-time reductions Valiant, Papadimitriou, Chapter 18.

The count is exact: #P counts the certificates of exactly the verifier's length, the tableau has one variable for each of their bits, and all its other variables are determined by them.

Main results #

References #

The parsimonious Cook–Levin theorem: every function in #P reduces parsimoniously to #SAT, through the tableau of its verifier.

#SAT is #P-complete under parsimonious polynomial-time reductions.