Skip to main content

Different functionalities

There's a number of useful stuff that we can do on top of a bootleproof-style polynomial commitment. I'll briefly list them here.

Enforcing an upperbound on the polynomial degree

Imagine that you want to enforce a maximum degree on a committed polynomial. You can do that by asking the prover to shift the coefficients of the polynomial to the right, so much that it becomes impossible to fit them if the polynomial were to be more than the maximum degree we wanted to enforce. This is equivalent to the following:

right_shift(f)=xnmaxf\text{right\_shift}(f) = x^{n-\text{max}} f

When the verifier verifies the opening, they will have to right shift the received evaluation in the same way.

right_shift(f(z))=znmaxf(z)\text{right\_shift}(f(z)) = z^{n-\text{max}} f(z)

Aggregating opening proofs for several polynomials

Insight:

f+vg,x=f(x)+vg(x)\langle \vec{f} + v \cdot \vec{g}, \vec{x}\rangle = f(x) + v \cdot g(x)

Aggregating opening proofs for several evaluations

Insight:

f,x1+ux2=f(x1)+uf(x2)\langle \vec{f}, \vec{x_1} + u \cdot \vec{x_2}\rangle = f(x_1) + u \cdot f(x_2)

Double aggregation

Insight:

f+vg,x1+ux2=f(x1)+vg(x1)+u(f(x2)+vg(x2))\langle \vec{f} + v \cdot \vec{g}, \vec{x_1} + u \cdot \vec{x_2} \rangle = f(x_1) + v \cdot g(x_1) + u \cdot (f(x_2) + v \cdot g(x_2))

Note that this kind of aggregation forces us to provide all combinations of evaluations, some of which might not be needed (for example, f(x2)f(x_2)).

Splitting a polynomial

If a polynomial is too large to fit in one SRS, you can split it in chunks of size at most nn

Proof of correct commitment to a polynomial

That is useful in HALO. Problem statement: given a commitment AA, and a polynomial ff, prove to me that the A=com(f)A = com(f). The proof is simple:

  • generate a random point ss
  • evaluate ff at ss, f(s)=yf(s) = y
  • ask for an evaluation proof of AA on ss. If it evaluates to yy as well then AA is a commitment to ff with overwhelming probability