Documentation

Complexity.Computability.Circuit.Boolean.PPoly

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 #

Main results #

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

    The languages over Bool whose slices have circuits of polynomial size.

    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.

      theorem Cslib.Circuits.Boolean.mem_PPoly_iff_exists_mem_SIZE {L : Language Bool} :
      L ∈ PPoly ↔ ∃ (c : ℕ), L ∈ SIZE fun (n : ℕ) => c * (n + 1) ^ c

      P/poly is the union of the classes SIZE (c (n + 1) ^ c).

      theorem Cslib.Circuits.Boolean.PPoly.of_synthesis {L : Language Bool} {cost : ℕ → ℕ} (hcost : PolynomiallyBounded cost) (h : ∀ (n : ℕ), Synthesis interpretation (inputs n) {L.slice n} (cost n)) :

      A language whose slices are synthesised from the inputs within a polynomial budget is in P/poly.

      theorem Cslib.Circuits.Boolean.PPoly.of_slice_const {L : Language Bool} (b : ℕ → Bool) (h : ∀ (n : ℕ) (x : Fin n → Bool), L.slice n x = b n) :

      A language whose slices are constant is in P/poly.

      P/poly is closed under complement.

      theorem Cslib.Circuits.Boolean.PPoly.sup {L M : Language Bool} (hL : L ∈ PPoly) (hM : M ∈ PPoly) :
      L ⊔ M ∈ PPoly

      P/poly is closed under union.

      theorem Cslib.Circuits.Boolean.PPoly.inf {L M : Language Bool} (hL : L ∈ PPoly) (hM : M ∈ PPoly) :
      L ⊓ M ∈ PPoly

      P/poly is closed under intersection.