LogUp*

Introduction

LogUp was originally designed as a protocol to prove non-indexed lookup arguments. In contrast, permutation arguments are defined in the indexed lookup form, and one typically reduces indexed lookup to non-indexed lookup in order to apply LogUp.

A non-indexed lookup argument deals with the problem of proving that, for two arrays X,TX, T with X=n,T=m|X| = n, |T| = m, the relation XTX \subseteq T holds. In contrast, an indexed lookup argument introduces an index array II in place of XX to carry out the proof. (Let's see how II looks like later!)

LogUp* focuses on the following setting:

  1. mnm \ll n ⇒ small table

  2. II consists of nn small elements.

  3. TT consists of mm large elements ≈ 128-bit

In this situation, the standard reduction requires committing to the array ITI^*T (the pullback). While elliptic curve–based commitments offer some solutions, hash-based commitments do not provide an efficient method. The problem becomes particularly severe when the elements of ITI^*T must be defined over an extension field in order to achieve 128-bit security; the commitment cost grows prohibitively large according to the paper, roughly 6× the cost compared to plain LogUp.

LogUp* addresses this challenge by proposing an efficient alternative that is agnostic to both the underlying field and the commitment scheme.


Background

Non-indexed lookup

  • Pre-commitment: X,T,accX, T, \mathsf{acc} (acc\mathsf{acc}, also called the multiplicity , indicates how many times each table element in TT is looked up by XX).

  • Claim: XTX \subseteq T

  • Challenge: cc

  • Verification:

0i<n1cX[i]=0j<macc[j]cT[j]\sum_{0 \le i < n}\frac{1}{c - X[i]} = \sum_{0 \le j < m} \frac{\mathsf{acc}[j]}{c - T[j]}

Indexed lookup

  • Claim:

(IT)[i]=?T[I[i]](I^* T)[i] \stackrel{?}{=} T[I[i]]
  • Example: If X=(1,2,1,3,4)X = (1,2,1,3,4) and T=(1,2,3,4)T = (1, 2, 3, 4), then in the indexed lookup setting we have I=(0,1,0,2,3)I = (0,1,0,2,3), so that IT=XI^*T = X.


Reduction: indexed to non-indexed lookup

  • Pre-commitment: I,T,IT,accI, T, \textcolor{red}{I^*T}, \mathsf{acc}

  • Claim: (IT,I)(T,[0,T))(I^*T, I) \subseteq (T, [0, |T|)) (or you can say that ITI^*T is claimed to be pullback)

  • Challenge: c,γc, \gamma

  • Verification:

0i<n1c(IT[i]+γI[i])=0j<macc[j]c(T[j]+γj)\sum_{0 \le i < n}\frac{1}{c - (I^*T[i] + \gamma I[i])} = \sum_{0 \le j < m} \frac{\mathsf{acc}[j]}{c - (T[j] + \gamma j)}

LogUp* aims to eliminate the need for committing to IT\textcolor{red}{I^*T} in this reduction.


Protocol Explanation

Pullback and pushforward

Notations

  • A:n=[0,n)FA: \mathbf{n} = [0,n) \to \mathbb{F}

  • B:m=[0,m)FB: \mathbf{m} = [0,m) \to \mathbb{F}

  • I:nmI: \mathbf{n} \to \mathbf{m}

  • Pullback:

IB[i]=B[I[i]]I^*B[i] = B[I[i]]
  • Pushforward:

IA[j]=iI[i]=jA[i]I_*A[j] = \sum_{i \mid I[i] = j} A[i]

Lemma 1. Duality

IA,B=A,IB\langle I_*A, B \rangle = \langle A, I^*B \rangle

Proof

IA,B=0j<mIA[j]B[j]=0j<m(iI[i]=jA[i])B[j]=0i<nA[i]B[I[i]]=A,IB\langle I_*A, B \rangle = \sum_{0 \le j < m} I_*A[j]B[j] = \sum_{0 \le j < m}\left(\sum_{i \mid I[i] = j} A[i]\right)B[j] = \sum_{0 \le i < n} A[i]B[I[i]] = \langle A, I^*B \rangle

Intuitive example

Let A=(1,2,1,3,4),B=(1,2,3,4),I=(0,1,0,2,3)A = (1, 2, 1, 3, 4), B = (1, 2, 3, 4), I = (0, 1, 0, 2, 3). Then IB=AI^*B = A.

If A=(a0,,an1)A = (a_0, \dots, a_{n-1}), then the right hand is computed as follows:

0i<nai2=12+22+12+32+42=31\sum_{0 \le i < n} a_i^2 = 1^2 + 2^2 + 1^2 + 3^2 + 4^2 = 31

If B=(b0,,bm1)B = (b_0, \dots, b_{m-1}), then the left hand is computed as follows:

0j<m(iI[i]=jai)bj=(1+1)1+22+33+44=31\sum_{0 \le j < m} \left(\sum_{i \mid I[i] = j} a_i\right)b_j = (1+1)\cdot 1 + 2\cdot 2 + 3\cdot 3 + 4\cdot 4 = 31

Both sides match, confirming the duality.


Trading pullback for pushforward

  • Pre-commitment: I,TI, T

  • Claim: IT(r)=?eI^*T(r) \stackrel{?}{=} e

Protocol

  1. Commit to IeqrI_*\mathsf{eq}_r, where

eqr(x)=0i<k(rixi+(1ri)(1xi)),n<2k\mathsf{eq}_r(x) = \prod_{0 \le i < k}(r_i x_i + (1-r_i)(1-x_i)), \quad n < 2^k
  1. Observe that

IT(r)=IT,eqr=T,IeqrI^*T(r) = \langle I^*T, \mathsf{eq}_r \rangle = \langle T, I_* \mathsf{eq}_r \rangle

Evaluation of a polynomial PP in a point r=(r0,,rk1)r = (r_0, \dots, r_{k−1}) can be computed as an inner product with the multilinear Lagrange kernel: P(r)=P,eqrP(r) = \lang P, \mathsf{eq}_r \rang.

  1. Run sumcheck for the claim T,Ieqr=?e\langle T, I_* \mathsf{eq}_r \rangle \stackrel{?}{=} e, obtaining additional evaluation claims T(r)=?c,  Ieqr(r)=?cT(r') \stackrel{?}{=} c, \; I_*\mathsf{eq}_r(r') \stackrel{?}{=} c'.

  2. Open TT and IeqrI_* \mathsf{eq}_r.

This protocol proves the evaluation of IT(r)I^*T(r), provided that IeqrI_*\mathsf{eq}_r was committed correctly. Note that the commitment to IT\textcolor{red}{I^*T} is not performed.

Then we need to check whether IeqrI_*\mathsf{eq}_r indeed is pushforward.


Pushforward proof with LogUp*

General Case

  • Pre-commitment: I,T,X,YI, T, X, Y

  • Claim: YYis claimed to be pushforward as follows:

Y[j]=?IX[j]=iI[i]=jX[i]Y[j] \stackrel{?}{=} I_*X[j] = \sum_{i \mid I[i] = j} X[i]
  • Challenge: cc

  • Verification:

0i<nX[i]cI[i]=0j<mY[j]cj\sum_{0 \le i < n} \frac{X[i]}{c - I[i]} = \sum_{0 \le j < m} \frac{Y[j]}{c - j}

Intuitively, if I[i=1,5,7]j=3I[i = 1,5,7] \mapsto j=3, then the left-hand side contributes X[1]+X[5]+X[7]c3\frac{X[1] + X[5] + X[7]}{c-3}, while the right-hand side uses Y[3]c3\frac{Y[3]}{c-3} to represent the same value.


Our Case

  • Pre-commitment: I,T,YI, T, Y (here X=eqrX = \mathsf{eq}_r, and since the verifier can compute eqr\mathsf{eq}_r directly, there is no need to commit to XX).

  • Challenge: cc

  • Verification:

0i<neqr[i]cI[i]=0j<mIeqr[j]cj\sum_{0 \le i < n}\frac{\mathsf{eq}_r[i]}{c - I[i]} = \sum_{0 \le j < m} \frac{I_*\mathsf{eq}_r[j]}{c - j}

Thus, the prover only commits to I,T,YI, T, Y, while the verifier computes eqr\mathsf{eq}_r on its own to complete the verification.

References

Written by ryan Kim from A41

Last updated