Documentation

Complexitylib.Classes.Containments.Internal.IPAssemble

IP ⊆ PSPACE, assembled #

⚠️ Unreviewed by Bolton

Everything is in place: Complexity.IPM.ipStep is the walk of the game tree written inside the polynomial-time algebra, Complexity.Protocol.walk_decides says its orbit ends with the membership bit, Complexity.IPM.runBound_le bounds how long that takes, and Complexity.IPM.encSst_length_le bounds how much room it needs. This file hands them to Complexity.SpaceIter.mem_PSPACE_of_iterate.

Main definitions #

Main results #

The iterated function #

noncomputable def Complexity.ipG (prot : Protocol) (vd : List BoolList Bool) (rp cp mp : Polynomial ) (z : List Bool) :

The function the space-bounded iteration runs: the running state is the first component and the input the second, so the very first call — on pair [] x — builds the initial state.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem Complexity.ipG_nil (prot : Protocol) (vd : List BoolList Bool) (rp cp mp : Polynomial ) (x : List Bool) :
    ipG prot vd rp cp mp (pair [] x) = pair (IPM.ipInit (polyRuler cp x) (polyRuler rp x)) x
    theorem Complexity.ipG_step (prot : Protocol) (vd : List BoolList Bool) (rp cp mp : Polynomial ) (st x : List Bool) (h : st []) :
    ipG prot vd rp cp mp (pair st x) = pair (IPM.ipStep (polyRuler mp x) (polyRuler cp x) (okFn prot.vmsg vd (polyRuler rp x) x) st) x

    The orbit #

    theorem Complexity.cr_length (prot : Protocol) (cp : Polynomial ) (hcp : ∀ (n : ), prot.coins n = Polynomial.eval n cp) (x : List Bool) :
    (polyRuler cp x).length = (prot.walkParams x).t
    theorem Complexity.mr_length (prot : Protocol) (mp : Polynomial ) (hmp : ∀ (n : ), prot.msgLen n = Polynomial.eval n mp) (x : List Bool) :
    (polyRuler mp x).length = (prot.walkParams x).m
    theorem Complexity.ipG_iterate (prot : Protocol) (vd : List BoolList Bool) (rp cp mp : Polynomial ) (hcp : ∀ (n : ), prot.coins n = Polynomial.eval n cp) (hmp : ∀ (n : ), prot.msgLen n = Polynomial.eval n mp) (hvd : ∀ (z : List Bool), vd z = [decide (z prot.verdict)]) (x : List Bool) (j : ) :
    (ipG prot vd rp cp mp)^[j + 1] (pair [] x) = pair (IPM.encSst ((IPM.step (prot.walkParams x))^[j] { done := false, ansBit := false, ret := none, stk := [IPM.freshFrm (prot.walkParams x) [] (polyRuler rp x)] })) x

    The packed orbit is the abstract one.

    The run at a fixed input #

    noncomputable def Complexity.IPRunSpec (prot : Protocol) (L : Language) (rp : Polynomial ) (x : List Bool) (T : ) :

    What a run of T steps at x achieves.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      theorem Complexity.ipRun_exists (prot : Protocol) {L : Language} (rp : Polynomial ) (hrp : ∀ (n : ), prot.rounds n = Polynomial.eval n rp) (hcomp : yL, ∃ (S : ProverStrategy), S.Bounded (prot.msgLen y.length) 2 / 3 eventProb (prot.acceptEvent S y)) (hsound : yL, ∀ (S : ProverStrategy), S.Bounded (prot.msgLen y.length)eventProb (prot.acceptEvent S y) 1 / 3) (x : List Bool) :
      ∃ (T : ), IPRunSpec prot L rp x T
      noncomputable def Complexity.ipT (prot : Protocol) (L : Language) (rp : Polynomial ) (hex : ∀ (x : List Bool), ∃ (T : ), IPRunSpec prot L rp x T) (x : List Bool) :

      The number of steps the walk takes at x.

      Equations
      Instances For
        theorem Complexity.ipT_spec (prot : Protocol) (L : Language) (rp : Polynomial ) (hex : ∀ (x : List Bool), ∃ (T : ), IPRunSpec prot L rp x T) (x : List Bool) :
        IPRunSpec prot L rp x (ipT prot L rp hex x)

        The containment #

        theorem Complexity.ip_mem_PSPACE (prot : Protocol) {L : Language} (rp cp mp r w : Polynomial ) (hrp : ∀ (n : ), prot.rounds n = Polynomial.eval n rp) (hcp : ∀ (n : ), prot.coins n = Polynomial.eval n cp) (hmp : ∀ (n : ), prot.msgLen n = Polynomial.eval n mp) (hcomp : yL, ∃ (S : ProverStrategy), S.Bounded (prot.msgLen y.length) 2 / 3 eventProb (prot.acceptEvent S y)) (hsound : yL, ∀ (S : ProverStrategy), S.Bounded (prot.msgLen y.length)eventProb (prot.acceptEvent S y) 1 / 3) (hr : ∀ (n : ), 2 * (2 * (Polynomial.eval n cp + 1) + (Polynomial.eval n rp + 1) * (2 * (2 * (Polynomial.eval n rp + 1) + 2 * Polynomial.eval n mp + 2 * (Polynomial.eval n mp + Polynomial.eval n cp) + 4 * (Polynomial.eval n cp + 1) + (Polynomial.eval n rp + 1) * (8 * (Polynomial.eval n mp + Polynomial.eval n cp) + 4) + 10) + 2) + 10) + 2 + n Polynomial.eval n r) (hw : ∀ (n : ), Polynomial.eval n cp + 2 + (2 * Polynomial.eval n mp + 3) * Polynomial.eval n rp Polynomial.eval n w) :

        IP ⊆ PSPACE, for one protocol.

        noncomputable def Complexity.ipStatePoly (rp cp mp : Polynomial ) :

        The polynomial bounding the length of the state the walk carries.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          noncomputable def Complexity.ipCountPoly (rp cp mp : Polynomial ) :

          The polynomial bounding the logarithm of the number of steps it takes.

          Equations
          Instances For
            theorem Complexity.ipStatePoly_eval (rp cp mp : Polynomial ) (n : ) :
            Polynomial.eval n (ipStatePoly rp cp mp) = 2 * (2 * (Polynomial.eval n cp + 1) + (Polynomial.eval n rp + 1) * (2 * (2 * (Polynomial.eval n rp + 1) + 2 * Polynomial.eval n mp + 2 * (Polynomial.eval n mp + Polynomial.eval n cp) + 4 * (Polynomial.eval n cp + 1) + (Polynomial.eval n rp + 1) * (8 * (Polynomial.eval n mp + Polynomial.eval n cp) + 4) + 10) + 2) + 10) + 2 + n

            IP ⊆ PSPACE. The optimal prover's acceptance count is the value of a polynomially deep game tree, and a stack machine walks that tree in polynomial space.