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()) {
50 auto beta = FF::random_element();
51 auto gamma = FF::random_element();
57 .public_input_delta = 1,
60 compute_grand_product<Flavor, typename bb::UltraPermutationRelation<FF>>(prover_polynomials, params);
91 auto wires = prover_polynomials.get_wires();
92 auto sigmas = prover_polynomials.get_sigmas();
93 auto ids = prover_polynomials.get_ids();
95 for (
size_t i = 0; i < circuit_size; ++i) {
97 numerator_accum[k][i] = wires[k][i] + (ids[k][i] * beta) + gamma;
98 denominator_accum[k][i] = wires[k][i] + (sigmas[k][i] * beta) + gamma;
104 for (
size_t i = 0; i < circuit_size - 1; ++i) {
105 numerator_accum[k][i + 1] *= numerator_accum[k][i];
106 denominator_accum[k][i + 1] *= denominator_accum[k][i];
111 for (
size_t i = 0; i < circuit_size; ++i) {
113 numerator_accum[0][i] *= numerator_accum[k][i];
114 denominator_accum[0][i] *= denominator_accum[k][i];
119 Polynomial z_permutation_expected(circuit_size);
120 z_permutation_expected.
at(0) = FF::zero();
122 for (
size_t i = 0; i < circuit_size - 1; ++i) {
123 z_permutation_expected.
at(i + 1) = numerator_accum[0][i] / denominator_accum[0][i];
127 EXPECT_EQ(prover_polynomials.z_perm, z_permutation_expected);