Clearmatics Libsnark  0.1
C++ library for zkSNARK proofs
Public Member Functions | List of all members
gadgetlib2::PolynomialConstraint Class Reference

#include <constraint.hpp>

Inheritance diagram for gadgetlib2::PolynomialConstraint:
Inheritance graph
[legend]
Collaboration diagram for gadgetlib2::PolynomialConstraint:
Collaboration graph
[legend]

Public Member Functions

 PolynomialConstraint (const Polynomial &a, const Polynomial &b, const ::std::string &name)
 
bool isSatisfied (const VariableAssignment &assignment, const PrintOptions &printOnFail=PrintOptions::NO_DBG_PRINT) const
 
::std::string annotation () const
 
virtual const Variable::set getUsedVariables () const
 
virtual Polynomial asPolynomial () const
 
- Public Member Functions inherited from gadgetlib2::Constraint
 Constraint (const ::std::string &name)
 
::std::string name () const
 

Detailed Description

Definition at line 121 of file constraint.hpp.

Constructor & Destructor Documentation

◆ PolynomialConstraint()

gadgetlib2::PolynomialConstraint::PolynomialConstraint ( const Polynomial a,
const Polynomial b,
const ::std::string &  name 
)

Definition at line 144 of file constraint.cpp.

146  : Constraint(name), a_(a), b_(b)
147 {
148 }

Member Function Documentation

◆ annotation()

string gadgetlib2::PolynomialConstraint::annotation ( ) const
virtual
Returns
the constraint in a human readable string format

Implements gadgetlib2::Constraint.

Definition at line 180 of file constraint.cpp.

181 {
182 #ifndef DEBUG
183  return "";
184 #endif
185  return a_.asString() + " == " + b_.asString();
186 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ asPolynomial()

virtual Polynomial gadgetlib2::PolynomialConstraint::asPolynomial ( ) const
inlinevirtual

Implements gadgetlib2::Constraint.

Definition at line 137 of file constraint.hpp.

137 { return a_ - b_; }

◆ getUsedVariables()

const Variable::set gadgetlib2::PolynomialConstraint::getUsedVariables ( ) const
virtual
Returns
a list of all variables used in the constraint

Implements gadgetlib2::Constraint.

Definition at line 188 of file constraint.cpp.

189 {
190  Variable::set retSet;
191  const Variable::set aSet = a_.getUsedVariables();
192  retSet.insert(aSet.begin(), aSet.end());
193  const Variable::set bSet = b_.getUsedVariables();
194  retSet.insert(bSet.begin(), bSet.end());
195  return retSet;
196 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ isSatisfied()

bool gadgetlib2::PolynomialConstraint::isSatisfied ( const VariableAssignment assignment,
const PrintOptions printOnFail = PrintOptions::NO_DBG_PRINT 
) const
virtual
@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

Implements gadgetlib2::Constraint.

Definition at line 150 of file constraint.cpp.

152 {
153  const FElem aEval = a_.eval(assignment);
154  const FElem bEval = b_.eval(assignment);
155  if (aEval != bEval) {
156 #ifdef DEBUG
157  if (printOnFail == PrintOptions::DBG_PRINT_IF_NOT_SATISFIED) {
158  cerr << GADGETLIB2_FMT(
159  "Constraint named \"%s\" not satisfied. Constraint is:",
160  name().c_str())
161  << endl;
162  cerr << annotation() << endl;
163  cerr << "Expecting: " << aEval << " == " << bEval << endl;
164  cerr << "Variable assignments are:" << endl;
165  const Variable::set varSet = getUsedVariables();
166  for (const Variable &var : varSet) {
167  cerr << var.name() << ": " << assignment.at(var).asString()
168  << endl;
169  }
170  }
171 #else
172  libff::UNUSED(printOnFail);
173 #endif
174 
175  return false;
176  }
177  return true;
178 }
Here is the call graph for this function:

The documentation for this class was generated from the following files:
gadgetlib2::Polynomial::eval
FElem eval(const VariableAssignment &assignment) const
Definition: variable.cpp:712
gadgetlib2::Constraint::name
::std::string name() const
Definition: constraint.cpp:43
gadgetlib2::Constraint::Constraint
Constraint(const ::std::string &name)
Definition: constraint.cpp:40
gadgetlib2::PolynomialConstraint::annotation
::std::string annotation() const
Definition: constraint.cpp:180
gadgetlib2::GADGETLIB2_FMT
::std::string GADGETLIB2_FMT(const char *format,...)
Definition: infrastructure.cpp:49
gadgetlib2::PrintOptions::DBG_PRINT_IF_NOT_SATISFIED
@ DBG_PRINT_IF_NOT_SATISFIED
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::Polynomial::getUsedVariables
const Variable::set getUsedVariables() const
Definition: variable.cpp:721
gadgetlib2::PolynomialConstraint::getUsedVariables
virtual const Variable::set getUsedVariables() const
Definition: constraint.cpp:188
gadgetlib2::Polynomial::asString
::std::string asString() const
Definition: variable.cpp:735