Skip to content

Commit 2eed573

Browse files
author
Lukasz A.J. Wrona
committed
Static add_axioms for strings
1 parent 666c146 commit 2eed573

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

src/solvers/refinement/string_refinement.cpp

+24-6
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,11 @@ static void depends_in_symbol_map(const exprt &expr, std::vector<exprt> &accu)
266266
/// \param rhs: an expression to map it to, which should be either a symbol
267267
/// a string_exprt, an array_exprt, an array_of_exprt or an
268268
/// if_exprt with branches of the previous kind
269-
void string_refinementt::add_symbol_to_symbol_map(
270-
const exprt &lhs, const exprt &rhs)
269+
void add_symbol_to_symbol_map(
270+
replace_mapt& symbol_resolve,
271+
std::map<exprt, std::list<exprt>> &reverse_symbol_resolve,
272+
const exprt &lhs,
273+
const exprt &rhs)
271274
{
272275
PRECONDITION(lhs.id()==ID_symbol);
273276
PRECONDITION(rhs.id()==ID_symbol ||
@@ -373,18 +376,29 @@ bool string_refinementt::add_axioms_for_string_assigns(
373376
set_char_array_equality(lhs, rhs);
374377
if(rhs.id() == ID_symbol || rhs.id() == ID_array)
375378
{
376-
add_symbol_to_symbol_map(lhs, rhs);
379+
add_symbol_to_symbol_map(
380+
symbol_resolve,
381+
reverse_symbol_resolve,
382+
lhs,
383+
rhs);
377384
return false;
378385
}
379386
else if(rhs.id()==ID_nondet_symbol)
380387
{
381388
add_symbol_to_symbol_map(
382-
lhs, generator.fresh_symbol("nondet_array", lhs.type()));
389+
symbol_resolve,
390+
reverse_symbol_resolve,
391+
lhs,
392+
generator.fresh_symbol("nondet_array", lhs.type()));
383393
return false;
384394
}
385395
else if(rhs.id()==ID_if)
386396
{
387-
add_symbol_to_symbol_map(lhs, rhs);
397+
add_symbol_to_symbol_map(
398+
symbol_resolve,
399+
reverse_symbol_resolve,
400+
lhs,
401+
rhs);
388402
return true;
389403
}
390404
else
@@ -396,7 +410,11 @@ bool string_refinementt::add_axioms_for_string_assigns(
396410
if(is_refined_string_type(rhs.type()))
397411
{
398412
exprt refined_rhs=generator.add_axioms_for_refined_string(rhs);
399-
add_symbol_to_symbol_map(lhs, refined_rhs);
413+
add_symbol_to_symbol_map(
414+
symbol_resolve,
415+
reverse_symbol_resolve,
416+
lhs,
417+
refined_rhs);
400418
return false;
401419
}
402420
// Other cases are to be handled by supert::set_to.

src/solvers/refinement/string_refinement.h

-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class string_refinementt final: public bv_refinementt
101101
bool simplify=true,
102102
bool add_to_index_set=true);
103103

104-
void add_symbol_to_symbol_map(const exprt &lhs, const exprt &rhs);
105104
bool add_axioms_for_string_assigns(const exprt &lhs, const exprt &rhs);
106105
void set_to(const exprt &expr, bool value) override;
107106

0 commit comments

Comments
 (0)