Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Types | Public Member Functions | Protected Types | Protected Attributes | Friends | List of all members
gadgetlib2::ConstraintSystem Class Reference

#include <constraint.hpp>

Public Types

typedef ::std::set<::std::unique_ptr< Polynomial > > PolyPtrSet
 

Public Member Functions

 ConstraintSystem ()
 
bool isSatisfied (const VariableAssignment &assignment, const PrintOptions &printOnFail=PrintOptions::NO_DBG_PRINT) const
 
void addConstraint (const Rank1Constraint &c)
 
void addConstraint (const PolynomialConstraint &c)
 
::std::string annotation () const
 
Variable::set getUsedVariables () const
 
PolyPtrSet getConstraintPolynomials () const
 Required for interfacing with BREX. Should be optimized in the future. More...
 
size_t getNumberOfConstraints ()
 
ConstraintPtr getConstraint (size_t idx)
 

Protected Types

typedef ::std::shared_ptr< ConstraintConstraintPtr
 

Protected Attributes

::std::vector< ConstraintPtrconstraintsPtrs_
 

Friends

class GadgetLibAdapter
 

Detailed Description

Definition at line 153 of file constraint.hpp.

Member Typedef Documentation

◆ ConstraintPtr

typedef ::std::shared_ptr<Constraint> gadgetlib2::ConstraintSystem::ConstraintPtr
protected

Definition at line 156 of file constraint.hpp.

◆ PolyPtrSet

typedef ::std::set<::std::unique_ptr<Polynomial> > gadgetlib2::ConstraintSystem::PolyPtrSet

Definition at line 178 of file constraint.hpp.

Constructor & Destructor Documentation

◆ ConstraintSystem()

gadgetlib2::ConstraintSystem::ConstraintSystem ( )
inline

Definition at line 160 of file constraint.hpp.

160 : constraintsPtrs_(){};

Member Function Documentation

◆ addConstraint() [1/2]

void gadgetlib2::ConstraintSystem::addConstraint ( const PolynomialConstraint c)

Definition at line 208 of file constraint.cpp.

209 {
210  constraintsPtrs_.emplace_back(
211  ::std::shared_ptr<Constraint>(new PolynomialConstraint(c)));
212 }

◆ addConstraint() [2/2]

void gadgetlib2::ConstraintSystem::addConstraint ( const Rank1Constraint c)

Definition at line 202 of file constraint.cpp.

203 {
204  constraintsPtrs_.emplace_back(
205  ::std::shared_ptr<Constraint>(new Rank1Constraint(c)));
206 }
Here is the caller graph for this function:

◆ annotation()

string gadgetlib2::ConstraintSystem::annotation ( ) const

Definition at line 225 of file constraint.cpp.

226 {
227  string retVal("\n");
228  for (auto i = constraintsPtrs_.begin(); i != constraintsPtrs_.end(); ++i) {
229  retVal += (*i)->annotation() + '\n';
230  }
231  return retVal;
232 }
Here is the caller graph for this function:

◆ getConstraint()

ConstraintPtr gadgetlib2::ConstraintSystem::getConstraint ( size_t  idx)
inline

Definition at line 190 of file constraint.hpp.

190 { return constraintsPtrs_[idx]; }

◆ getConstraintPolynomials()

PolyPtrSet gadgetlib2::ConstraintSystem::getConstraintPolynomials ( ) const
inline

Required for interfacing with BREX. Should be optimized in the future.

Definition at line 180 of file constraint.hpp.

181  {
182  PolyPtrSet retset;
183  for (const auto &pConstraint : constraintsPtrs_) {
184  retset.insert(::std::unique_ptr<Polynomial>(
185  new Polynomial(pConstraint->asPolynomial())));
186  }
187  return retset;
188  }

◆ getNumberOfConstraints()

size_t gadgetlib2::ConstraintSystem::getNumberOfConstraints ( )
inline

Definition at line 189 of file constraint.hpp.

189 { return constraintsPtrs_.size(); }

◆ getUsedVariables()

Variable::set gadgetlib2::ConstraintSystem::getUsedVariables ( ) const

Definition at line 234 of file constraint.cpp.

235 {
236  Variable::set retSet;
237  for (auto &pConstraint : constraintsPtrs_) {
238  const Variable::set curSet = pConstraint->getUsedVariables();
239  retSet.insert(curSet.begin(), curSet.end());
240  }
241  return retSet;
242 }

◆ isSatisfied()

bool gadgetlib2::ConstraintSystem::isSatisfied ( const VariableAssignment assignment,
const PrintOptions printOnFail = PrintOptions::NO_DBG_PRINT 
) const
Checks if all constraints are satisfied by an assignment.
@param[in] assignment  - An assignment of field elements for each

variable.

Parameters
[in]printOnFail- when set to true, an unsatisfied constraint will print to stderr information explaining why it is not satisfied.
Returns
true if constraint is satisfied by the assignment

Definition at line 214 of file constraint.cpp.

216 {
217  for (size_t i = 0; i < constraintsPtrs_.size(); ++i) {
218  if (!constraintsPtrs_[i]->isSatisfied(assignment, printOnFail)) {
219  return false;
220  }
221  }
222  return true;
223 }
Here is the caller graph for this function:

Friends And Related Function Documentation

◆ GadgetLibAdapter

friend class GadgetLibAdapter
friend

Definition at line 191 of file constraint.hpp.

Member Data Documentation

◆ constraintsPtrs_

::std::vector<ConstraintPtr> gadgetlib2::ConstraintSystem::constraintsPtrs_
protected

Definition at line 157 of file constraint.hpp.


The documentation for this class was generated from the following files:
gadgetlib2::ConstraintSystem::constraintsPtrs_
::std::vector< ConstraintPtr > constraintsPtrs_
Definition: constraint.hpp:157
gadgetlib2::ConstraintSystem::PolyPtrSet
::std::set<::std::unique_ptr< Polynomial > > PolyPtrSet
Definition: constraint.hpp:178
gadgetlib2::Variable::set
::std::set< Variable, VariableStrictOrder > set
A set of Variables should be declared as follows: Variable::set s1;.
Definition: variable.hpp:341
gadgetlib2::ConstraintSystem::isSatisfied
bool isSatisfied(const VariableAssignment &assignment, const PrintOptions &printOnFail=PrintOptions::NO_DBG_PRINT) const
Definition: constraint.cpp:214