cprover
satcheck_minisat2.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_SOLVERS_SAT_SATCHECK_MINISAT2_H
11 #define CPROVER_SOLVERS_SAT_SATCHECK_MINISAT2_H
12 
13 #include "cnf.h"
14 
16 
17 // Select one: basic solver or with simplification.
18 // Note that the solver with simplifier isn't really robust
19 // when used incrementally, as variables may disappear
20 // unless set to 'frozen'.
21 
22 namespace Minisat // NOLINT(readability/namespace)
23 {
24 class Solver; // NOLINT(readability/identifiers)
25 class SimpSolver; // NOLINT(readability/identifiers)
26 }
27 
28 template <typename T>
30 {
31 public:
32  satcheck_minisat2_baset(T *, message_handlert &message_handler);
34 
35  tvt l_get(literalt a) const override final;
36 
37  void lcnf(const bvt &bv) override final;
38  void set_assignment(literalt a, bool value) override;
39 
40  // extra MiniSat feature: solve with assumptions
41  void set_assumptions(const bvt &_assumptions) override;
42 
43  // extra MiniSat feature: default branching decision
44  void set_polarity(literalt a, bool value);
45 
46  // extra MiniSat feature: interrupt running SAT query
47  void interrupt();
48 
49  // extra MiniSat feature: permit previously interrupted SAT query to continue
50  void clear_interrupt();
51 
52  bool is_in_conflict(literalt a) const override;
53  bool has_set_assumptions() const override final
54  {
55  return true;
56  }
57  bool has_is_in_conflict() const override final
58  {
59  return true;
60  }
61 
62  void set_time_limit_seconds(uint32_t lim) override
63  {
65  }
66 
67  void
68  with_solver_hardness(std::function<void(solver_hardnesst &)> handler) override
69  {
70  if(solver_hardness.has_value())
71  {
72  handler(solver_hardness.value());
73  }
74  }
75 
77  {
79  }
80 
81 protected:
82  resultt do_prop_solve() override;
83 
84  T *solver;
86 
87  void add_variables();
89 
91 };
92 
94  public satcheck_minisat2_baset<Minisat::Solver>
95 {
96 public:
97  explicit satcheck_minisat_no_simplifiert(message_handlert &message_handler);
98  const std::string solver_text() override;
99 };
100 
102  public satcheck_minisat2_baset<Minisat::SimpSolver>
103 {
104 public:
105  explicit satcheck_minisat_simplifiert(message_handlert &message_handler);
106  const std::string solver_text() override final;
107  void set_frozen(literalt a) override final;
108  bool is_eliminated(literalt a) const;
109 };
110 
111 #endif // CPROVER_SOLVERS_SAT_SATCHECK_MINISAT2_H
bool is_in_conflict(literalt a) const override
Returns true if an assumption is in the final conflict.
bool has_is_in_conflict() const override final
optionalt< solver_hardnesst > solver_hardness
bool has_set_assumptions() const override final
satcheck_minisat2_baset(T *, message_handlert &message_handler)
void enable_hardness_collection() override
void set_polarity(literalt a, bool value)
void lcnf(const bvt &bv) override final
tvt l_get(literalt a) const override final
void with_solver_hardness(std::function< void(solver_hardnesst &)> handler) override
void set_time_limit_seconds(uint32_t lim) override
resultt do_prop_solve() override
void set_assignment(literalt a, bool value) override
virtual ~satcheck_minisat2_baset()
void set_assumptions(const bvt &_assumptions) override
satcheck_minisat_no_simplifiert(message_handlert &message_handler)
const std::string solver_text() override
satcheck_minisat_simplifiert(message_handlert &message_handler)
void set_frozen(literalt a) override final
bool is_eliminated(literalt a) const
const std::string solver_text() override final
Definition: threeval.h:20
CNF Generation, via Tseitin.
Capability to collect the statistics of the complexity of individual solver queries.
std::vector< literalt > bvt
Definition: literal.h:201
nonstd::optional< T > optionalt
Definition: optional.h:35
resultt
The result of goto verifying.
Definition: properties.h:44
A structure that facilitates collecting the complexity statistics from a decision procedure.