Documentation

Complexitylib.Classes.PCP.Internal.AlgStep

One round, in numbers #

A round of amplification multiplies both counts of a constraint graph by a constant factor. This module records those factors, so an algorithm that writes the round's output knows how big it is.

Main results #

theorem Complexity.MultiTest.numVerts_toGraph {Pos E Q : Type} (M : MultiTest Pos E Q) [Fintype Pos] [Fintype E] [Fintype Q] [NumEnc Pos] [NumEnc E] [NumEnc Q] :

The vertices: one per position, and one per (test, random string).

theorem Complexity.MultiTest.split_mixed {a b c C Q : } (hb : b < C) (hc : c < Q) :
(a * (C * Q) + (b * Q + c)) / (C * Q) = a (a * (C * Q) + (b * Q + c)) % (C * Q) / Q = b (a * (C * Q) + (b * Q + c)) % Q = c

Splitting a number into a quotient and a remainder, with the remainder itself split.

theorem Complexity.MultiTest.enc_edgeOf_split {Pos E Q : Type} (M : MultiTest Pos E Q) [Fintype E] [Fintype Q] [NumEnc E] [NumEnc Q] (k : Fin (Fintype.card M.Edge)) :
NumEnc.enc (M.edgeOf k).1 = k / (2 ^ M.R * Fintype.card Q) NumEnc.enc (M.edgeOf k).2.1 = k % (2 ^ M.R * Fintype.card Q) / Fintype.card Q NumEnc.enc (M.edgeOf k).2.2 = k % Fintype.card Q

How an edge number splits: the test, the random string, the read.

noncomputable def Complexity.MultiTest.tailNum {Pos E Q : Type} (M : MultiTest Pos E Q) [Fintype Pos] [Fintype Q] (k : ) :

The first endpoint of an edge, in numbers.

Equations
Instances For
    theorem Complexity.MultiTest.tailNum_eq {Pos E Q : Type} (M : MultiTest Pos E Q) [Fintype Pos] [Fintype E] [Fintype Q] [NumEnc Pos] [NumEnc E] [NumEnc Q] (k : Fin (Fintype.card M.Edge)) :
    M.tailNum k = (M.toGraph.tail k)
    def Complexity.MultiTest.relOfCheck {Q : Type} (chk : (QZMod 2)Bool) (i : Q) :
    Alpha QAlpha QBool

    The constraint an edge carries: the test vertex's answers must pass the test, and the read's answer must be the position's bit.

    Equations
    Instances For
      theorem Complexity.MultiTest.rel_toGraph_eq {Pos E Q : Type} (M : MultiTest Pos E Q) [Fintype Pos] [Fintype E] [Fintype Q] [NumEnc Pos] [NumEnc E] [NumEnc Q] (k : Fin (Fintype.card M.Edge)) :
      M.toGraph.rel k = relOfCheck (M.check (M.edgeOf k).1 (M.edgeOf k).2.1) (M.edgeOf k).2.2

      The constraint depends only on the verdict and the read.

      The positions of a composed proof: an encoding block per vertex, and a linear and a quadratic table per dart.

      theorem Complexity.RegCSP.R_compose {β : Type} [Fintype β] (R : RegCSP β) (B : ) (enc : βBooleanAnalysis.Cube B) :
      (compose enc R).R = Tester.ROf B

      The composed test's randomness.

      theorem Complexity.RegCSP.edge_split {β : Type} [Fintype β] (R : RegCSP β) [NumEnc R.graph.V] [NumEnc R.graph.D] (B : ) (enc : βBooleanAnalysis.Cube B) (k : Fin (Fintype.card (compose enc R).Edge)) :
      k = ((NumEnc.enc ((compose enc R).edgeOf k).1.1 * NumEnc.card R.graph.D + NumEnc.enc ((compose enc R).edgeOf k).1.2) * 2 ^ Tester.ROf B + NumEnc.enc ((compose enc R).edgeOf k).2.1) * 22 + NumEnc.enc ((compose enc R).edgeOf k).2.2

      An edge number splits into a vertex, a dart, a string and a read.

      theorem Complexity.RegCSP.tailNum_split {β : Type} [Fintype β] (R : RegCSP β) (B : ) (enc : βBooleanAnalysis.Cube B) (a c d : ) (hc : c < 2 ^ Tester.ROf B) (hd : d < 22) :
      (compose enc R).tailNum ((a * 2 ^ Tester.ROf B + c) * 22 + d) = Fintype.card R.Pos + (a * 2 ^ Tester.ROf B + c)

      The first endpoint, from an edge's split.

      theorem Complexity.RegCSP.tailNum_split' {β : Type} [Fintype β] (R : RegCSP β) (B : ) (enc : βBooleanAnalysis.Cube B) (cZ a c d : ) (hcZ : cZ = 2 ^ Tester.ROf B) (hc : c < cZ) (hd : d < 22) :
      (compose enc R).tailNum ((a * cZ + c) * 22 + d) = Fintype.card R.Pos + (a * cZ + c)

      The first endpoint, with the string count given by name.

      theorem Complexity.RegCSP.edge_data {β : Type} [Fintype β] (R : RegCSP β) [NumEnc R.graph.V] [NumEnc R.graph.D] (B : ) (enc : βBooleanAnalysis.Cube B) (e : ) (he : e < (compose enc R).toGraph.numEdges) :
      ∃ (p : R.Dart) (z : BooleanAnalysis.Cube (Tester.ROf B)) (i : ReadIdx), p = ((compose enc R).edgeOf e, he).1 z = ((compose enc R).edgeOf e, he).2.1 i = ((compose enc R).edgeOf e, he).2.2 e = ((NumEnc.enc p.1 * NumEnc.card R.graph.D + NumEnc.enc p.2) * 2 ^ Tester.ROf B + NumEnc.enc z) * 22 + NumEnc.enc i

      An edge's data, packaged so that a caller never has to spell the composed system out: the test, the string and the read it names, together with how its number splits.

      noncomputable def Complexity.Dinur.vertFactor (E : ExpanderFamily) (q : ) :

      The constant factor by which a round multiplies the vertex count.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        noncomputable def Complexity.Dinur.posFactor (E : ExpanderFamily) (q : ) :

        The constant number of positions a round makes per edge of its input.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          The positions of a round's proof, counted.

          theorem Complexity.Dinur.step_eq (E : ExpanderFamily) (q : ) (hq : 0 < q) (G : ConstraintGraph DinurAlpha) :
          step E q hq G = (RegCSP.compose (enc E G (powT K q)) ((G.preprocess E).killedPow q (powT K q) hq)).toGraph

          A round's output, named.

          theorem Complexity.Dinur.tail_step (E : ExpanderFamily) (q : ) (hq : 0 < q) (G : ConstraintGraph DinurAlpha) (k : Fin (Fintype.card (RegCSP.compose (enc E G (powT K q)) ((G.preprocess E).killedPow q (powT K q) hq)).Edge)) :
          ((RegCSP.compose (enc E G (powT K q)) ((G.preprocess E).killedPow q (powT K q) hq)).toGraph.tail k) = posFactor E q * G.numEdges + (k / (2 ^ (RegCSP.compose (enc E G (powT K q)) ((G.preprocess E).killedPow q (powT K q) hq)).R * 22) * 2 ^ (RegCSP.compose (enc E G (powT K q)) ((G.preprocess E).killedPow q (powT K q) hq)).R + k % (2 ^ (RegCSP.compose (enc E G (powT K q)) ((G.preprocess E).killedPow q (powT K q) hq)).R * 22) / 22)

          The first endpoint of a round's edge: the test vertex it belongs to, after all the positions.

          A round multiplies the vertex count by a constant.