Let's say we have a length-nwords vector w, whose components w[y] are 64-bit words.
Let's now fix some shift typeop∈{sll,srl,sra} and a shift amount s∈{0,…,63}. Let's say we want to shift each of w's nwords components by s using op. This gives us a new nwords-word list. Let's give it a name: for each y∈{0,…,nwords−1}, we let
shiftop(w)(y,s):=op(w[y],s).
We will call these the shifted witness functions.
As Polynomials
What happens if we put both w and shiftop(w)(y,s) through multilinearization? How will the resulting multilinears relate to each other?
At this point, we assume that nwords=2ℓwords is a power of 2. Let's review what multilinearization means, in this context. Going back to our original array w, we can identify w with a 6+ℓwords-variate multilinear over F2:
w(J0,…,J5,Y0,…,Yℓwords−1).
The indeterminates J0,…,J5 control the "bit within the word"; the indeterminates Y0,…,Yℓwords−1 control the "word index". In other words, for each word index y∈Bℓwords and each bit index j∈B6, w(j,y)=w[y]j (i.e., the "jth bit" of the latter).
Similarly, we can define the shifted witness polynomial
shiftop(w)(I,Y,S),
simply by multilinear-extending shiftop(w)(y,s). Note that we again need to pick up 6 new variables—which we now call I0,…,I5—that control the bit index within the word. Our defining property is that for each i∈B6, y∈Bℓwords and s∈B6 in the cube, shiftop(w)(i,y,s)=shiftop(w)(y,s)i=op(w[y],s)i (we again take the "ith bit").
How do we efficiently relate an evaluation claim on shiftop(w)(I,Y,S) to an evaluation claim on w(J,Y)? The most naïve possible approach would read w's entire table of values, shift them all, and compute a multilinear evaluation on 6+ℓwords+6 variables. This is obviously unacceptable.
The Shift Indicators
We introduce shift indicators, and explain how they help us solve this problem. We again fix a shift type op∈{sll,srl,sra}.
For each such op, we define a corresponding function from B6×B6×B6→{0,1}:
shift-indop(i,j,s):={10 if the ith bit of op(v,s)is the jth bit of v otherwise
For each triple of inputs i, j and s, it either is or isn't true that the ith bit position of op(v,s) is precisely the jth bit position of v (i.e., for each possible input v). The shift indicator picks up that fact.
With a bit of work we can unwind exactly what these mean. For each i, j and s in B6,
shift-indsll(i,j,s)=1 if and only if {j}+{s}={i}.
shift-indsrl(i,j,s)=1 if and only if {i}+{s}={j}.
shift-indsra(i,j,s)=1 if and only if {i}+{s}={j}or both {j}=63 and {i}≥64−{s} hold.
We will come back to these descriptions when we arithmetize the functions, in the next two pages.
Multilinear Shift Indicators
Now, we will write
shift-indop(I,J,S)
for the multilinear extension of shift-indop(i,j,s). This extension is a multilinear polynomial, with F2-coefficients, on 6×3=18 variables.
To check this equality, it's enough to check it on the cube. We fix i∈B6, y∈Bℓwords and s∈B6. Our goal is to show that for each such specialization,
This is basically an exercise. The sum ∑j∈B6shift-indop(i,j,s)⋅w(j,y) has at most one nonzero summand. If, for some j∈B6, shift-indop(i,j,s)=1, the sum will pick up exactly the jth bit w(j,y), which itself equals w[y]j. On the other hand, by definition of shift-indop, w[y]j=op(w[y],s)i, which itself equals shiftop(w)(y,s)i=shiftop(w)(i,y,s), by definition of the latter things. This is basically an idea from [DP25, § 4.3].
This equality opens up the door to using the sumcheck to relate a claim on shiftop(w)(I,Y,S) to one on w(J,Y). Indeed, given an evaluation claim on the former, by running a 6-round sumcheck, the verifier can reduce it to two evaluation claims, on shift-indop and w respectively.
If the former, i.e. shift-indop, is succinct, then we have solved our problem. Indeed, the verifier can evaluate that one himself, and then output the single, final evaluation claim on w.
The rest of this site section will be devoted to arguing that the polynomials shift-indop(I,J,S) are succinct, for each op.