Documentation

CslibFrontier.Computability.Complexity.Classes.IP.PSPACE

IP ⊆ PSPACE #

Every problem with an interactive proof is decided within polynomial space (Cslib.Complexity.IP_subset_PSPACE) Arora and Barak, Chapter 8 Sipser, Section 10.4.

The model is that of Cslib.Complexity.IP. The verifier is strict oracle PPT: one finite fair-coin oracle machine M and one clock t = c * (n + 1) ^ d, for instances encoded with n bits, realize it against every stateful prover. So the coins are private and there are at most t of them, one per instruction; the verifier sends at most t messages, each shorter than t, and reads at most the first t bits of every reply. Provers are arbitrary: randomized, stateful and computationally unbounded; they see the messages but not the coins. The thresholds are 2 / 3 and 1 / 3.

The proof computes the acceptance probability of the optimal prover exactly, as a count of coin values:

The converse inclusion PSPACE ⊆ IP (Cslib.Complexity.PSPACE_subset_IP), and with it IP = PSPACE (Cslib.Complexity.IP_eq_PSPACE), is proved downstream in CslibFrontier.Computability.Complexity.Classes.IP.Shamir.

Main definitions #

Main results #

References #

Enumerating the short words #

The word coded by u: what follows its first true.

Instances For

    The code of a word w of length at most L among the words of length L + 1: L - |w| zeros, a one, then w.

    Instances For

      Decoding inverts coding.

      The code of a word of length at most L has length L + 1.

      Any word decoded from a code of length L + 1 has length at most L.

      The first code, 1 in binary.

      Instances For

        Whether a code is the last one, all ones.

        Instances For

          The number of codes, and of the words of length at most L.

          Instances For

            The codes enumerate the short words: decoding the first codeCount L codes gives every word of length at most L exactly once.

            The value as a game tree #

            The history coded by a game-tree history of codes, the most recent first.

            Instances For

              The leaf value of a game-tree history: the number of accepting programs.

              Instances For

                The value is the value of the game tree of the codes of the short words, with sums capped at a bound on the number of coin values.

                Polynomial-time parts #

                The evaluation #

                @[reducible, inline]

                The states of the evaluation: the instance, the stack and the value being returned.

                Instances For
                  def Cslib.Complexity.Interaction.evalStep {α : Type} (enc : α ↪ List Bool) {k : ℕ} {Control : Type} (M : Turing.MultiTapePTM k Bool Control Unit) (fuel : α → ℕ) (s : EvalState α) :

                  One step of the evaluation of the game tree of the verifier M on a, with fuel a coins, rounds and message lengths.

                  Instances For
                    def Cslib.Complexity.Interaction.evalTime {α : Type} (fuel : α → ℕ) (a : α) :

                    The number of steps of the evaluation, a bound on GameTree.time.

                    Instances For
                      def Cslib.Complexity.Interaction.evaluate {α : Type} (enc : α ↪ List Bool) {k : ℕ} {Control : Type} (M : Turing.MultiTapePTM k Bool Control Unit) (fuel : α → ℕ) (a : α) :

                      The value computed by the evaluation.

                      Instances For
                        theorem Cslib.Complexity.Interaction.evaluate_eq {α : Type} (enc : α ↪ List Bool) {k : ℕ} {Control : Type} (M : Turing.MultiTapePTM k Bool Control Unit) (fuel : α → ℕ) (a : α) :
                        evaluate enc M fuel a = value (coinFamily M (fuel a) (enc a)) (fuel a) (fuel a) []

                        The evaluation computes the value of the verifier on a.

                        Pushing a frame, or returning the leaf value at the maximal depth.

                        Instances For

                          A node without a returned value, by pushStep.

                          The evaluation in polynomial space #

                          @[reducible, inline]

                          Frames, encoded by their fields.

                          Instances For
                            @[reducible, inline]

                            States of the evaluation, encoded by their fields.

                            Instances For
                              theorem Cslib.Complexity.Interaction.length_encEvalState_iterate_le {α : Type} {enc : α ↪ List Bool} {k : ℕ} {Control : Type} (M : Turing.MultiTapePTM k Bool Control Unit) {fuel : α → ℕ} (a : α) (j : ℕ) :
                              ((encEvalState enc) ((evalStep enc M fuel)^[j] (a, [], none))).length ≤ 2 * (enc a).length + 2 * fuel a * (14 * fuel a + 21) + fuel a + 4

                              The states of the evaluation are of polynomial size.

                              The evaluation within polynomial space.

                              theorem Cslib.Complexity.mem_iff_two_pow_lt_value {α : Type} {enc : α ↪ List Bool} {k : ℕ} {Control : Type} {V : α → Probability.WordOracleComp Unit Bool} {A : Set α} {M : Turing.MultiTapePTM k Bool Control Unit} {fuel : α → ℕ} (hV : ∀ (a : α) (S : Type) (oracle : Unit × List Bool → StateT S PMF (List Bool)) (s : S), ProbOracleComp.runWith oracle (⇑Turing.MultiTapeTM.encBool <$> V a) s = ProbOracleComp.runWith oracle (M.runOracle (fuel a) (enc a)) s) (hA : IsInteractiveProof V A (2 / 3) (1 / 3)) (a : α) :
                              a ∈ A ↔ 2 ^ fuel a < 2 * Interaction.value (Interaction.coinFamily M (fuel a) (enc a)) (fuel a) (fuel a) []

                              The value decides an interactive proof. If the verifier V is realized, against every stateful prover, by the run of the oracle machine M under the clock fuel a, then a member of the problem is exactly an instance on which the value of the programs of fuel a coins exceeds half the number of coin values: completeness 2 / 3 and the optimal prover give more than half, soundness 1 / 3 and the bound on all provers give less.

                              theorem Cslib.Complexity.IP_subset_PSPACE {α : Type} (enc : α ↪ List Bool) :
                              IP enc ⊆ PSPACE enc

                              IP ⊆ PSPACE Arora and Barak, Chapter 8 Sipser, Section 10.4: a problem with an interactive proof, whose verifier is strict oracle PPT with private coins, against all randomized stateful provers, is decided within polynomial space. The decider evaluates the game tree of the optimal prover over the messages and replies no longer than the clock of the verifier, counting the accepting coin values at its leaves (Cslib.Complexity.Interaction.evaluate), and compares the count with half the number of coin values (Cslib.Complexity.mem_iff_two_pow_lt_value).