Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions barretenberg/cpp/pil/vm2/ecc_mem.pil
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ include "gt.pil";
namespace ecc_add_mem;

pol commit sel;
sel * (1 - sel) = 0;

#[skippable_if]
sel = 0;
Expand Down
1 change: 1 addition & 0 deletions barretenberg/cpp/pil/vm2/to_radix_mem.pil
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ include "precomputed.pil";
namespace to_radix_mem;

pol commit sel;
sel * (1 - sel) = 0;

#[skippable_if]
sel = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ template <typename FF_> class ecc_memImpl {
public:
using FF = FF_;

static constexpr std::array<size_t, 11> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 6, 5, 6, 5, 4, 3 };
static constexpr std::array<size_t, 12> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 3, 6, 5, 6, 5, 4, 3 };

template <typename AllEntities> inline static bool skip(const AllEntities& in)
{
Expand All @@ -35,11 +35,11 @@ template <typename FF> class ecc_mem : public Relation<ecc_memImpl<FF>> {
static constexpr const std::string_view NAME = "ecc_mem";

// Subrelation indices constants, to be used in tests.
static constexpr size_t SR_WRITE_INCR_DST_ADDR = 0;
static constexpr size_t SR_P_CURVE_EQN = 5;
static constexpr size_t SR_P_ON_CURVE_CHECK = 6;
static constexpr size_t SR_Q_CURVE_EQN = 7;
static constexpr size_t SR_Q_ON_CURVE_CHECK = 8;
static constexpr size_t SR_WRITE_INCR_DST_ADDR = 1;
static constexpr size_t SR_P_CURVE_EQN = 6;
static constexpr size_t SR_P_ON_CURVE_CHECK = 7;
static constexpr size_t SR_Q_CURVE_EQN = 8;
static constexpr size_t SR_Q_ON_CURVE_CHECK = 9;

static std::string get_subrelation_label(size_t index)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,88 +21,94 @@ void ecc_memImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
const auto ecc_add_mem_Q_X3 = in.get(C::ecc_add_mem_q_x) * in.get(C::ecc_add_mem_q_x) * in.get(C::ecc_add_mem_q_x);
const auto ecc_add_mem_Q_Y2 = in.get(C::ecc_add_mem_q_y) * in.get(C::ecc_add_mem_q_y);

{ // WRITE_INCR_DST_ADDR
{
using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
auto tmp =
static_cast<View>(in.get(C::ecc_add_mem_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel)));
std::get<0>(evals) += (tmp * scaling_factor);
}
{ // WRITE_INCR_DST_ADDR
using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_dst_addr_1_)) -
static_cast<View>(in.get(C::ecc_add_mem_sel)) *
(static_cast<View>(in.get(C::ecc_add_mem_dst_addr_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<View>(in.get(C::ecc_add_mem_dst_addr_2_)) -
static_cast<View>(in.get(C::ecc_add_mem_sel)) *
(static_cast<View>(in.get(C::ecc_add_mem_dst_addr_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<View>(in.get(C::ecc_add_mem_sel)) *
(static_cast<View>(in.get(C::ecc_add_mem_max_mem_addr)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS));
std::get<2>(evals) += (tmp * scaling_factor);
std::get<3>(evals) += (tmp * scaling_factor);
}
{
using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err)) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err)));
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<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)));
std::get<4>(evals) += (tmp * scaling_factor);
std::get<5>(evals) += (tmp * scaling_factor);
}
{ // P_CURVE_EQN
using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn)) -
static_cast<View>(in.get(C::ecc_add_mem_sel)) *
(CView(ecc_add_mem_P_Y2) - (CView(ecc_add_mem_P_X3) - FF(17))) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_p_is_inf))));
std::get<5>(evals) += (tmp * scaling_factor);
std::get<6>(evals) += (tmp * scaling_factor);
}
{ // P_ON_CURVE_CHECK
using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) *
(static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn)) *
((FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err))) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn_inv))) +
static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn_inv))) -
static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err)));
std::get<6>(evals) += (tmp * scaling_factor);
std::get<7>(evals) += (tmp * scaling_factor);
}
{ // Q_CURVE_EQN
using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn)) -
static_cast<View>(in.get(C::ecc_add_mem_sel)) *
(CView(ecc_add_mem_Q_Y2) - (CView(ecc_add_mem_Q_X3) - FF(17))) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_q_is_inf))));
std::get<7>(evals) += (tmp * scaling_factor);
std::get<8>(evals) += (tmp * scaling_factor);
}
{ // Q_ON_CURVE_CHECK
using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) *
(static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn)) *
((FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err))) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn_inv))) +
static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn_inv))) -
static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)));
std::get<8>(evals) += (tmp * scaling_factor);
std::get<9>(evals) += (tmp * scaling_factor);
}
{
using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_err)) -
(FF(1) - (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_dst_out_of_range_err))) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err))) *
(FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_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<View>(in.get(C::ecc_add_mem_sel_should_exec)) -
static_cast<View>(in.get(C::ecc_add_mem_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_err))));
std::get<10>(evals) += (tmp * scaling_factor);
std::get<11>(evals) += (tmp * scaling_factor);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ template <typename FF_> class to_radix_memImpl {
public:
using FF = FF_;

static constexpr std::array<size_t, 37> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3, 3,
3, 3, 5, 3, 5, 3, 5, 3, 6, 3, 4, 4, 3,
3, 4, 4, 4, 4, 4, 4, 7, 4, 4, 3 };
static constexpr std::array<size_t, 38> SUBRELATION_PARTIAL_LENGTHS = { 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 3, 3,
3, 3, 3, 5, 3, 5, 3, 5, 3, 6, 3, 4, 4,
3, 3, 4, 4, 4, 4, 4, 4, 7, 4, 4, 3 };

template <typename AllEntities> inline static bool skip(const AllEntities& in)
{
Expand All @@ -37,25 +37,25 @@ template <typename FF> class to_radix_mem : public Relation<to_radix_memImpl<FF>
static constexpr const std::string_view NAME = "to_radix_mem";

// Subrelation indices constants, to be used in tests.
static constexpr size_t SR_LAST_HAS_SEL_ON = 2;
static constexpr size_t SR_START_AFTER_LAST = 3;
static constexpr size_t SR_SEL_CONTINUITY = 4;
static constexpr size_t SR_EXEC_CLK_CONTINUITY = 5;
static constexpr size_t SR_SPACE_ID_CONTINUITY = 6;
static constexpr size_t SR_VALUE_CONTNUITY = 7;
static constexpr size_t SR_RADIX_CONTINUITY = 8;
static constexpr size_t SR_IS_OUTPUT_BITS_CONTINUITY = 9;
static constexpr size_t SR_IS_OUTPUT_BITS_IMPLY_RADIX_2 = 15;
static constexpr size_t SR_ZERO_CHECK_NUM_LIMBS = 17;
static constexpr size_t SR_ZERO_CHECK_VALUE = 19;
static constexpr size_t SR_SEL_SHOULD_DECOMPOSE_CONTINUITY = 24;
static constexpr size_t SR_TRUNCATION_ERROR = 27;
static constexpr size_t SR_DECR_NUM_LIMBS = 29;
static constexpr size_t SR_INCR_DST_ADDRESS = 30;
static constexpr size_t SR_LAST_ROW_ERR_COMPUTATION = 31;
static constexpr size_t SR_LAST_ROW_NUM_LIMBS_ZERO = 32;
static constexpr size_t SR_LAST_ROW_VALID_COMPUTATION = 33;
static constexpr size_t SR_SEL_SHOULD_WRITE_MEM_CONTINUITY = 35;
static constexpr size_t SR_LAST_HAS_SEL_ON = 3;
static constexpr size_t SR_START_AFTER_LAST = 4;
static constexpr size_t SR_SEL_CONTINUITY = 5;
static constexpr size_t SR_EXEC_CLK_CONTINUITY = 6;
static constexpr size_t SR_SPACE_ID_CONTINUITY = 7;
static constexpr size_t SR_VALUE_CONTNUITY = 8;
static constexpr size_t SR_RADIX_CONTINUITY = 9;
static constexpr size_t SR_IS_OUTPUT_BITS_CONTINUITY = 10;
static constexpr size_t SR_IS_OUTPUT_BITS_IMPLY_RADIX_2 = 16;
static constexpr size_t SR_ZERO_CHECK_NUM_LIMBS = 18;
static constexpr size_t SR_ZERO_CHECK_VALUE = 20;
static constexpr size_t SR_SEL_SHOULD_DECOMPOSE_CONTINUITY = 25;
static constexpr size_t SR_TRUNCATION_ERROR = 28;
static constexpr size_t SR_DECR_NUM_LIMBS = 30;
static constexpr size_t SR_INCR_DST_ADDRESS = 31;
static constexpr size_t SR_LAST_ROW_ERR_COMPUTATION = 32;
static constexpr size_t SR_LAST_ROW_NUM_LIMBS_ZERO = 33;
static constexpr size_t SR_LAST_ROW_VALID_COMPUTATION = 34;
static constexpr size_t SR_SEL_SHOULD_WRITE_MEM_CONTINUITY = 36;

static std::string get_subrelation_label(size_t index)
{
Expand Down
Loading
Loading