Skip to content

Commit ec2ee3c

Browse files
Merge pull request #4440 from peterschrammel/clean-up-decision-procedure
Clean up decision_proceduret
2 parents 12b5ba9 + c56f992 commit ec2ee3c

File tree

13 files changed

+111
-91
lines changed

13 files changed

+111
-91
lines changed

jbmc/src/jbmc/bmc.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ decision_proceduret::resultt bmct::run_decision_procedure()
5454

5555
status() << "Running " << prop_conv.decision_procedure_text() << eom;
5656

57-
decision_proceduret::resultt dec_result = prop_conv.dec_solve();
57+
decision_proceduret::resultt dec_result = prop_conv();
5858

5959
{
6060
auto solver_stop = std::chrono::steady_clock::now();

jbmc/src/jbmc/bmc.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ Author: Daniel Kroening, [email protected]
1515
#include <list>
1616
#include <map>
1717

18-
#include <util/decision_procedure.h>
1918
#include <util/invariant.h>
2019
#include <util/options.h>
2120
#include <util/ui_message.h>
@@ -31,6 +30,8 @@ Author: Daniel Kroening, [email protected]
3130
#include <goto-programs/safety_checker.h>
3231
#include <goto-symex/memory_model.h>
3332

33+
#include <solvers/prop/decision_procedure.h>
34+
3435
class cbmc_solverst;
3536

3637
/// \brief Bounded model checking or path exploration for goto-programs

src/goto-checker/goto_symex_property_decider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ void goto_symex_property_decidert::add_constraint_from_goals(
103103

104104
decision_proceduret::resultt goto_symex_property_decidert::solve()
105105
{
106-
return solver->prop_conv().dec_solve();
106+
return solver->prop_conv()();
107107
}
108108

109109
prop_convt &goto_symex_property_decidert::get_solver() const

src/goto-instrument/accelerate/scratch_program.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ Author: Matt Lewis
1212
#include "scratch_program.h"
1313

1414
#include <util/fixedbv.h>
15-
#include <util/decision_procedure.h>
15+
16+
#include <solvers/prop/decision_procedure.h>
1617

1718
#include <goto-symex/slice.h>
1819

@@ -69,7 +70,7 @@ bool scratch_programt::check_sat(bool do_slice, guard_managert &guard_manager)
6970
std::cout << "Finished symex, invoking decision procedure.\n";
7071
#endif
7172

72-
return (checker->dec_solve()==decision_proceduret::resultt::D_SATISFIABLE);
73+
return ((*checker)() == decision_proceduret::resultt::D_SATISFIABLE);
7374
}
7475

7576
exprt scratch_programt::eval(const exprt &e)

src/solvers/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ SRC = $(BOOLEFORCE_SRC) \
144144
bdd/miniBDD/miniBDD.cpp \
145145
prop/bdd_expr.cpp \
146146
prop/cover_goals.cpp \
147+
prop/decision_procedure.cpp \
147148
prop/literal.cpp \
148149
prop/minimize.cpp \
149150
prop/prop.cpp \

src/solvers/prop/cover_goals.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ operator()(message_handlert &message_handler)
8888
_iterations++;
8989

9090
constraint();
91-
dec_result=prop_conv.dec_solve();
91+
dec_result = prop_conv();
9292

9393
switch(dec_result)
9494
{

src/solvers/prop/cover_goals.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ Author: Daniel Kroening, [email protected]
1414

1515
#include <list>
1616

17-
#include <util/decision_procedure.h>
18-
17+
#include "decision_procedure.h"
1918
#include "literal.h"
2019

2120
class message_handlert;

src/util/decision_procedure.cpp renamed to src/solvers/prop/decision_procedure.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,18 @@ Author: Daniel Kroening, [email protected]
1414
decision_proceduret::~decision_proceduret()
1515
{
1616
}
17+
18+
decision_proceduret::resultt decision_proceduret::operator()()
19+
{
20+
return dec_solve();
21+
}
22+
23+
void decision_proceduret::set_to_true(const exprt &expr)
24+
{
25+
set_to(expr, true);
26+
}
27+
28+
void decision_proceduret::set_to_false(const exprt &expr)
29+
{
30+
set_to(expr, false);
31+
}

src/solvers/prop/decision_procedure.h

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*******************************************************************\
2+
3+
Module: Decision Procedure Interface
4+
5+
Author: Daniel Kroening, [email protected]
6+
7+
\*******************************************************************/
8+
9+
/// \file
10+
/// Decision Procedure Interface
11+
12+
#ifndef CPROVER_SOLVERS_PROP_DECISION_PROCEDURE_H
13+
#define CPROVER_SOLVERS_PROP_DECISION_PROCEDURE_H
14+
15+
#include <iosfwd>
16+
#include <string>
17+
18+
#include "literal.h"
19+
20+
class exprt;
21+
class tvt;
22+
23+
class decision_proceduret
24+
{
25+
public:
26+
/// For a Boolean expression \p expr, add the constraint 'expr' if \p value
27+
/// is `true`, otherwise add 'not expr'
28+
virtual void set_to(const exprt &expr, bool value) = 0;
29+
30+
/// For a Boolean expression \p expr, add the constraint 'expr'
31+
void set_to_true(const exprt &expr);
32+
33+
/// For a Boolean expression \p expr, add the constraint 'not expr'
34+
void set_to_false(const exprt &expr);
35+
36+
/// Convert a Boolean expression and return the corresponding literal
37+
virtual literalt convert(const exprt &expr) = 0;
38+
39+
/// Result of running the decision procedure
40+
enum class resultt
41+
{
42+
D_SATISFIABLE,
43+
D_UNSATISFIABLE,
44+
D_ERROR
45+
};
46+
47+
/// Run the decision procedure to solve the problem
48+
resultt operator()();
49+
50+
/// Return \p expr with variables replaced by values from satisfying
51+
/// assignment if available.
52+
/// Return `nil` if not available
53+
virtual exprt get(const exprt &expr) const = 0;
54+
55+
/// Return value of literal \p l from satisfying assignment.
56+
/// Return tvt::UNKNOWN if not available
57+
virtual tvt l_get(literalt l) const = 0;
58+
59+
/// Print satisfying assignment to \p out
60+
virtual void print_assignment(std::ostream &out) const = 0;
61+
62+
/// Return a textual description of the decision procedure
63+
virtual std::string decision_procedure_text() const = 0;
64+
65+
/// Return the number of incremental solver calls
66+
virtual std::size_t get_number_of_solver_calls() const = 0;
67+
68+
virtual ~decision_proceduret();
69+
70+
protected:
71+
/// Run the decision procedure to solve the problem
72+
virtual resultt dec_solve() = 0;
73+
};
74+
75+
/// Add Boolean constraint \p src to decision procedure \p dest
76+
inline decision_proceduret &
77+
operator<<(decision_proceduret &dest, const exprt &src)
78+
{
79+
dest.set_to_true(src);
80+
return dest;
81+
}
82+
83+
#endif // CPROVER_SOLVERS_PROP_DECISION_PROCEDURE_H

src/solvers/prop/minimize.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ void prop_minimizet::operator()()
123123
bvt assumptions;
124124
assumptions.push_back(c);
125125
prop_conv.set_assumptions(assumptions);
126-
dec_result=prop_conv.dec_solve();
126+
dec_result = prop_conv();
127127

128128
switch(dec_result)
129129
{
@@ -153,6 +153,6 @@ void prop_minimizet::operator()()
153153

154154
bvt assumptions; // no assumptions
155155
prop_conv.set_assumptions(assumptions);
156-
prop_conv.dec_solve();
156+
(void)prop_conv();
157157
}
158158
}

src/solvers/prop/prop_conv.h

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ Author: Daniel Kroening, [email protected]
1313
#include <string>
1414
#include <map>
1515

16-
#include <util/decision_procedure.h>
1716
#include <util/expr.h>
1817
#include <util/message.h>
1918
#include <util/std_expr.h>
2019

20+
#include "decision_procedure.h"
2121
#include "literal.h"
2222
#include "literal_expr.h"
2323
#include "prop.h"
@@ -30,19 +30,8 @@ class prop_convt:public decision_proceduret
3030
public:
3131
virtual ~prop_convt() { }
3232

33-
// conversion to handle
34-
virtual literalt convert(const exprt &expr)=0;
35-
36-
literalt operator()(const exprt &expr)
37-
{
38-
return convert(expr);
39-
}
40-
4133
using decision_proceduret::operator();
4234

43-
// specialised variant of get
44-
virtual tvt l_get(literalt a) const=0;
45-
4635
// incremental solving
4736
virtual void set_frozen(literalt a);
4837
virtual void set_frozen(const bvt &);
@@ -56,9 +45,6 @@ class prop_convt:public decision_proceduret
5645

5746
// Resource limits:
5847
virtual void set_time_limit_seconds(uint32_t) {}
59-
60-
/// Returns the number of incremental solver calls
61-
virtual std::size_t get_number_of_solver_calls() const = 0;
6248
};
6349

6450
//

src/util/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ SRC = allocate_objects.cpp \
88
cmdline.cpp \
99
config.cpp \
1010
cout_message.cpp \
11-
decision_procedure.cpp \
1211
dstring.cpp \
1312
endianness_map.cpp \
1413
expr.cpp \

src/util/decision_procedure.h

Lines changed: 0 additions & 65 deletions
This file was deleted.

0 commit comments

Comments
 (0)