cprover
satcheck_glucose.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_GLUCOSE_H
11 #define CPROVER_SOLVERS_SAT_SATCHECK_GLUCOSE_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 Glucose // 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_glucose_baset(T *, message_handlert &message_handler);
34 
35  tvt l_get(literalt a) const override;
36 
37  void lcnf(const bvt &bv) override;
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  bool is_in_conflict(literalt a) const override;
47  bool has_set_assumptions() const override
48  {
49  return true;
50  }
51  bool has_is_in_conflict() const override
52  {
53  return true;
54  }
55 
56  void
57  with_solver_hardness(std::function<void(solver_hardnesst &)> handler) override
58  {
59  if(solver_hardness.has_value())
60  {
61  handler(solver_hardness.value());
62  }
63  }
64 
66  {
68  }
69 
70 protected:
71  resultt do_prop_solve() override;
72 
73  T *solver;
74 
75  void add_variables();
77 
79 };
80 
82  public satcheck_glucose_baset<Glucose::Solver>
83 {
84 public:
85  explicit satcheck_glucose_no_simplifiert(message_handlert &message_handler);
86  const std::string solver_text() override;
87 };
88 
90  public satcheck_glucose_baset<Glucose::SimpSolver>
91 {
92 public:
93  explicit satcheck_glucose_simplifiert(message_handlert &message_handler);
94  const std::string solver_text() override;
95  void set_frozen(literalt a) override;
96  bool is_eliminated(literalt a) const;
97 };
98 
99 #endif // CPROVER_SOLVERS_SAT_SATCHECK_GLUCOSE_H
satcheck_glucose_baset
Definition: satcheck_glucose.h:30
satcheck_glucose_simplifiert::set_frozen
void set_frozen(literalt a) override
Definition: satcheck_glucose.cpp:304
satcheck_glucose_simplifiert::satcheck_glucose_simplifiert
satcheck_glucose_simplifiert(message_handlert &message_handler)
Definition: satcheck_glucose.cpp:296
satcheck_glucose_baset::satcheck_glucose_baset
satcheck_glucose_baset(T *, message_handlert &message_handler)
Definition: satcheck_glucose.cpp:245
resultt
resultt
The result of goto verifying.
Definition: properties.h:44
hardness_collector.h
Capability to collect the statistics of the complexity of individual solver queries.
satcheck_glucose_baset::add_variables
void add_variables()
Definition: satcheck_glucose.cpp:95
bvt
std::vector< literalt > bvt
Definition: literal.h:201
satcheck_glucose_baset::solver
T * solver
Definition: satcheck_glucose.h:73
satcheck_glucose_baset::assumptions
bvt assumptions
Definition: satcheck_glucose.h:76
satcheck_glucose_no_simplifiert
Definition: satcheck_glucose.h:83
satcheck_glucose_baset::set_assignment
void set_assignment(literalt a, bool value) override
Definition: satcheck_glucose.cpp:222
satcheck_glucose_baset::set_assumptions
void set_assumptions(const bvt &_assumptions) override
Definition: satcheck_glucose.cpp:277
cnf_solvert
Definition: cnf.h:73
Glucose
Definition: satcheck_glucose.h:23
satcheck_glucose_no_simplifiert::satcheck_glucose_no_simplifiert
satcheck_glucose_no_simplifiert(message_handlert &message_handler)
Definition: satcheck_glucose.cpp:288
satcheck_glucose_baset::l_get
tvt l_get(literalt a) const override
Definition: satcheck_glucose.cpp:39
satcheck_glucose_simplifiert::solver_text
const std::string solver_text() override
Definition: satcheck_glucose.cpp:89
satcheck_glucose_baset::is_in_conflict
bool is_in_conflict(literalt a) const override
Returns true if an assumption is in the final conflict.
Definition: satcheck_glucose.cpp:265
message_handlert
Definition: message.h:28
satcheck_glucose_no_simplifiert::solver_text
const std::string solver_text() override
Definition: satcheck_glucose.cpp:84
optionalt
nonstd::optional< T > optionalt
Definition: optional.h:35
tvt
Definition: threeval.h:20
solver_hardnesst
A structure that facilitates collecting the complexity statistics from a decision procedure.
Definition: solver_hardness.h:45
satcheck_glucose_baset::has_is_in_conflict
bool has_is_in_conflict() const override
Definition: satcheck_glucose.h:51
literalt
Definition: literal.h:26
satcheck_glucose_baset::~satcheck_glucose_baset
virtual ~satcheck_glucose_baset()
satcheck_glucose_baset::lcnf
void lcnf(const bvt &bv) override
Definition: satcheck_glucose.cpp:102
satcheck_glucose_simplifiert::is_eliminated
bool is_eliminated(literalt a) const
Definition: satcheck_glucose.cpp:322
satcheck_glucose_baset::has_set_assumptions
bool has_set_assumptions() const override
Definition: satcheck_glucose.h:47
hardness_collectort
Definition: hardness_collector.h:23
satcheck_glucose_simplifiert
Definition: satcheck_glucose.h:91
satcheck_glucose_baset::do_prop_solve
resultt do_prop_solve() override
Definition: satcheck_glucose.cpp:157
satcheck_glucose_baset::set_polarity
void set_polarity(literalt a, bool value)
Definition: satcheck_glucose.cpp:67
cnf.h
CNF Generation, via Tseitin.
satcheck_glucose_baset::enable_hardness_collection
void enable_hardness_collection() override
Definition: satcheck_glucose.h:65
satcheck_glucose_baset::solver_hardness
optionalt< solver_hardnesst > solver_hardness
Definition: satcheck_glucose.h:78
satcheck_glucose_baset::with_solver_hardness
void with_solver_hardness(std::function< void(solver_hardnesst &)> handler) override
Definition: satcheck_glucose.h:57