27 (in.get(C::poseidon2_perm_mem_input_tag_3_) - constants_MEM_TAG_FF);
28 const auto poseidon2_perm_mem_BATCHED_TAG_CHECK =
29 FF(1) * poseidon2_perm_mem_INPUT_TAG_DIFF_0 +
FF(8) * poseidon2_perm_mem_INPUT_TAG_DIFF_1 +
30 FF(64) * poseidon2_perm_mem_INPUT_TAG_DIFF_2 +
FF(512) * poseidon2_perm_mem_INPUT_TAG_DIFF_3;
33 using View =
typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
34 auto tmp =
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
35 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)));
39 using View =
typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
40 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_read_address_1_)) -
41 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
42 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_read_address_0_)) +
FF(1)));
46 using View =
typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
47 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_read_address_2_)) -
48 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
49 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_read_address_0_)) +
FF(2)));
53 using View =
typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
54 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_read_address_3_)) -
55 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
56 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_read_address_0_)) +
FF(3)));
60 using View =
typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
61 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_write_address_1_)) -
62 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
63 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_write_address_0_)) +
FF(1)));
67 using View =
typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
68 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_write_address_2_)) -
69 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
70 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_write_address_0_)) +
FF(2)));
74 using View =
typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
75 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_write_address_3_)) -
76 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
77 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_write_address_0_)) +
FF(3)));
81 using View =
typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
83 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
84 (
static_cast<View
>(in.get(C::poseidon2_perm_mem_max_mem_addr)) -
CView(constants_AVM_HIGHEST_MEM_ADDRESS));
88 using View =
typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
89 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_should_read_mem)) -
90 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
91 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err))) *
92 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err))));
96 using View =
typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
97 auto tmp =
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err)) *
98 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err)));
102 using View =
typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
103 auto tmp = (
CView(poseidon2_perm_mem_BATCHED_TAG_CHECK) *
104 ((
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err))) *
105 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_batch_tag_inv))) +
106 static_cast<View
>(in.get(C::poseidon2_perm_mem_batch_tag_inv))) -
107 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err)));
111 using View =
typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
112 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_err)) -
113 (
FF(1) - (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_src_out_of_range_err))) *
114 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_dst_out_of_range_err))) *
115 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_invalid_tag_err)))));
119 using View =
typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
120 auto tmp = (
static_cast<View
>(in.get(C::poseidon2_perm_mem_sel_should_exec)) -
121 static_cast<View
>(in.get(C::poseidon2_perm_mem_sel)) *
122 (
FF(1) -
static_cast<View
>(in.get(C::poseidon2_perm_mem_err))));