24 satcheck_no_simplifiert sat_check(message_handler);
36 const exprt &lower_bound,
37 const exprt &upper_bound,
40 : univ_var(_univ_var),
41 lower_bound(lower_bound),
42 upper_bound(upper_bound),
47 "String constraints must have non-negative lower bound.\n" +
51 "String constraints must have non-negative upper bound.\n" +
60 std::ostringstream out;
66 <<
"[x+y] != " <<
format(expr.
s1) <<
"[y])";
A base class for relations, i.e., binary predicates whose two operands have the same type.
Base class for all expressions.
typet & type()
Return the type of the expression.
std::string pretty(unsigned indent=0, unsigned max_indent=0) const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
string_constraintt(const symbol_exprt &_univ_var, const exprt &lower_bound, const exprt &upper_bound, const exprt &body, message_handlert &message_handler)
Expression to hold a symbol (variable)
Similar interface to union-find for expressions, with a function for replacing sub-expressions by the...
bool replace_expr(exprt &expr) const
Replace subexpressions of expr by the representative element of the set they belong to.
void solver(std::vector< framet > &frames, const std::unordered_set< symbol_exprt, irep_hash > &address_taken, const solver_optionst &solver_options, const namespacet &ns, std::vector< propertyt > &properties, std::size_t property_index)
void replace(const union_find_replacet &replace_map, string_not_contains_constraintt &constraint)
static bool cannot_be_neg(const exprt &expr, message_handlert &message_handler)
Runs a solver instance to verify whether an expression can only be non-negative.
std::string to_string(const string_not_contains_constraintt &expr)
Used for debug printing.
bool operator==(const string_not_contains_constraintt &left, const string_not_contains_constraintt &right)
Defines string constraints.
Constraints to encode non containement of strings.