1#ifndef _ESBMC_SOLVERS_BITWUZLA_BITWUZLA_CONV_H_
2#define _ESBMC_SOLVERS_BITWUZLA_BITWUZLA_CONV_H_
12#include <bitwuzla/cpp/bitwuzla.h>
21 void dump()
const override;
141 const std::string &name,
142 const std::vector<smt_astt> &args,
145 const std::string &name,
169 std::vector<smt_astt> lhs,
174 bitwuzla::TermManager
tm;
176 std::unique_ptr<bitwuzla::Bitwuzla>
bitw;
183 std::unordered_map<std::string, bitwuzla::Term>
uf_decls;
190 typedef std::tuple<smt_sort_kind, uint64_t, uint64_t> sort_keyt;
196 std::map<sort_keyt, smt_sortt> bitw_sorts;
198 template <
typename buildt>
199 smt_sortt cached_sort(
const sort_keyt &
key, buildt build)
201 auto it = bitw_sorts.find(
key);
202 if (it == bitw_sorts.end())
203 it = bitw_sorts.emplace(
key, build()).first;
216 unsigned to_bv_counter = 0;
array_iface(bool _b, bool inf)
Definition smt_array.h:14
Definition bitwuzla_conv.h:15
~bitw_smt_ast() override=default
smt_astt with_sort(smt_solver_baset *ctx, smt_sortt s) const override
The same solver term under a different sort.
Definition bitwuzla_conv.cpp:10
void dump() const override
Definition bitwuzla_conv.cpp:824
smt_astt mk_smt_bv(const BigInt &theint, smt_sortt s) override
Create a bitvector.
Definition bitwuzla_conv.cpp:531
smt_astt mk_bvnot(smt_astt a) override
Definition bitwuzla_conv.cpp:267
smt_astt mk_smt_typecast_sbv_to_fpbv(smt_astt from, smt_sortt to, smt_astt rm) override
Typecast to a floating point.
Definition bitwuzla_conv.cpp:1253
smt_astt mk_smt_fpbv_lte(smt_astt lhs, smt_astt rhs) override
Convert an ieee less than or equal.
Definition bitwuzla_conv.cpp:1139
smt_astt mk_bvlshr(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:246
void push_ctx() override
Push one context on the SMT assertion stack.
Definition bitwuzla_conv.cpp:71
void print_model() override
Method to print the SMT model.
Definition bitwuzla_conv.cpp:829
smt_astt overflow_arith(const expr2tc &expr) override
Detect integer arithmetic overflows.
Definition bitwuzla_conv.cpp:744
std::unique_ptr< bitwuzla::Bitwuzla > bitw
Definition bitwuzla_conv.h:176
smt_astt mk_smt_uninterpreted_function(const std::string &name, const std::vector< smt_astt > &args, smt_sortt rangesort) override
Apply an uninterpreted function.
Definition bitwuzla_conv.cpp:590
smt_astt convert_array_of(smt_astt init_val, unsigned long domain_width) override
Create an array with a single initializer.
Definition bitwuzla_conv.cpp:805
smt_astt mk_smt_fpbv_add(smt_astt lhs, smt_astt rhs, smt_astt rm) override
Convert a ieee addition.
Definition bitwuzla_conv.cpp:1035
smt_astt mk_smt_fpbv_lt(smt_astt lhs, smt_astt rhs) override
Convert an ieee less than.
Definition bitwuzla_conv.cpp:1129
expr2tc get_array_elem(smt_astt array, uint64_t index, const type2tc &subtype) override
Extract an element from the model of an array, at an explicit index.
Definition bitwuzla_conv.cpp:721
smt_astt mk_smt_bool(bool val) override
Create a boolean.
Definition bitwuzla_conv.cpp:541
smt_astt mk_xor(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:325
smt_sortt mk_fpbv_sort(const unsigned ew, const unsigned sw) override
Create a sort representing a floating-point number.
Definition bitwuzla_conv.cpp:946
smt_astt mk_smt_fpbv_is_nan(smt_astt op) override
Convert an ieee is_nan operation.
Definition bitwuzla_conv.cpp:1150
smt_astt mk_smt_real(const std::string &str) override
Create a real in a smt_ast.
Definition bitwuzla_conv.cpp:525
smt_astt mk_bvshl(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:220
smt_sortt mk_bv_sort(std::size_t width) override
Create a bv sort.
Definition bitwuzla_conv.cpp:891
smt_astt mk_smt_fpbv_gt(smt_astt lhs, smt_astt rhs) override
Convert an ieee greater than.
Definition bitwuzla_conv.cpp:1124
const std::string solver_text() override
Solver name fetcher.
Definition bitwuzla_conv.cpp:117
smt_astt mk_smt_fpbv_is_positive(smt_astt op) override
Convert an ieee is_pos operation.
Definition bitwuzla_conv.cpp:1175
bitwuzla::Options bitw_options
Definition bitwuzla_conv.h:175
smt_astt mk_smt_fpbv_div(smt_astt lhs, smt_astt rhs, smt_astt rm) override
Convert the ieee division.
Definition bitwuzla_conv.cpp:1053
std::string dump_smt() override
Method to dump the SMT formula.
Definition bitwuzla_conv.cpp:817
smt_astt mk_bvadd(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:129
smt_astt mk_and(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:347
smt_sortt mk_fbv_sort(std::size_t width) override
Create a fixed-point sort.
Definition bitwuzla_conv.cpp:899
smt_astt mk_smt_typecast_ubv_to_fpbv(smt_astt from, smt_sortt to, smt_astt rm) override
Typecast to a floating point.
Definition bitwuzla_conv.cpp:1239
smt_astt mk_smt_typecast_from_fpbv_to_sbv(smt_astt from, std::size_t width) override
Typecast from a floating point.
Definition bitwuzla_conv.cpp:1211
smt_astt mk_smt_fpbv_rm(ieee_floatt::rounding_modet rm) override
Create a rounding mode to be used by floating point cast and arith ops.
Definition bitwuzla_conv.cpp:991
smt_astt mk_extract(smt_astt a, unsigned int high, unsigned int low) override
Create an 'extract' func app.
Definition bitwuzla_conv.cpp:631
smt_astt mk_eq(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:470
smt_astt mk_bvult(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:366
smt_astt mk_bvugt(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:392
smt_astt mk_bvumod(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:181
smt_resultt dec_solve_assuming(const ast_vec &assumptions) override
Solve with each boolean ast in assumptions held true for this query only.
Definition bitwuzla_conv.cpp:101
smt_astt mk_bvsmod(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:168
bool supports_assumptions() const override
Definition bitwuzla_conv.h:36
smt_astt mk_bvxor(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:275
smt_astt mk_smt_nearbyint_from_float(smt_astt from, smt_astt rm) override
Calculate the nearby int from a floating point, considering the rounding mode.
Definition bitwuzla_conv.cpp:1098
smt_astt mk_bvuge(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:444
smt_astt mk_ite(smt_astt cond, smt_astt t, smt_astt f) override
Create an ite operation.
Definition bitwuzla_conv.cpp:671
smt_astt mk_smt_symbol(const std::string &name, const smt_sort *s) override
Definition bitwuzla_conv.cpp:557
smt_astt mk_smt_fpbv_rem(smt_astt lhs, smt_astt rhs) override
Convert the ieee remainder (SMT-LIB fp.rem, C's remainder()).
Definition bitwuzla_conv.cpp:1058
smt_astt mk_concat(smt_astt a, smt_astt b) override
Concatenate two smt expressions.
Definition bitwuzla_conv.cpp:658
void assert_ast(smt_astt a) override
Assert the truth of an ast.
Definition bitwuzla_conv.cpp:124
smt_astt mk_bvsub(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:142
symtabt symtable
Definition bitwuzla_conv.h:178
smt_astt mk_array_symbol(const std::string &name, const smt_sort *s, smt_sortt array_subtype) override
Definition bitwuzla_conv.cpp:548
smt_astt mk_bvule(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:418
smt_astt mk_smt_fpbv_inf(bool sgn, unsigned ew, unsigned sw) override
Create a (+/-)inf floating point bitvector.
Definition bitwuzla_conv.cpp:984
smt_astt mk_smt_int(const BigInt &theint) override
Create an integer smt_ast.
Definition bitwuzla_conv.cpp:519
~bitwuzla_convt() override
smt_astt mk_bvmul(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:155
smt_astt mk_from_bv_to_fp(smt_astt op, smt_sortt to) override
Convert BV to FP.
Definition bitwuzla_conv.cpp:1267
smt_astt mk_smt_fpbv_gte(smt_astt lhs, smt_astt rhs) override
Convert an ieee greater than or equal.
Definition bitwuzla_conv.cpp:1134
bitwuzla_convt(const namespacet &ns, const optionst &options)
Definition bitwuzla_conv.cpp:52
smt_astt mk_bvsdiv(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:194
smt_astt mk_smt_fpbv_mul(smt_astt lhs, smt_astt rhs, smt_astt rm) override
Convert a ieee multiplication.
Definition bitwuzla_conv.cpp:1047
smt_astt mk_smt_fpbv_fma(smt_astt v1, smt_astt v2, smt_astt v3, smt_astt rm) override
Convert the ieee arithmetic fused-multiply add (fma): round((v1 * v2) + v3).
Definition bitwuzla_conv.cpp:1072
smt_astt mk_bvsge(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:457
smt_astt mk_smt_fpbv_nan(bool sgn, unsigned ew, unsigned sw) override
Create a NaN floating point bitvector.
Definition bitwuzla_conv.cpp:975
smt_astt mk_neq(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:481
smt_astt mk_bvsgt(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:405
ieee_floatt get_fpbv(smt_astt a) override
Extract the assignment to a floating-point from the SMT solvers model.
Definition bitwuzla_conv.cpp:1298
smt_astt mk_bvand(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:301
void pop_ctx() override
Pop one context on the SMT assertion stack.
Definition bitwuzla_conv.cpp:77
smt_astt mk_sign_ext(smt_astt a, unsigned int topwidth) override
Given a signed, upwards cast, extends the sign of the given AST to the desired length.
Definition bitwuzla_conv.cpp:640
smt_astt mk_smt_fpbv(const ieee_floatt &thereal) override
Create a floating point bitvector.
Definition bitwuzla_conv.cpp:967
smt_astt mk_select(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:507
smt_resultt dec_solve() override
Solve the formula given to the solver.
Definition bitwuzla_conv.cpp:86
smt_astt mk_bvashr(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:233
tvt get_bool(smt_astt a) override
Extract the assignment to a boolean variable from the SMT solver's model.
Definition bitwuzla_conv.cpp:695
smt_sortt mk_fpbv_rm_sort() override
Create a sort representing a floating-point rounding mode.
Definition bitwuzla_conv.cpp:959
smt_sortt mk_bvfp_rm_sort() override
Create a floating-point rounding mode sort, using bitvectors.
Definition bitwuzla_conv.cpp:938
smt_astt mk_quantifier(bool is_forall, std::vector< smt_astt > lhs, smt_astt rhs) override
Definition bitwuzla_conv.cpp:1315
BigInt get_bv(smt_astt a, bool is_signed) override
Extract the assignment to a bitvector from the SMT solver's model.
Definition bitwuzla_conv.cpp:712
smt_astt mk_smt_fpbv_abs(smt_astt op) override
Convert an ieee abs operation.
Definition bitwuzla_conv.cpp:1180
smt_astt mk_bvslt(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:379
smt_astt mk_smt_fpbv_neg(smt_astt op) override
Convert an ieee negation operation.
Definition bitwuzla_conv.cpp:1188
smt_sortt mk_bvfp_sort(std::size_t width, std::size_t swidth) override
Create a floating-point sort, using bitvectors.
Definition bitwuzla_conv.cpp:930
smt_astt mk_smt_fpbv_eq(smt_astt lhs, smt_astt rhs) override
Convert an ieee equality.
Definition bitwuzla_conv.cpp:1119
smt_sortt mk_array_sort(smt_sortt domain, smt_sortt range) override
Create an array sort.
Definition bitwuzla_conv.cpp:907
smt_astt mk_bvneg(smt_astt a) override
Definition bitwuzla_conv.cpp:259
smt_astt mk_bvudiv(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:207
smt_astt mk_smt_typecast_from_fpbv_to_ubv(smt_astt from, std::size_t width) override
Typecast from a floating point.
Definition bitwuzla_conv.cpp:1196
smt_sortt mk_bool_sort() override
Create a bool sort.
Definition bitwuzla_conv.cpp:883
smt_astt mk_store(smt_astt a, smt_astt b, smt_astt c) override
Definition bitwuzla_conv.cpp:492
smt_astt mk_smt_typecast_from_fpbv_to_fpbv(smt_astt from, smt_sortt to, smt_astt rm) override
Typecast from a floating point.
Definition bitwuzla_conv.cpp:1225
smt_astt mk_smt_fpbv_is_inf(smt_astt op) override
Convert an ieee is_inf operation.
Definition bitwuzla_conv.cpp:1155
smt_astt mk_bvor(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:288
smt_astt mk_from_fp_to_bv(smt_astt op) override
Convert FP to BV.
Definition bitwuzla_conv.cpp:1277
smt_astt mk_smt_fpbv_sub(smt_astt lhs, smt_astt rhs, smt_astt rm) override
Convert a ieee subtraction.
Definition bitwuzla_conv.cpp:1041
smt_astt mk_zero_ext(smt_astt a, unsigned int topwidth) override
Identical to mk_sign_ext, but extends AST with zeros.
Definition bitwuzla_conv.cpp:649
smt_astt mk_smt_fpbv_sqrt(smt_astt rd, smt_astt rm) override
Convert the ieee arithmetic square-root (sqrt).
Definition bitwuzla_conv.cpp:1088
bitwuzla::TermManager tm
Definition bitwuzla_conv.h:174
smt_astt mk_smt_fpbv_is_negative(smt_astt op) override
Convert an ieee is_neg operation.
Definition bitwuzla_conv.cpp:1170
smt_astt mk_not(smt_astt a) override
Definition bitwuzla_conv.cpp:358
smt_astt mk_smt_fpbv_is_zero(smt_astt op) override
Convert an ieee is_zero operation.
Definition bitwuzla_conv.cpp:1165
smt_astt mk_or(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:336
smt_astt mk_smt_fpbv_is_normal(smt_astt op) override
Convert an ieee is_normal operation.
Definition bitwuzla_conv.cpp:1160
std::unordered_map< std::string, bitwuzla::Term > uf_decls
Uninterpreted-function declarations, keyed by name.
Definition bitwuzla_conv.h:183
smt_astt mk_bvsle(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:431
smt_astt mk_implies(smt_astt a, smt_astt b) override
Definition bitwuzla_conv.cpp:314
fp_convt(smt_solver_baset *_ctx)
Definition fp_conv.cpp:26
Definition ieee_float.h:75
rounding_modet
Definition ieee_float.h:78
Definition namespace.h:10
The base SMT-conversion class/interface.
Definition smt_solver.h:170
smt_solver_baset(const namespacet &_ns, const optionst &_options)
Primary constructor.
Definition smt_solver.cpp:78
const optionst & options
Definition smt_solver.h:1130
const namespacet & ns
A namespace containing all the types in the program.
Definition smt_solver.h:1128
std::vector< smt_astt > ast_vec
Shorthand for a vector of smt_ast's.
Definition smt_solver.h:173
solver_smt_ast(smt_solver_baset *ctx, bitwuzla::Term _a, smt_sortt s)
Definition smt_ast.h:103
pthread_cond_t cond
Definition cuda.h:50
Classes and definitions for non-stringy internal representation.
irep_container< type2t > type2tc
Definition irep2.h:430
irep_container< expr2t > expr2tc
Definition irep2.h:431
const smt_ast * smt_astt
Definition smt_ast.h:30
smt_resultt
Result of a call to dec_solve.
Definition smt_result.h:7
boost::multi_index_container< symtab_entryt, boost::multi_index::indexed_by< boost::multi_index::hashed_unique< BOOST_MULTI_INDEX_MEMBER(symtab_entryt, std::string, val)>, boost::multi_index::ordered_non_unique< BOOST_MULTI_INDEX_MEMBER(symtab_entryt, unsigned int, level), std::greater< unsigned int > > > > symtabt
Definition smt_solver.h:1299
const smt_sort * smt_sortt
Definition smt_sort.h:37
uint256_t key
Definition solidity_mapping.c:1