30 std::pair<exprt, string_constraintst>
43 typet index_type =
s1.length_type();
80 return {tc_eq, std::move(constraints)};
135 std::pair<exprt, string_constraintst>
149 const typet index_type =
s1.length_type();
159 const exprt constr2 =
169 fresh_symbol(
"witness_unequal_ignore_case", index_type);
175 s1[witness],
s2[witness], char_a, char_A, char_Z);
176 const not_exprt witness_diff(witness_eq);
183 and_exprt(bound_witness, witness_diff)));
208 std::pair<exprt, string_constraintst>
219 const typet &index_type =
s1.length_type();
258 const and_exprt cond1(ret_char_diff, guard1);
270 const and_exprt cond2(ret_length_diff, guard2);
287 return {res, std::move(constraints)};
array_string_exprt get_string_expr(array_poolt &array_pool, const exprt &expr)
Fetch the string_exprt corresponding to the given refined_string_exprt.
bitvector_typet char_type()
exprt get_or_create_length(const array_string_exprt &s)
Get the length of an array_string_exprt from the array_pool.
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.
Application of (mathematical) function.
const irep_idt & id() const
The plus expression Associativity is not specified.
std::pair< exprt, string_constraintst > add_axioms_for_compare_to(const function_application_exprt &f)
Lexicographic comparison of two strings.
std::pair< exprt, string_constraintst > add_axioms_for_equals_ignore_case(const function_application_exprt &f)
Equality of the content ignoring case of characters.
std::pair< exprt, string_constraintst > add_axioms_for_equals(const function_application_exprt &f)
Equality of the content of two strings.
message_handlert & message_handler
symbol_generatort fresh_symbol
Expression to hold a symbol (variable)
const typet & subtype() const
Semantic type conversion.
The type of an expression, extends irept.
API to expression classes for 'mathematical' expressions.
#define PRECONDITION(CONDITION)
Generates string constraints to link results from string functions with their arguments.
exprt zero_if_negative(const exprt &expr)
Returns a non-negative version of the argument.
static exprt character_equals_ignore_case(const exprt &char1, const exprt &char2, const exprt &char_a, const exprt &char_A, const exprt &char_Z)
Returns an expression which is true when the two given characters are equal when ignoring case for AS...
binary_relation_exprt less_than_or_equal_to(exprt lhs, exprt rhs)
binary_relation_exprt greater_or_equal_to(exprt lhs, exprt rhs)
binary_relation_exprt greater_than(exprt lhs, exprt rhs)
equal_exprt equal_to(exprt lhs, exprt rhs)
Collection of constraints of different types: existential formulas, universal formulas,...
std::vector< exprt > existential
std::vector< string_constraintt > universal
const type_with_subtypet & to_type_with_subtype(const typet &type)