1#ifndef _ESBMC_SOLVERS_SMTLIB_SMTLIB_CONV_H
2#define _ESBMC_SOLVERS_SMTLIB_SMTLIB_CONV_H
135static_assert(
std::is_nothrow_move_constructible_v<
sexpr>);
136static_assert(
std::is_nothrow_move_assignable_v<
sexpr>);
168 void dump()
const override;
194 const std::string &solver_prog,
195 const std::string &output_path,
196 const std::string &logic =
"");
272 const std::string &name,
273 const std::vector<smt_astt> &args,
276 const std::string &name,
304 std::string sort_to_string(
const smt_sort *s)
const;
307 emit_terminal_ast(
const smtlib_smt_ast *a, std::string &output)
const;
309 unsigned int emit_ast(
312 std::unordered_map<const smtlib_smt_ast *, std::string> &temp_symbols)
317 void push_ctx()
override;
318 void pop_ctx()
override;
320 std::string dump_smt()
override;
322 template <
typename... Ts>
323 void emit(
const Ts &...)
const;
347 template <typename... Ts>
356 explicit operator
bool() const noexcept;
370 template <typename... Ts>
374 explicit operator
bool() const noexcept;
387 typedef boost::multi_index_container<
389 boost::multi_index::indexed_by<
390 boost::multi_index::hashed_unique<
392 boost::multi_index::ordered_non_unique<
394 std::greater<unsigned int>>>>
413 using std::runtime_error::runtime_error;
array_iface(bool _b, bool inf)
Definition smt_array.h:14
fp_convt(smt_solver_baset *_ctx)
Definition fp_conv.cpp:26
Definition namespace.h:10
smt_ast(smt_solver_baset *ctx, smt_sortt s)
Definition smt_solver.h:1270
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
smt_sort(smt_sort_kind i)
Definition smt_sort.h:47
size_t get_data_width() const
Definition smt_sort.h:95
smt_astt mk_bvslt(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1431
smt_astt mk_bvsub(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1165
smt_astt mk_mod(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1198
const std::string solver_text() override
Solver name fetcher.
Definition smtlib_conv.cpp:908
smt_astt mk_smt_symbol(const std::string &name, const smt_sort *s) override
Definition smtlib_conv.cpp:980
smt_sortt mk_bvfp_sort(std::size_t ew, std::size_t sw) override
Create a floating-point sort, using bitvectors.
Definition smtlib_conv.cpp:1649
smt_sortt mk_fbv_sort(std::size_t width) override
Create a fixed-point sort.
Definition smtlib_conv.cpp:1637
smt_astt mk_bvadd(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1143
static const std::string temp_prefix
Definition smtlib_conv.h:406
smt_astt mk_bvsle(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1495
bool has_model() const override
get_value() reads from the interactive pipe, so without it the solver can still answer sat/unsat but ...
Definition smtlib_conv.h:293
smt_astt mk_store(smt_astt a, smt_astt b, smt_astt c) override
Definition smtlib_conv.cpp:1547
smt_astt mk_array_symbol(const std::string &name, const smt_sort *s, smt_sortt array_subtype) override
Definition smtlib_conv.cpp:972
smt_astt mk_extract(smt_astt a, unsigned int high, unsigned int low) override
Create an 'extract' func app.
Definition smtlib_conv.cpp:1046
smt_astt mk_neg(smt_astt a) override
Definition smtlib_conv.cpp:1308
smt_astt convert_array_of(smt_astt init_val, unsigned long domain_width) override
Create an array with a single initializer.
Definition smtlib_conv.cpp:1612
smt_astt mk_bvmul(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1187
smt_astt mk_bvumod(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1220
smt_astt mk_int2real(smt_astt a) override
Definition smtlib_conv.cpp:1579
smt_astt mk_concat(smt_astt a, smt_astt b) override
Concatenate two smt expressions.
Definition smtlib_conv.cpp:1084
smt_astt mk_bvnot(smt_astt a) override
Definition smtlib_conv.cpp:1324
smt_astt mk_bvsgt(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1463
smt_astt mk_eq(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1538
void emit(const Ts &...) const
smtlib_convt(const namespacet &_ns, const optionst &options)
Definition smtlib_conv.cpp:380
smt_astt mk_select(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1560
smt_sortt mk_bool_sort() override
Create a bool sort.
Definition smtlib_conv.cpp:1617
void emit_check_sat()
Definition smtlib_conv.cpp:659
smt_astt mk_add(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1132
smt_astt mk_xor(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1375
smt_astt mk_bvugt(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1452
smt_astt mk_le(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1474
smt_astt mk_bvashr(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1286
struct smtlib_convt::process_emitter emit_proc
smt_astt mk_div(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1231
smt_astt mk_real2int(smt_astt a) override
Definition smtlib_conv.cpp:1571
smt_astt mk_bvsdiv(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1242
smt_astt mk_smt_bv(const BigInt &theint, smt_sortt s) override
Create a bitvector.
Definition smtlib_conv.cpp:958
smt_sortt mk_bv_sort(std::size_t width) override
Create a bv sort.
Definition smtlib_conv.cpp:1632
smt_astt mk_smt_int(const BigInt &theint) override
Create an integer smt_ast.
Definition smtlib_conv.cpp:942
smt_astt mk_not(smt_astt a) override
Definition smtlib_conv.cpp:1402
smt_resultt dec_solve() override
Solve the formula given to the solver.
Definition smtlib_conv.cpp:667
boost::multi_index_container< symbol_table_rec, boost::multi_index::indexed_by< boost::multi_index::hashed_unique< BOOST_MULTI_INDEX_MEMBER(symbol_table_rec, std::string, ident)>, boost::multi_index::ordered_non_unique< BOOST_MULTI_INDEX_MEMBER(symbol_table_rec, unsigned int, level), std::greater< unsigned int > > > > symbol_tablet
Definition smtlib_conv.h:395
smt_astt mk_bvshl(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1275
smt_sortt mk_bvfp_rm_sort() override
Create a floating-point rounding mode sort, using bitvectors.
Definition smtlib_conv.cpp:1654
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 smtlib_conv.cpp:1056
smt_astt mk_bvule(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1484
std::unordered_map< std::string, unsigned int > declared_ufs
Uninterpreted functions already emitted via (declare-fun ...), mapped to the context level at which t...
Definition smtlib_conv.h:404
smt_astt mk_zero_ext(smt_astt a, unsigned int topwidth) override
Identical to mk_sign_ext, but extends AST with zeros.
Definition smtlib_conv.cpp:1077
smt_astt mk_mul(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1176
smt_astt mk_bvlshr(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1297
smt_astt mk_gt(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1442
smt_astt mk_bvxor(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1332
smt_astt mk_bvneg(smt_astt a) override
Definition smtlib_conv.cpp:1316
smt_astt mk_lt(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1410
symbol_tablet symbol_table
Definition smtlib_conv.h:397
smt_astt mk_and(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1393
smt_astt mk_ge(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1506
smt_sortt mk_int_sort() override
Create a int sort.
Definition smtlib_conv.cpp:1627
smt_astt mk_bvuge(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1516
smt_astt mk_bvsge(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1527
struct smtlib_convt::file_emitter emit_opt_output
smt_astt mk_ite(smt_astt cond, smt_astt t, smt_astt f) override
Create an ite operation.
Definition smtlib_conv.cpp:1100
smt_sortt mk_array_sort(smt_sortt domain, smt_sortt range) override
Create an array sort.
Definition smtlib_conv.cpp:1642
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 smtlib_conv.cpp:1005
smt_astt mk_shl(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1264
smt_astt mk_smt_bool(bool val) override
Create a boolean.
Definition smtlib_conv.cpp:965
smt_resultt read_check_sat_response()
Definition smtlib_conv.cpp:685
smt_sort * mk_struct_sort(const type2tc &type)
Definition smtlib_conv.cpp:1039
smt_astt mk_bvult(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1420
smt_sortt mk_real_sort() override
Create a real sort.
Definition smtlib_conv.cpp:1622
smt_astt mk_implies(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1365
smt_astt mk_isint(smt_astt a) override
Definition smtlib_conv.cpp:1587
smt_astt mk_bvudiv(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1253
void flush() const
Definition smtlib_conv.cpp:825
smt_astt mk_or(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1384
smt_astt mk_bvand(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1354
void assert_ast(smt_astt a) override
Assert the truth of an ast.
Definition smtlib_conv.cpp:929
smt_astt mk_bvor(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1343
smt_astt mk_smt_real(const std::string &str) override
Create a real in a smt_ast.
Definition smtlib_conv.cpp:950
smt_astt mk_bvsmod(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1209
smt_astt mk_sub(smt_astt a, smt_astt b) override
Definition smtlib_conv.cpp:1154
Definition smtlib_conv.h:160
int extract_low
Definition smtlib_conv.h:176
smt_func_kind kind
Definition smtlib_conv.h:170
std::string symname
Definition smtlib_conv.h:171
void dump() const override
Definition smtlib_conv.cpp:639
~smtlib_smt_ast() override=default
bool boolval
Definition smtlib_conv.h:174
int extract_high
Definition smtlib_conv.h:175
BigInt intval
Definition smtlib_conv.h:172
smtlib_smt_ast(smt_solver_baset *ctx, const smt_sort *s, smt_func_kind k)
Definition smtlib_conv.h:162
std::string realval
Definition smtlib_conv.h:173
std::vector< smt_astt > args
Definition smtlib_conv.h:177
const smtlib_smt_sort * domain
Definition smtlib_conv.h:155
smtlib_smt_sort(smt_sort_kind k, unsigned int w)
Definition smtlib_conv.h:141
smtlib_smt_sort(smt_sort_kind k, const smtlib_smt_sort *dom, const smtlib_smt_sort *rag)
Definition smtlib_conv.h:147
smtlib_smt_sort(smt_sort_kind k)
Definition smtlib_conv.h:144
smtlib_smt_sort(smt_sort_kind k, unsigned int w1, unsigned int w2)
Definition smtlib_conv.h:142
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
Definition exception.cpp:51
const smt_ast * smt_astt
Definition smt_ast.h:30
smt_resultt
Result of a call to dec_solve.
Definition smt_result.h:7
smt_sort_kind
Identifier for SMT sort kinds Each different kind of sort (i.e., arrays, bv's, bools,...
Definition smt_sort.h:11
const smt_sort * smt_sortt
Definition smt_sort.h:37
smt_func_kind
Identifiers for SMT functions.
Definition smtlib_conv.h:25
@ SMT_FUNC_IS_INT
Definition smtlib_conv.h:91
@ SMT_FUNC_IEEE_RM_MI
Definition smtlib_conv.h:113
@ SMT_FUNC_EXTRACT
Definition smtlib_conv.h:87
@ SMT_FUNC_REAL
Definition smtlib_conv.h:30
@ SMT_FUNC_BVMUL
Definition smtlib_conv.h:39
@ SMT_FUNC_XOR
Definition smtlib_conv.h:59
@ SMT_FUNC_EQ
Definition smtlib_conv.h:78
@ SMT_FUNC_BVSHL
Definition smtlib_conv.h:47
@ SMT_FUNC_CONCAT
Definition smtlib_conv.h:86
@ SMT_FUNC_NEG
Definition smtlib_conv.h:49
@ SMT_FUNC_FLOAT2BV
Definition smtlib_conv.h:116
@ SMT_FUNC_BVSLT
Definition smtlib_conv.h:66
@ SMT_FUNC_BVNEG
Definition smtlib_conv.h:50
@ SMT_FUNC_BVNOT
Definition smtlib_conv.h:52
@ SMT_FUNC_NOTEQ
Definition smtlib_conv.h:79
@ SMT_FUNC_BVSLTE
Definition smtlib_conv.h:72
@ SMT_FUNC_SYMBOL
Definition smtlib_conv.h:31
@ SMT_FUNC_IEEE_RM_ZR
Definition smtlib_conv.h:111
@ SMT_FUNC_GT
Definition smtlib_conv.h:68
@ SMT_FUNC_BVUGT
Definition smtlib_conv.h:70
@ SMT_FUNC_IEEE_RM_NE
Definition smtlib_conv.h:110
@ SMT_FUNC_BVULTE
Definition smtlib_conv.h:73
@ SMT_FUNC_SELECT
Definition smtlib_conv.h:84
@ SMT_FUNC_IEEE_SQRT
Definition smtlib_conv.h:108
@ SMT_FUNC_LT
Definition smtlib_conv.h:65
@ SMT_FUNC_ISINF
Definition smtlib_conv.h:98
@ SMT_FUNC_BVSUB
Definition smtlib_conv.h:37
@ SMT_FUNC_IEEE_EQ
Definition smtlib_conv.h:102
@ SMT_FUNC_IEEE_RM_PI
Definition smtlib_conv.h:112
@ SMT_FUNC_ISNORMAL
Definition smtlib_conv.h:99
@ SMT_FUNC_DIV
Definition smtlib_conv.h:40
@ SMT_FUNC_BVULT
Definition smtlib_conv.h:67
@ SMT_FUNC_BVSGT
Definition smtlib_conv.h:69
@ SMT_FUNC_ITE
Definition smtlib_conv.h:81
@ SMT_FUNC_IEEE_FMA
Definition smtlib_conv.h:107
@ SMT_FUNC_FABS
Definition smtlib_conv.h:95
@ SMT_FUNC_BVXOR
Definition smtlib_conv.h:53
@ SMT_FUNC_IEEE_MUL
Definition smtlib_conv.h:105
@ SMT_FUNC_ADD
Definition smtlib_conv.h:34
@ SMT_FUNC_FNEG
Definition smtlib_conv.h:94
@ SMT_FUNC_ISZERO
Definition smtlib_conv.h:96
@ SMT_FUNC_MOD
Definition smtlib_conv.h:43
@ SMT_FUNC_BVSGTE
Definition smtlib_conv.h:75
@ SMT_FUNC_IEEE_SUB
Definition smtlib_conv.h:104
@ SMT_FUNC_BV2FLOAT
Definition smtlib_conv.h:115
@ SMT_FUNC_BVOR
Definition smtlib_conv.h:54
@ SMT_FUNC_BVSDIV
Definition smtlib_conv.h:42
@ SMT_FUNC_NOT
Definition smtlib_conv.h:62
@ SMT_FUNC_BVAND
Definition smtlib_conv.h:55
@ SMT_FUNC_OR
Definition smtlib_conv.h:60
@ SMT_FUNC_BVSMOD
Definition smtlib_conv.h:44
@ SMT_FUNC_INT
Definition smtlib_conv.h:27
@ SMT_FUNC_SUB
Definition smtlib_conv.h:36
@ SMT_FUNC_BVUGTE
Definition smtlib_conv.h:76
@ SMT_FUNC_BOOL
Definition smtlib_conv.h:28
@ SMT_FUNC_IMPLIES
Definition smtlib_conv.h:58
@ SMT_FUNC_BVUMOD
Definition smtlib_conv.h:45
@ SMT_FUNC_GTE
Definition smtlib_conv.h:74
@ SMT_FUNC_REAL2INT
Definition smtlib_conv.h:90
@ SMT_FUNC_SHL
Definition smtlib_conv.h:46
@ SMT_FUNC_MUL
Definition smtlib_conv.h:38
@ SMT_FUNC_BVADD
Definition smtlib_conv.h:35
@ SMT_FUNC_LTE
Definition smtlib_conv.h:71
@ SMT_FUNC_AND
Definition smtlib_conv.h:61
@ SMT_FUNC_BVINT
Definition smtlib_conv.h:29
@ SMT_FUNC_ISPOS
Definition smtlib_conv.h:101
@ SMT_FUNC_IEEE_DIV
Definition smtlib_conv.h:106
@ SMT_FUNC_BVUDIV
Definition smtlib_conv.h:41
@ SMT_FUNC_UF
Definition smtlib_conv.h:121
@ SMT_FUNC_ISNAN
Definition smtlib_conv.h:97
@ SMT_FUNC_BVLSHR
Definition smtlib_conv.h:51
@ SMT_FUNC_STORE
Definition smtlib_conv.h:83
@ SMT_FUNC_INT2REAL
Definition smtlib_conv.h:89
@ SMT_FUNC_IEEE_ADD
Definition smtlib_conv.h:103
@ SMT_FUNC_BVASHR
Definition smtlib_conv.h:48
@ SMT_FUNC_ISNEG
Definition smtlib_conv.h:100
__ESBMC_C_CPP_BEGIN struct __esbmc_file_t FILE
Definition smtlib_conv.h:125
std::string data
Definition smtlib_conv.h:132
sexpr(sexpr &&) noexcept=default
int token
Definition smtlib_conv.h:130
std::list< sexpr > sexpr_list
Definition smtlib_conv.h:131
Thrown when the external solver process can no longer provide a usable answer: a write hit EPIPE (the...
Definition smtlib_conv.h:412
void flush() const
Definition smtlib_conv.cpp:867
file_emitter(const std::string &path)
Definition smtlib_conv.cpp:179
file_emitter(const file_emitter &)=delete
void emit(const char *fmt, Ts &&...) const
FILE * out_stream
Definition smtlib_conv.h:361
long solver_proc_pid
Definition smtlib_conv.h:335
process_emitter(const std::string &cmd)
Definition smtlib_conv.cpp:201
void terminate() noexcept
Definition smtlib_conv.cpp:354
std::string solver_version
Definition smtlib_conv.h:338
std::string solver_name
Definition smtlib_conv.h:337
process_emitter(const process_emitter &)=delete
void emit(const char *fmt, Ts &&...) const
FILE * in_stream
Definition smtlib_conv.h:331
void * org_sigpipe_handler
Definition smtlib_conv.h:332
FILE * out_stream
Definition smtlib_conv.h:330
void flush() const
Definition smtlib_conv.cpp:847
Definition smtlib_conv.h:381
std::string ident
Definition smtlib_conv.h:382
unsigned int level
Definition smtlib_conv.h:383
smt_sortt sort
Definition smtlib_conv.h:384
static int64_t get_value(int64_t *base, int64_t rows, int64_t cols, int64_t row, int64_t col)
Definition umath.c:4