CBMC
cover_goals.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Cover a set of goals incrementally
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_SOLVERS_PROP_COVER_GOALS_H
13 #define CPROVER_SOLVERS_PROP_COVER_GOALS_H
14 
15 #include <list>
16 
18 
19 #include <util/expr.h>
20 
21 class message_handlert;
22 
26 {
27 public:
28  explicit cover_goalst(decision_proceduret &_decision_procedure)
29  : _number_covered(0),
30  _iterations(0),
31  decision_procedure(_decision_procedure)
32  {
33  }
34 
35  virtual ~cover_goalst();
36 
37  // returns result of last run on success
39 
40  // the goals
41 
42  struct goalt
43  {
46 
47  explicit goalt(exprt _condition)
48  : condition(std::move(_condition)), status(statust::UNKNOWN)
49  {
50  }
51  };
52 
53  typedef std::list<goalt> goalst;
55 
56  // statistics
57 
58  std::size_t number_covered() const
59  {
60  return _number_covered;
61  }
62 
63  unsigned iterations() const
64  {
65  return _iterations;
66  }
67 
69  {
70  return goals.size();
71  }
72 
73  // managing the goals
74 
75  void add(exprt condition)
76  {
77  goals.emplace_back(std::move(condition));
78  }
79 
80  // register an observer if you want to be told
81  // about satisfying assignments
82 
83  class observert
84  {
85  public:
86  virtual void goal_covered(const goalt &) { }
87  virtual void satisfying_assignment() { }
88  };
89 
91  {
92  observers.push_back(&o);
93  }
94 
95 protected:
96  std::size_t _number_covered;
97  unsigned _iterations;
99 
100  typedef std::vector<observert *> observerst;
102 
103 private:
104  void mark();
105  void constraint();
106 };
107 
108 #endif // CPROVER_SOLVERS_PROP_COVER_GOALS_H
cover_goalst::~cover_goalst
virtual ~cover_goalst()
Definition: cover_goals.cpp:17
ai_verifier_statust::UNKNOWN
@ UNKNOWN
cover_goalst::goals
goalst goals
Definition: cover_goals.h:54
cover_goalst::operator()
decision_proceduret::resultt operator()(message_handlert &)
Try to cover all goals.
Definition: cover_goals.cpp:59
cover_goalst::goalst
std::list< goalt > goalst
Definition: cover_goals.h:53
cover_goalst::goalt::statust::ERROR
@ ERROR
decision_proceduret
Definition: decision_procedure.h:20
cover_goalst::goalt::goalt
goalt(exprt _condition)
Definition: cover_goals.h:47
cover_goalst::observert
Definition: cover_goals.h:83
exprt
Base class for all expressions.
Definition: expr.h:55
cover_goalst::_number_covered
std::size_t _number_covered
Definition: cover_goals.h:96
cover_goalst::observert::goal_covered
virtual void goal_covered(const goalt &)
Definition: cover_goals.h:86
cover_goalst
Try to cover some given set of goals incrementally.
Definition: cover_goals.h:25
decision_procedure.h
cover_goalst::number_covered
std::size_t number_covered() const
Definition: cover_goals.h:58
expr.h
cover_goalst::iterations
unsigned iterations() const
Definition: cover_goals.h:63
cover_goalst::goalt::statust
statust
Definition: cover_goals.h:45
cover_goalst::cover_goalst
cover_goalst(decision_proceduret &_decision_procedure)
Definition: cover_goals.h:28
cover_goalst::goalt::statust::UNCOVERED
@ UNCOVERED
cover_goalst::mark
void mark()
Mark goals that are covered.
Definition: cover_goals.cpp:22
cover_goalst::constraint
void constraint()
Build clause.
Definition: cover_goals.cpp:43
cover_goalst::goalt::condition
exprt condition
Definition: cover_goals.h:44
cover_goalst::observers
observerst observers
Definition: cover_goals.h:101
cover_goalst::_iterations
unsigned _iterations
Definition: cover_goals.h:97
cover_goalst::register_observer
void register_observer(observert &o)
Definition: cover_goals.h:90
cover_goalst::goalt::status
enum cover_goalst::goalt::statust status
cover_goalst::observert::satisfying_assignment
virtual void satisfying_assignment()
Definition: cover_goals.h:87
cover_goalst::size
goalst::size_type size() const
Definition: cover_goals.h:68
cover_goalst::decision_procedure
decision_proceduret & decision_procedure
Definition: cover_goals.h:98
message_handlert
Definition: message.h:27
cover_goalst::goalt::statust::UNKNOWN
@ UNKNOWN
decision_proceduret::resultt
resultt
Result of running the decision procedure.
Definition: decision_procedure.h:43
cover_goalst::goalt::statust::COVERED
@ COVERED
cover_goalst::observerst
std::vector< observert * > observerst
Definition: cover_goals.h:100
cover_goalst::add
void add(exprt condition)
Definition: cover_goals.h:75
cover_goalst::goalt
Definition: cover_goals.h:42
size_type
unsignedbv_typet size_type()
Definition: c_types.cpp:68