This is a note to show that the witness being zero is sound and is valid for some polynomials.
This skims through the original KZG protocol as a refresher and then shows why the zero quotient/proof/witness is okay.
In KZG, we commit to polynomials using a trusted setup of the form:
ie the trusted setup is two lists of group elements, one list has group elements in G1 denoted
Given a polynomial
One can check that the commitment to
Lets denote
We ultimately want to make a proof that attests to the statement that "some polynomial
The TLDR is that our witness is the existence of the following polynomial :
The prover commits to such a polynomial and this commitment is routinely referred to as the KZGProof
in the consensus-specs in the deneb
folder.
We will refer to the commitment to Q(x) as
In order to know if setting Q(x) = 0 is sound, we need to check what the verifier is doing.
In order to check that
They ultimately want to check this with the commitments of
We can use pairings for this. The verifier instead checks:
Using the notation from earlier, this is:
Soundness
If
Without loss of generality, if any of the elements inside of the pairings functions are zero, then we say the output of the pairing function is 1
.
Since 1
.
The only way for one of the components in the pairing on the RHS to be equal to 0 is if
This is only possible if
Completeness
As noted in the last sentence, when the polynomial we are committing to is the constant polynomial,