cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
string_constraint.h
Go to the documentation of this file.
1
/*******************************************************************\
2
3
Module: Defines string constraints. These are formulas talking about strings.
4
We implemented two forms of constraints: `string_constraintt`
5
are formulas of the form $\forall univ_var \in [lb,ub[. prem => body$,
6
and not_contains_constraintt of the form:
7
$\forall x in [lb,ub[. p(x) => \exists y in [lb,ub[. s1[x+y] != s2[y]$.
8
9
Author: Romain Brenguier, romain.brenguier@diffblue.com
10
11
\*******************************************************************/
12
19
20
#ifndef CPROVER_SOLVERS_REFINEMENT_STRING_CONSTRAINT_H
21
#define CPROVER_SOLVERS_REFINEMENT_STRING_CONSTRAINT_H
22
23
#include <
util/format_expr.h
>
24
#include <
util/string_expr.h
>
25
#include <
util/union_find_replace.h
>
26
27
class
message_handlert
;
28
55
class
string_constraintt
final
56
{
57
public
:
58
// String constraints are of the form
59
// forall univ_var in [lower_bound,upper_bound[. body
60
symbol_exprt
univ_var
;
61
exprt
lower_bound
;
62
exprt
upper_bound
;
63
exprt
body
;
64
65
string_constraintt
(
66
const
symbol_exprt
&_univ_var,
67
const
exprt
&
lower_bound
,
68
const
exprt
&
upper_bound
,
69
const
exprt
&
body
,
70
message_handlert
&message_handler);
71
72
// Default bound inferior is 0
73
string_constraintt
(
74
symbol_exprt
univ_var
,
75
exprt
upper_bound
,
76
exprt
body
,
77
message_handlert
&message_handler)
78
:
string_constraintt
(
79
univ_var
,
80
from_integer
(0,
univ_var
.type()),
81
upper_bound
,
82
body
,
83
message_handler)
84
{
85
}
86
87
exprt
univ_within_bounds
()
const
88
{
89
return
and_exprt
(
90
binary_relation_exprt
(
lower_bound
, ID_le,
univ_var
),
91
binary_relation_exprt
(
upper_bound
, ID_gt,
univ_var
));
92
}
93
94
void
replace_expr
(
union_find_replacet
&replace_map)
95
{
96
replace_map.
replace_expr
(
lower_bound
);
97
replace_map.
replace_expr
(
upper_bound
);
98
replace_map.
replace_expr
(
body
);
99
}
100
101
exprt
negation
()
const
102
{
103
return
and_exprt
(
univ_within_bounds
(),
not_exprt
(
body
));
104
}
105
};
106
110
inline
std::string
to_string
(
const
string_constraintt
&expr)
111
{
112
std::ostringstream out;
113
out <<
"forall "
<<
format
(expr.
univ_var
) <<
" in ["
114
<<
format
(expr.
lower_bound
) <<
", "
<<
format
(expr.
upper_bound
) <<
"). "
115
<<
format
(expr.
body
);
116
return
out.str();
117
}
118
126
struct
string_not_contains_constraintt
127
{
128
exprt
univ_lower_bound
;
129
exprt
univ_upper_bound
;
130
exprt
premise
;
131
exprt
exists_lower_bound
;
132
exprt
exists_upper_bound
;
133
array_string_exprt
s0
;
134
array_string_exprt
s1
;
135
};
136
137
std::string
to_string
(
const
string_not_contains_constraintt
&expr);
138
139
void
replace
(
140
const
union_find_replacet
&replace_map,
141
string_not_contains_constraintt
&constraint);
142
143
bool
operator==
(
144
const
string_not_contains_constraintt
&left,
145
const
string_not_contains_constraintt
&right);
146
147
// NOLINTNEXTLINE [allow specialization within 'std']
148
namespace
std
149
{
150
template
<>
151
// NOLINTNEXTLINE [struct identifier 'hash' does not end in t]
152
struct
hash<
string_not_contains_constraintt
>
153
{
154
size_t
operator()
(
const
string_not_contains_constraintt
&constraint)
const
155
{
156
return
irep_hash
()(constraint.
univ_lower_bound
) ^
157
irep_hash
()(constraint.
univ_upper_bound
) ^
158
irep_hash
()(constraint.
exists_lower_bound
) ^
159
irep_hash
()(constraint.
exists_upper_bound
) ^
160
irep_hash
()(constraint.
premise
) ^
irep_hash
()(constraint.
s0
) ^
161
irep_hash
()(constraint.
s1
);
162
}
163
};
164
}
// namespace std
165
166
#endif
from_integer
constant_exprt from_integer(const mp_integer &int_value, const typet &type)
Definition
arith_tools.cpp:99
and_exprt
Boolean AND All operands must be boolean, and the result is always boolean.
Definition
std_expr.h:2033
array_string_exprt
Definition
string_expr.h:68
binary_relation_exprt
A base class for relations, i.e., binary predicates whose two operands have the same type.
Definition
std_expr.h:774
exprt
Base class for all expressions.
Definition
expr.h:57
message_handlert
Definition
message.h:27
not_exprt
Boolean negation.
Definition
std_expr.h:2378
string_constraintt
Definition
string_constraint.h:56
string_constraintt::string_constraintt
string_constraintt(symbol_exprt univ_var, exprt upper_bound, exprt body, message_handlert &message_handler)
Definition
string_constraint.h:73
string_constraintt::body
exprt body
Definition
string_constraint.h:63
string_constraintt::replace_expr
void replace_expr(union_find_replacet &replace_map)
Definition
string_constraint.h:94
string_constraintt::univ_within_bounds
exprt univ_within_bounds() const
Definition
string_constraint.h:87
string_constraintt::string_constraintt
string_constraintt(const symbol_exprt &_univ_var, const exprt &lower_bound, const exprt &upper_bound, const exprt &body, message_handlert &message_handler)
Definition
string_constraint.cpp:34
string_constraintt::univ_var
symbol_exprt univ_var
Definition
string_constraint.h:60
string_constraintt::negation
exprt negation() const
Definition
string_constraint.h:101
string_constraintt::lower_bound
exprt lower_bound
Definition
string_constraint.h:61
string_constraintt::upper_bound
exprt upper_bound
Definition
string_constraint.h:62
symbol_exprt
Expression to hold a symbol (variable).
Definition
std_expr.h:132
union_find_replacet
Similar interface to union-find for expressions, with a function for replacing sub-expressions by the...
Definition
union_find_replace.h:17
union_find_replacet::replace_expr
bool replace_expr(exprt &expr) const
Replace subexpressions of expr by the representative element of the set they belong to.
Definition
union_find_replace.cpp:28
format
static format_containert< T > format(const T &o)
Definition
format.h:37
format_expr.h
std
STL namespace.
replace
void replace(const union_find_replacet &replace_map, string_not_contains_constraintt &constraint)
Definition
string_constraint.cpp:70
to_string
std::string to_string(const string_constraintt &expr)
Used for debug printing.
Definition
string_constraint.h:110
operator==
bool operator==(const string_not_contains_constraintt &left, const string_not_contains_constraintt &right)
Definition
string_constraint.cpp:83
string_expr.h
String expressions for the string solver.
irep_hash
Definition
irep.h:469
std::hash< string_not_contains_constraintt >::operator()
size_t operator()(const string_not_contains_constraintt &constraint) const
Definition
string_constraint.h:154
string_not_contains_constraintt
Constraints to encode non containement of strings.
Definition
string_constraint.h:127
string_not_contains_constraintt::premise
exprt premise
Definition
string_constraint.h:130
string_not_contains_constraintt::exists_lower_bound
exprt exists_lower_bound
Definition
string_constraint.h:131
string_not_contains_constraintt::exists_upper_bound
exprt exists_upper_bound
Definition
string_constraint.h:132
string_not_contains_constraintt::s0
array_string_exprt s0
Definition
string_constraint.h:133
string_not_contains_constraintt::univ_lower_bound
exprt univ_lower_bound
Definition
string_constraint.h:128
string_not_contains_constraintt::univ_upper_bound
exprt univ_upper_bound
Definition
string_constraint.h:129
string_not_contains_constraintt::s1
array_string_exprt s1
Definition
string_constraint.h:134
union_find_replace.h
solvers
strings
string_constraint.h
Generated by
1.17.0