P/poly
The class of decision problems solvable by polynomial-size Boolean circuits — equivalently, by a polynomial-time Turing machine with access to a polynomial-length advice string that depends only on the input length (not on the particular input). Formally, a language if there exist polynomials and a polynomial-time algorithm such that for every input length , there is an advice string with
P/poly is a non-uniform class: the “algorithm” (circuit) can be different for each input length, and is not required to be uniformly generated.
See the complexity zoo entry here.
Known relationships
- : any uniform polynomial-time algorithm is also a polynomial-size circuit family.
- : under the standard derandomization assumption (that requires exponential-size circuits), . Unconditionally, by a probabilistic argument, BPP P/poly — the advice string encodes a fixed set of random coins that works for all inputs of a given length — Adl78 ( case), BG81 (); see bpp-to-p-poly.
- Karp-Lipton theorem: if , then the polynomial hierarchy collapses to — KL80. Proof idea: for a statement , existentially guess a polynomial-size circuit that outputs a witness whenever one exists (it exists by self-reducibility of SAT), then universally check .
- contains undecidable languages: every unary language is in (one advice bit per input length), including the unary encoding of the halting problem — folklore.
Relevance to cryptography
Non-uniform security is the standard model in modern cryptography. When we say a scheme is secure against all polynomial-time adversaries, we typically mean against all polynomial-size circuits (P/poly adversaries), not just uniform PPT algorithms. This matters because:
- Security reductions are often stated in the non-uniform setting.
- One-way functions secure against non-uniform adversaries imply , since inverting a one-way function is an search problem — folklore.
- PRG constructions that fool are strictly stronger than those that fool only uniform algorithms.
Participates in
Produces P/poly