Overview of this topic:
- log-derivative lookups have better properties than plookup
- if we make both permutation + lookup relations use log derivatives, we can replace our 2 “grand product” polynomials with a single inverse polynomial
Log Derivatives
See this HackMD for details on how to do lookups via log-derivatives
See this HackMD for details on how to do permutations via log-derivatives
An overview of the vectors/polynomials required for lookups
| vector | size | comments |
|---|---|---|
| grand product vector | num_reads + table_size | - |
| sorted list vector | num_reads + table_size | - |
An overview of the vectors/polynomials required for log derivatives
| vector | size | comments |
|---|---|---|
| inverse vector | max(num_reads, table size) | - |
| counts vector | table size | entries describe # of times a given table entry is read from. values are small |
The log-derivative vectors are smaller max(num_reads, table_size) vs (num_reads + table_size), which practically enables larger tables.
The log-derivative vectors are faster to commit to due to the “counts” vector element values being small.
Combining inverse polynomials
The log-derivative relation contains fractional terms (e.g. (1 / a_i)). To convert into polynomial algebra the Prover must commit to these inverses.
To reduce the number of inverse commitments, the Prover can commit to the product of all inverses required for a given row.
This increases the degree of the resulting permutation/lookup relation, but is likely an acceptable trade-off vs having multiple inverse commitments.
We can reduce the degree of the combined permutation/lookup relation by modifying the permutation relation to use more precomputed polynomials (see Using log-derivatives to check copy constraints - HackMD for details)