Polynomial-time functions and tests in counting classes #
Binary-encoded natural outputs of polynomial-time functions are in #P; binary-encoded integer outputs are in GapP Fortnow, Theorem 3.5. The verifier guesses a fixed-width binary word and accepts just those representing values below the computed output. The witness width bounds the binary output length, not its potentially exponential numeric value.
Polynomial-time Boolean control also permits selection between two counting functions. The control certificate is separate from the branches' counting-class membership.
Main results #
mem_SharpP_of_polyTime: polynomial-time binary natural functions are in #P.mem_GapP_of_polyTime: polynomial-time binary integer functions are in GapP.SharpP.ite_mem,GapP.ite_mem: selection by a polynomial-time Boolean test.
References #
- L. Fortnow, Counting Complexity, Theorem 3.5.
A polynomial-time function with binary natural output is a #P function.
A polynomial-time function with binary integer output is a GapP function.
A polynomial-time Boolean test may select between two #P functions on the same input. Its two Boolean masks are polynomial-time functions; multiplication and addition select the corresponding count exactly.
A polynomial-time Boolean test may select between two GapP functions on the same input. Apply #P selection to the positive and negative counting functions of each branch.