P/poly #
A language over Bool is in P/poly when it has circuits of polynomial size: for every input
length n, a circuit over the De Morgan basis computing the slice of the language at n
(Language.slice), with size bounded by a polynomially bounded function of n
Arora and Barak, Definition 6.5. There is no requirement that the circuits for
different lengths be related, so P/poly contains undecidable languages.
PPoly is defined through the minimal circuit size of each slice (Cslib.Circuits.complexity);
mem_PPoly_iff_exists_circuits is the textbook formulation with an explicit family of circuits.
Size counts gates, constants included, which changes sizes by at most a constant factor and so does
not change the class.
Main definitions #
Cslib.Circuits.Boolean.SIZE: the languages with circuits of size at mosts nat each length.Cslib.Circuits.Boolean.PPoly.
Main results #
Cslib.Circuits.Boolean.mem_PPoly_iff_exists_circuits: the formulation with circuit families.Cslib.Circuits.Boolean.mem_PPoly_iff_exists_mem_SIZE:P/polyis the union of the classesSIZE (c (n + 1) ^ c).Cslib.Circuits.Boolean.PPoly.of_synthesis: languages whose slices are synthesised within a polynomial budget are inP/poly.Cslib.Circuits.Boolean.PPoly.compl,PPoly.sup,PPoly.inf: closure under the Boolean operations.
References #
The languages over Bool that have, for every input length n, a circuit of size at most
s n Arora and Barak, Definition 6.2. Size counts gates
(Cslib.Circuits.Circuit.size), while Arora and Barak count all vertices, inputs included, so
SIZE s is their SIZE (s + n) up to the output vertex.
Instances For
P/poly with circuit families. A language is in P/poly exactly when it has a family of
circuits, one for each input length, whose sizes are polynomially bounded.
A language whose slices are synthesised from the inputs within a polynomial budget is in
P/poly.