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

#include <constraint.hpp>

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

Public Member Functions

 Rank1Constraint (const LinearCombination &a, const LinearCombination &b, const LinearCombination &c, const ::std::string &name)
 
LinearCombination a () const
 
LinearCombination b () const
 
LinearCombination c () const
 
virtual bool isSatisfied (const VariableAssignment &assignment, const PrintOptions &printOnFail=PrintOptions::NO_DBG_PRINT) const
 
virtual ::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

A rank-1 prime characteristic constraint. The constraint is defined by <a,x>

Definition at line 83 of file constraint.hpp.

Constructor & Destructor Documentation

◆ Rank1Constraint()

gadgetlib2::Rank1Constraint::Rank1Constraint ( const LinearCombination a,
const LinearCombination b,
const LinearCombination c,
const ::std::string &  name 
)

Definition at line 64 of file constraint.cpp.

69  : Constraint(name), a_(a), b_(b), c_(c)
70 {
71 }

Member Function Documentation

◆ a()

LinearCombination gadgetlib2::Rank1Constraint::a ( ) const

Definition at line 73 of file constraint.cpp.

73 { return a_; }

◆ annotation()

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

Implements gadgetlib2::Constraint.

Definition at line 110 of file constraint.cpp.

111 {
112 #ifndef DEBUG
113  return "";
114 #endif
115  return string("( ") + a_.asString() + " ) * ( " + b_.asString() +
116  " ) = " + c_.asString();
117 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ asPolynomial()

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

Implements gadgetlib2::Constraint.

Definition at line 105 of file constraint.hpp.

105 { return a_ * b_ - c_; }

◆ b()

LinearCombination gadgetlib2::Rank1Constraint::b ( ) const

Definition at line 74 of file constraint.cpp.

74 { return b_; }

◆ c()

LinearCombination gadgetlib2::Rank1Constraint::c ( ) const

Definition at line 75 of file constraint.cpp.

75 { return c_; }

◆ getUsedVariables()

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

Implements gadgetlib2::Constraint.

Definition at line 119 of file constraint.cpp.

120 {
121  Variable::set retSet;
122  const Variable::set aSet = a_.getUsedVariables();
123  retSet.insert(aSet.begin(), aSet.end());
124  const Variable::set bSet = b_.getUsedVariables();
125  retSet.insert(bSet.begin(), bSet.end());
126  const Variable::set cSet = c_.getUsedVariables();
127  retSet.insert(cSet.begin(), cSet.end());
128  return retSet;
129 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ isSatisfied()

bool gadgetlib2::Rank1Constraint::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 77 of file constraint.cpp.

79 {
80  const FElem ares = a_.eval(assignment);
81  const FElem bres = b_.eval(assignment);
82  const FElem cres = c_.eval(assignment);
83  if (ares * bres != cres) {
84 #ifdef DEBUG
85  if (printOnFail == PrintOptions::DBG_PRINT_IF_NOT_SATISFIED) {
86  cerr << GADGETLIB2_FMT(
87  "Constraint named \"%s\" not satisfied. Constraint is:",
88  name().c_str())
89  << endl;
90  cerr << annotation() << endl;
91  cerr << "Variable assignments are:" << endl;
92  const Variable::set varSet = getUsedVariables();
93  for (const Variable &var : varSet) {
94  cerr << var.name() << ": " << assignment.at(var).asString()
95  << endl;
96  }
97  cerr << "a: " << ares.asString() << endl;
98  cerr << "b: " << bres.asString() << endl;
99  cerr << "a*b: " << (ares * bres).asString() << endl;
100  cerr << "c: " << cres.asString() << endl;
101  }
102 #else
103  libff::UNUSED(printOnFail);
104 #endif
105  return false;
106  }
107  return true;
108 }
Here is the call graph for this function:

The documentation for this class was generated from the following files:
gadgetlib2::Constraint::name
::std::string name() const
Definition: constraint.cpp:43
gadgetlib2::Constraint::Constraint
Constraint(const ::std::string &name)
Definition: constraint.cpp:40
gadgetlib2::LinearCombination::asString
::std::string asString() const
Definition: variable.cpp:581
gadgetlib2::LinearCombination::eval
FElem eval(const VariableAssignment &assignment) const
Definition: variable.cpp:572
gadgetlib2::Rank1Constraint::c
LinearCombination c() const
Definition: constraint.cpp:75
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::Rank1Constraint::annotation
virtual ::std::string annotation() const
Definition: constraint.cpp:110
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::Rank1Constraint::b
LinearCombination b() const
Definition: constraint.cpp:74
gadgetlib2::Rank1Constraint::getUsedVariables
virtual const Variable::set getUsedVariables() const
Definition: constraint.cpp:119
gadgetlib2::LinearCombination::getUsedVariables
const Variable::set getUsedVariables() const
Definition: variable.cpp:603
gadgetlib2::Rank1Constraint::a
LinearCombination a() const
Definition: constraint.cpp:73