The class parity-P #
⊕P is the parity operator applied to P (Cslib.Complexity.ParityP)
Papadimitriou and Zachos, Arora and Barak, Section 17.4:
L ∈ ⊕P when, for a polynomial p and a function V : α × List Bool → Bool computable in
polynomial time on inputs encPair enc encBits (a, w) = frame (enc a) ++ w, a ∈ L exactly when
an odd number of the strings w of length p (enc a).length have V (a, w) = true
(Cslib.Complexity.mem_ParityP). Equivalently, L consists of the instances where some function
in #P is odd (Cslib.Complexity.mem_ParityP_iff_exists_SharpP).
⊕P is closed under complement (Cslib.Complexity.compl_mem_ParityP): the verifier
Cslib.Complexity.succVerifier V accepts the string of falses and the strings true :: w with
V (a, w) = true, so it accepts exactly one string more than V, one bit longer
(Cslib.Complexity.acceptCount_succVerifier), by counting words by their first bit
(Cslib.BitString.card_filter_ofFn_succ).
Main definitions #
Cslib.Complexity.ParityP: the class⊕P.Cslib.Complexity.succTest,Cslib.Complexity.succVerifier: a word test and a verifier accepting one more string.
Main results #
Cslib.Complexity.acceptCount_succVerifier,Cslib.Complexity.acceptCount_succTest: one more accepted string.Cslib.Complexity.mem_ParityP,Cslib.Complexity.mem_ParityP_iff_exists_SharpP:⊕Pthrough verifiers and through#P.Cslib.Complexity.P_subset_ParityP,Cslib.Complexity.compl_mem_ParityP.
References #
Counting accepted strings #
One more accepted string: succVerifier V accepts exactly one string of length n + 1
more than V accepts strings of length n.
succTest is polynomial-time, with a test that may use the input.
succVerifier V is polynomial-time when V is.
The class #
The class ⊕P: the parity operator applied to P. A problem L is in ⊕P when, for a
polynomial p and a polynomial-time V, a ∈ L exactly when an odd number of the strings w of
length p (enc a).length have V (a, w) = true (mem_ParityP)
Papadimitriou and Zachos,
Arora and Barak, Section 17.4.
Instances For
⊕P through verifiers.