Compute contribution of the goblin translator permutation relation for a given edge (internal function)
There are 3 sub-relations associated with enforcing the set permutation relation. Sub-relation 0 confirms faithful calculation of the grand product polynomial Z_perm. Sub-relation 1 enforces Z_perm_shift = 0 at lagrange_last (grand product closure). Sub-relation 2 enforces Z_perm = 0 at lagrange_first (grand product initialization).
C(in(X)...) = ( z_perm(X) + lagrange_first(X) )*P(X)
- ( z_perm_shift(X) + lagrange_last(X))*Q(X), where P(X) = Prod_{i=0:3} (concatenated_range_constraint_i(X) + lagrange_masking * β + γ)
- (extra_numerator(X) + lagrange_ordered_masking * β + γ) Q(X) = Prod_{i=0:4} (ordered_range_constraint_i(X) + lagrange_ordered_masking * β + γ) the first 4 numerator polynomials are concatenated range constraint polynomials and the last one is the extra numerator
If operating in zero-knowledge, we use two different masking selectors:
- lagrange_masking marks scattered masking positions (last NUM_MASKED_ROWS_END rows of each of 16 blocks) in concatenated polynomials
- lagrange_ordered_masking marks contiguous masking positions (last NUM_MASKED_ROWS_END positions at circuit end) in ordered polynomials The lagrange_*_masking * β terms ensure that masking positions contribute unique values to the grand product, preventing information leakage about the underlying witness values at those positions.
- Parameters
-
| evals | transformed to evals + C(in(X)...)*scaling_factor |
| in | an std::array containing the fully extended Univariate edges. |
| parameters | contains beta, gamma, and public_input_delta, .... |
| scaling_factor | optional term to scale the evaluation before adding to evals. |
There are 3 sub-relations associated with enforcing the set permutation relation. Sub-relation 0 confirms faithful calculation of the grand product polynomial Z_perm. Sub-relation 1 enforces Z_perm_shift = 0 at lagrange_last (grand product closure). Sub-relation 2 enforces Z_perm = 0 at lagrange_first (grand product initialization).
C(in(X)...) = ( z_perm(X) + lagrange_first(X) )*P(X)
- ( z_perm_shift(X) + lagrange_last(X))*Q(X), where P(X) = Prod_{i=0:3} (concatenated_range_constraint_i(X) + lagrange_masking * β + γ)
- (extra_numerator(X) + lagrange_ordered_masking * β + γ) Q(X) = Prod_{i=0:4} (ordered_range_constraint_i(X) + lagrange_ordered_masking * β + γ) the first 4 numerator polynomials are concatenated range constraint polynomials and the last one is the extra numerator
If operating in zero-knowledge, we use two different masking selectors:
- lagrange_masking marks scattered masking positions (last NUM_MASKED_ROWS_END rows of each of 16 blocks) in concatenated polynomials
- lagrange_ordered_masking marks contiguous masking positions (last NUM_MASKED_ROWS_END positions at circuit end) in ordered polynomials
- Parameters
-
| evals | transformed to evals + C(in(X)...)*scaling_factor |
| in | an std::array containing the fully extended Univariate edges. |
| parameters | contains beta, gamma, and public_input_delta, .... |
| scaling_factor | optional term to scale the evaluation before adding to evals. |
Definition at line 43 of file translator_permutation_short_relation_impl.hpp.