Skip to content

Commit cb2f5ea

Browse files
Merge pull request #4587 from peterschrammel/get-decision-procedure
Allow getting specific decision procedure interface
2 parents 0128bb2 + 452efdc commit cb2f5ea

File tree

9 files changed

+110
-69
lines changed

9 files changed

+110
-69
lines changed

src/goto-checker/bmc_util.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Author: Daniel Kroening, Peter Schrammel
2525

2626
#include <linking/static_lifetime_init.h>
2727

28-
#include <solvers/prop/prop_conv.h>
28+
#include <solvers/decision_procedure.h>
2929

3030
#include <util/make_unique.h>
3131
#include <util/ui_message.h>
@@ -42,13 +42,13 @@ void build_error_trace(
4242
goto_tracet &goto_trace,
4343
const namespacet &ns,
4444
const symex_target_equationt &symex_target_equation,
45-
const prop_convt &prop_conv,
45+
const decision_proceduret &decision_procedure,
4646
ui_message_handlert &ui_message_handler)
4747
{
4848
messaget log(ui_message_handler);
4949
message_building_error_trace(log);
5050

51-
build_goto_trace(symex_target_equation, prop_conv, ns, goto_trace);
51+
build_goto_trace(symex_target_equation, decision_procedure, ns, goto_trace);
5252
}
5353

5454
ssa_step_predicatet
@@ -149,14 +149,14 @@ void output_graphml(
149149

150150
void convert_symex_target_equation(
151151
symex_target_equationt &equation,
152-
prop_convt &prop_conv,
152+
decision_proceduret &decision_procedure,
153153
message_handlert &message_handler)
154154
{
155155
messaget msg(message_handler);
156156
msg.status() << "converting SSA" << messaget::eom;
157157

158158
// convert SSA
159-
equation.convert(prop_conv);
159+
equation.convert(decision_procedure);
160160
}
161161

162162
std::unique_ptr<memory_model_baset>
@@ -356,12 +356,13 @@ std::chrono::duration<double> prepare_property_decider(
356356
auto solver_start = std::chrono::steady_clock::now();
357357

358358
messaget log(ui_message_handler);
359-
log.status() << "Passing problem to "
360-
<< property_decider.get_solver().decision_procedure_text()
361-
<< messaget::eom;
359+
log.status()
360+
<< "Passing problem to "
361+
<< property_decider.get_decision_procedure().decision_procedure_text()
362+
<< messaget::eom;
362363

363364
convert_symex_target_equation(
364-
equation, property_decider.get_solver(), ui_message_handler);
365+
equation, property_decider.get_decision_procedure(), ui_message_handler);
365366
property_decider.update_properties_goals_from_symex_target_equation(
366367
properties);
367368
property_decider.convert_goals();
@@ -381,9 +382,10 @@ void run_property_decider(
381382
auto solver_start = std::chrono::steady_clock::now();
382383

383384
messaget log(ui_message_handler);
384-
log.status() << "Running "
385-
<< property_decider.get_solver().decision_procedure_text()
386-
<< messaget::eom;
385+
log.status()
386+
<< "Running "
387+
<< property_decider.get_decision_procedure().decision_procedure_text()
388+
<< messaget::eom;
387389

388390
property_decider.add_constraint_from_goals(
389391
[&properties](const irep_idt &property_id) {

src/goto-checker/bmc_util.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,21 @@ Author: Daniel Kroening, Peter Schrammel
2222
#include "incremental_goto_checker.h"
2323
#include "properties.h"
2424

25+
class decision_proceduret;
2526
class goto_symex_property_decidert;
2627
class goto_tracet;
2728
class memory_model_baset;
2829
class message_handlert;
2930
class namespacet;
3031
class optionst;
31-
class prop_convt;
3232
class symex_bmct;
3333
class symex_target_equationt;
3434
struct trace_optionst;
3535
class ui_message_handlert;
3636

3737
void convert_symex_target_equation(
3838
symex_target_equationt &,
39-
prop_convt &,
39+
decision_proceduret &,
4040
message_handlert &);
4141

4242
/// Returns a function that checks whether an SSA step is an assertion
@@ -51,7 +51,7 @@ void build_error_trace(
5151
goto_tracet &,
5252
const namespacet &,
5353
const symex_target_equationt &,
54-
const prop_convt &,
54+
const decision_proceduret &,
5555
ui_message_handlert &);
5656

5757
void output_error_trace(

src/goto-checker/goto_symex_property_decider.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ void goto_symex_property_decidert::convert_goals()
7373
{
7474
// Our goal is to falsify a property, i.e., we will
7575
// add the negation of the property as goal.
76-
goal_pair.second.condition =
77-
solver->prop_conv().handle(not_exprt(goal_pair.second.as_expr()));
76+
goal_pair.second.condition = solver->decision_procedure().handle(
77+
not_exprt(goal_pair.second.as_expr()));
7878
}
7979
}
8080

@@ -94,17 +94,24 @@ void goto_symex_property_decidert::add_constraint_from_goals(
9494
}
9595

9696
// this is 'false' if there are no disjuncts
97-
solver->prop_conv().set_to_true(disjunction(disjuncts));
97+
solver->decision_procedure().set_to_true(disjunction(disjuncts));
9898
}
9999

100100
decision_proceduret::resultt goto_symex_property_decidert::solve()
101101
{
102-
return solver->prop_conv()();
102+
return solver->decision_procedure()();
103103
}
104104

105-
prop_convt &goto_symex_property_decidert::get_solver() const
105+
decision_proceduret &
106+
goto_symex_property_decidert::get_decision_procedure() const
106107
{
107-
return solver->prop_conv();
108+
return solver->decision_procedure();
109+
}
110+
111+
stack_decision_proceduret &
112+
goto_symex_property_decidert::get_stack_decision_procedure() const
113+
{
114+
return solver->stack_decision_procedure();
108115
}
109116

110117
symex_target_equationt &goto_symex_property_decidert::get_equation() const
@@ -125,7 +132,9 @@ void goto_symex_property_decidert::update_properties_status_from_goals(
125132
{
126133
auto &status = properties.at(goal_pair.first).status;
127134
if(
128-
solver->prop_conv().get(goal_pair.second.condition).is_true() &&
135+
solver->decision_procedure()
136+
.get(goal_pair.second.condition)
137+
.is_true() &&
129138
status != property_statust::FAIL)
130139
{
131140
status |= property_statust::FAIL;

src/goto-checker/goto_symex_property_decider.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ class goto_symex_property_decidert
4545
decision_proceduret::resultt solve();
4646

4747
/// Returns the solver instance
48-
prop_convt &get_solver() const;
48+
decision_proceduret &get_decision_procedure() const;
49+
50+
/// Returns the solver instance
51+
stack_decision_proceduret &get_stack_decision_procedure() const;
4952

5053
/// Return the equation associated with this instance
5154
symex_target_equationt &get_equation() const;

src/goto-checker/multi_path_symex_checker.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ goto_tracet multi_path_symex_checkert::build_full_trace() const
9090
build_goto_trace(
9191
equation,
9292
equation.SSA_steps.end(),
93-
property_decider.get_solver(),
93+
property_decider.get_decision_procedure(),
9494
ns,
9595
goto_trace);
9696

@@ -103,11 +103,13 @@ goto_tracet multi_path_symex_checkert::build_shortest_trace() const
103103
{
104104
// NOLINTNEXTLINE(whitespace/braces)
105105
counterexample_beautificationt{ui_message_handler}(
106-
dynamic_cast<boolbvt &>(property_decider.get_solver()), equation);
106+
dynamic_cast<boolbvt &>(property_decider.get_stack_decision_procedure()),
107+
equation);
107108
}
108109

109110
goto_tracet goto_trace;
110-
build_goto_trace(equation, property_decider.get_solver(), ns, goto_trace);
111+
build_goto_trace(
112+
equation, property_decider.get_decision_procedure(), ns, goto_trace);
111113

112114
return goto_trace;
113115
}
@@ -119,7 +121,7 @@ multi_path_symex_checkert::build_trace(const irep_idt &property_id) const
119121
build_goto_trace(
120122
equation,
121123
ssa_step_matches_failing_property(property_id),
122-
property_decider.get_solver(),
124+
property_decider.get_decision_procedure(),
123125
ns,
124126
goto_trace);
125127

@@ -146,7 +148,10 @@ fault_location_infot
146148
multi_path_symex_checkert::localize_fault(const irep_idt &property_id) const
147149
{
148150
goto_symex_fault_localizert fault_localizer(
149-
options, ui_message_handler, equation, property_decider.get_solver());
151+
options,
152+
ui_message_handler,
153+
equation,
154+
property_decider.get_stack_decision_procedure());
150155

151156
return fault_localizer(property_id);
152157
}

src/goto-checker/single_path_symex_checker.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ goto_tracet single_path_symex_checkert::build_full_trace() const
122122
build_goto_trace(
123123
property_decider->get_equation(),
124124
property_decider->get_equation().SSA_steps.end(),
125-
property_decider->get_solver(),
125+
property_decider->get_decision_procedure(),
126126
ns,
127127
goto_trace);
128128

@@ -135,14 +135,14 @@ goto_tracet single_path_symex_checkert::build_shortest_trace() const
135135
{
136136
// NOLINTNEXTLINE(whitespace/braces)
137137
counterexample_beautificationt{ui_message_handler}(
138-
dynamic_cast<boolbvt &>(property_decider->get_solver()),
138+
dynamic_cast<boolbvt &>(property_decider->get_stack_decision_procedure()),
139139
property_decider->get_equation());
140140
}
141141

142142
goto_tracet goto_trace;
143143
build_goto_trace(
144144
property_decider->get_equation(),
145-
property_decider->get_solver(),
145+
property_decider->get_decision_procedure(),
146146
ns,
147147
goto_trace);
148148

@@ -156,7 +156,7 @@ single_path_symex_checkert::build_trace(const irep_idt &property_id) const
156156
build_goto_trace(
157157
property_decider->get_equation(),
158158
ssa_step_matches_failing_property(property_id),
159-
property_decider->get_solver(),
159+
property_decider->get_decision_procedure(),
160160
ns,
161161
goto_trace);
162162

0 commit comments

Comments
 (0)