23 return Relation::SUBRELATION_LINEARLY_INDEPENDENT[subrelation_index];
29template <
typename Relation,
typename Trace>
36 for (uint32_t r = 0; r < num_rows; ++r) {
38 for (
size_t j : subrelations) {
39 if (subrelation_is_linearly_independent<Relation>(j) && !result[j].is_zero()) {
40 throw std::runtime_error(
format(
"Relation ",
43 Relation::get_subrelation_label(j),
50 for (
size_t j : subrelations) {
51 if (!result[j].is_zero()) {
52 throw std::runtime_error(
format(
"Relation ",
55 Relation::get_subrelation_label(j),
56 " is non-zero at end of trace"));
63template <
typename Relation,
typename... Ts>
66 std::array<size_t,
sizeof...(Ts)> subrelations = { subrelation... };
78 (TraceBuilder::interactions.template get_test_job<Setting>()->process(
trace), ...);
83 for (
auto& job : TraceBuilder::interactions.get_all_test_jobs()) {
A wrapper for Relations to expose methods used by the Sumcheck prover or verifier to add the contribu...
ArrayOfValues< FF, RelationImpl::SUBRELATION_PARTIAL_LENGTHS > SumcheckArrayOfValuesOverSubrelations
uint32_t get_num_rows() const
std::string format(Args... args)
const RelationParameters< FF > & get_test_params()
void check_relation_internal(const Trace &trace, std::span< const size_t > subrelations, uint32_t num_rows)
void check_all_interactions(tracegen::TestTraceContainer &trace)
void check_interaction(tracegen::TestTraceContainer &trace)
void check_relation(const tracegen::TestTraceContainer &trace, Ts... subrelation)
constexpr bool subrelation_is_linearly_independent()
Check whether a given subrelation is linearly independent from the other subrelations.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept