36 static const size_t circuit_size = 8;
40 for (
auto& poly : prover_polynomials.get_to_be_shifted()) {
43 for (
auto& poly : prover_polynomials.get_all()) {
44 if (poly.is_empty()) {
60 .public_input_delta = 1,
63 compute_grand_product<Flavor, typename bb::UltraPermutationRelation<FF>>(prover_polynomials, params);
92 constexpr size_t active_size = circuit_size - gp_start;
98 auto wires = prover_polynomials.get_wires();
99 auto sigmas = prover_polynomials.get_sigmas();
100 auto ids = prover_polynomials.get_ids();
102 for (
size_t i = 0; i < active_size; ++i) {
103 const size_t poly_idx = i + gp_start;
105 numerator_accum[k][i] = wires[k][poly_idx] + (ids[k][poly_idx] * beta) + gamma;
106 denominator_accum[k][i] = wires[k][poly_idx] + (sigmas[k][poly_idx] * beta) + gamma;
112 for (
size_t i = 0; i < active_size - 1; ++i) {
113 numerator_accum[k][i + 1] *= numerator_accum[k][i];
114 denominator_accum[k][i + 1] *= denominator_accum[k][i];
119 for (
size_t i = 0; i < active_size; ++i) {
121 numerator_accum[0][i] *= numerator_accum[k][i];
122 denominator_accum[0][i] *= denominator_accum[k][i];
127 Polynomial z_permutation_expected(circuit_size);
128 for (
size_t i = 0; i < active_size - 1; ++i) {
129 z_permutation_expected.
at(gp_start + i + 1) = numerator_accum[0][i] / denominator_accum[0][i];
134 for (
size_t i = gp_start; i < circuit_size; ++i) {
135 EXPECT_EQ(prover_polynomials.z_perm[i], z_permutation_expected[i]) <<
"Mismatch at index " << i;