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.GapP.prod_range_mem {α : Type} {enc : α ↪ List Bool} {g : α × ℕ → ℤ} {r : α → ℕ} (hg : g ∈ GapP (Turing.MultiTapeTM.encPair enc Turing.MultiTapeTM.encUnary)) (hr : Turing.MultiTapeTM.ComputableInPolyTime r enc Turing.MultiTapeTM.encUnary) :
    (fun (a : α) => ∏ i ∈ Finset.range (r a), g (a, i)) ∈ GapP enc

    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.