ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
smtlib_conv.h
Go to the documentation of this file.
1#ifndef _ESBMC_SOLVERS_SMTLIB_SMTLIB_CONV_H
2#define _ESBMC_SOLVERS_SMTLIB_SMTLIB_CONV_H
3
4#include <list>
6#include <string>
7#ifndef _WIN32
8# include <unistd.h>
9#endif
10#include <irep2/irep2.h>
11
25{
26 // Terminals
32
33 // Nonterminals
56
57 // Logic
63
64 // Comparisons
77
80
82
85
87 SMT_FUNC_EXTRACT, // Not for going through mk app due to sillyness.
88
92
93 // floatbv operations
109
114
117
118 // Uninterpreted-function application. Unlike the other non-terminals it is
119 // printed as its own `symname` rather than a fixed operator from
120 // smt_func_name_table, and may carry any arity.
122};
123
124struct sexpr
125{
126 sexpr() = default;
127 sexpr(sexpr &&) noexcept = default;
128 sexpr &operator=(sexpr &&) noexcept = default;
129
130 int token = 0; // If zero, then an sexpr list
132 std::string data; // Text rep of parsed token.
133};
134
135static_assert(std::is_nothrow_move_constructible_v<sexpr>);
136static_assert(std::is_nothrow_move_assignable_v<sexpr>);
137
139{
140public:
141 explicit smtlib_smt_sort(smt_sort_kind k, unsigned int w) : smt_sort(k, w) {};
142 explicit smtlib_smt_sort(smt_sort_kind k, unsigned int w1, unsigned int w2)
143 : smt_sort(k, w1, w2) {};
145 {
146 }
149 const smtlib_smt_sort *dom,
150 const smtlib_smt_sort *rag)
151 : smt_sort(k, dom->get_data_width(), rag), domain(dom), range(rag)
152 {
153 }
154
157};
158
160{
161public:
163 : smt_ast(ctx, s), kind(k)
164 {
165 }
166 ~smtlib_smt_ast() override = default;
167
168 void dump() const override;
169
171 std::string symname;
173 std::string realval;
177 std::vector<smt_astt> args;
178};
179
181 public array_iface,
182 public fp_convt
183{
184public:
185 smtlib_convt(const namespacet &_ns, const optionst &options);
186 /* Used by process-based derived backends (e.g. bitwuzllob, neurosym) that
187 * need the interactive-pipe and file sinks configured independently of the
188 * --smtlib-solver-prog and --output options. A backend whose solver rejects
189 * the default QF_AUFBV/QF_AUFLIRA can override the emitted (set-logic ...)
190 * via `logic`; empty selects the default. */
192 const namespacet &_ns,
193 const optionst &options,
194 const std::string &solver_prog,
195 const std::string &output_path,
196 const std::string &logic = "");
197 ~smtlib_convt() override;
198
199 smt_resultt dec_solve() override;
200 /* Emit (check-sat) to the configured sinks and flush them. Non-template so
201 * derived backends in other translation units can call it without relying
202 * on cross-TU instantiations of the emit() member template. */
203 void emit_check_sat();
204 /* Read and parse the solver's response to an already-emitted (check-sat)
205 * from the interactive pipe. Requires emit_proc. */
207 const std::string solver_text() override;
208
209 smt_astt mk_add(smt_astt a, smt_astt b) override;
210 smt_astt mk_bvadd(smt_astt a, smt_astt b) override;
211 smt_astt mk_sub(smt_astt a, smt_astt b) override;
212 smt_astt mk_bvsub(smt_astt a, smt_astt b) override;
213 smt_astt mk_mul(smt_astt a, smt_astt b) override;
214 smt_astt mk_bvmul(smt_astt a, smt_astt b) override;
215 smt_astt mk_mod(smt_astt a, smt_astt b) override;
216 smt_astt mk_bvsmod(smt_astt a, smt_astt b) override;
217 smt_astt mk_bvumod(smt_astt a, smt_astt b) override;
218 smt_astt mk_div(smt_astt a, smt_astt b) override;
219 smt_astt mk_bvsdiv(smt_astt a, smt_astt b) override;
220 smt_astt mk_bvudiv(smt_astt a, smt_astt b) override;
221 smt_astt mk_shl(smt_astt a, smt_astt b) override;
222 smt_astt mk_bvshl(smt_astt a, smt_astt b) override;
223 smt_astt mk_bvashr(smt_astt a, smt_astt b) override;
224 smt_astt mk_bvlshr(smt_astt a, smt_astt b) override;
225 smt_astt mk_neg(smt_astt a) override;
226 smt_astt mk_bvneg(smt_astt a) override;
227 smt_astt mk_bvnot(smt_astt a) override;
228 smt_astt mk_bvxor(smt_astt a, smt_astt b) override;
229 smt_astt mk_bvor(smt_astt a, smt_astt b) override;
230 smt_astt mk_bvand(smt_astt a, smt_astt b) override;
231 smt_astt mk_implies(smt_astt a, smt_astt b) override;
232 smt_astt mk_xor(smt_astt a, smt_astt b) override;
233 smt_astt mk_or(smt_astt a, smt_astt b) override;
234 smt_astt mk_and(smt_astt a, smt_astt b) override;
235 smt_astt mk_not(smt_astt a) override;
236 smt_astt mk_lt(smt_astt a, smt_astt b) override;
237 smt_astt mk_bvult(smt_astt a, smt_astt b) override;
238 smt_astt mk_bvslt(smt_astt a, smt_astt b) override;
239 smt_astt mk_gt(smt_astt a, smt_astt b) override;
240 smt_astt mk_bvugt(smt_astt a, smt_astt b) override;
241 smt_astt mk_bvsgt(smt_astt a, smt_astt b) override;
242 smt_astt mk_le(smt_astt a, smt_astt b) override;
243 smt_astt mk_bvule(smt_astt a, smt_astt b) override;
244 smt_astt mk_bvsle(smt_astt a, smt_astt b) override;
245 smt_astt mk_ge(smt_astt a, smt_astt b) override;
246 smt_astt mk_bvuge(smt_astt a, smt_astt b) override;
247 smt_astt mk_bvsge(smt_astt a, smt_astt b) override;
248 smt_astt mk_eq(smt_astt a, smt_astt b) override;
249 smt_astt mk_store(smt_astt a, smt_astt b, smt_astt c) override;
250 smt_astt mk_select(smt_astt a, smt_astt b) override;
251 smt_astt mk_real2int(smt_astt a) override;
252 smt_astt mk_int2real(smt_astt a) override;
253 smt_astt mk_isint(smt_astt a) override;
254
255 void assert_ast(smt_astt a) override;
256
257 smt_sortt mk_bool_sort() override;
258 smt_sortt mk_real_sort() override;
259 smt_sortt mk_int_sort() override;
260 smt_sortt mk_bv_sort(std::size_t width) override;
261 smt_sortt mk_fbv_sort(std::size_t width) override;
263 smt_sortt mk_bvfp_sort(std::size_t ew, std::size_t sw) override;
264 smt_sortt mk_bvfp_rm_sort() override;
265
266 smt_astt mk_smt_int(const BigInt &theint) override;
267 smt_astt mk_smt_real(const std::string &str) override;
268 smt_astt mk_smt_bv(const BigInt &theint, smt_sortt s) override;
269 smt_astt mk_smt_bool(bool val) override;
270 smt_astt mk_smt_symbol(const std::string &name, const smt_sort *s) override;
272 const std::string &name,
273 const std::vector<smt_astt> &args,
274 smt_sortt rangesort) override;
276 const std::string &name,
277 const smt_sort *s,
278 smt_sortt array_subtype) override;
279 smt_sort *mk_struct_sort(const type2tc &type);
280 smt_astt mk_extract(smt_astt a, unsigned int high, unsigned int low) override;
281 smt_astt mk_sign_ext(smt_astt a, unsigned int topwidth) override;
282 smt_astt mk_zero_ext(smt_astt a, unsigned int topwidth) override;
283 smt_astt mk_concat(smt_astt a, smt_astt b) override;
285
287 convert_array_of(smt_astt init_val, unsigned long domain_width) override;
288
289 sexpr get_value(smt_astt a) const;
290
293 bool has_model() const override
294 {
295 return static_cast<bool>(emit_proc);
296 }
297
298 tvt get_bool(smt_astt a) override;
299 tvt l_get(smt_astt a) override;
300 BigInt get_bv(smt_astt a, bool is_signed) override;
301 expr2tc
302 get_array_elem(smt_astt array, uint64_t index, const type2tc &type) override;
303
304 std::string sort_to_string(const smt_sort *s) const;
305
306 unsigned int
307 emit_terminal_ast(const smtlib_smt_ast *a, std::string &output) const;
308
309 unsigned int emit_ast(
310 const smtlib_smt_ast *ast,
311 std::string &output,
312 std::unordered_map<const smtlib_smt_ast *, std::string> &temp_symbols)
313 const;
314
315 void emit_ast(const smtlib_smt_ast *ast) const;
316
317 void push_ctx() override;
318 void pop_ctx() override;
319
320 std::string dump_smt() override;
321
322 template <typename... Ts>
323 void emit(const Ts &...) const;
324 void flush() const;
325
326 // Members
327
329 {
332 void *org_sigpipe_handler; /* TODO: static */
333 /* pid_t of the solver process; stored as long to keep this header
334 * POSIX-free. -1 when no process is running. */
336
337 std::string solver_name;
338 std::string solver_version;
339
340 explicit process_emitter(const std::string &cmd);
342
343 ~process_emitter() noexcept;
344
345 process_emitter &operator=(const process_emitter &) = delete;
346
347 template <typename... Ts>
348 void emit(const char *fmt, Ts &&...) const;
349 void flush() const;
350
351 /* Stop the solver process before its answer is needed (e.g. the
352 * verdict came from elsewhere and no model will be read). Idempotent;
353 * afterwards operator bool() is false. */
354 void terminate() noexcept;
355
356 explicit operator bool() const noexcept;
358
360 {
362
363 explicit file_emitter(const std::string &path);
364 file_emitter(const file_emitter &) = delete;
365
366 ~file_emitter() noexcept;
367
368 file_emitter &operator=(const file_emitter &) = delete;
369
370 template <typename... Ts>
371 void emit(const char *fmt, Ts &&...) const;
372 void flush() const;
373
374 explicit operator bool() const noexcept;
376
377 // Actual solving data
378 // The set of symbols and their sorts.
379
381 {
382 std::string ident;
383 unsigned int level;
385 };
386
387 typedef boost::multi_index_container<
389 boost::multi_index::indexed_by<
390 boost::multi_index::hashed_unique<
391 BOOST_MULTI_INDEX_MEMBER(symbol_table_rec, std::string, ident)>,
392 boost::multi_index::ordered_non_unique<
393 BOOST_MULTI_INDEX_MEMBER(symbol_table_rec, unsigned int, level),
394 std::greater<unsigned int>>>>
396
398
404 std::unordered_map<std::string, unsigned int> declared_ufs;
405
406 static const std::string temp_prefix;
407
411 struct external_process_died : std::runtime_error
412 {
413 using std::runtime_error::runtime_error;
414 };
415};
416
417#endif /* _ESBMC_SOLVERS_SMTLIB_SMTLIB_CONV_H */
Definition bigint.hh:58
array_iface(bool _b, bool inf)
Definition smt_array.h:14
Definition toml.hpp:6607
fp_convt(smt_solver_baset *_ctx)
Definition fp_conv.cpp:26
Definition namespace.h:10
Definition options.h:11
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
Definition smt_sort.h:40
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
Definition threeval.h:10
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 format.h:30
Definition path.py:1
Definition range.py:1
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
sexpr()=default
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