After going through Dankrad's IPA note with Pedersen and then going through a few more resources on IPA. I finally realised how IPA multipoint really worked!
Here I'll talk about how we can open multiple polynomials at different points.
Finally aggregating to 1 proof, 1 commitment and 1 scalar.
Given
where
The prover initially commits to
Now the prover has to convince the verifier that
We can split the evaluation into
Hence the verifier is able to compute
The expressions are as following:
We note that
Thereby, we finally boil down to 2 IPA proofs. One for
Hence, the prover now computes
However, this is still the variant where we haven't yet aggregated the proofs.
The Verifier ultimately wants to verify that
Then the verifier also computes
However, the verifier cannot assert to the fact that
The verifier proceeds with computing ipa_verify()
function, the reference Go implementation, using (
As
We now call ipa_verify()
passing (
Now we have 2 IPA proofs, 1 commitment and 1 scalar.
Now we are left with aggregation
to 1 final IPA proof.
Let
The prover no longer computes an IPA proof for
Now we form an IPA Proof for
The prover still computes
The proof consists of
In the previous step, the verifier called
We now call ipa_verify()
using (
This strategy finally boils down the proof to 1 IPA proof, 1 commitment and 1 scalar.