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