Go to the documentation of this file.
4 #ifndef CPROVER_SOLVERS_REFINEMENT_STRING_BUILTIN_FUNCTION_H
5 #define CPROVER_SOLVERS_REFINEMENT_STRING_BUILTIN_FUNCTION_H
15 #define CHARACTER_FOR_UNKNOWN '?'
94 eval(
const std::function<
exprt(
const exprt &)> &get_value)
const = 0;
96 virtual std::string
name()
const = 0;
155 const std::vector<exprt> &fun_args,
185 const std::vector<exprt> &fun_args,
194 eval(
const std::function<
exprt(
const exprt &)> &get_value)
const override;
196 std::string
name()
const override
198 return "concat_char";
222 const std::vector<exprt> &fun_args,
232 eval(
const std::function<
exprt(
const exprt &)> &get_value)
const override;
234 std::string
name()
const override
256 const std::vector<exprt> &fun_args,
263 eval(
const std::function<
exprt(
const exprt &)> &get_value)
const override;
265 std::string
name()
const override
267 return "to_lower_case";
292 const std::vector<exprt> &fun_args,
312 eval(
const std::function<
exprt(
const exprt &)> &get_value)
const override;
314 std::string
name()
const override
316 return "to_upper_case";
349 const std::vector<exprt> &fun_args,
369 const std::vector<exprt> &fun_args,
374 if(fun_args.size() == 4)
381 eval(
const std::function<
exprt(
const exprt &)> &get_value)
const override;
383 std::string
name()
const override
385 return "string_of_int";
428 std::string
name()
const override
436 return std::vector<array_string_exprt>(
string_args);
466 const std::function<
exprt(
const exprt &)> &get_value);
470 const std::vector<mp_integer> &array,
473 #endif // CPROVER_SOLVERS_REFINEMENT_STRING_BUILTIN_FUNCTION_H
virtual bool maybe_testing_function() const
Tells whether the builtin function can be a testing function, that is a function that does not return...
string_constraintst constraints(string_constraint_generatort &generator, message_handlert &message_handler) const override
Add constraints ensuring that the value of result expression of the builtin function corresponds to t...
array_string_exprt make_string(const std::vector< mp_integer > &array, const array_typet &array_type)
Make a string from a constant array.
bool maybe_testing_function() const override
Tells whether the builtin function can be a testing function, that is a function that does not return...
virtual ~string_builtin_functiont()=default
std::string name() const override
exprt length_constraint() const override
Constraint ensuring that the length of the strings are coherent with the function call.
std::string name() const override
string_constraintst constraints(class symbol_generatort &fresh_symbol, message_handlert &message_handler) const
Set of constraints ensuring result corresponds to input in which lowercase characters of Basic Latin ...
Correspondance between arrays and pointers string representations.
exprt length_constraint() const override
Constraint ensuring that the length of the strings are coherent with the function call.
symbol_generatort fresh_symbol
string_constraintst constraints(string_constraint_generatort &generator, message_handlert &message_handler) const override
Add constraints ensuring that the value of result expression of the builtin function corresponds to t...
exprt get_or_create_length(const array_string_exprt &s)
Get the length of an array_string_exprt from the array_pool.
string_to_lower_case_builtin_functiont(const exprt &return_code, const std::vector< exprt > &fun_args, array_poolt &array_pool)
function_application_exprt function_application
String creation from other types.
Base class for all expressions.
std::vector< array_string_exprt > string_args
optionalt< exprt > eval(const std::function< exprt(const exprt &)> &get_value) const override
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...
string_concat_char_builtin_functiont(const exprt &return_code, const std::vector< exprt > &fun_args, array_poolt &array_pool)
Constructor from arguments of a function application.
string_of_int_builtin_functiont(const exprt &return_code, const std::vector< exprt > &fun_args, array_poolt &array_pool)
Collection of constraints of different types: existential formulas, universal formulas,...
std::vector< exprt > args
Converting each uppercase character of Basic Latin and Latin-1 supplement to the corresponding lowerc...
virtual optionalt< array_string_exprt > string_result() const
optionalt< exprt > eval(const std::function< exprt(const exprt &)> &get_value) const override
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...
virtual std::vector< array_string_exprt > string_arguments() const
string_set_char_builtin_functiont(const exprt &return_code, const std::vector< exprt > &fun_args, array_poolt &array_pool)
Constructor from arguments of a function application.
string_constraintst constraints(string_constraint_generatort &generator, message_handlert &message_handler) const override
Set of constraints ensuring result corresponds to input in which uppercase characters have been conve...
std::string name() const override
string_constraintst constraints(string_constraint_generatort &generator, message_handlert &message_handler) const override
Set of constraints ensuring that result is similar to input where the character at index position is ...
typet & type()
Return the type of the expression.
exprt length_constraint() const override
Constraint ensuring that the length of the strings are coherent with the function call.
Generation of fresh symbols of a given type.
Functions that are not yet supported in this class but are supported by string_constraint_generatort.
Converting each lowercase character of Basic Latin and Latin-1 supplement to the corresponding upperc...
std::string name() const override
string_builtin_function_with_no_evalt(const exprt &return_code, const function_application_exprt &f, array_poolt &array_pool)
exprt length_constraint() const override
Constraint ensuring that the length of the strings are coherent with the function call.
const std::string & id2string(const irep_idt &d)
std::vector< exprt > args
exprt length_constraint() const override
Constraint ensuring that the length of the strings are coherent with the function call.
#define PRECONDITION(CONDITION)
const irep_idt & get_identifier() const
std::vector< array_string_exprt > string_arguments() const override
std::vector< array_string_exprt > under_test
string_builtin_functiont(exprt return_code, array_poolt &array_pool)
string_constraintst constraints(string_constraint_generatort &generator, message_handlert &message_handlert) const override
Set of constraints enforcing that result is the concatenation of input with character.
Application of (mathematical) function.
String creation from integer types.
string_to_upper_case_builtin_functiont(exprt return_code, array_string_exprt result, array_string_exprt input, array_poolt &array_pool)
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const irep_idt & id() const
optionalt< exprt > eval(const std::function< exprt(const exprt &)> &get_value) const override
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...
optionalt< std::vector< mp_integer > > eval_string(const array_string_exprt &a, const std::function< exprt(const exprt &)> &get_value)
Given a function get_value which gives a valuation to expressions, attempt to find the current value ...
optionalt< array_string_exprt > string_result() const override
string_builtin_functiont()=delete
nonstd::optional< T > optionalt
Base class for string functions that are built in the solver.
virtual optionalt< exprt > eval(const std::function< exprt(const exprt &)> &get_value) const =0
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...
string_constraintst constraints(string_constraint_generatort &generator, message_handlert &message_handler) const override
Add constraints ensuring that the value of result expression of the builtin function corresponds to t...
std::string name() const override
std::string name() const override
Setting a character at a particular position of a string.
optionalt< array_string_exprt > string_res
array_string_exprt result
Adding a character at the end of a string.
virtual exprt length_constraint() const =0
Constraint ensuring that the length of the strings are coherent with the function call.
virtual string_constraintst constraints(string_constraint_generatort &, message_handlert &) const =0
Add constraints ensuring that the value of result expression of the builtin function corresponds to t...
optionalt< exprt > eval(const std::function< exprt(const exprt &)> &get_value) const override
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...
virtual std::string name() const =0
exprt length_constraint() const override
Constraint ensuring that the length of the strings are coherent with the function call.
string_to_upper_case_builtin_functiont(const exprt &return_code, const std::vector< exprt > &fun_args, array_poolt &array_pool)
optionalt< array_string_exprt > string_result() const override
optionalt< exprt > eval(const std::function< exprt(const exprt &)> &) const override
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...
std::vector< array_string_exprt > string_arguments() const override
string_creation_builtin_functiont(const exprt &return_code, const std::vector< exprt > &fun_args, array_poolt &array_pool)
Constructor from arguments of a function application.
optionalt< exprt > eval(const std::function< exprt(const exprt &)> &get_value) const override
Given a function get_value which gives a valuation to expressions, attempt to find the result of the ...