Go to the documentation of this file.
8 #define COMMAND_ID(the_id) \
9 const irep_idt ID_smt_##the_id##_command{"smt_" #the_id "_command"};
10 #include <solvers/smt2_incremental/smt_commands.def>
20 return !(*
this == other);
28 "Only terms with boolean sorts can be asserted.");
29 set(ID_cond, upcast(std::move(condition)));
44 std::vector<smt_sortt> parameter_sorts)
47 set(ID_identifier, term_storert::upcast(std::move(identifier)));
49 std::make_move_iterator(parameter_sorts.begin()),
50 std::make_move_iterator(parameter_sorts.end()),
51 std::back_inserter(get_sub()),
53 return sort_storert::upcast(std::move(parameter_sort));
68 std::vector<std::reference_wrapper<const smt_sortt>>
82 std::vector<smt_identifier_termt> parameters,
90 std::make_move_iterator(parameters.begin()),
91 std::make_move_iterator(parameters.end()),
92 std::back_inserter(get_sub()),
94 return upcast(std::move(parameter));
96 set(ID_code, upcast(std::move(definition)));
105 std::vector<std::reference_wrapper<const smt_identifier_termt>>
127 set(ID_value, upcast(std::move(descriptor)));
179 template <
typename visitort>
182 #define COMMAND_ID(the_id) \
183 if(id == ID_smt_##the_id##_command) \
184 return visitor.visit(static_cast<const smt_##the_id##_commandt &>(command));
187 #include <solvers/smt2_incremental/smt_commands.def>
199 ::accept(*
this,
id(), std::move(visitor));
204 : _identifier(function_declaration.identifier())
213 : _identifier{function_definition.
identifier()}
215 const auto parameters = function_definition.parameters();
219 .collect<decltype(parameter_sorts)>();
228 const std::vector<smt_termt> &arguments)
const
234 const std::vector<smt_termt> &arguments)
const
238 "Number of parameters and number of arguments must be the same.");
239 const auto parameter_sort_arguments =
241 for(
const auto ¶meter_sort_argument_pair : parameter_sort_arguments)
244 parameter_sort_argument_pair.first ==
245 parameter_sort_argument_pair.second.get_sort(),
246 "Sort of argument must have the same sort as the parameter.");
#define UNREACHABLE
This should be used to mark dead code.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
std::size_t get_size_t(const irep_idt &name) const
const smt_sortt & return_sort() const
Stores identifiers in unescaped and unquoted form.
static irept upcast(smt_optiont option)
smt_pop_commandt(std::size_t levels)
const smt_termt & definition() const
static abstract_object_pointert transform(const exprt &expr, const std::vector< abstract_object_pointert > &operands, const abstract_environmentt &environment, const namespacet &ns)
const irept & find(const irep_idt &name) const
smt_define_function_commandt(irep_idt identifier, std::vector< smt_identifier_termt > parameters, smt_termt definition)
std::vector< smt_sortt > parameter_sorts
smt_assert_commandt(smt_termt condition)
const smt_termt & descriptor() const
std::vector< std::reference_wrapper< const smt_identifier_termt > > parameters() const
void accept(smt_command_const_downcast_visitort &) const
const smt_optiont & option() const
smt_sortt return_sort(const std::vector< smt_termt > &arguments) const
bool operator==(const smt_commandt &) const
const smt_identifier_termt & identifier() const
smt_push_commandt(std::size_t levels)
void accept(const smt_commandt &command, const irep_idt &id, visitort &&visitor)
smt_declare_function_commandt(smt_identifier_termt identifier, std::vector< smt_sortt > parameter_sorts)
smt_identifier_termt _identifier
void set(const irep_idt &name, const irep_idt &value)
static const smt_optiont & downcast(const irept &)
const smt_termt & condition() const
smt_command_functiont(const smt_declare_function_commandt &function_declaration)
irep_idt identifier() const
const smt_sortt & get_sort() const
smt_set_logic_commandt(smt_logict logic)
irep_idt identifier() const
smt_get_value_commandt(smt_termt descriptor)
This constructor constructs the get-value command, such that it stores a single descriptor for which ...
const smt_sortt & return_sort() const
void set_size_t(const irep_idt &name, const std::size_t value)
void validate(const std::vector< smt_termt > &arguments) const
static const smt_termt & downcast(const irept &)
std::vector< std::reference_wrapper< const smt_sortt > > parameter_sorts() const
static irept upcast(smt_logict logic)
const smt_identifier_termt & identifier() const
bool operator==(const irept &other) const
static const smt_logict & downcast(const irept &)
smt_set_option_commandt(smt_optiont option)
There are a large number of kinds of tree structured or tree-like data in CPROVER.
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
const smt_logict & logic() const
bool operator!=(const smt_commandt &) const
ranget< iteratort > make_range(iteratort begin, iteratort end)
static const smt_sortt & downcast(const irept &)