From 21fb9961334c306af42f2aa1eccd0a3e26d925be Mon Sep 17 00:00:00 2001 From: jeanmon Date: Thu, 13 Feb 2025 14:05:47 +0000 Subject: [PATCH] Decrease degrees of some relations --- barretenberg/cpp/pil/vm2/bc_decomposition.pil | 14 +- .../generated/relations/bc_decomposition.hpp | 280 +++++++++--------- 2 files changed, 150 insertions(+), 144 deletions(-) diff --git a/barretenberg/cpp/pil/vm2/bc_decomposition.pil b/barretenberg/cpp/pil/vm2/bc_decomposition.pil index 2d4ddb382477..5c240b5b5e5f 100644 --- a/barretenberg/cpp/pil/vm2/bc_decomposition.pil +++ b/barretenberg/cpp/pil/vm2/bc_decomposition.pil @@ -12,10 +12,6 @@ sel * (1 - sel) = 0; // No relations will be checked if this identity is satisfied. #[skippable_if] sel = 0; -// REMARK ON SKIPPABLE: Some relations were "augmented" with factor sel in order to -// be skippable. On the other hand, all boolean relations have no sel factor. -// TODO: Determine whether skippable condition should be more complex or -// all relations be augmented with sel factor. // Size of the sliding window. // This includes the "current byte" and the WINDOW_SIZE - 1 lookahead bytes. @@ -60,17 +56,21 @@ sel * ((bytes_remaining - 1) * (last_of_contract * (1 - bytes_rem_min_one_inv) + #[BC_DEC_PC_ZERO_INITIALIZATION] (precomputed.first_row + last_of_contract) * pc' = 0; +// Allows to decrease the degree of relations #[BC_DEC_PC_INCREMENT], #[BC_DEC_BYTES_REMAINING_DECREMENT], #[BC_DEC_ID_CONSTANT] +// Mutual exclusivity allows to use an addition for a logical OR. +last_of_contract * precomputed.first_row = 0; + // pc evolution (increment within bytecode) #[BC_DEC_PC_INCREMENT] -sel * (1 - last_of_contract) * (pc' - pc - 1) = 0; +(1 - last_of_contract - precomputed.first_row) * (pc' - pc - 1) = 0; // bytes_remaining evolution (decrement within bytecode) #[BC_DEC_BYTES_REMAINING_DECREMENT] -sel * (1 - last_of_contract) * (bytes_remaining' - bytes_remaining + 1) = 0; +(1 - last_of_contract - precomputed.first_row) * (bytes_remaining' - bytes_remaining + 1) = 0; // TODO: Clarify the need for maintaining the bytecode id constant within a given contract #[BC_DEC_ID_CONSTANT] -sel * (1 - last_of_contract) * (id' - id) = 0; +(1 - last_of_contract - precomputed.first_row) * (id' - id) = 0; // This constrains that the bytes are in the range 0 to 255. #[LOOKUP_BYTECODE_BYTES_ARE_BYTES] diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/relations/bc_decomposition.hpp b/barretenberg/cpp/src/barretenberg/vm2/generated/relations/bc_decomposition.hpp index aaf2b0ca24b7..79d2bf71f891 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/relations/bc_decomposition.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/generated/relations/bc_decomposition.hpp @@ -12,10 +12,10 @@ template class bc_decompositionImpl { public: using FF = FF_; - static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { - 3, 3, 4, 4, 5, 3, 4, 4, 4, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { + 3, 3, 4, 4, 5, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; template inline static bool skip(const AllEntities& in) @@ -83,35 +83,41 @@ template class bc_decompositionImpl { } { using Accumulator = typename std::tuple_element_t<6, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel * (FF(1) - new_term.bc_decomposition_last_of_contract) * - ((new_term.bc_decomposition_pc_shift - new_term.bc_decomposition_pc) - FF(1)); + auto tmp = new_term.bc_decomposition_last_of_contract * new_term.precomputed_first_row; tmp *= scaling_factor; std::get<6>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<7, ContainerOverSubrelations>; - auto tmp = - new_term.bc_decomposition_sel * (FF(1) - new_term.bc_decomposition_last_of_contract) * - ((new_term.bc_decomposition_bytes_remaining_shift - new_term.bc_decomposition_bytes_remaining) + FF(1)); + auto tmp = ((FF(1) - new_term.bc_decomposition_last_of_contract) - new_term.precomputed_first_row) * + ((new_term.bc_decomposition_pc_shift - new_term.bc_decomposition_pc) - FF(1)); tmp *= scaling_factor; std::get<7>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<8, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel * (FF(1) - new_term.bc_decomposition_last_of_contract) * - (new_term.bc_decomposition_id_shift - new_term.bc_decomposition_id); + auto tmp = + ((FF(1) - new_term.bc_decomposition_last_of_contract) - new_term.precomputed_first_row) * + ((new_term.bc_decomposition_bytes_remaining_shift - new_term.bc_decomposition_bytes_remaining) + FF(1)); tmp *= scaling_factor; std::get<8>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<9, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_overflow_correction_needed * - (FF(1) - new_term.bc_decomposition_sel_overflow_correction_needed); + auto tmp = ((FF(1) - new_term.bc_decomposition_last_of_contract) - new_term.precomputed_first_row) * + (new_term.bc_decomposition_id_shift - new_term.bc_decomposition_id); tmp *= scaling_factor; std::get<9>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<10, ContainerOverSubrelations>; + auto tmp = new_term.bc_decomposition_sel_overflow_correction_needed * + (FF(1) - new_term.bc_decomposition_sel_overflow_correction_needed); + tmp *= scaling_factor; + std::get<10>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>; auto tmp = new_term.bc_decomposition_sel * (((FF(2) * new_term.bc_decomposition_sel_overflow_correction_needed * (bc_decomposition_WINDOW_SIZE - new_term.bc_decomposition_bytes_remaining) - @@ -119,230 +125,230 @@ template class bc_decompositionImpl { new_term.bc_decomposition_bytes_remaining) - new_term.bc_decomposition_abs_diff); tmp *= scaling_factor; - std::get<10>(evals) += typename Accumulator::View(tmp); + std::get<11>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<11, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>; auto tmp = new_term.bc_decomposition_sel * ((FF(1) - new_term.bc_decomposition_sel_overflow_correction_needed) * (new_term.bc_decomposition_bytes_to_read - bc_decomposition_WINDOW_SIZE) + new_term.bc_decomposition_sel_overflow_correction_needed * (new_term.bc_decomposition_bytes_to_read - new_term.bc_decomposition_bytes_remaining)); tmp *= scaling_factor; - std::get<11>(evals) += typename Accumulator::View(tmp); - } - { - using Accumulator = typename std::tuple_element_t<12, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_1 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_1); - tmp *= scaling_factor; std::get<12>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<13, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_2 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_2); + auto tmp = new_term.bc_decomposition_sel_pc_plus_1 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_1); tmp *= scaling_factor; std::get<13>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<14, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_3 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_3); + auto tmp = new_term.bc_decomposition_sel_pc_plus_2 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_2); tmp *= scaling_factor; std::get<14>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<15, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_4 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_4); + auto tmp = new_term.bc_decomposition_sel_pc_plus_3 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_3); tmp *= scaling_factor; std::get<15>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<16, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_5 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_5); + auto tmp = new_term.bc_decomposition_sel_pc_plus_4 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_4); tmp *= scaling_factor; std::get<16>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<17, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_6 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_6); + auto tmp = new_term.bc_decomposition_sel_pc_plus_5 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_5); tmp *= scaling_factor; std::get<17>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<18, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_7 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_7); + auto tmp = new_term.bc_decomposition_sel_pc_plus_6 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_6); tmp *= scaling_factor; std::get<18>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<19, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_8 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_8); + auto tmp = new_term.bc_decomposition_sel_pc_plus_7 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_7); tmp *= scaling_factor; std::get<19>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<20, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_9 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_9); + auto tmp = new_term.bc_decomposition_sel_pc_plus_8 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_8); tmp *= scaling_factor; std::get<20>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<21, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_10 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_10); + auto tmp = new_term.bc_decomposition_sel_pc_plus_9 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_9); tmp *= scaling_factor; std::get<21>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<22, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_11 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_11); + auto tmp = new_term.bc_decomposition_sel_pc_plus_10 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_10); tmp *= scaling_factor; std::get<22>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<23, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_12 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_12); + auto tmp = new_term.bc_decomposition_sel_pc_plus_11 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_11); tmp *= scaling_factor; std::get<23>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<24, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_13 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_13); + auto tmp = new_term.bc_decomposition_sel_pc_plus_12 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_12); tmp *= scaling_factor; std::get<24>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<25, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_14 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_14); + auto tmp = new_term.bc_decomposition_sel_pc_plus_13 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_13); tmp *= scaling_factor; std::get<25>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<26, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_15 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_15); + auto tmp = new_term.bc_decomposition_sel_pc_plus_14 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_14); tmp *= scaling_factor; std::get<26>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<27, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_16 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_16); + auto tmp = new_term.bc_decomposition_sel_pc_plus_15 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_15); tmp *= scaling_factor; std::get<27>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<28, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_17 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_17); + auto tmp = new_term.bc_decomposition_sel_pc_plus_16 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_16); tmp *= scaling_factor; std::get<28>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<29, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_18 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_18); + auto tmp = new_term.bc_decomposition_sel_pc_plus_17 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_17); tmp *= scaling_factor; std::get<29>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<30, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_19 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_19); + auto tmp = new_term.bc_decomposition_sel_pc_plus_18 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_18); tmp *= scaling_factor; std::get<30>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<31, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_20 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_20); + auto tmp = new_term.bc_decomposition_sel_pc_plus_19 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_19); tmp *= scaling_factor; std::get<31>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<32, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_21 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_21); + auto tmp = new_term.bc_decomposition_sel_pc_plus_20 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_20); tmp *= scaling_factor; std::get<32>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<33, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_22 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_22); + auto tmp = new_term.bc_decomposition_sel_pc_plus_21 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_21); tmp *= scaling_factor; std::get<33>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<34, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_23 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_23); + auto tmp = new_term.bc_decomposition_sel_pc_plus_22 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_22); tmp *= scaling_factor; std::get<34>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<35, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_24 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_24); + auto tmp = new_term.bc_decomposition_sel_pc_plus_23 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_23); tmp *= scaling_factor; std::get<35>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<36, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_25 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_25); + auto tmp = new_term.bc_decomposition_sel_pc_plus_24 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_24); tmp *= scaling_factor; std::get<36>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<37, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_26 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_26); + auto tmp = new_term.bc_decomposition_sel_pc_plus_25 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_25); tmp *= scaling_factor; std::get<37>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<38, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_27 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_27); + auto tmp = new_term.bc_decomposition_sel_pc_plus_26 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_26); tmp *= scaling_factor; std::get<38>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<39, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_28 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_28); + auto tmp = new_term.bc_decomposition_sel_pc_plus_27 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_27); tmp *= scaling_factor; std::get<39>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<40, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_29 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_29); + auto tmp = new_term.bc_decomposition_sel_pc_plus_28 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_28); tmp *= scaling_factor; std::get<40>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<41, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_30 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_30); + auto tmp = new_term.bc_decomposition_sel_pc_plus_29 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_29); tmp *= scaling_factor; std::get<41>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<42, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_31 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_31); + auto tmp = new_term.bc_decomposition_sel_pc_plus_30 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_30); tmp *= scaling_factor; std::get<42>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<43, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_32 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_32); + auto tmp = new_term.bc_decomposition_sel_pc_plus_31 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_31); tmp *= scaling_factor; std::get<43>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<44, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_33 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_33); + auto tmp = new_term.bc_decomposition_sel_pc_plus_32 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_32); tmp *= scaling_factor; std::get<44>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<45, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_34 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_34); + auto tmp = new_term.bc_decomposition_sel_pc_plus_33 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_33); tmp *= scaling_factor; std::get<45>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<46, ContainerOverSubrelations>; - auto tmp = new_term.bc_decomposition_sel_pc_plus_35 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_35); + auto tmp = new_term.bc_decomposition_sel_pc_plus_34 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_34); tmp *= scaling_factor; std::get<46>(evals) += typename Accumulator::View(tmp); } { using Accumulator = typename std::tuple_element_t<47, ContainerOverSubrelations>; + auto tmp = new_term.bc_decomposition_sel_pc_plus_35 * (FF(1) - new_term.bc_decomposition_sel_pc_plus_35); + tmp *= scaling_factor; + std::get<47>(evals) += typename Accumulator::View(tmp); + } + { + using Accumulator = typename std::tuple_element_t<48, ContainerOverSubrelations>; auto tmp = new_term.bc_decomposition_sel * ((FF(1) + new_term.bc_decomposition_sel_pc_plus_1 * FF(2) + @@ -379,252 +385,252 @@ template class bc_decompositionImpl { new_term.bc_decomposition_sel_pc_plus_35 * FF(34359738368UL)) - new_term.bc_decomposition_bytes_to_read_unary); tmp *= scaling_factor; - std::get<47>(evals) += typename Accumulator::View(tmp); + std::get<48>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<48, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<49, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_1 - new_term.bc_decomposition_sel_pc_plus_1 * new_term.bc_decomposition_bytes_shift); tmp *= scaling_factor; - std::get<48>(evals) += typename Accumulator::View(tmp); + std::get<49>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<49, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<50, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_2 - new_term.bc_decomposition_sel_pc_plus_2 * new_term.bc_decomposition_bytes_pc_plus_1_shift); tmp *= scaling_factor; - std::get<49>(evals) += typename Accumulator::View(tmp); + std::get<50>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<50, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<51, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_3 - new_term.bc_decomposition_sel_pc_plus_3 * new_term.bc_decomposition_bytes_pc_plus_2_shift); tmp *= scaling_factor; - std::get<50>(evals) += typename Accumulator::View(tmp); + std::get<51>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<51, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<52, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_4 - new_term.bc_decomposition_sel_pc_plus_4 * new_term.bc_decomposition_bytes_pc_plus_3_shift); tmp *= scaling_factor; - std::get<51>(evals) += typename Accumulator::View(tmp); + std::get<52>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<52, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<53, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_5 - new_term.bc_decomposition_sel_pc_plus_5 * new_term.bc_decomposition_bytes_pc_plus_4_shift); tmp *= scaling_factor; - std::get<52>(evals) += typename Accumulator::View(tmp); + std::get<53>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<53, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<54, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_6 - new_term.bc_decomposition_sel_pc_plus_6 * new_term.bc_decomposition_bytes_pc_plus_5_shift); tmp *= scaling_factor; - std::get<53>(evals) += typename Accumulator::View(tmp); + std::get<54>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<54, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<55, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_7 - new_term.bc_decomposition_sel_pc_plus_7 * new_term.bc_decomposition_bytes_pc_plus_6_shift); tmp *= scaling_factor; - std::get<54>(evals) += typename Accumulator::View(tmp); + std::get<55>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<55, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<56, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_8 - new_term.bc_decomposition_sel_pc_plus_8 * new_term.bc_decomposition_bytes_pc_plus_7_shift); tmp *= scaling_factor; - std::get<55>(evals) += typename Accumulator::View(tmp); + std::get<56>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<56, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<57, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_9 - new_term.bc_decomposition_sel_pc_plus_9 * new_term.bc_decomposition_bytes_pc_plus_8_shift); tmp *= scaling_factor; - std::get<56>(evals) += typename Accumulator::View(tmp); + std::get<57>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<57, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<58, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_10 - new_term.bc_decomposition_sel_pc_plus_10 * new_term.bc_decomposition_bytes_pc_plus_9_shift); tmp *= scaling_factor; - std::get<57>(evals) += typename Accumulator::View(tmp); + std::get<58>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<58, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<59, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_11 - new_term.bc_decomposition_sel_pc_plus_11 * new_term.bc_decomposition_bytes_pc_plus_10_shift); tmp *= scaling_factor; - std::get<58>(evals) += typename Accumulator::View(tmp); + std::get<59>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<59, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<60, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_12 - new_term.bc_decomposition_sel_pc_plus_12 * new_term.bc_decomposition_bytes_pc_plus_11_shift); tmp *= scaling_factor; - std::get<59>(evals) += typename Accumulator::View(tmp); + std::get<60>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<60, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<61, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_13 - new_term.bc_decomposition_sel_pc_plus_13 * new_term.bc_decomposition_bytes_pc_plus_12_shift); tmp *= scaling_factor; - std::get<60>(evals) += typename Accumulator::View(tmp); + std::get<61>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<61, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<62, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_14 - new_term.bc_decomposition_sel_pc_plus_14 * new_term.bc_decomposition_bytes_pc_plus_13_shift); tmp *= scaling_factor; - std::get<61>(evals) += typename Accumulator::View(tmp); + std::get<62>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<62, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<63, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_15 - new_term.bc_decomposition_sel_pc_plus_15 * new_term.bc_decomposition_bytes_pc_plus_14_shift); tmp *= scaling_factor; - std::get<62>(evals) += typename Accumulator::View(tmp); + std::get<63>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<63, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<64, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_16 - new_term.bc_decomposition_sel_pc_plus_16 * new_term.bc_decomposition_bytes_pc_plus_15_shift); tmp *= scaling_factor; - std::get<63>(evals) += typename Accumulator::View(tmp); + std::get<64>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<64, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<65, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_17 - new_term.bc_decomposition_sel_pc_plus_17 * new_term.bc_decomposition_bytes_pc_plus_16_shift); tmp *= scaling_factor; - std::get<64>(evals) += typename Accumulator::View(tmp); + std::get<65>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<65, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<66, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_18 - new_term.bc_decomposition_sel_pc_plus_18 * new_term.bc_decomposition_bytes_pc_plus_17_shift); tmp *= scaling_factor; - std::get<65>(evals) += typename Accumulator::View(tmp); + std::get<66>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<66, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<67, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_19 - new_term.bc_decomposition_sel_pc_plus_19 * new_term.bc_decomposition_bytes_pc_plus_18_shift); tmp *= scaling_factor; - std::get<66>(evals) += typename Accumulator::View(tmp); + std::get<67>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<67, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<68, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_20 - new_term.bc_decomposition_sel_pc_plus_20 * new_term.bc_decomposition_bytes_pc_plus_19_shift); tmp *= scaling_factor; - std::get<67>(evals) += typename Accumulator::View(tmp); + std::get<68>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<68, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<69, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_21 - new_term.bc_decomposition_sel_pc_plus_21 * new_term.bc_decomposition_bytes_pc_plus_20_shift); tmp *= scaling_factor; - std::get<68>(evals) += typename Accumulator::View(tmp); + std::get<69>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<69, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<70, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_22 - new_term.bc_decomposition_sel_pc_plus_22 * new_term.bc_decomposition_bytes_pc_plus_21_shift); tmp *= scaling_factor; - std::get<69>(evals) += typename Accumulator::View(tmp); + std::get<70>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<70, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<71, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_23 - new_term.bc_decomposition_sel_pc_plus_23 * new_term.bc_decomposition_bytes_pc_plus_22_shift); tmp *= scaling_factor; - std::get<70>(evals) += typename Accumulator::View(tmp); + std::get<71>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<71, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<72, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_24 - new_term.bc_decomposition_sel_pc_plus_24 * new_term.bc_decomposition_bytes_pc_plus_23_shift); tmp *= scaling_factor; - std::get<71>(evals) += typename Accumulator::View(tmp); + std::get<72>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<72, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<73, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_25 - new_term.bc_decomposition_sel_pc_plus_25 * new_term.bc_decomposition_bytes_pc_plus_24_shift); tmp *= scaling_factor; - std::get<72>(evals) += typename Accumulator::View(tmp); + std::get<73>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<73, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<74, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_26 - new_term.bc_decomposition_sel_pc_plus_26 * new_term.bc_decomposition_bytes_pc_plus_25_shift); tmp *= scaling_factor; - std::get<73>(evals) += typename Accumulator::View(tmp); + std::get<74>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<74, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<75, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_27 - new_term.bc_decomposition_sel_pc_plus_27 * new_term.bc_decomposition_bytes_pc_plus_26_shift); tmp *= scaling_factor; - std::get<74>(evals) += typename Accumulator::View(tmp); + std::get<75>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<75, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<76, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_28 - new_term.bc_decomposition_sel_pc_plus_28 * new_term.bc_decomposition_bytes_pc_plus_27_shift); tmp *= scaling_factor; - std::get<75>(evals) += typename Accumulator::View(tmp); + std::get<76>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<76, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<77, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_29 - new_term.bc_decomposition_sel_pc_plus_29 * new_term.bc_decomposition_bytes_pc_plus_28_shift); tmp *= scaling_factor; - std::get<76>(evals) += typename Accumulator::View(tmp); + std::get<77>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<77, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<78, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_30 - new_term.bc_decomposition_sel_pc_plus_30 * new_term.bc_decomposition_bytes_pc_plus_29_shift); tmp *= scaling_factor; - std::get<77>(evals) += typename Accumulator::View(tmp); + std::get<78>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<78, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<79, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_31 - new_term.bc_decomposition_sel_pc_plus_31 * new_term.bc_decomposition_bytes_pc_plus_30_shift); tmp *= scaling_factor; - std::get<78>(evals) += typename Accumulator::View(tmp); + std::get<79>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<79, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<80, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_32 - new_term.bc_decomposition_sel_pc_plus_32 * new_term.bc_decomposition_bytes_pc_plus_31_shift); tmp *= scaling_factor; - std::get<79>(evals) += typename Accumulator::View(tmp); + std::get<80>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<80, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<81, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_33 - new_term.bc_decomposition_sel_pc_plus_33 * new_term.bc_decomposition_bytes_pc_plus_32_shift); tmp *= scaling_factor; - std::get<80>(evals) += typename Accumulator::View(tmp); + std::get<81>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<81, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<82, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_34 - new_term.bc_decomposition_sel_pc_plus_34 * new_term.bc_decomposition_bytes_pc_plus_33_shift); tmp *= scaling_factor; - std::get<81>(evals) += typename Accumulator::View(tmp); + std::get<82>(evals) += typename Accumulator::View(tmp); } { - using Accumulator = typename std::tuple_element_t<82, ContainerOverSubrelations>; + using Accumulator = typename std::tuple_element_t<83, ContainerOverSubrelations>; auto tmp = (new_term.bc_decomposition_bytes_pc_plus_35 - new_term.bc_decomposition_sel_pc_plus_35 * new_term.bc_decomposition_bytes_pc_plus_34_shift); tmp *= scaling_factor; - std::get<82>(evals) += typename Accumulator::View(tmp); + std::get<83>(evals) += typename Accumulator::View(tmp); } } }; @@ -642,17 +648,17 @@ template class bc_decomposition : public Relation class bc_decomposition : public Relation