Multiplication constraints let us capture the unsigned integer multiplication of 64-bit words. We now fix a total number of MUL constraints, nmul. For each x∈{0,…,nmul−1}, the xth MUL constraint is a tuple (Lxp,Lxq,Lxhi,Lxlo) of four lists of shifted value indices.
The Constraint Arrays
Immediately adopting the constraint array formalism, we now obtain length-nmul arrays p, q, lo, and hi of 64-bit words, defined, for each x∈{0,…,nmul−1}, by:
The prover data w fulfills the constraint system's MUL constraints if, for each x∈{0,…,nmul−1},
p[x]⋅q[x]=?264⋅hi[x]+lo[x]
holds over the integers. We interpret all of the words p[x], q[x], hi[x] and lo[x] as as elements of {0,…,264−1}, and interpret the ⋅ symbol as integer multiplication. That is, the product p[x]⋅q[x] is double-width; its high and low halves are given by hi[x] and lo[x].