48 #ifndef CRYPTO3_ZK_USCS_TO_SSP_REDUCTION_HPP
49 #define CRYPTO3_ZK_USCS_TO_SSP_REDUCTION_HPP
52 #include <nil/crypto3/math/evaluation_domain.hpp>
61 namespace reductions {
62 template<
typename FieldType>
77 const std::shared_ptr<evaluation_domain<FieldType>> domain =
79 std::vector<std::map<std::size_t, typename FieldType::value_type>> V_in_Lagrange_basis(
82 for (std::size_t j = 0; j < cs.
constraints[i].terms.size(); ++j) {
83 V_in_Lagrange_basis[cs.
constraints[i].terms[j].index][i] +=
88 V_in_Lagrange_basis[0][i] += FieldType::value_type::one();
110 const typename FieldType::value_type &t) {
111 const std::shared_ptr<evaluation_domain<FieldType>> domain =
114 std::vector<typename FieldType::value_type> Vt(cs.
num_variables() + 1,
115 FieldType::value_type::zero());
116 std::vector<typename FieldType::value_type> Ht(domain->m + 1);
118 const typename FieldType::value_type Zt = domain->compute_vanishing_polynomial(t);
120 const std::vector<typename FieldType::value_type> u =
121 domain->evaluate_all_lagrange_polynomials(t);
123 for (std::size_t j = 0; j < cs.
constraints[i].terms.size(); ++j) {
130 typename FieldType::value_type ti = FieldType::value_type::one();
131 for (std::size_t i = 0; i < domain->m + 1; ++i) {
177 const typename FieldType::value_type &d) {
180 assert(cs.
is_satisfied(primary_input, auxiliary_input));
183 full_variable_assignment.insert(
184 full_variable_assignment.end(), auxiliary_input.begin(), auxiliary_input.end());
186 const std::shared_ptr<evaluation_domain<FieldType>> domain =
189 std::vector<typename FieldType::value_type> aA(domain->m, FieldType::value_type::zero());
192 aA[i] += cs.
constraints[i].evaluate(full_variable_assignment);
195 aA[i] += FieldType::value_type::one();
198 domain->inverse_fft(aA);
200 std::vector<typename FieldType::value_type> coefficients_for_H(
201 domain->m + 1, FieldType::value_type::zero());
203 #pragma omp parallel for
206 for (std::size_t i = 0; i < domain->m; ++i) {
207 coefficients_for_H[i] =
typename FieldType::value_type(2) * d * aA[i];
209 domain->add_poly_z(d.squared(), coefficients_for_H);
213 typename FieldType::value_type(
217 std::vector<typename FieldType::value_type> &H_tmp =
220 #pragma omp parallel for
222 for (std::size_t i = 0; i < domain->m; ++i) {
223 H_tmp[i] = aA[i].squared() - FieldType::value_type::one();
226 domain->divide_by_z_on_coset(H_tmp);
228 domain->inverse_fft(H_tmp);
230 typename FieldType::value_type(
235 #pragma omp parallel for
237 for (std::size_t i = 0; i < domain->m; ++i) {
238 coefficients_for_H[i] += H_tmp[i];
245 full_variable_assignment,
OutputIterator move(const SinglePassRange &rng, OutputIterator result)
Definition: move.hpp:45
void multiply_by_coset(Range &a, const FieldValueType &g)
Definition: coset.hpp:37
std::vector< typename FieldType::value_type > uscs_auxiliary_input
Definition: uscs.hpp:70
std::vector< typename FieldType::value_type > uscs_variable_assignment
Definition: uscs.hpp:73
std::vector< typename FieldType::value_type > uscs_primary_input
Definition: uscs.hpp:67
Definition: fields/params.hpp:58
Definition: uscs_to_ssp.hpp:63
static ssp_instance< FieldType > instance_map(const uscs_constraint_system< FieldType > &cs)
Definition: uscs_to_ssp.hpp:76
static ssp_instance_evaluation< FieldType > instance_map_with_evaluation(const uscs_constraint_system< FieldType > &cs, const typename FieldType::value_type &t)
Definition: uscs_to_ssp.hpp:109
FieldType field_type
Definition: uscs_to_ssp.hpp:64
static ssp_witness< FieldType > witness_map(const uscs_constraint_system< FieldType > &cs, const uscs_primary_input< FieldType > &primary_input, const uscs_auxiliary_input< FieldType > &auxiliary_input, const typename FieldType::value_type &d)
Definition: uscs_to_ssp.hpp:174
bool is_satisfied(const uscs_primary_input< FieldType > &primary_input, const uscs_auxiliary_input< FieldType > &auxiliary_input) const
Definition: uscs.hpp:124
std::size_t num_constraints() const
Definition: uscs.hpp:107
std::size_t num_variables() const
Definition: uscs.hpp:103
std::size_t num_inputs() const
Definition: uscs.hpp:99
std::vector< uscs_constraint< FieldType > > constraints
Definition: uscs.hpp:95