how is [[sumcheck]] affected (proof size, prover time e.t.c.) when one uses different [[product-set]]s
sumcheck steps
1. compute round univariate polynomial (by keeping a variable free and summing the rest over the [[product-set]])
2. partially evaluate free variable at some random challenge point
3. oracle check
prover time cost model
- step 1
- keeping one variable free we sum $2^{v-1}$ points
- where v represents the total number of variables
- no_field_additions = $2^{v - 1} - 1$
- no_field_multiplications = 0
- step 2
- let r be the point you want to partially evaluate
- for B = {0, 1}, the interpolate and evaluate function is given as follows
- $(1 - r) \cdot y_1 + r \cdot y_2$
- further simplified to
- $y_1 - x(y_1 + y_2)$
- no_field_additions = 2
- no_field_multiplications = 1
- for B = {0, 1, 2} the interpolate and evaluate function is given as follows
- $\frac{x^2 - 3x + 2}{2} \cdot y_1 + 2x^2 - x^2 \cdot y_2 + \frac{x^2 - x}{2} \cdot y_3$
- further simplified to
- $2^{-1} \cdot (x^2 \cdot (y_1 - 2y_2 + y_3) - x \cdot (3y_1 - 4y_2 + y_3) + 2y_1)$
- no_field_additions = 6
- no_field_multiplications = 3
- I believe it gets more complicated for bigger [[product-set]]s
- step 3
- going to assume the same cost
- total prover time cost
- |data| - size of the evaluation array we want to perform sumcheck over
- n = product set size
- v = $log_n(|data|)$ = number of variables
#todo potential mistake in how I compute the total number of sums (can potentially make it independent of the $\cdot v_i$)
- for B = {0, 1} (2HC)
- no_field_additions:
- $v_1 \cdot (2^{v_1-1} - 1 + 2)$ = $v_1 \cdot (2^{v_1-1} + 1)$
- $v_1\cdot 2^{v_1-1} + v_1$
- no_field_multiplications = $v_1$
- for B = {0, 1, 2} (3HC)
- no_field_additions:
- $v_2 \cdot (2^{v_2-1} -1 + 6$ = $v_2 \cdot (2^{v_2-1} + 5)$
- $v_2 \cdot 2^{v_2 - 1} + 5v_2$
- no_field_multiplications = $3v_2$
#todo 2HC has a lot more additions, while 3HC has a lot more multiplications (the battle depends on how much slower field multiplication is than addition)
see: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=4f8d08c61434c838507ffe1c359f04a0
proof size cost model
- |data| - size of the evaluation array we want to perform sumcheck over
- n = product set size
- v = $log_n(|data|)$ = number of variables
- proof_size = number_of_rounds * number_of_field_elements_per_round
- if we assume variable degree is one less than product set size then
- proof_size = $v \cdot n$
- e.g. B = {0, 1} will use a multilinear poly with variable degree 1
| evaluation_array_size | n_vars (2hc) | proof_size (2hc) | n_vars (3hc) | proof_size (3hc) |
| --------------------: | -----------: | ---------------: | -----------: | ---------------: |
| 1,000,000 | 20 | 40 | 13 | 39 |
| 11,000,000 | 24 | 48 | 15 | 45 |
| 81,000,000 | 27 | 54 | 17 | 51 |
see: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=12dffd12c70098ce90c44928020c4176
- 3HC has better proof size than 2HC (but only marginally)