Go to the documentation of this file.
101 std::vector<std::reference_wrapper<const smt_identifier_termt>>
identifiers;
129 template <
typename elementt>
131 const std::vector<std::reference_wrapper<const elementt>> &output);
135 template <
typename outputt>
152 template <
typename outputt,
typename... outputst>
153 void push_outputs(outputt &&output, outputst &&... outputs);
176 return [output](std::ostream &os) { os << output; };
182 return [=](std::ostream &os) { os << output; };
188 return [=](std::ostream &os) { os << output; };
194 return [=](std::ostream &os) { output.
accept(*
this); };
197 template <
typename elementt>
200 const std::vector<std::reference_wrapper<const elementt>> &outputs)
202 return [=](std::ostream &os) {
203 for(
const auto &output :
make_range(outputs.rbegin(), outputs.rend()))
214 return [=](std::ostream &os) {
215 const auto push_sorted_variable =
217 push_outputs(
"(", identifier,
" ", identifier.get_sort(),
")");
219 for(
const auto &bound_variable :
222 push_sorted_variable(bound_variable);
229 template <
typename outputt>
239 template <
typename outputt,
typename... outputst>
242 outputst &&... outputs)
257 auto indices = identifier_term.
indices();
265 push_outputs(
"(_ ", std::move(escaped_identifier), std::move(indices),
")");
274 push_outputs(
"(_ bv", std::move(value),
" ", std::move(bit_width),
")");
281 auto arguments = function_application.
arguments();
289 push_outputs(
"(forall (", bound_variables,
") ", std::move(predicate),
")");
295 auto predicate =
exists.predicate();
296 push_outputs(
"(exists (", bound_variables,
") ", std::move(predicate),
")");
320 std::stringstream ss;
338 os <<
":produce-models " << (produce_models.
setting() ?
"true" :
"false");
350 std::stringstream ss;
365 #define LOGIC_ID(the_id, the_name) \
366 void visit(const smt_logic_##the_id##t &) override \
370 #include "smt_logics.def"
382 std::stringstream ss;
412 join_strings(
os, parameter_sorts.begin(), parameter_sorts.end(),
' ');
418 os <<
"(define-fun " << define_function.
identifier() <<
" (";
419 const auto parameters = define_function.
parameters();
426 return
"(" + smt_to_smt2_string(identifier) +
" " +
427 smt_to_smt2_string(identifier.get_sort()) +
")";
445 os <<
"(pop " << pop.
levels() <<
")";
450 os <<
"(push " << push.
levels() <<
")";
455 os <<
"(set-logic " << set_logic.
logic() <<
")";
460 os <<
"(set-option " << set_option.
option() <<
")";
472 std::stringstream ss;
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
void visit(const smt_define_function_commandt &define_function) override
void visit(const smt_exit_commandt &exit) override
void accept(smt_index_const_downcast_visitort &) const
mini_bddt exists(const mini_bddt &u, const unsigned var)
const smt_sortt & return_sort() const
const smt_identifier_termt & function_identifier() const
static std::string escape_identifier(const irep_idt &identifier)
Stores identifiers in unescaped and unquoted form.
const smt_termt & definition() const
For implementation of indexed identifiers.
void visit(const smt_symbol_indext &symbol) override
irep_idt identifier() const
void visit(const smt_pop_commandt &pop) override
static output_functiont make_output_function(const std::string &output)
const smt_termt & descriptor() const
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.
std::vector< std::reference_wrapper< const smt_identifier_termt > > parameters() const
void accept(smt_command_const_downcast_visitort &) const
std::function< void(std::ostream &)> output_functiont
const smt_optiont & option() const
smt_logic_to_string_convertert(std::ostream &os)
const smt_termt & predicate() const
void push_output(outputt &&output)
Single argument version of push_outputs.
smt_index_output_visitort(std::ostream &os)
std::size_t bit_width() const
void visit(const smt_set_logic_commandt &set_logic) override
const smt_identifier_termt & identifier() const
void accept(smt_sort_const_downcast_visitort &) const
std::size_t value() const
static std::string convert_identifier(const irep_idt &identifier)
std::vector< std::reference_wrapper< const smt_indext > > indices() const
smt_option_to_string_convertert(std::ostream &os)
void visit(const smt_array_sortt &array) override
smt_sort_output_visitort(std::ostream &os)
void accept(smt_term_const_downcast_visitort &) const
void accept(smt_logic_const_downcast_visitort &) const
Stream & join_strings(Stream &&os, const It b, const It e, const Delimiter &delimiter, TransformFunc &&transform_func)
Prints items to an stream, separated by a constant delimiter.
void accept(smt_option_const_downcast_visitort &) const
const smt_termt & condition() const
irep_idt identifier() const
void visit(const smt_get_value_commandt &get_value) override
std::vector< std::reference_wrapper< const smt_identifier_termt > > bound_variables() const
const smt_sortt & element_sort() const
const smt_sortt & index_sort() const
void visit(const smt_set_option_commandt &set_option) override
void visit(const smt_bool_literal_termt &bool_literal) override
void visit(const smt_bit_vector_sortt &bit_vec) override
static auxiliary_symbolt declare_function(const irep_idt &function_name, const mathematical_function_typet &type, symbol_table_baset &symbol_table)
Declare a function with the given name and type.
void visit(const smt_declare_function_commandt &declare_function) override
smt_term_to_string_convertert()=default
static std::ostream & convert(std::ostream &os, const smt_termt &term)
This function is complete the external interface to this class.
std::string smt_to_smt2_string(const smt_indext &index)
void visit(const smt_push_commandt &push) override
smt_command_to_string_convertert(std::ostream &os)
std::vector< std::reference_wrapper< const smt_identifier_termt > > identifiers
const smt_bit_vector_sortt & get_sort() const
void visit(const smt_option_produce_modelst &produce_models) override
void push_outputs()
Base case for the recursive push_outputs function template below.
void visit(const smt_check_sat_commandt &check_sat) override
std::stack< output_functiont > output_stack
std::vector< std::reference_wrapper< const smt_termt > > arguments() const
void visit(const smt_bool_sortt &) override
void output_function(std::ostream &os, const statement_list_parse_treet::functiont &function)
Prints the given Statement List function in a human-readable form to the given output stream.
const smt_logict & logic() const
void visit(const smt_assert_commandt &assert) override
ranget< iteratort > make_range(iteratort begin, iteratort end)
void visit(const smt_numeral_indext &numeral) override
std::ostream & operator<<(std::ostream &os, const smt_indext &index)
const std::string integer2string(const mp_integer &n, unsigned base)