2#include "barretenberg/ecc/curves/bn254/fr.hpp"
3#include "nested_containers.hpp"
7concept IsField = std::same_as<T, barretenberg::fr> ;
9namespace proof_system {
21template <
typename Params,
typename View>
22using GetParameterView = std::conditional_t<IsField<typename Params::DataType>,
typename Params::DataType, View>;
24template <
typename T,
size_t subrelation_
idx>
27 std::get<subrelation_idx>(T::SUBRELATION_LINEARLY_INDEPENDENT)
28 } -> std::convertible_to<bool>;
42template <
typename Relation,
size_t subrelation_index>
constexpr bool subrelation_is_linearly_independent()
45 return std::get<subrelation_index>(Relation::SUBRELATION_LINEARLY_INDEPENDENT);
55template <
typename RelationImpl>
56consteval std::array<size_t, RelationImpl::SUBRELATION_PARTIAL_LENGTHS.size()> compute_total_subrelation_lengths()
58 if constexpr (HasParameterLengthAdjustmentsMember<RelationImpl>) {
59 constexpr size_t NUM_SUBRELATIONS = RelationImpl::SUBRELATION_PARTIAL_LENGTHS.size();
60 std::array<size_t, NUM_SUBRELATIONS> result;
61 for (
size_t idx = 0; idx < NUM_SUBRELATIONS; idx++) {
62 result[idx] = RelationImpl::SUBRELATION_PARTIAL_LENGTHS[idx] + RelationImpl::TOTAL_LENGTH_ADJUSTMENTS[idx];
66 return RelationImpl::SUBRELATION_PARTIAL_LENGTHS;
81template <
size_t NUM_INSTANCES,
size_t NUM_SUBRELATIONS>
82consteval std::array<size_t, NUM_SUBRELATIONS> compute_composed_subrelation_partial_lengths(
83 std::array<size_t, NUM_SUBRELATIONS> SUBRELATION_PARTIAL_LENGTHS)
85 std::transform(SUBRELATION_PARTIAL_LENGTHS.begin(),
86 SUBRELATION_PARTIAL_LENGTHS.end(),
87 SUBRELATION_PARTIAL_LENGTHS.begin(),
88 [](
const size_t x) { return (x - 1) * (NUM_INSTANCES - 1) + 1; });
89 return SUBRELATION_PARTIAL_LENGTHS;
121template <
typename RelationImpl>
class Relation :
public RelationImpl {
123 using FF =
typename RelationImpl::FF;
125 static constexpr std::array<size_t, RelationImpl::SUBRELATION_PARTIAL_LENGTHS.size()> SUBRELATION_TOTAL_LENGTHS =
126 compute_total_subrelation_lengths<RelationImpl>();
128 static constexpr size_t RELATION_LENGTH = *std::max_element(RelationImpl::SUBRELATION_PARTIAL_LENGTHS.begin(),
129 RelationImpl::SUBRELATION_PARTIAL_LENGTHS.end());
131 static constexpr size_t TOTAL_RELATION_LENGTH =
132 *std::max_element(SUBRELATION_TOTAL_LENGTHS.begin(), SUBRELATION_TOTAL_LENGTHS.end());
134 template <
size_t NUM_INSTANCES>
135 using ProtogalaxyTupleOfUnivariatesOverSubrelations =
136 TupleOfUnivariates<FF, compute_composed_subrelation_partial_lengths<NUM_INSTANCES>(SUBRELATION_TOTAL_LENGTHS)>;
137 using SumcheckTupleOfUnivariatesOverSubrelations =
138 TupleOfUnivariates<FF, RelationImpl::SUBRELATION_PARTIAL_LENGTHS>;
139 using SumcheckArrayOfValuesOverSubrelations = ArrayOfValues<FF, RelationImpl::SUBRELATION_PARTIAL_LENGTHS>;
143 using UnivariateAccumulator0 = std::tuple_element_t<0, SumcheckTupleOfUnivariatesOverSubrelations>;
144 using ValueAccumulator0 = std::tuple_element_t<0, SumcheckArrayOfValuesOverSubrelations>;
The templates defined herein facilitate sharing the relation arithmetic between the prover and the ve...
Definition: relation_types.hpp:121
Definition: relation_types.hpp:7
Definition: relation_types.hpp:32
Definition: relation_types.hpp:25