11 static const size_t PUB = 0;
17 static const size_t NNF = 6;
21 static const size_t q_m = 0;
22 static const size_t q_1 = 1;
23 static const size_t q_2 = 2;
24 static const size_t q_3 = 3;
25 static const size_t q_4 = 4;
26 static const size_t q_c = 5;
37 static const size_t w_l = 0;
38 static const size_t w_r = 1;
39 static const size_t w_o = 2;
40 static const size_t w_4 = 3;
86 const std::string&
tag =
"",
118 void rom_table_read(uint32_t rom_array_idx, uint32_t index_idx, uint32_t value1_idx, uint32_t value2_idx);
119 void ram_table_read(uint32_t ram_array_idx, uint32_t index_idx, uint32_t value_idx);
120 void ram_table_write(uint32_t ram_array_idx, uint32_t ram_index_idx, uint32_t read_from_value_idx);
128 const std::vector<std::string>& equal = {},
129 const std::vector<std::string>& not_equal = {},
130 const std::vector<std::string>& equal_at_the_same_time = {},
131 const std::vector<std::string>& not_equal_at_the_same_time = {},
136 const std::vector<std::string>& equal = {},
Base class for symbolic circuits.
bool enable_optimizations
Symbolic Circuit class for Standard Circuit Builder.
std::unordered_map< uint32_t, SymSet< STuple > > cached_symbolic_tables
std::unordered_map< uint32_t, size_t > tables_sizes
void rom_table_read(uint32_t rom_array_idx, uint32_t index_idx, uint32_t value1_idx, uint32_t value2_idx)
Perform read from ROM table.
std::vector< std::vector< std::vector< uint32_t > > > ram_records
UltraCircuit & operator=(UltraCircuit &&other)=default
std::vector< std::vector< std::vector< bb::fr > > > lookup_tables
std::unordered_map< uint32_t, TableType > tables_types
std::vector< std::vector< std::array< uint32_t, 2 > > > rom_states
std::unordered_map< uint32_t, SymArray< STerm, STerm > > cached_ram_tables
UltraCircuit(const UltraCircuit &other)=default
static std::pair< UltraCircuit, UltraCircuit > unique_witness(CircuitSchema &circuit_info, Solver *s, TermType type, const std::vector< std::string > &equal={}, bool enable_optimizations=false)
Check your circuit for witness uniqueness.
size_t handle_lookup_relation(size_t cursor)
Adds all the lookup gate constraints to the solver. Relaxes constraint system for non-ff solver engin...
bool simulate_circuit_eval(std::vector< bb::fr > &witness) const override
Similar functionality to old .check_circuit() method in standard circuit builder.
size_t handle_elliptic_relation(size_t cursor)
Adds all the elliptic gate constraints to the solver.
size_t handle_nnf_relation(size_t cursor)
Adds all the nnf constraints to the solver.
void handle_ram_tables()
Adds all the RAM related constraints into the solver.
static std::pair< UltraCircuit, UltraCircuit > unique_witness_ext(CircuitSchema &circuit_info, Solver *s, TermType type, const std::vector< std::string > &equal={}, const std::vector< std::string > ¬_equal={}, const std::vector< std::string > &equal_at_the_same_time={}, const std::vector< std::string > ¬_equal_at_the_same_time={}, bool enable_optimizations=false)
Check your circuit for witness uniqueness.
~UltraCircuit() override=default
std::vector< std::vector< uint32_t > > ram_states
std::vector< std::vector< std::vector< uint32_t > > > rom_records
UltraCircuit & operator=(const UltraCircuit &other)=default
UltraCircuit(UltraCircuit &&other)=default
std::unordered_map< uint32_t, uint64_t > range_tags
void process_new_table(uint32_t table_idx)
void handle_rom_tables()
Adds all the ROM related constraints into the solver.
void ram_table_read(uint32_t ram_array_idx, uint32_t index_idx, uint32_t value_idx)
Perform read from RAM table.
void ram_table_write(uint32_t ram_array_idx, uint32_t ram_index_idx, uint32_t read_from_value_idx)
Perform write to RAM table.
void handle_range_constraints()
Adds all the range constraints to the solver.
size_t get_num_gates() const
Get the num gates object.
size_t handle_arithmetic_relation(size_t cursor)
Adds all the arithmetic gate constraints to the solver. Relaxes constraint system for non-ff solver e...
std::unordered_map< uint32_t, SymArray< STerm, STuple > > cached_rom_tables
size_t handle_delta_range_relation(size_t cursor)
Adds all the delta_range gate constraints to the solver.
std::vector< std::vector< std::vector< bb::fr > > > selectors
std::unordered_map< uint64_t, SymSet< STerm > > cached_range_tables
std::vector< std::vector< std::vector< uint32_t > > > wires_idxs
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
static const size_t ARITHMETIC
static const size_t DELTA_RANGE
static const size_t LOOKUP
static const size_t ELLIPTIC
static const size_t MEMORY
static const size_t q_elliptic
static const size_t q_lookup
static const size_t q_nnf
static const size_t q_memory
static const size_t curve_b
static const size_t q_arith
static const size_t q_delta_range
static const size_t w_4_shift
static const size_t w_l_shift
static const size_t w_o_shift
static const size_t w_r_shift
Serialized state of a circuit.