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.
@[simp]
@[simp]
noncomputable def
MIPRE.SAT.Circuit.finiteArith
{F : Type u_1}
[Field F]
(C : Circuit)
:
MvPolynomial (Fin (C.inputs + C.size)) F
The routed polynomial restricted to the exact finite coordinate set.
Equations
Instances For
theorem
MIPRE.SAT.Circuit.degreeOf_finiteArith_le
{F : Type u_1}
[Field F]
(C : Circuit)
(hC : C.WellFormed)
(i : Fin (C.inputs + C.size))
:
theorem
MIPRE.SAT.Circuit.eval_finiteArith
{F : Type u_1}
[Field F]
(C : Circuit)
(z : Fin (C.inputs + C.size) → Bool)
:
(MvPolynomial.eval fun (i : Fin (C.inputs + C.size)) => LowDegree.ofBool (z i)) C.finiteArith = (MvPolynomial.eval
(Sum.elim (fun (i : ℕ) => LowDegree.ofBool (C.inputPart z i)) fun (j : ℕ) => LowDegree.ofBool (C.gatePart z j)))
C.routedArith
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)
:
(MvPolynomial.eval fun (i : Fin (C.inputs + C.size)) => LowDegree.ofBool (z i)) C.finiteArith = 1 ↔ C.RoutedConsistent (C.inputPart z) (C.gatePart z) ∧ C.gatePart z (C.size - 1) = true
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)
:
(MvPolynomial.eval fun (i : Fin (C.inputs + C.size)) => LowDegree.ofBool (z i)) C.finiteArith = 0 ∨ (MvPolynomial.eval fun (i : Fin (C.inputs + C.size)) => LowDegree.ofBool (z i)) C.finiteArith = 1
Boolean-valuedness is retained on the exact finite coordinate set.
theorem
MIPRE.SAT.Circuit.eval_iff_exists_finiteArith
{F : Type u_1}
[Field F]
[CharP F 2]
(C : Circuit)
(hC : C.WellFormed)
(x : ℕ → Bool)
:
Exact-variable arithmetization of the accepting circuit relation.