Closure properties of #P and GapP #
#P (Cslib.Complexity.SharpP) is closed under addition and multiplication
Arora and Barak, Chapter 17, so it is a subsemiring of the functions to ℕ
(Cslib.Complexity.SharpP.subsemiring). Hence GapP (Cslib.Complexity.GapP), the differences of
functions in #P, is closed under addition, negation and multiplication, a subring of the
functions to ℤ (Cslib.Complexity.GapP.subring)
Fenner, Fortnow and Kurtz.
For the sum f₁ + f₂, the first bit of a certificate chooses which verifier to run
(Cslib.Complexity.selectVerifier); since the two verifiers read certificates of different
lengths p₁(n) and p₂(n), each is padded to p₁(n) + p₂(n) bits by requiring the extra bits to
be false (Cslib.Complexity.acceptCount_andVerifier_allFalseVerifier). For the product, the two
verifiers read disjoint parts of the certificate (Cslib.Complexity.acceptCount_andVerifier).
Main definitions #
Cslib.Complexity.SharpP.subsemiring:#Pas a subsemiring.Cslib.Complexity.GapP.subring:GapPas a subring.
Main results #
Cslib.Complexity.SharpP.comp_mem,Cslib.Complexity.GapP.comp_mem: polynomial-time precomposition, preserving counts exactly.Cslib.Complexity.mem_SharpP_of_polyTime_length: polynomial-time unary certificate lengths suffice.Cslib.Complexity.SharpP.add_mem,Cslib.Complexity.SharpP.mul_mem:#Pis closed under addition and multiplication.Cslib.Complexity.SharpP.one_mem,Cslib.Complexity.SharpP.add_one_mem,Cslib.Complexity.SharpP.natCast_mem,Cslib.Complexity.SharpP.sum_mem,Cslib.Complexity.SharpP.prod_mem,Cslib.Complexity.SharpP.pow_mem,Cslib.Complexity.SharpP.two_pow_mem,Cslib.Complexity.SharpP.two_pow_mul_mem.Cslib.Complexity.SharpP.exists_two_pow_sub_mem: the complementary count of a function in#P.Cslib.Complexity.GapP.add_mem,Cslib.Complexity.GapP.sub_mem',Cslib.Complexity.GapP.mul_mem:GapPis closed under addition, subtraction and multiplication.
References #
The function 2 ^ q(n), where n is the length of the encoded instance, is in #P: every
certificate of length q(n) is accepted.
#P as a subsemiring of the functions to ℕ.
Instances For
#P is closed under multiplication by 2 ^ q(n), where n is the length of the encoded
instance.
The complementary count: a function f in #P is at most 2 ^ p(n) for a polynomial
p, where n is the length of the encoded instance, with 2 ^ p(n) - f also in #P: the
negated verifier accepts the rejected certificates.
A power of two with a length-polynomial exponent is in GapP.
A polynomial-time unary certificate length can be padded without changing the count.
Polynomial-time precomposition preserves the exact accepting count. Padding bits are required to be false, so they do not multiply the number of witnesses.