12 #ifndef CPROVER_ANALYSES_INVARIANT_SET_H
13 #define CPROVER_ANALYSES_INVARIANT_SET_H
36 bool get(
const exprt &expr,
unsigned &n);
56 void output(std::ostream &out)
const;
86 typedef std::set<std::pair<unsigned, unsigned> >
ineq_sett;
112 void output(std::ostream &out)
const;
153 ineq_sett::iterator it_d=dest.begin();
155 while(it_d!=dest.end())
157 ineq_sett::iterator next_d(it_d);
160 if(other.find(*it_d)==other.end())
169 for(ineq_sett::iterator it=dest.begin();
173 ineq_sett::iterator next(it);
176 if(it->first==a || it->second==a)
193 static void nnf(
exprt &expr,
bool negate=
false);
219 bool has_eq(
const std::pair<unsigned, unsigned> &p)
const
224 bool has_le(
const std::pair<unsigned, unsigned> &p)
const
229 bool has_ne(
const std::pair<unsigned, unsigned> &p)
const
234 tvt is_eq(std::pair<unsigned, unsigned> p)
const;
235 tvt is_le(std::pair<unsigned, unsigned> p)
const;
244 std::swap(p.first, p.second);
258 void add(
const std::pair<unsigned, unsigned> &p,
ineq_sett &dest);
260 void add_le(
const std::pair<unsigned, unsigned> &p)
265 void add_ne(
const std::pair<unsigned, unsigned> &p)
270 void add_eq(
const std::pair<unsigned, unsigned> &eq);
274 const std::pair<unsigned, unsigned> &eq,
275 const std::pair<unsigned, unsigned> &ineq);
Data structure for representing an arbitrary statement in a program.
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Base class for all expressions.
const irep_idt & operator[](unsigned n) const
void output(std::ostream &out) const
static bool is_constant_address_rec(const exprt &expr)
static bool is_constant_address(const exprt &expr)
std::string build_string(const exprt &expr) const
std::string to_string(unsigned n) const
unsigned add(const exprt &expr)
const exprt & get_expr(unsigned n) const
numberingt< irep_idt > mapt
std::vector< entryt > entries
inv_object_storet(const namespacet &_ns)
bool is_constant(unsigned n) const
bool get(const exprt &expr, unsigned &n)
inv_object_storet & object_store
tvt is_lt(std::pair< unsigned, unsigned > p) const
tvt is_le(std::pair< unsigned, unsigned > p) const
void add_ne(const std::pair< unsigned, unsigned > &p)
bool has_le(const std::pair< unsigned, unsigned > &p) const
tvt implies_rec(const exprt &expr) const
void apply_code(const codet &code)
unsigned_union_find eq_set
std::map< unsigned, boundst > bounds_mapt
exprt get_constant(const exprt &expr) const
tvt is_ne(std::pair< unsigned, unsigned > p) const
interval_templatet< mp_integer > boundst
void simplify(exprt &expr) const
void output(std::ostream &out) const
void add_bounds(unsigned a, const boundst &bound)
bool make_union(const invariant_sett &other_invariants)
void strengthen(const exprt &expr)
void assignment(const exprt &lhs, const exprt &rhs)
void add_eq(const std::pair< unsigned, unsigned > &eq)
static void intersection(ineq_sett &dest, const ineq_sett &other)
std::set< std::pair< unsigned, unsigned > > ineq_sett
static void nnf(exprt &expr, bool negate=false)
void get_bounds(unsigned a, boundst &dest) const
static void remove(ineq_sett &dest, unsigned a)
tvt implies(const exprt &expr) const
tvt is_gt(std::pair< unsigned, unsigned > p) const
void add(const std::pair< unsigned, unsigned > &p, ineq_sett &dest)
void add_type_bounds(const exprt &expr, const typet &type)
void add_le(const std::pair< unsigned, unsigned > &p)
bool has_ne(const std::pair< unsigned, unsigned > &p) const
bool get_object(const exprt &expr, unsigned &n) const
bool make_union_bounds_map(const bounds_mapt &other)
std::string to_string(unsigned a) const
void modifies(const exprt &lhs)
invariant_sett(value_setst &_value_sets, inv_object_storet &_object_store, const namespacet &_ns)
void strengthen_rec(const exprt &expr)
bool has_eq(const std::pair< unsigned, unsigned > &p) const
tvt is_eq(std::pair< unsigned, unsigned > p) const
tvt is_ge(std::pair< unsigned, unsigned > p) const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
The type of an expression, extends irept.
bool same_set(size_type a, size_type b) const
#define PRECONDITION(CONDITION)