Clearmatics Libsnark
0.1
C++ library for zkSNARK proofs
|
Go to the documentation of this file.
10 #ifndef LIBSNARK_GADGETLIB2_INCLUDE_GADGETLIB2_VARIABLE_HPP_
11 #define LIBSNARK_GADGETLIB2_INCLUDE_GADGETLIB2_VARIABLE_HPP_
20 #include <unordered_set>
27 class GadgetLibAdapter;
61 virtual ::std::string
asString()
const = 0;
71 virtual bool operator==(
const long n)
const = 0;
75 virtual long asLong()
const = 0;
76 virtual int getBit(
unsigned int i)
const = 0;
83 return second == first;
87 return !(first == second);
91 return !(first == second);
96 return !(first == second);
116 FElem(
const size_t n);
127 ::std::string
asString()
const {
return elem_->asString(); }
136 retval -=
FElem(*elem_);
140 long asLong()
const {
return elem_->asLong(); }
145 ::std::ostream &os,
const FElem &elem)
147 return os << elem.elem_->asString();
155 return !(first == second);
163 return first ==
FElem(second);
167 return second == first;
171 return !(first == second);
175 return !(first == second);
193 explicit FConst(
const long n) : contents_(n) {}
204 contents_ = src.contents_;
217 return other == *
this;
221 return contents_ == other.contents_;
223 virtual bool operator==(
const long n)
const {
return contents_ == n; }
232 long asLong()
const {
return contents_; }
285 int getBit(
unsigned int i)
const {
return elem_.as_bigint().test_bit(i); }
324 ::std::string
name()
const;
332 return first.index_ < second.index_;
336 typedef ::std::map<Variable, FElem, Variable::VariableStrictOrder>
341 typedef ::std::set<Variable, VariableStrictOrder>
set;
342 typedef ::std::multiset<Variable, VariableStrictOrder>
multiset;
347 typedef ::std::map<Variable, FElem, Variable::VariableStrictOrder>
368 using VariableArrayContents::operator[];
369 using VariableArrayContents::at;
370 using VariableArrayContents::push_back;
371 using VariableArrayContents::size;
373 ::std::string
name()
const;
409 size_t getMultipackedSize()
const;
414 const size_t numBits,
416 const ::std::string &
name);
417 void resize(
const size_t numBits);
437 const ::std::string &name);
445 size_t numBits()
const {
return unpacked_.size(); }
446 void resize(
size_t newSize);
483 : variable_(v), coeff_(coeff)
538 LinearCombination
sum(
const VariableArray &inputs);
540 LinearCombination
negate(
const LinearCombination &lc);
555 variables_.insert(var);
558 : coeff_(coeff), variables_()
560 variables_.insert(var);
577 ::std::vector<Monomial> monomials_;
591 : monomials_(1,
Monomial(linearTerm)), constant_(0)
619 #endif // LIBSNARK_GADGETLIB2_INCLUDE_GADGETLIB2_VARIABLE_HPP_
FElem eval(const VariableAssignment &assignment) const
Holds both representations of a word, both multipacked and unpacked.
virtual FElemInterfacePtr inverse() const =0
virtual FConst & operator-=(const FElemInterface &other)
LinearCombination & operator+=(const LinearCombination &other)
::std::string asString() const
LinearTerm & operator*=(const FElem &other)
const Variable::set getUsedVariables() const
virtual int getBit(unsigned int i) const =0
FElem eval(const VariableAssignment &assignment) const
virtual FConst & operator=(const FConst &src)
virtual FElemInterface & power(long exponent)=0
::std::vector< Variable > VariableArrayContents
MultiPackedWord(const FieldType &fieldType=AGNOSTIC)
virtual ::std::string asString() const
virtual FConst & operator+=(const FElemInterface &other)
const FElem getConstant() const
LinearTerm(const Variable &v)
virtual ::std::string asString() const =0
LinearCombination(const Variable &var)
LinearTerm operator-() const
Polynomial & operator+=(const LinearTerm &other)
::std::string GADGETLIB2_FMT(const char *format,...)
virtual bool operator==(const long n) const
FElem & operator-=(const FElem &other)
virtual FElemInterface & power(long exponent)
LinearCombination & operator-=(const LinearCombination &other)
void promoteToFieldType(FieldType type)
PackedWordArray packed() const
Variable(const ::std::string &name="")
allocates the variable
VariableArray(const size_t size, const Variable &contents)
virtual R1P_Elem & operator=(const long n)
::std::string name() const
friend ::std::ostream & operator<<(::std::ostream &os, const FElem &elem)
Polynomial(const LinearTerm &linearTerm)
FElem eval(const VariableAssignment &assignment) const
::std::vector< MultiPackedWord > MultiPackedWordArray
virtual FieldType fieldType() const
DualWord(const FieldType &fieldType)
Polynomial & operator-=(const Polynomial &other)
Monomial & operator*=(const Monomial &other)
LinearCombination negate(const LinearCombination &lc)
virtual FElemInterface & operator=(const long n)=0
LinearCombination operator-(const LinearCombination &lc)
UnpackedWord(const size_t numBits, const ::std::string &name)
::std::vector< LinearTerm >::size_type size_type
LinearCombination(long i)
virtual FElemInterface & operator+=(const FElemInterface &other)=0
MultiPackedWordArray multipacked() const
::std::map< Variable, FElem, Variable::VariableStrictOrder > VariableAssignment
virtual R1P_Elem & operator-=(const FElemInterface &other)
Monomial(const Variable &var)
virtual FConst & operator=(const long n)
::std::shared_ptr< VariableArray > VariableArrayPtr
Polynomial & operator+=(const Polynomial &other)
virtual FElemInterfacePtr inverse() const
LinearCombination & operator*=(const FElem &other)
virtual long asLong() const =0
::std::map< Variable, FElem, Variable::VariableStrictOrder > VariableAssignment
LinearCombination(const FElem &elem)
virtual bool operator==(const FElemInterface &other) const
DualWord at(size_t i) const
friend FElem power(const FElem &base, long exponent)
const FElem getCoefficient() const
virtual FElemInterface & operator-=(const FElemInterface &other)=0
#define GADGETLIB_FATAL(msg)
Monomial operator-() const
VariableArray PackedWordArray
::std::vector< UnpackedWord > UnpackedWordArray
FElem eval(const VariableAssignment &assignment) const
LinearCombination(const LinearTerm &linTerm)
void resize(const size_t numBits)
void resize(size_t newSize)
LinearTerm(const Variable &v, const FElem &coeff)
virtual FElemInterfacePtr clone() const =0
virtual ~FElemInterface()
::std::set< Variable, VariableStrictOrder > set
A set of Variables should be declared as follows: Variable::set s1;.
Monomial(const Variable &var, const FElem &coeff)
bool operator==(const FElem &other) const
const Variable::set getUsedVariables() const
Polynomial(const Monomial &monomial)
virtual FElemInterface & power(long exponent)
Polynomial(const FElem &val)
FElem & operator=(const long i)
LinearTerm(const Variable &v, long n)
DualWordArray(const FieldType &fieldType)
virtual bool operator==(const FConst &other) const
bool operator!=(const long first, const FElemInterface &second)
virtual FieldType fieldType() const =0
virtual FieldType fieldType() const
FConst(const FConst &src)
int getBit(unsigned int i) const
virtual bool operator==(const long n) const
virtual bool operator==(const FConst &other) const
::std::unique_ptr< FElemInterface > FElemInterfacePtr
FieldType fieldType() const
virtual bool operator==(const FElemInterface &other) const
FElem & operator+=(const FElem &other)
Variable variable() const
virtual FElemInterfacePtr inverse() const
Monomial(const FElem &val)
::std::string name() const
virtual R1P_Elem & operator=(const FConst &src)
virtual bool operator==(const FElemInterface &other) const =0
MultiPackedWord multipacked() const
A formal variable, field agnostic.
virtual FElemInterface & operator*=(const FElemInterface &other)=0
FElem inverse(const FieldType &fieldType)
::std::string name() const
UnpackedWord unpacked() const
virtual R1P_Elem & operator*=(const FElemInterface &other)
::std::multiset< Variable, VariableStrictOrder > multiset
Polynomial(const Variable &var)
int getBit(unsigned int i) const
virtual FElemInterfacePtr clone() const
LinearCombination sum(const VariableArray &inputs)
::std::string asString() const
bool operator==(const GLA::linear_combination_t &lhs, const GLA::linear_term_t &rhs)
::std::vector< LinearTerm > linearTerms_
virtual R1P_Elem & operator+=(const FElemInterface &other)
virtual FElemInterfacePtr clone() const
const std::vector< Monomial > & getMonomials() const
FlagVariable bit(size_t i) const
const Variable::set getUsedVariables() const
VariableArray(const ::std::string &name="")
int getBit(unsigned int i, const FieldType &fieldType)
::std::shared_ptr< Protoboard > ProtoboardPtr
::std::shared_ptr< Variable > VariablePtr
FElem & operator*=(const FElem &other)
::std::string asString() const
FElem eval(const VariableAssignment &assignment) const
::std::string asString() const
bool operator()(const Variable &first, const Variable &second) const
FElem & operator=(const FElem &other)
void push_back(const DualWord &dualWord)
virtual ::std::string asString() const
virtual FConst & operator*=(const FElemInterface &other)
VariableArray FlagVariableArray
UnpackedWordArray unpacked() const
::std::string asString() const
Polynomial & operator*=(const Polynomial &other)
FieldType fieldtype() const
libff::Fr< libff::default_ec_pp > Fp