48 struct evaluated_constraintt
52 std::list<lazy_constraintt>::iterator list_it;
54 std::vector<evaluated_constraintt> to_check;
61 const exprt ¤t = it->lazy;
65 if(current.
id()==ID_implies)
75 if(current.
id()==ID_or)
79 orexp.
operands().size() == 2,
"only treats the case of a binary or");
88 to_check.push_back({current,
get_value(current), it});
93 for(
auto &entry : to_check)
95 satcheck_no_simplifiert sat_check{
log.get_message_handler()};
99 solver << entry.simplified;
111 INVARIANT(
false,
"error in array over approximation check");
115 log.debug() <<
"BV-Refinement: " << nb_active
135 if(!
bv_width.get_width_opt(symbol.type()).has_value())
138 for(
const auto &literal : bv)
139 if(!literal.is_constant())
140 prop.set_frozen(literal);
148 prop.set_frozen(constraint_lit);
static bool convert(const irep_idt &identifier, const std::ostringstream &s, symbol_table_baset &symbol_table, message_handlert &message_handler)
Abstraction Refinement Loop.
std::list< lazy_constraintt > lazy_array_constraints
void add_array_constraints()
void update_index_map(bool update_all)
virtual const bvt & convert_bv(const exprt &expr, const std::optional< std::size_t > expected_width={})
Convert expression to vector of literalts, using an internal cache to speed up conversion if availabl...
mp_integer get_value(const bvt &bv)
bv_pointerst(const namespacet &, propt &, message_handlert &, bool get_array_constraints=false)
void freeze_lazy_constraints()
freeze symbols for incremental solving
void arrays_overapproximated()
check whether counterexample is spurious
void finish_eager_conversion_arrays() override
generate array constraints
resultt
Result of running the decision procedure.
Base class for all expressions.
The Boolean constant false.
const irep_idt & id() const
Boolean OR All operands must be boolean, and the result is always boolean.
The Boolean constant true.
static bool find_symbols(symbol_kindt, const typet &, std::function< bool(const symbol_exprt &)>, std::unordered_set< irep_idt > &bindings, const std::vector< irep_idt > &subs_to_find)
Find identifiers with id ID_symbol of the sub expressions and the subs with ID in subs_to_find consid...
std::vector< literalt > bvt
void solver(std::vector< framet > &frames, const std::unordered_set< symbol_exprt, irep_hash > &address_taken, const solver_optionst &solver_options, const namespacet &ns, std::vector< propertyt > &properties, std::size_t property_index)
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
API to expression classes.
const or_exprt & to_or_expr(const exprt &expr)
Cast an exprt to a or_exprt.
const implies_exprt & to_implies_expr(const exprt &expr)
Cast an exprt to a implies_exprt.