Documentation

Complexity.Computability.Complexity.Classes.SharpP.Products

Uniform indexed products of counting functions #

A jointly uniform family on an encoded instance and a unary index admits products over a polynomial-time unary number of factors. Index-dependent certificates are padded to a common polynomially bounded row width, preserving their counts exactly. For GapP, expansion over Boolean choices reduces the product of differences to uniform #P products and a signed word sum.

Main definitions #

Main results #

References #

def Cslib.Complexity.SharpP.indexedProductVerifier {α : Type} (r k : α → ℕ) (V : (α × ℕ) × List Bool → Bool) (x : α × List Bool) :

The verifier checks row i using the indexed instance (a, i), for every i < r(a).

Instances For
    theorem Cslib.Complexity.SharpP.acceptCount_indexedProductVerifier {α : Type} (r k : α → ℕ) (V : (α × ℕ) × List Bool → Bool) (a : α) :
    acceptCount (indexedProductVerifier r k V) a (r a * k a) = ∏ i ∈ Finset.range (r a), acceptCount V (a, i) (k a)

    Indexed row tuples have the product of their individual acceptance counts.

    A jointly uniform #P family on an instance and unary index may be multiplied over a polynomial-time unary range. If the original certificate polynomial is p, a common row width is p(2|a|+1+r(a)), and the unpadded total length is r(a) times that width.

    theorem Cslib.Complexity.prod_sub_mul_eq_sum {n : ℕ} (f g : Fin n → ℤ) (c : ℤ) :
    ∏ i : Fin n, (f i - c * g i) = ∑ w : Fin n → Bool, (-c) ^ List.countP id (List.ofFn w) * ∏ i : Fin n, if w i = true then g i else f i

    Expanding a product of (f i - c * g i) over Boolean choices pulls out (-c) to the number of true bits.

    A jointly uniform GapP family on an instance and unary index may be multiplied over a polynomial-time unary range. Boolean expansion uses certified #P products and a polynomial-time parity sign, so no general GapP product closure is assumed.