diff --git a/barretenberg/cpp/pil/vm2/poseidon2_mem.pil b/barretenberg/cpp/pil/vm2/poseidon2_mem.pil index d3c6b672195f..0fc65a8630ad 100644 --- a/barretenberg/cpp/pil/vm2/poseidon2_mem.pil +++ b/barretenberg/cpp/pil/vm2/poseidon2_mem.pil @@ -27,6 +27,7 @@ include "gt.pil"; namespace poseidon2_perm_mem; pol commit sel; + sel * (1 - sel) = 0; #[skippable_if] sel = 0; diff --git a/barretenberg/cpp/src/barretenberg/vm2/generated/relations/poseidon2_mem.hpp b/barretenberg/cpp/src/barretenberg/vm2/generated/relations/poseidon2_mem.hpp index dd23f69c301a..d817a4a2aa0f 100644 --- a/barretenberg/cpp/src/barretenberg/vm2/generated/relations/poseidon2_mem.hpp +++ b/barretenberg/cpp/src/barretenberg/vm2/generated/relations/poseidon2_mem.hpp @@ -14,7 +14,7 @@ template class poseidon2_memImpl { public: using FF = FF_; - static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 4, 3 }; + static constexpr std::array SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 4, 3 }; template inline static bool skip(const AllEntities& in) { @@ -35,9 +35,9 @@ template class poseidon2_mem : public Relation::accumulate(ContainerOverSubrelations& evals, FF(1) * poseidon2_perm_mem_INPUT_TAG_DIFF_0 + FF(8) * poseidon2_perm_mem_INPUT_TAG_DIFF_1 + FF(64) * poseidon2_perm_mem_INPUT_TAG_DIFF_2 + FF(512) * poseidon2_perm_mem_INPUT_TAG_DIFF_3; - { // READ_ADDR_INCR + { using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View; + auto tmp = static_cast(in.get(C::poseidon2_perm_mem_sel)) * + (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel))); + std::get<0>(evals) += (tmp * scaling_factor); + } + { // READ_ADDR_INCR + using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_read_address_1_)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_read_address_0_)) + FF(1))); - std::get<0>(evals) += (tmp * scaling_factor); + std::get<1>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_read_address_2_)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_read_address_0_)) + FF(2))); - std::get<1>(evals) += (tmp * scaling_factor); + std::get<2>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_read_address_3_)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_read_address_0_)) + FF(3))); - std::get<2>(evals) += (tmp * scaling_factor); + std::get<3>(evals) += (tmp * scaling_factor); } { // WRITE_ADDR_INCR - using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_write_address_1_)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_write_address_0_)) + FF(1))); - std::get<3>(evals) += (tmp * scaling_factor); + std::get<4>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_write_address_2_)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_write_address_0_)) + FF(2))); - std::get<4>(evals) += (tmp * scaling_factor); + std::get<5>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_write_address_3_)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_write_address_0_)) + FF(3))); - std::get<5>(evals) += (tmp * scaling_factor); + std::get<6>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View; auto tmp = static_cast(in.get(C::poseidon2_perm_mem_sel)) * (static_cast(in.get(C::poseidon2_perm_mem_max_mem_addr)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS)); - std::get<6>(evals) += (tmp * scaling_factor); + std::get<7>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_sel_should_read_mem)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err))) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err)))); - std::get<7>(evals) += (tmp * scaling_factor); + std::get<8>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View; auto tmp = static_cast(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err)) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err))); - std::get<8>(evals) += (tmp * scaling_factor); + std::get<9>(evals) += (tmp * scaling_factor); } { // BATCH_ZERO_CHECK - using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View; auto tmp = (CView(poseidon2_perm_mem_BATCHED_TAG_CHECK) * ((FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err))) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_batch_tag_inv))) + static_cast(in.get(C::poseidon2_perm_mem_batch_tag_inv))) - static_cast(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err))); - std::get<9>(evals) += (tmp * scaling_factor); + std::get<10>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_err)) - (FF(1) - (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err))) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err))) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err))))); - std::get<10>(evals) += (tmp * scaling_factor); + std::get<11>(evals) += (tmp * scaling_factor); } { - using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View; + using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View; auto tmp = (static_cast(in.get(C::poseidon2_perm_mem_sel_should_exec)) - static_cast(in.get(C::poseidon2_perm_mem_sel)) * (FF(1) - static_cast(in.get(C::poseidon2_perm_mem_err)))); - std::get<11>(evals) += (tmp * scaling_factor); + std::get<12>(evals) += (tmp * scaling_factor); } }