2#include "barretenberg/smt_verification/solver/solver.hpp"
5using namespace smt_solver;
22 , term(cvc5::Term()){};
24 explicit FFTerm(
const std::string& t,
Solver* slv,
bool isconst =
false, uint32_t base = 16);
38 void operator+=(
const FFTerm& other);
40 void operator-=(
const FFTerm& other);
42 void operator*=(
const FFTerm& other);
44 void operator/=(
const FFTerm& other);
49 operator std::string()
const {
return term.isFiniteFieldValue() ? term.getFiniteFieldValue() : term.toString(); };
50 operator cvc5::Term()
const {
return term; };
53 friend std::ostream& operator<<(std::ostream& out,
const FFTerm& k) {
return out << k.term; }
55 friend FFTerm batch_add(
const std::vector<FFTerm>& children)
57 Solver* slv = children[0].solver;
58 std::vector<cvc5::Term> terms(children.begin(), children.end());
59 cvc5::Term res = slv->s.mkTerm(cvc5::Kind::FINITE_FIELD_ADD, terms);
63 friend FFTerm batch_mul(
const std::vector<FFTerm>& children)
65 Solver* slv = children[0].solver;
66 std::vector<cvc5::Term> terms(children.begin(), children.end());
67 cvc5::Term res = slv->s.mkTerm(cvc5::Kind::FINITE_FIELD_MULT, terms);
Class for the solver.
Definition: solver.hpp:28
Finite Field element class.
Definition: ffterm.hpp:15
void operator!=(const FFTerm &other) const
Definition: ffterm.cpp:131
static FFTerm Var(const std::string &name, Solver *slv)
Definition: ffterm.cpp:12
FFTerm operator/(const FFTerm &other) const
Division operation.
Definition: ffterm.cpp:85
void operator==(const FFTerm &other) const
Definition: ffterm.cpp:121
static FFTerm Const(const std::string &val, Solver *slv, uint32_t base=16)
Definition: ffterm.cpp:25