77 RefArray ordered_constraint_polynomials{
proving_key->polynomials.ordered_range_constraints_0,
78 proving_key->polynomials.ordered_range_constraints_1,
79 proving_key->polynomials.ordered_range_constraints_2,
80 proving_key->polynomials.ordered_range_constraints_3 };
84 auto to_be_concatenated_groups =
proving_key->polynomials.get_groups_to_be_concatenated();
85 const size_t circuit_size =
proving_key->polynomials.get_polynomial_size();
90 auto ordering_function = [&](
size_t i) {
91 const auto&
group = to_be_concatenated_groups[i];
99 size_t extra_denominator_offset = i * sorted_elements.size();
109 auto current_offset = j * values_per_lane;
114 auto vec_idx = current_offset + (k -
group[j].start_index());
117 if (vec_idx < free_space_before_runway) {
118 ordered_vectors_uint[vec_idx] =
static_cast<uint32_t
>(
uint256_t(
group[j][k]).
data[0]);
122 extra_denominator_uint[extra_denominator_offset] =
124 extra_denominator_offset++;
131 "Translator: overflow entries exceed reserved space in ordered polynomial");
135 auto ordered_vector_it = ordered_vectors_uint.begin();
136 std::advance(ordered_vector_it, free_space_before_runway);
137 std::copy(sorted_elements.cbegin(), sorted_elements.cend(), ordered_vector_it);
143 std::sort(ordered_vectors_uint.begin(), ordered_vectors_uint.end());
150 size_t sorted_idx = 1;
152 ordered_constraint_polynomials[i].at(pos) =
FF(ordered_vectors_uint[sorted_idx]);
159 parallel_for(NUM_RANGE_CONSTRAINT_GROUPS, ordering_function);
162 auto extra_denominator_it = extra_denominator_uint.begin();
163 std::advance(extra_denominator_it, NUM_RANGE_CONSTRAINT_GROUPS * sorted_elements.size());
166 std::copy(sorted_elements.cbegin(), sorted_elements.cend(), extra_denominator_it);
169 std::sort(extra_denominator_uint.begin(), extra_denominator_uint.end());
171 std::sort(std::execution::par_unseq, extra_denominator_uint.begin(), extra_denominator_uint.end());
177 size_t sorted_idx = 1;
179 proving_key->polynomials.ordered_range_constraints_4.at(pos) =
FF(extra_denominator_uint[sorted_idx]);
200 auto concatenated =
proving_key->polynomials.get_concatenated();
201 auto ordered =
proving_key->polynomials.get_ordered_range_constraints();
202 const size_t num_ordered_polynomials = ordered.size();
212 const size_t total_num_random_values = num_random_values_per_concat * NUM_RANGE_CONSTRAINT_GROUPS;
213 const size_t num_random_values_per_ordered = total_num_random_values / num_ordered_polynomials;
214 const size_t remaining_random_values = total_num_random_values % num_ordered_polynomials;
216 std::vector<FF> random_values(total_num_random_values);
220 parallel_for(NUM_RANGE_CONSTRAINT_GROUPS, [&](
size_t i) {
221 const auto& current_concat = concatenated[i];
222 size_t idx = i * num_random_values_per_concat;
226 random_values[idx] = current_concat[block_masking_start + k];
234 const size_t circuit_size =
proving_key->polynomials.get_polynomial_size();
236 auto& current_ordered = ordered[i];
237 size_t values_for_this_poly = num_random_values_per_ordered + (i < remaining_random_values ? 1 : 0);
239 size_t random_idx = i * num_random_values_per_ordered + std::min(i, remaining_random_values);
241 for (
size_t k = 0; k < values_for_this_poly; k++) {
242 current_ordered.at(circuit_size - values_for_this_poly + k) = random_values[random_idx];
287 const size_t circuit_size =
proving_key->polynomials.get_polynomial_size();
293 proving_key->polynomials.lagrange_last.at(circuit_size - 1) = 1;
298 proving_key->polynomials.lagrange_masking.at(j * MINI + k) = 1;
305 proving_key->polynomials.lagrange_ordered_masking.at(i) = 1;
309 proving_key->polynomials.lagrange_mini_masking.at(i) = 1;
314 proving_key->polynomials.lagrange_mini_masking.at(i) = 1;
320 proving_key->polynomials.lagrange_even_in_minicircuit.at(i) = 1;
321 proving_key->polynomials.lagrange_odd_in_minicircuit.at(i + 1) = 1;