ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
smt_ast.h
Go to the documentation of this file.
1#ifndef SOLVERS_SMT_SMT_AST_H_
2#define SOLVERS_SMT_SMT_AST_H_
3
5
6#include <irep2/irep2_expr.h>
8
10
28
29class smt_ast;
30typedef const smt_ast *smt_astt;
31
33{
34public:
37
40
42 virtual ~smt_ast() = default;
43
49 virtual smt_astt with_sort(smt_solver_baset *ctx, smt_sortt s) const;
50
51 // "this" is the true operand.
52 virtual smt_astt
53 ite(smt_solver_baset *ctx, smt_astt cond, smt_astt falseop) const;
54
60 virtual smt_astt eq(smt_solver_baset *ctx, smt_astt other) const;
61
67 virtual void assign(smt_solver_baset *ctx, smt_astt sym) const;
68
75 virtual smt_astt update(
78 unsigned int idx,
79 const expr2tc &idx_expr = expr2tc()) const;
80
85 virtual smt_astt select(smt_solver_baset *ctx, const expr2tc &idx) const;
86
91 virtual smt_astt project(smt_solver_baset *ctx, unsigned int elem) const;
92
93 virtual void dump() const
94 {
95 log_status("Chosen solver doesn't support printing the AST\n");
96 }
97};
98
99template <typename solver_ast>
101{
102public:
104 : smt_ast(ctx, s), a(_a)
105 {
106 }
107
108 typedef solver_ast solver_ast_type;
110};
111
112#ifdef NDEBUG
113# define dynamic_cast static_cast
114#endif
115template <typename derived_class>
116const derived_class *to_solver_smt_ast(smt_astt s)
117{
118 const derived_class *r = dynamic_cast<const derived_class *>(s);
119 assert(r);
120 return r;
121}
122#ifdef dynamic_cast
123# undef dynamic_cast
124#endif
125
126#endif /* SOLVERS_SMT_SMT_AST_H_ */
Definition smt_ast.h:33
virtual ~smt_ast()=default
virtual void dump() const
Definition smt_ast.h:93
virtual smt_astt project(smt_solver_baset *ctx, unsigned int elem) const
Project a member from a structure, or an field-array from a struct array.
Definition smt_solver.cpp:4362
virtual smt_astt ite(smt_solver_baset *ctx, smt_astt cond, smt_astt falseop) const
Definition smt_solver.cpp:4307
virtual smt_astt select(smt_solver_baset *ctx, const expr2tc &idx) const
Select a value from an array, for both normal arrays and tuple arrays.
Definition smt_solver.cpp:4350
virtual smt_astt with_sort(smt_solver_baset *ctx, smt_sortt s) const
The same solver term under a different sort.
Definition smt_solver.cpp:4312
const smt_solver_baset * context
The solver context.
Definition smt_ast.h:39
smt_sortt sort
The sort of this function application.
Definition smt_ast.h:36
virtual smt_astt eq(smt_solver_baset *ctx, smt_astt other) const
Abstractly produce an equality.
Definition smt_solver.cpp:4318
virtual smt_astt update(smt_solver_baset *ctx, smt_astt value, unsigned int idx, const expr2tc &idx_expr=expr2tc()) const
Abstractly produce an "update", i.e., an array 'with' or tuple 'with'.
Definition smt_solver.cpp:4324
smt_ast(smt_solver_baset *ctx, smt_sortt s)
Definition smt_solver.h:1270
virtual void assign(smt_solver_baset *ctx, smt_astt sym) const
Abstractly produce an assign.
Definition smt_solver.cpp:4301
The base SMT-conversion class/interface.
Definition smt_solver.h:170
solver_smt_ast(smt_solver_baset *ctx, solver_ast _a, smt_sortt s)
Definition smt_ast.h:103
solver_ast_type a
Definition smt_ast.h:109
solver_ast solver_ast_type
Definition smt_ast.h:108
Definition toml.hpp:1531
@ other
Definition converter_compare.cpp:887
pthread_cond_t cond
Definition cuda.h:50
irep_container< expr2t > expr2tc
Definition irep2.h:431
#define log_status(fmt,...)
Definition message.h:101
const smt_ast * smt_astt
Definition smt_ast.h:30
const derived_class * to_solver_smt_ast(smt_astt s)
Definition smt_ast.h:116
const smt_sort * smt_sortt
Definition smt_sort.h:37