74 RefArray ordered_constraint_polynomials{
proving_key->polynomials.ordered_range_constraints_0,
75 proving_key->polynomials.ordered_range_constraints_1,
76 proving_key->polynomials.ordered_range_constraints_2,
77 proving_key->polynomials.ordered_range_constraints_3 };
81 auto to_be_concatenated_groups =
proving_key->polynomials.get_groups_to_be_concatenated();
82 const size_t circuit_size =
proving_key->polynomials.get_polynomial_size();
87 auto ordering_function = [&](
size_t i) {
88 const auto&
group = to_be_concatenated_groups[i];
96 size_t extra_denominator_offset = i * sorted_elements.size();
106 auto current_offset = j * values_per_lane;
111 auto vec_idx = current_offset + (k -
group[j].start_index());
114 if (vec_idx < free_space_before_runway) {
115 ordered_vectors_uint[vec_idx] =
static_cast<uint32_t
>(
uint256_t(
group[j][k]).
data[0]);
119 extra_denominator_uint[extra_denominator_offset] =
121 extra_denominator_offset++;
127 auto ordered_vector_it = ordered_vectors_uint.begin();
128 std::advance(ordered_vector_it, free_space_before_runway);
129 std::copy(sorted_elements.cbegin(), sorted_elements.cend(), ordered_vector_it);
135 std::sort(ordered_vectors_uint.begin(), ordered_vectors_uint.end());
142 size_t sorted_idx = 1;
144 ordered_constraint_polynomials[i].at(pos) =
FF(ordered_vectors_uint[sorted_idx]);
151 parallel_for(NUM_RANGE_CONSTRAINT_GROUPS, ordering_function);
154 auto extra_denominator_it = extra_denominator_uint.begin();
155 std::advance(extra_denominator_it, NUM_RANGE_CONSTRAINT_GROUPS * sorted_elements.size());
158 std::copy(sorted_elements.cbegin(), sorted_elements.cend(), extra_denominator_it);
161 std::sort(extra_denominator_uint.begin(), extra_denominator_uint.end());
163 std::sort(std::execution::par_unseq, extra_denominator_uint.begin(), extra_denominator_uint.end());
169 size_t sorted_idx = 1;
171 proving_key->polynomials.ordered_range_constraints_4.at(pos) =
FF(extra_denominator_uint[sorted_idx]);
192 auto concatenated =
proving_key->polynomials.get_concatenated();
193 auto ordered =
proving_key->polynomials.get_ordered_range_constraints();
194 const size_t num_ordered_polynomials = ordered.size();
204 const size_t total_num_random_values = num_random_values_per_concat * NUM_RANGE_CONSTRAINT_GROUPS;
205 const size_t num_random_values_per_ordered = total_num_random_values / num_ordered_polynomials;
206 const size_t remaining_random_values = total_num_random_values % num_ordered_polynomials;
208 std::vector<FF> random_values(total_num_random_values);
212 parallel_for(NUM_RANGE_CONSTRAINT_GROUPS, [&](
size_t i) {
213 const auto& current_concat = concatenated[i];
214 size_t idx = i * num_random_values_per_concat;
218 random_values[idx] = current_concat[block_masking_start + k];
226 const size_t circuit_size =
proving_key->polynomials.get_polynomial_size();
228 auto& current_ordered = ordered[i];
229 size_t values_for_this_poly = num_random_values_per_ordered + (i < remaining_random_values ? 1 : 0);
231 size_t random_idx = i * num_random_values_per_ordered + std::min(i, remaining_random_values);
233 for (
size_t k = 0; k < values_for_this_poly; k++) {
234 current_ordered.at(circuit_size - values_for_this_poly + k) = random_values[random_idx];
279 const size_t circuit_size =
proving_key->polynomials.get_polynomial_size();
285 proving_key->polynomials.lagrange_last.at(circuit_size - 1) = 1;
290 proving_key->polynomials.lagrange_masking.at(j * MINI + k) = 1;
297 proving_key->polynomials.lagrange_ordered_masking.at(i) = 1;
301 proving_key->polynomials.lagrange_mini_masking.at(i) = 1;
306 proving_key->polynomials.lagrange_mini_masking.at(i) = 1;
312 proving_key->polynomials.lagrange_even_in_minicircuit.at(i) = 1;
313 proving_key->polynomials.lagrange_odd_in_minicircuit.at(i + 1) = 1;