Documentation

Complexitylib.Classes.Containments.Internal.IPWalk

The walk runs on the protocol's tree #

⚠️ Unreviewed by Bolton

Complexitylib.Classes.Containments.Internal.IPSem builds a machine that walks an abstract tree, parametric in a single test — does this coin string make the verifier accept below these rounds. This file supplies that test from a protocol and checks that the tree the machine walks is the protocol's own.

Main definitions #

Main results #

noncomputable def Complexity.Protocol.walkParams (prot : Protocol) (x : List Bool) :

The parameters the walk runs on: the message bound, the coin width, and the leaf test.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem Complexity.Protocol.treeVal_eq_gvalR (prot : Protocol) (x : List Bool) (n : ) (ps : List (List Bool × List Bool)) :
    IPM.treeVal (prot.walkParams x) n ps = prot.gvalR x (prot.coins x.length) n ps

    The abstract tree is the protocol's game tree.

    The walk decides membership #

    theorem Complexity.Protocol.cmpBit_eq_true_iff {L : Language} (prot : Protocol) (x : List Bool) (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) (w : List Bool) (hwlen : w.length = (prot.walkParams x).t + 1) (hwval : binValLE w = IPM.treeVal (prot.walkParams x) (prot.rounds x.length) []) :

    The verdict the walk finishes with is membership.

    theorem Complexity.Protocol.walk_decides {L : Language} (prot : Protocol) (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 lvl : List Bool) (hlvl : lvl.length = prot.rounds x.length) :
    TIPM.runBound (prot.walkParams x) (prot.rounds x.length), (∀ jT, ((IPM.step (prot.walkParams x))^[j] { done := false, ansBit := false, ret := none, stk := [IPM.freshFrm (prot.walkParams x) [] lvl] }).done = false) ((IPM.step (prot.walkParams x))^[T + 1] { done := false, ansBit := false, ret := none, stk := [IPM.freshFrm (prot.walkParams x) [] lvl] }).done = true (((IPM.step (prot.walkParams x))^[T + 2] { done := false, ansBit := false, ret := none, stk := [IPM.freshFrm (prot.walkParams x) [] lvl] }).done = true x L)

    The walk decides membership. From a single fresh frame of rounds(|x|) levels the machine keeps its flag down, raises it on the next step, and one step later the flag is the membership bit.

    theorem Complexity.Protocol.ipStep_iterate_walk (prot : Protocol) (x mr cr : List Bool) (hm : mr.length = (prot.walkParams x).m) (hc : cr.length = (prot.walkParams x).t) (okf : List BoolList BoolList Bool) (lvl : List Bool) (hokf : ∀ (f : IPM.Frm) (fs : List IPM.Frm), IPM.BodyOk (f :: fs)(f :: fs).length lvl.length + 1∀ (u : List Bool), okf (IPM.encStk (f :: fs)) u = [(prot.walkParams x).ok (IPM.roundsOf fs) u]) (j : ) :
    (IPM.ipStep mr cr okf)^[j] (IPM.encSst { done := false, ansBit := false, ret := none, stk := [IPM.freshFrm (prot.walkParams x) [] lvl] }) = IPM.encSst ((IPM.step (prot.walkParams x))^[j] { done := false, ansBit := false, ret := none, stk := [IPM.freshFrm (prot.walkParams x) [] lvl] })

    The encoded orbit is the abstract one.