22 bool disable_fixed_dyadic_trace_size
26 const FF gamma = FF::random_element(engine_ptr);
27 const FF beta = FF::random_element(engine_ptr);
28 const FF beta_sqr = beta.sqr();
29 const FF beta_cube = beta_sqr * beta;
30 auto eccvm_set_permutation_delta =
31 gamma * (gamma + beta_sqr) * (gamma + beta_sqr + beta_sqr) * (gamma + beta_sqr + beta_sqr + beta_sqr);
32 eccvm_set_permutation_delta = eccvm_set_permutation_delta.invert();
37 .public_input_delta = 0,
39 .beta_cube = beta_cube,
40 .eccvm_set_permutation_delta = eccvm_set_permutation_delta,
48 const size_t num_rows = polynomials.get_polynomial_size();
49 const size_t unmasked_witness_size = num_rows - NUM_DISABLED_ROWS_IN_SUMCHECK;
50 compute_logderivative_inverse<FF, ECCVMLookupRelation<FF>>(polynomials, params, unmasked_witness_size);
51 compute_grand_product<Flavor, ECCVMSetRelation<FF>>(polynomials, params, unmasked_witness_size);
53 polynomials.z_perm_shift =
Polynomial(polynomials.z_perm.shifted());
55 const auto evaluate_relation = [&]<
typename Relation>(
const std::string& relation_name) {
57 for (
auto& r : result) {
60 constexpr size_t NUM_SUBRELATIONS = result.size();
62 for (
size_t i = 0; i < num_rows; ++i) {
63 auto row = polynomials.get_row(i);
68 if (!Relation::skip(row)) {
69 Relation::accumulate(result, row, params, 1);
73 Relation::accumulate(result, row, params, 1);
77 Relation::accumulate(result, row, params, 1);
81 for (
size_t j = 0; j < NUM_SUBRELATIONS; ++j) {
83 info(
"Relation ", relation_name,
", subrelation index ", j,
" failed at row ", i);
98 result = result && evaluate_relation.template operator()<
ECCVMMSMRelation<FF>>(
"ECCVMMSMRelation");
99 result = result && evaluate_relation.template operator()<
ECCVMSetRelation<FF>>(
"ECCVMSetRelation");
104 for (
auto& r : lookup_result) {
107 for (
size_t i = 0; i < num_rows; ++i) {
108 LookupRelation::accumulate(lookup_result, polynomials.get_row(i), params, 1);
110 for (
auto r : lookup_result) {
112 info(
"Relation ECCVMLookupRelation failed.");