Skip to content

Commit 317c1c6

Browse files
author
Lukasz A.J. Wrona
committed
Group bv_refinement config variables
1 parent bf47f81 commit 317c1c6

File tree

6 files changed

+25
-48
lines changed

6 files changed

+25
-48
lines changed

src/solvers/refinement/bv_refinement.h

+9-11
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,9 @@ Author: Daniel Kroening, [email protected]
2020

2121
class bv_refinementt:public bv_pointerst
2222
{
23-
public:
24-
struct infot
23+
private:
24+
struct configt
2525
{
26-
const namespacet *ns=nullptr;
27-
propt *prop=nullptr;
2826
ui_message_handlert::uit ui=ui_message_handlert::uit::PLAIN;
2927
/// Max number of times we refine a formula node
3028
unsigned max_node_refinement=5;
@@ -33,6 +31,12 @@ class bv_refinementt:public bv_pointerst
3331
/// Enable arithmetic refinement
3432
bool refine_arithmetic=true;
3533
};
34+
public:
35+
struct infot : public configt
36+
{
37+
const namespacet *ns=nullptr;
38+
propt *prop=nullptr;
39+
};
3640

3741
explicit bv_refinementt(const infot &info);
3842

@@ -103,18 +107,12 @@ class bv_refinementt:public bv_pointerst
103107

104108
// MEMBERS
105109

106-
// Maximum number of times we refine a formula node
107-
const unsigned max_node_refinement;
108-
// Refinement toggles
109-
const bool do_array_refinement;
110-
const bool do_arithmetic_refinement;
111110
bool progress;
112111
std::vector<approximationt> approximations;
113112
bvt parent_assumptions;
114-
115113
protected:
116114
// use gui format
117-
ui_message_handlert::uit ui;
115+
configt config_;
118116
};
119117

120118
#endif // CPROVER_SOLVERS_REFINEMENT_BV_REFINEMENT_H

src/solvers/refinement/bv_refinement_loop.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,8 @@ Author: Daniel Kroening, [email protected]
1414

1515
bv_refinementt::bv_refinementt(const infot &info):
1616
bv_pointerst(*info.ns, *info.prop),
17-
max_node_refinement(info.max_node_refinement),
18-
do_array_refinement(info.refine_arrays),
19-
do_arithmetic_refinement(info.refine_arithmetic),
2017
progress(false),
21-
ui(info.ui)
18+
config_(info)
2219
{
2320
// check features we need
2421
PRECONDITION(prop.has_set_assumptions());
@@ -44,7 +41,7 @@ decision_proceduret::resultt bv_refinementt::dec_solve()
4441
status() << "BV-Refinement: iteration " << iteration << eom;
4542

4643
// output the very same information in a structured fashion
47-
if(ui==ui_message_handlert::uit::XML_UI)
44+
if(config_.ui==ui_message_handlert::uit::XML_UI)
4845
{
4946
xmlt xml("refinement-iteration");
5047
xml.data=std::to_string(iteration);

src/solvers/refinement/refine_arithmetic.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void bv_refinementt::approximationt::add_under_assumption(literalt l)
3838

3939
bvt bv_refinementt::convert_floatbv_op(const exprt &expr)
4040
{
41-
if(!do_arithmetic_refinement)
41+
if(!config_.refine_arithmetic)
4242
return SUB::convert_floatbv_op(expr);
4343

4444
if(ns.follow(expr.type()).id()!=ID_floatbv ||
@@ -52,7 +52,7 @@ bvt bv_refinementt::convert_floatbv_op(const exprt &expr)
5252

5353
bvt bv_refinementt::convert_mult(const exprt &expr)
5454
{
55-
if(!do_arithmetic_refinement || expr.type().id()==ID_fixedbv)
55+
if(!config_.refine_arithmetic || expr.type().id()==ID_fixedbv)
5656
return SUB::convert_mult(expr);
5757

5858
// we catch any multiplication
@@ -100,7 +100,7 @@ bvt bv_refinementt::convert_mult(const exprt &expr)
100100

101101
bvt bv_refinementt::convert_div(const div_exprt &expr)
102102
{
103-
if(!do_arithmetic_refinement || expr.type().id()==ID_fixedbv)
103+
if(!config_.refine_arithmetic || expr.type().id()==ID_fixedbv)
104104
return SUB::convert_div(expr);
105105

106106
// we catch any division
@@ -118,7 +118,7 @@ bvt bv_refinementt::convert_div(const div_exprt &expr)
118118

119119
bvt bv_refinementt::convert_mod(const mod_exprt &expr)
120120
{
121-
if(!do_arithmetic_refinement || expr.type().id()==ID_fixedbv)
121+
if(!config_.refine_arithmetic || expr.type().id()==ID_fixedbv)
122122
return SUB::convert_mod(expr);
123123

124124
// we catch any mod
@@ -228,7 +228,7 @@ void bv_refinementt::check_SAT(approximationt &a)
228228

229229
// if(a.over_state==1) { debug() << "DISAGREEMENT!\n"; exit(1); }
230230

231-
if(a.over_state<max_node_refinement)
231+
if(a.over_state<config_.max_node_refinement)
232232
{
233233
bvt r;
234234
float_utilst float_utils(prop);

src/solvers/refinement/refine_arrays.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ void bv_refinementt::post_process_arrays()
2929
update_index_map(true);
3030

3131
// we don't actually add any constraints
32-
lazy_arrays=do_array_refinement;
32+
lazy_arrays=config_.refine_arrays;
3333
add_array_constraints();
3434
freeze_lazy_constraints();
3535
}
3636

3737
/// check whether counterexample is spurious
3838
void bv_refinementt::arrays_overapproximated()
3939
{
40-
if(!do_array_refinement)
40+
if(!config_.refine_arrays)
4141
return;
4242

4343
unsigned nb_active=0;

src/solvers/refinement/string_refinement.cpp

+2-15
Original file line numberDiff line numberDiff line change
@@ -86,19 +86,6 @@ static bool validate(const string_refinementt::infot &info)
8686
return true;
8787
}
8888

89-
static bv_refinementt::infot bv_refinement_info(
90-
const string_refinementt::infot &in)
91-
{
92-
bv_refinementt::infot out;
93-
out.ns=in.ns;
94-
out.prop=in.prop;
95-
out.ui=in.ui;
96-
out.max_node_refinement=in.max_node_refinement;
97-
out.refine_arrays=in.refine_arrays;
98-
out.refine_arithmetic=in.refine_arithmetic;
99-
return out;
100-
}
101-
10289
static string_constraint_generatort::infot
10390
generator_info(const string_refinementt::infot &in)
10491
{
@@ -110,7 +97,7 @@ generator_info(const string_refinementt::infot &in)
11097
}
11198

11299
string_refinementt::string_refinementt(const infot &info, bool):
113-
supert(bv_refinement_info(info)),
100+
supert(info),
114101
use_counter_example(false),
115102
do_concretizing(info.trace),
116103
initial_loop_bound(info.refinement_bound),
@@ -1770,7 +1757,7 @@ bool string_refinementt::is_axiom_sat(
17701757
info.refine_arithmetic=true;
17711758
info.refine_arrays=true;
17721759
info.max_node_refinement=5;
1773-
info.ui=ui;
1760+
info.ui=config_.ui;
17741761
supert solver(info);
17751762
solver << axiom;
17761763

src/solvers/refinement/string_refinement.h

+5-10
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,8 @@ Author: Alberto Griggio, [email protected]
3131

3232
class string_refinementt final: public bv_refinementt
3333
{
34-
public:
35-
/// string_refinementt constructor arguments
36-
struct infot
37-
{
38-
const namespacet *ns=nullptr;
39-
propt *prop=nullptr;
40-
ui_message_handlert::uit ui=ui_message_handlert::uit::PLAIN;
34+
private:
35+
struct configt {
4136
unsigned refinement_bound=0;
4237
size_t string_max_length=std::numeric_limits<size_t>::max();
4338
/// Make non-deterministic character arrays have at least one character
@@ -46,11 +41,11 @@ class string_refinementt final: public bv_refinementt
4641
bool trace=false;
4742
/// Make non-deterministic characters printable
4843
bool string_printable=false;
49-
unsigned max_node_refinement=5;
50-
bool refine_arrays=false;
51-
bool refine_arithmetic=false;
5244
bool use_counter_example=false;
5345
};
46+
public:
47+
/// string_refinementt constructor arguments
48+
struct infot:public bv_refinementt::infot, public configt { };
5449

5550
explicit string_refinementt(const infot &);
5651

0 commit comments

Comments
 (0)