Documentation

MIPRE.TM.CookLevin.PcpClauses

Clause indices and the five Boolean PCP blocks #

The describer reads five little-endian indices followed by their signs. This module identifies that input format with the Boolean coordinates used by the low-degree PCP, including both directions of the index encoding.

def MIPRE.SAT.cubeIndex {m : ℕ} (y : Fin m → Bool) :
Fin (2 ^ m)

A Boolean cube point as a little-endian index.

Equations
Instances For
    def MIPRE.SAT.indexCube {m : ℕ} (i : Fin (2 ^ m)) :
    Fin m → Bool

    The Boolean cube point named by a little-endian index.

    Equations
    Instances For
      @[simp]
      theorem MIPRE.SAT.bitsOfNat_cubeIndex {m : ℕ} (y : Fin m → Bool) :
      @[simp]
      theorem MIPRE.SAT.cubeIndex_indexCube {m : ℕ} (i : Fin (2 ^ m)) :
      @[simp]
      theorem MIPRE.SAT.indexCube_cubeIndex {m : ℕ} (y : Fin m → Bool) :
      def MIPRE.SAT.cubeIndexEquiv (m : ℕ) :
      (Fin m → Bool) ≃ Fin (2 ^ m)

      The concrete bijection used when decoding the five answer assignments.

      Equations
      Instances For

        Equal-width clause encodings lose neither an index nor a sign.

        def MIPRE.SAT.Clause5.literals {V : Type u_1} (c : Clause5 V V V V V) :
        Fin 5 → Lit V

        Uniformly indexed literals of a clause with equally sized variable blocks.

        Equations
        Instances For
          def MIPRE.SAT.Clause5.ofLiterals {V : Type u_1} (l : Fin 5 → Lit V) :
          Clause5 V V V V V
          Equations
          Instances For
            @[simp]
            theorem MIPRE.SAT.Clause5.literals_ofLiterals {V : Type u_1} (l : Fin 5 → Lit V) :
            @[simp]
            theorem MIPRE.SAT.Clause5.lit_true_iff {V : Type u_1} (l : Lit V) (a : V → Bool) :
            Lit.eval a l = true ↔ a l.var = l.pos
            theorem MIPRE.SAT.Clause5.eval_iff_exists {V : Type u_1} (c : Clause5 V V V V V) (a : Fin 5 → V → Bool) :
            eval (a 0) (a 1) (a 2) (a 3) (a 4) c = true ↔ ∃ (i : Fin 5), a i (c.literals i).var = (c.literals i).pos

            The five Boolean disjuncts are precisely the satisfying-literal condition in the algebraic PCP completeness and decoding lemmas.

            def MIPRE.SAT.PcpParams.pointClause (P : PcpParams) (y : Fin P.m' → Bool) :
            Clause5 (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m))

            The clause described by the first five blocks and sign coordinates of a point.

            Equations
            Instances For
              @[simp]
              theorem MIPRE.SAT.PcpParams.pointClause_literals (P : PcpParams) (y : Fin P.m' → Bool) (i : Fin 5) :
              (P.pointClause y).literals i = { var := cubeIndex (P.block i y), pos := y (P.signIndex i) }

              The circuit-input slice of a Boolean PCP point.

              Equations
              Instances For
                @[simp]

                The describer's actual input order agrees with the five PCP blocks and signs.

                def MIPRE.SAT.PcpParams.pointFromClause (P : PcpParams) (c : Clause5 (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m))) :
                Fin P.m' → Bool

                Extend a described clause to a PCP point, initially setting all gate coordinates to false. Those coordinates may subsequently be replaced by a witness.

                Equations
                Instances For
                  theorem MIPRE.SAT.PcpParams.inputSlice_pointFromClause (P : PcpParams) (c : Clause5 (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m))) :
                  @[simp]
                  theorem MIPRE.SAT.PcpParams.pointClause_pointFromClause (P : PcpParams) (c : Clause5 (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m))) :
                  @[simp]
                  theorem MIPRE.SAT.PcpParams.sign_pointFromClause (P : PcpParams) (c : Clause5 (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m)) (Fin (2 ^ P.m))) (i : Fin 5) :