Encoded field vectors and their circuit-coordinate slices #
theorem
MIPRE.SAT.BinField.eval_circuitBits_vecBits
{k : ℕ}
(E : BinField k)
(C : Circuit)
(hC : C.WellFormed)
(p : Cost.BitStr)
(hp : p ≠ [])
(hpk : List.length p = k)
[CharP E.carrier 2]
(root : E.carrier)
(hroot : root ^ List.length p = LowDegree.BinaryPolynomial.evalBits root p)
(hencode : ∀ (a : E.carrier), LowDegree.BinaryPolynomial.evalBits root (E.toBits a) = a)
(v : Fin (C.inputs + C.size) → E.carrier)
:
LowDegree.BinaryPolynomial.evalBits root
(Circuit.circuitBits p (List.take C.inputs (E.vecBits v)) (List.drop C.inputs (E.vecBits v)) C.gates) = (MvPolynomial.eval v) C.finiteArith
The circuit evaluator on a raw vector computes the finite polynomial at the original typed point, for any correct coefficient representation.