7 std::vector<uint32_t>& public_inps,
8 std::vector<uint32_t>& real_variable_index,
9 std::vector<uint32_t>& real_variable_tags,
12 const std::string& tag,
13 bool enable_optimizations)
14 : variables(variables)
15 , variable_names(variable_names)
16 , real_variable_index(real_variable_index)
17 , real_variable_tags(real_variable_tags)
18 , enable_optimizations(enable_optimizations)
23 if (!this->tag.empty() &&
tag[0] !=
'_') {
24 this->tag =
"_" + this->
tag;
34 this->
symbolic_vars[this->real_variable_index[i]] == this->variables[i];
35 this->public_inps.insert(i);
48 for (uint32_t i = 0; i < num_vars; i++) {
73 throw std::invalid_argument(
"No such an item `" + name +
"` in vars or it vas not declared as interesting");
std::vector< uint32_t > real_variable_index
std::unordered_set< uint32_t > public_inps
std::unordered_map< uint32_t, bool > optimized
std::vector< bb::fr > variables
STerm operator[](const std::string &name)
Returns a previously named symbolic variable.
std::unordered_map< uint32_t, std::string > variable_names
CircuitBase(std::unordered_map< uint32_t, std::string > &variable_names, std::vector< bb::fr > &variables, std::vector< uint32_t > &public_inps, std::vector< uint32_t > &real_variable_index, std::vector< uint32_t > &real_variable_tags, Solver *solver, TermType type, const std::string &tag="", bool enable_optimizations=true)
std::unordered_map< std::string, uint32_t > variable_names_inverse
std::unordered_map< uint32_t, STerm > symbolic_vars
Symbolic term element class.
static STerm Var(const std::string &name, Solver *slv, TermType type=TermType::FFTerm)
TermType
Allows to define three types of symbolic terms STerm - Symbolic Variables acting like a Finte Field e...
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
static constexpr field zero()