CQ Lookup

\begin{aligned} \textsf{lhs} =&\ (\textcolor{brown}{\beta} + f_1)(\textcolor{brown}{\beta} + f_2)(\textcolor{brown}{\beta} + f_3) \dots(\textcolor{brown}{\beta} + f_{18})(\textcolor{brown}{\beta} + f_{19}) \\ =&\ \prod_{i=1}^{n} (\textcolor{brown}{\beta} + f_i) \end{aligned}
\begin{aligned} \textsf{rhs} =&\ (\textcolor{brown}{\beta} + t_1)^4 (\textcolor{brown}{\beta} + t_2)^2 (\textcolor{brown}{\beta} + t_3)^4 (\textcolor{brown}{\beta} + t_4)^2 (\textcolor{brown}{\beta} + t_5)^1 (\textcolor{brown}{\beta} + t_6)^3 (\textcolor{brown}{\beta} + t_7)^3\\ =&\ \prod_{i=1}^{N} (\textcolor{brown}{\beta} + t_i)^{m_i} \end{aligned}
\implies \prod_{j=1}^{n} (\textcolor{brown}{\beta} + f_j) = \prod_{i=1}^{N} (\textcolor{brown}{\beta} + t_i)^{m_i}
\implies \sum_{j=1}^{n} \text{log}(\textcolor{brown}{\beta} + f_j) = \sum_{i=1}^{N} m_i \cdot \text{log}(\textcolor{brown}{\beta} + t_i)
\implies \begin{aligned} \sum_{j=1}^{n} \frac{1}{(\textcolor{brown}{\beta} + f_j)} = \sum_{i=1}^{N} \frac{m_i}{(\textcolor{brown}{\beta} + t_i)} \end{aligned}

Lookup Argument

\underbrace{\hspace{13.4cm}}_{}
\underbrace{\hspace{4.9cm}}_{}

Table

Values

(\textcolor{brown}{\beta} + t_1)
(\textcolor{brown}{\beta} + t_2)
(\textcolor{brown}{\beta} + t_3)
(\textcolor{brown}{\beta} + t_4)
(\textcolor{brown}{\beta} + t_5)
(\textcolor{brown}{\beta} + t_6)
(\textcolor{brown}{\beta} + t_7)
(\textcolor{brown}{\beta} + f_1)
(\textcolor{brown}{\beta} + f_2)
(\textcolor{brown}{\beta} + f_3)
(\textcolor{brown}{\beta} + f_4)
(\textcolor{brown}{\beta} + f_5)
(\textcolor{brown}{\beta} + f_6)
(\textcolor{brown}{\beta} + f_7)
(\textcolor{brown}{\beta} + f_8)
(\textcolor{brown}{\beta} + f_9)
(\textcolor{brown}{\beta} + f_{10})
(\textcolor{brown}{\beta} + f_{11})
(\textcolor{brown}{\beta} + f_{12})
(\textcolor{brown}{\beta} + f_{13})
(\textcolor{brown}{\beta} + f_{14})
(\textcolor{brown}{\beta} + f_{15})
(\textcolor{brown}{\beta} + f_{16})
(\textcolor{brown}{\beta} + f_{17})
(\textcolor{brown}{\beta} + f_{18})
(\textcolor{brown}{\beta} + f_{19})

Cached Quotient

\begin{aligned} \sum_{j\in[n]} \frac{1}{(\textcolor{brown}{\beta} + f_j)} = \sum_{i\in[N]} \frac{m_i}{(\textcolor{brown}{\beta} + t_i)} \end{aligned}
  • Given \(\{f_i\}_{i\in[n]}\) and \(\{t_i\}_{i\in[N]},\) we wish to prove the relation
  • We define two polynomials \(A(X)\) and \(B(X)\) such that
\begin{aligned} \forall i \in[N]: \ A_i = \frac{m_i}{(\textcolor{brown}{\beta} + t_i)} \end{aligned}
\begin{aligned} \forall j\in[n]: \ B_j = \frac{1}{(\textcolor{brown}{\beta} + f_j)} \end{aligned}
  • We know that \(Q_{A,i} := A_i(t_i+\textcolor{brown}{\beta})-m_i\) must be \(0\ \forall i\in [N]\)
  • Similarly, \(Q_{B,j}:=B_j(f_j+\textcolor{brown}{\beta}) - 1\) must be \(0\ \forall j\in [n]\)
A(X)(T(X) + \textcolor{brown}{\beta}) - m(X) = Q_A(X)\textcolor{grey}{Z_{\mathbb{V}}(X)}
B(X)(F(X) + \textcolor{brown}{\beta}) - 1 = Q_B(X)\textcolor{grey}{Z_{\mathbb{H}}(X)}

Cached Quotient

  • The prover needs to do two things:
    • Prove the he knows the polynomials \(A(.), B(.), Q_A(.), Q_B(.), F(.), m(.)\)
    • Prove the relationship between these polynomials
  • Solution: Open these polynomials at appropriate points
    • Open \(A(X), B(X)\) at \(X=0\) by computing \(a_0=A(0), b_0=B(0)\) 
    • Open \(Q_A(X), Q_B(X), F(X), m(X)\) at a random \(X=\gamma\) by computing \(a_{\gamma}=A(\gamma), b_{\gamma}=B(\gamma), f_\gamma = F(\gamma), m_{\gamma}=m(\gamma)\)
  • How does this suffice to prove the correct relationship?
    • Verifier computes \(Q_{A, B}(\gamma)\) himself as:

 

\begin{aligned} Q_A(\gamma) = \frac{A(\gamma)(T(\gamma) + \textcolor{brown}{\beta}) - m(\gamma)}{\textcolor{grey}{Z_{\mathbb{V}}(\gamma)}} \end{aligned}
\begin{aligned} Q_B(\gamma) = \frac{B(\gamma)(F(\gamma) + \textcolor{brown}{\beta}) - 1}{\textcolor{grey}{Z_{\mathbb{H}}(\gamma)}} \end{aligned}
  • Problem: Opening \(Q_A\) and computing \(T(\gamma)\) is a \(\mathcal{O}(N)\)

Cached Quotient

  • Problem: Opening \(Q_A\) and computing \(T(\gamma)\) is \(\mathcal{O}(N)\)
  • Solution: Check correctness of \(Q_A(.)\) using a pairing
A(x)(T(x) + \textcolor{brown}{\beta}) = Q_A(x)\textcolor{grey}{Z_{\mathbb{V}}(x)} + m(x)
\implies e\Big(\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) = e\Big(\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big)\cdot e\Big(\textcolor{orange}{[m]_1 - \textcolor{brown}{\beta}\textcolor{orange}{[A]_1}}, \ \textcolor{lightgreen}{[1]_2}\Big)
  • Problem: Computing commitment to \(Q_A\) is \(\mathcal{O}(N)\)
  • Solution: Use cached quotients \(\{\textcolor{lightgreen}{[Q_i]_1}\}_{i\in[N]}\) to do it in \(\mathcal{O}(n)\)
\implies A(x)T(x) = Q_A(x)\textcolor{grey}{Z_{\mathbb{V}}(x)} + m(x) - \textcolor{brown}{\beta}A(x)
[Q_A]_1 = \sum_{\{ i\in[N] \ | \ A_i \neq 0\}} \ A_i \cdot \textcolor{lightgreen}{[Q_i]_1}
\begin{aligned} Q_i(X) = \frac{L_i(X)(T(X) - t_i)}{\textcolor{grey}{Z_{\mathbb{V}}(X)}} \end{aligned}

Prover

Pre-computed

Pre-computed in \(\mathcal{O}(N\text{log}N)\)

CQ Protocol

Compute \(\textcolor{orange}{[m]_1}\) given multiplicities \(\{m_j\}_{j\in[n]}\)

Generate \(\beta \leftarrow \mathbb{F}\)

Define \(A_i = \frac{m_i}{\beta + t_i} \ \forall i\in [N]\) and compute \(\textcolor{orange}{[A]_1}\)

Compute \(\textcolor{orange}{[Q_A]_1} = \sum_{i\in[N], A_i\neq 0}A_i\cdot \textcolor{lightgreen}{[Q_i]_1}\)

Define \(B_i = \frac{1}{\beta + f_i} \ \forall i\in [n]\) and compute \(\textcolor{orange}{[B]_1}\)

Compute \(Q_B(X) = \frac{B(X)(f(X) + \beta) - 1}{\textcolor{grey}{Z_{\mathbb{H}}(X)}},\) compute \(\textcolor{orange}{[Q_B]_1}\)

\mathcal{O}(n)
\mathcal{O}(n)
\mathcal{O}(n)
\mathcal{O}(n)
\mathcal{O}(n \ \text{log}n)
e\Big(\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) = e\Big(\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big)\cdot e\Big(\textcolor{orange}{[m]_1 - \textcolor{brown}{\beta}\textcolor{orange}{[A]_1}}, \ \textcolor{lightgreen}{[1]_2}\Big)

Generate \(\gamma\leftarrow \mathbb{F}\)

\textcolor{orange}{[W_\gamma]_1} \leftarrow \textsf{\textcolor{grey}{KZG.open}}(\{B, f, Q_B\}, \ \textcolor{brown}{\gamma})
\textcolor{orange}{[W_0]_1} \leftarrow \textsf{\textcolor{grey}{KZG.open}}(\{A, B\}, \ \textcolor{brown}{0})
\textcolor{orange}{[m]_1}
\textcolor{orange}{[A]_1 \ [Q_A]_1 \ [B]_1 \ [Q_B]_1}
\textcolor{orange}{[W_\gamma]_1 \ [W_0]_1}
e\Big(\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) = e\Big(\textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[W_0]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) = e\Big( \textcolor{grey}{[C_0]_1} - \textcolor{grey}{[v_0]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
\mathcal{O}(n)
\mathcal{O}(n)

CQ Aggregation

e\Big(\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) = e\Big(\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big)\cdot e\Big(\textcolor{orange}{[m]_1 - \textcolor{brown}{\beta}\textcolor{orange}{[A]_1}}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) = e\Big(\textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[W_0]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) = e\Big( \textcolor{grey}{[C_0]_1} - \textcolor{grey}{[v_0]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) = e\Big( \textcolor{orange}{[P_B]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) = e\Big( \textcolor{orange}{[P_A]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
\underbrace{\hspace{2cm}}_{}
e\Big(\textcolor{orange}{[W_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) = e\Big(\textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{grey}{[C_0]_1} - \textcolor{brown}{\mu}\textcolor{grey}{[v_0]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
\underbrace{\hspace{2cm}}_{}
e\Big(\textcolor{orange}{[A]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) = e\Big( \textcolor{orange}{[P_A]_1} + \textcolor{brown}{\mu} \textcolor{orange}{[P_B]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
\pi_{\textsf{cq}} = \Big( \textcolor{orange}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{skyblue}{a_0, b_\gamma, f_\gamma, } \Big)

CQ Aggregation

e\Big(\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) = e\Big(\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big)\cdot e\Big(\textcolor{orange}{[m]_1 - \textcolor{brown}{\beta}\textcolor{orange}{[A]_1}}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[W_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) = e\Big(\textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{grey}{[C_0]_1} - \textcolor{brown}{\mu}\textcolor{grey}{[v_0]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
e\Big(\textcolor{orange}{[A]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) = e\Big( \textcolor{orange}{[P_A]_1} + \textcolor{brown}{\mu} \textcolor{orange}{[P_B]_1}, \ \textcolor{lightgreen}{[1]_2}\Big)
\pi_{\textsf{cq}} = \Big( \textcolor{orange}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{skyblue}{a_0, b_\gamma, f_\gamma, } \Big)
\begin{aligned} & e\Big(\textcolor{orange}{[W_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) \cdot \\ & e\Big(\textcolor{brown}{\mu'}\textcolor{orange}{[A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) \end{aligned} \ = \ e\left( \def\arraystretch{1.5} \begin{array}{l} \textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1} + & \\ \textcolor{brown}{\mu}\textcolor{grey}{[C_0]_1} - \textcolor{brown}{\mu}\textcolor{grey}{[v_0]_1} + & \textcolor{lightgreen}{[1]_2} \\ \textcolor{brown}{\mu'}\textcolor{orange}{[P_A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[P_B]_1}, & \end{array} \right)
\underbrace{\hspace{2.1cm}}_{}

CQ Aggregation

e\Big(\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) = e\Big(\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big)\cdot e\Big(\textcolor{orange}{[m]_1 - \textcolor{brown}{\beta}\textcolor{orange}{[A]_1}}, \ \textcolor{lightgreen}{[1]_2}\Big)
\pi_{\textsf{cq}} = \Big( \textcolor{orange}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{skyblue}{a_0, b_\gamma, f_\gamma, } \Big)
\begin{aligned} & e\Big(\textcolor{orange}{[W_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) \cdot \\ & e\Big(\textcolor{brown}{\mu'}\textcolor{orange}{[A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) \end{aligned} \ = \ e\left( \def\arraystretch{1.5} \begin{array}{l} \textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1} + & \\ \textcolor{brown}{\mu}\textcolor{grey}{[C_0]_1} - \textcolor{brown}{\mu}\textcolor{grey}{[v_0]_1} + & \textcolor{lightgreen}{[1]_2} \\ \textcolor{brown}{\mu'}\textcolor{orange}{[P_A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[P_B]_1}, & \end{array} \right)
\begin{aligned} & e\Big(\textcolor{brown}{\mu''}\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) \cdot \\ & e\Big(\textcolor{brown}{-\mu''}\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big) \cdot \\ & e\Big(\textcolor{orange}{[W_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) \cdot \\ & e\Big(\textcolor{brown}{\mu'}\textcolor{orange}{[A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) \end{aligned} \ = \ e\left( \def\arraystretch{1.5} \begin{array}{l} \textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1} + & \\ \textcolor{brown}{\mu}\textcolor{grey}{[C_0]_1} - \textcolor{brown}{\mu}\textcolor{grey}{[v_0]_1} + & \textcolor{lightgreen}{[1]_2} \\ \textcolor{brown}{\mu'}\textcolor{orange}{[P_A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[P_B]_1} + & \\ \textcolor{brown}{\mu''}\textcolor{orange}{[m]_1 - \textcolor{brown}{\mu''}\textcolor{brown}{\beta}\textcolor{orange}{[A]_1}}, & \end{array} \right)
\underbrace{\hspace{3.8cm}}_{}

CQ Aggregation

\pi_{\textsf{cq}} = \Big( \textcolor{orange}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{skyblue}{a_0, b_\gamma, f_\gamma } \Big)
\begin{aligned} & e\Big(\textcolor{brown}{\mu''}\textcolor{orange}{[A]_1}, \ \textcolor{lightgreen}{[T]_2}\Big) \cdot \\ & e\Big(\textcolor{brown}{-\mu''}\textcolor{orange}{[Q_A]_1}, \ \textcolor{lightgreen}{[Z_{\mathbb{V}}]_2}\Big) \cdot \\ & e\Big(\textcolor{orange}{[W_\gamma]_1} + \textcolor{brown}{\mu}\textcolor{orange}{[W_\gamma]_1}, \ \textcolor{lightgreen}{[x]_2}\Big) \cdot \\ & e\Big(\textcolor{brown}{\mu'}\textcolor{orange}{[A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[B]_1}, \ \textcolor{lightgreen}{[x^{N-n}]_2}\Big) \end{aligned} \ = \ e\left( \def\arraystretch{1.5} \begin{array}{l} \textcolor{brown}{\mu''}\textcolor{orange}{[m]_1 - \textcolor{brown}{\mu''}\textcolor{brown}{\beta}\textcolor{orange}{[A]_1}} + & \\ \textcolor{brown}{\gamma}\textcolor{orange}{[W_\gamma]_1} + \textcolor{grey}{[C_\gamma]_1} - \textcolor{grey}{[v_\gamma]_1} + & \\ \textcolor{brown}{\mu}\textcolor{grey}{[C_0]_1} - \textcolor{brown}{\mu}\textcolor{grey}{[v_0]_1} + & \textcolor{lightgreen}{[1]_2} \\ \textcolor{brown}{\mu'}\textcolor{orange}{[P_A]_1} + \textcolor{brown}{\mu'}\textcolor{brown}{\mu}\textcolor{orange}{[P_B]_1}, & \end{array} \right)
\implies e(\textcolor{orange}{[L_a]_1}, \textcolor{lightgreen}{[S_a]_2}) \cdot e(\textcolor{orange}{[L_b]_1}, \textcolor{lightgreen}{[S_b]_2}) \cdot e(\textcolor{orange}{[L_c]_1}, \textcolor{lightgreen}{[S_c]_2}) \cdot e(\textcolor{orange}{[L_d]_1}, \textcolor{lightgreen}{[S_d]_2}) \stackrel{?}{=} e(\textcolor{orange}{[R]_1}, \textcolor{lightgreen}{[1]_2})
\implies e(\textcolor{teal}{[L_a]_1}, \textcolor{lightgreen}{[S_a]_2}) \cdot e(\textcolor{teal}{[L_b]_1}, \textcolor{lightgreen}{[S_b]_2}) \cdot e(\textcolor{teal}{[L_c]_1}, \textcolor{lightgreen}{[S_c]_2}) \cdot e(\textcolor{teal}{[L_d]_1}, \textcolor{lightgreen}{[S_d]_2}) \stackrel{?}{=} e(\textcolor{teal}{[R]_1}, \textcolor{lightgreen}{[1]_2})
\pi_{\textsf{cq}}' = \Big( \textcolor{teal}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{lightgrey}{a_0, b_\gamma, f_\gamma } \Big)
\implies \begin{aligned} & e(\textcolor{orange}{[L_a]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_a]_1}, \textcolor{lightgreen}{[S_a]_2}) \cdot e(\textcolor{orange}{[L_b]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_b]_1}, \textcolor{lightgreen}{[S_b]_2}) \cdot \\ & e(\textcolor{orange}{[L_c]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_c]_1}, \textcolor{lightgreen}{[S_c]_2}) \cdot e(\textcolor{orange}{[L_d]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_d]_1}, \textcolor{lightgreen}{[S_d]_2}) \end{aligned} \stackrel{?}{=} e(\textcolor{orange}{[R]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[R]_1}, \textcolor{lightgreen}{[1]_2})

CQ Aggregation

\pi_{\textsf{cq}} = \Big( \textcolor{orange}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{skyblue}{a_0, b_\gamma, f_\gamma } \Big)
\implies e(\textcolor{orange}{[L_a]_1}, \textcolor{lightgreen}{[S_a]_2}) \cdot e(\textcolor{orange}{[L_b]_1}, \textcolor{lightgreen}{[S_b]_2}) \cdot e(\textcolor{orange}{[L_c]_1}, \textcolor{lightgreen}{[S_c]_2}) \cdot e(\textcolor{orange}{[L_d]_1}, \textcolor{lightgreen}{[S_d]_2}) \stackrel{?}{=} e(\textcolor{orange}{[R]_1}, \textcolor{lightgreen}{[1]_2})
\implies e(\textcolor{teal}{[L_a]_1}, \textcolor{lightgreen}{[S_a]_2}) \cdot e(\textcolor{teal}{[L_b]_1}, \textcolor{lightgreen}{[S_b]_2}) \cdot e(\textcolor{teal}{[L_c]_1}, \textcolor{lightgreen}{[S_c]_2}) \cdot e(\textcolor{teal}{[L_d]_1}, \textcolor{lightgreen}{[S_d]_2}) \stackrel{?}{=} e(\textcolor{teal}{[R]_1}, \textcolor{lightgreen}{[1]_2})
\pi_{\textsf{cq}}' = \Big( \textcolor{teal}{[f]_1, [m]_1, [A]_1, [B]_1, [Q_A]_1, [Q_B]_1, [P_A]_1, [P_B]_1}, \textcolor{lightgrey}{a_0, b_\gamma, f_\gamma } \Big)
\implies \begin{aligned} & e(\textcolor{orange}{[L_a]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_a]_1}, \textcolor{lightgreen}{[S_a]_2}) \cdot e(\textcolor{orange}{[L_b]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_b]_1}, \textcolor{lightgreen}{[S_b]_2}) \cdot \\ & e(\textcolor{orange}{[L_c]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_c]_1}, \textcolor{lightgreen}{[S_c]_2}) \cdot e(\textcolor{orange}{[L_d]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[L_d]_1}, \textcolor{lightgreen}{[S_d]_2}) \end{aligned} \stackrel{?}{=} e(\textcolor{orange}{[R]_1} + \textcolor{brown}{\mu'''}\textcolor{teal}{[R]_1}, \textcolor{lightgreen}{[1]_2})
\begin{aligned} & e\Big(\sum_k \textcolor{brown}{\eta^k} \textcolor{orange}{[L_{a,k}]_1}, \ \textcolor{lightgreen}{[S_{a,k}]_2} \Big) \cdot e\Big(\sum_k \textcolor{brown}{\eta^k} \textcolor{orange}{[L_{b,k}]_1}, \ \textcolor{lightgreen}{[S_{b,k}]_2} \Big) \cdot \\ & e\Big(\sum_k \textcolor{brown}{\eta^k} \textcolor{orange}{[L_{c,k}]_1}, \ \textcolor{lightgreen}{[S_{c,k}]_2} \Big) \cdot e\Big(\sum_k \textcolor{brown}{\eta^k} \textcolor{orange}{[L_{d,k}]_1}, \ \textcolor{lightgreen}{[S_{d,k}]_2} \Big) \end{aligned} \stackrel{?}{=} \begin{aligned} e\Big(\sum_k \textcolor{brown}{\eta^k} \textcolor{orange}{[R_{k}]_1}, \ \textcolor{lightgreen}{[1]_2} \Big) \end{aligned}

Discussion

  • CQ can enable arbitrary lookup table sizes without\(^*\) any trade-offs!
  • A same set of lookup tables can be used across multiple circuits
  • Pre-computation is heavy but needs to be done once (like SRS)
  • Need a new setup ceremony (as we need \(\{[x^i]_2\}_{i\in[N]}\))
  • Updating pre-computed lookup tables is possible (Baloo?)
  • Looks like we need 5 pairings on-chain (instead of 2)
  • CQ + Plonk \(\implies\) Will need to open polynomials at \(>2\) points
  • Thus, looks inevitable to use Shplonk
  • Adding ZK is a pain? Do we need ZK for public kernel circuits? 

\(^* \text{T } \& \text{ C apply.}\)

CQ Lookup

By Suyash Bagad