Documentation

MIPRE.Foundations.SAT.FiniteCircuitArithmetization

Circuit arithmetization on exactly the input and gate variables #

The first C.inputs coordinates are the inputs, followed by the C.size gate variables. No new variables are needed for routing repeated input reads.

Embed the exact finite coordinate set into input and gate indices.

Equations
Instances For
    noncomputable def MIPRE.SAT.Circuit.finiteArith {F : Type u_1} [Field F] (C : Circuit) :

    The routed polynomial restricted to the exact finite coordinate set.

    Equations
    Instances For
      def MIPRE.SAT.Circuit.inputPart (C : Circuit) (z : Fin (C.inputs + C.size) → Bool) (i : ℕ) :

      Read the finite assignment's input part, with false outside the circuit.

      Equations
      Instances For
        def MIPRE.SAT.Circuit.gatePart (C : Circuit) (z : Fin (C.inputs + C.size) → Bool) (j : ℕ) :

        Read the finite assignment's gate part, with false outside the circuit.

        Equations
        Instances For
          theorem MIPRE.SAT.Circuit.eval_finiteArith_iff {F : Type u_1} [Field F] [CharP F 2] (C : Circuit) (hC : C.WellFormed) (z : Fin (C.inputs + C.size) → Bool) :

          The finite polynomial enforces all gate values and the output literal.

          theorem MIPRE.SAT.Circuit.eval_finiteArith_bool {F : Type u_1} [Field F] [CharP F 2] (C : Circuit) (hC : C.WellFormed) (z : Fin (C.inputs + C.size) → Bool) :

          Boolean-valuedness is retained on the exact finite coordinate set.

          theorem MIPRE.SAT.Circuit.inputPart_eq (C : Circuit) (x : ℕ → Bool) (z : Fin (C.inputs + C.size) → Bool) (h : ∀ (i : Fin C.inputs), z (Fin.castAdd C.size i) = x ↑i) (i : ℕ) :
          i < C.inputs → C.inputPart z i = x i

          A finite assignment whose input coordinates equal x reads x on every input the circuit can use.

          theorem MIPRE.SAT.Circuit.eval_iff_exists_finiteArith {F : Type u_1} [Field F] [CharP F 2] (C : Circuit) (hC : C.WellFormed) (x : ℕ → Bool) :
          C.eval x = true ↔ ∃ (z : Fin (C.inputs + C.size) → Bool), (∀ (i : Fin C.inputs), z (Fin.castAdd C.size i) = x ↑i) ∧ (MvPolynomial.eval fun (i : Fin (C.inputs + C.size)) => LowDegree.ofBool (z i)) C.finiteArith = 1

          Exact-variable arithmetization of the accepting circuit relation.