Documentation

MIPRE.Foundations.LowDegree.Encoding

The low-degree code #

The paper's sec:ld-encoding: the multilinear indicator polynomials of the Boolean subcube, the low-degree encoding g_a of a vector indexed by the subcube, and the decoding map Coded_H. This is the code the PCP of thm:pcp-decider commits to, and the a = Coded(g₁) of its soundness conclusion.

Nothing here is about the cost model: these are polynomials, and the verifier's arithmetic on their bit representations is a separate matter (the admissible field of lem:self-dual-basis).

The subcube #

def MIPRE.LowDegree.ofBool {F : Type u_1} [CommRing F] (b : Bool) :
F

{0,1} ⊆ F on single bits.

Equations
Instances For
    def MIPRE.LowDegree.pt {F : Type u_1} [CommRing F] {m : ℕ} (y : Fin m → Bool) :
    Fin m → F

    The point of F^m corresponding to y ∈ {0,1}^m, under {0,1} ⊆ F.

    Equations
    Instances For

      The indicator polynomials #

      noncomputable def MIPRE.LowDegree.ind {F : Type u_1} [CommRing F] {m : ℕ} (y : Fin m → Bool) :

      ind y, the multilinear polynomial that is 1 at the subcube point y and 0 at every other subcube point.

      Equations
      Instances For
        theorem MIPRE.LowDegree.eval_ind {F : Type u_1} [CommRing F] {m : ℕ} (y z : Fin m → Bool) :
        (MvPolynomial.eval (pt z)) (ind y) = if y = z then 1 else 0
        theorem MIPRE.LowDegree.degreeOf_ind_le {F : Type u_1} [CommRing F] {m : ℕ} [Nontrivial F] (y : Fin m → Bool) (i : Fin m) :

        The encoding #

        noncomputable def MIPRE.LowDegree.ldEnc {F : Type u_1} [CommRing F] {m : ℕ} (a : (Fin m → Bool) → F) :

        The low-degree encoding of a : {0,1}^m → F: the multilinear polynomial with g_a(y) = a y on the subcube.

        Equations
        Instances For
          @[simp]
          theorem MIPRE.LowDegree.eval_ldEnc {F : Type u_1} [CommRing F] {m : ℕ} (a : (Fin m → Bool) → F) (y : Fin m → Bool) :
          (MvPolynomial.eval (pt y)) (ldEnc a) = a y
          theorem MIPRE.LowDegree.degreeOf_ldEnc_le {F : Type u_1} [CommRing F] {m : ℕ} [Nontrivial F] (a : (Fin m → Bool) → F) (i : Fin m) :
          theorem MIPRE.LowDegree.totalDegree_ind_le {F : Type u_1} [CommRing F] {m : ℕ} [Nontrivial F] (y : Fin m → Bool) :
          theorem MIPRE.LowDegree.totalDegree_ldEnc_le {F : Type u_1} [CommRing F] {m : ℕ} [Nontrivial F] (a : (Fin m → Bool) → F) :

          The encoding is multilinear, hence of total degree at most m. This is the bound that makes the restriction of g_a to a line a polynomial of degree at most m.

          The decoding map #

          def MIPRE.LowDegree.codedOn {F : Type u_1} [CommRing F] {m : ℕ} [DecidableEq F] (H : Finset F) (g : MvPolynomial (Fin m) F) :
          (Fin m → Bool) → F

          Coded_H g: read g off the subcube, replacing any value outside H by 0.

          Equations
          Instances For
            theorem MIPRE.LowDegree.codedOn_ldEnc {F : Type u_1} [CommRing F] {m : ℕ} [DecidableEq F] {H : Finset F} {a : (Fin m → Bool) → F} (ha : ∀ (y : Fin m → Bool), a y ∈ H) :
            codedOn H (ldEnc a) = a
            def MIPRE.LowDegree.coded {F : Type u_1} [CommRing F] {m : ℕ} [DecidableEq F] (g : MvPolynomial (Fin m) F) :
            (Fin m → Bool) → F

            The Boolean decoding map Coded = Coded_{0,1}.

            Equations
            Instances For
              theorem MIPRE.LowDegree.coded_eq {F : Type u_1} [CommRing F] {m : ℕ} [DecidableEq F] (g : MvPolynomial (Fin m) F) (y : Fin m → Bool) :
              coded g y = 0 ∨ coded g y = 1

              Coded g is always {0,1}-valued.

              theorem MIPRE.LowDegree.coded_eq_of_eval_eq_ofBool {F : Type u_1} [CommRing F] {m : ℕ} [DecidableEq F] (g : MvPolynomial (Fin m) F) (y : Fin m → Bool) (b : Bool) (h : (MvPolynomial.eval (pt y)) g = ofBool b) :
              coded g y = ofBool b

              Decoding preserves a polynomial evaluation that already equals a Boolean value.