cprover
bv_refinementt Class Reference

#include <bv_refinement.h>

+ Inheritance diagram for bv_refinementt:
+ Collaboration diagram for bv_refinementt:

Classes

struct  approximationt
 
struct  configt
 
struct  infot
 

Public Member Functions

 bv_refinementt (const infot &info)
 
decision_proceduret::resultt dec_solve () override
 
std::string decision_procedure_text () const override
 
- Public Member Functions inherited from bv_pointerst
 bv_pointerst (const namespacet &_ns, propt &_prop)
 
void post_process () override
 
- Public Member Functions inherited from boolbvt
 boolbvt (const namespacet &_ns, propt &_prop)
 
virtual const bvtconvert_bv (const exprt &expr, const optionalt< std::size_t > expected_width=nullopt)
 
exprt get (const exprt &expr) const override
 
void set_to (const exprt &expr, bool value) override
 
void print_assignment (std::ostream &out) const override
 
void clear_cache () override
 
virtual bool literal (const exprt &expr, std::size_t bit, literalt &literal) const
 
mp_integer get_value (const bvt &bv)
 
mp_integer get_value (const bvt &bv, std::size_t offset, std::size_t width)
 
const boolbv_maptget_map () const
 
- Public Member Functions inherited from arrayst
 arrayst (const namespacet &_ns, propt &_prop)
 
literalt record_array_equality (const equal_exprt &expr)
 
void record_array_index (const index_exprt &expr)
 
- Public Member Functions inherited from equalityt
 equalityt (const namespacet &_ns, propt &_prop)
 
virtual literalt equality (const exprt &e1, const exprt &e2)
 
void post_process () override
 
- Public Member Functions inherited from prop_conv_solvert
 prop_conv_solvert (const namespacet &_ns, propt &_prop)
 
virtual ~prop_conv_solvert ()=default
 
void set_to (const exprt &expr, bool value) override
 
void print_assignment (std::ostream &out) const override
 
exprt get (const exprt &expr) const override
 
virtual tvt l_get (literalt a) const override
 
void set_frozen (literalt a) override
 
bool has_set_assumptions () const override
 
void set_all_frozen () override
 
literalt convert (const exprt &expr) override
 
bool is_in_conflict (literalt l) const override
 determine whether a variable is in the final conflict More...
 
bool has_is_in_conflict () const override
 
bool literal (const symbol_exprt &expr, literalt &literal) const
 
const cachetget_cache () const
 
const symbolstget_symbols () const
 
void set_time_limit_seconds (uint32_t lim) override
 
virtual void set_frozen (literalt a)
 
virtual void set_frozen (const bvt &)
 
- Public Member Functions inherited from prop_convt
 prop_convt (const namespacet &_ns)
 
virtual ~prop_convt ()
 
literalt operator() (const exprt &expr)
 
virtual void set_frozen (const bvt &)
 
- Public Member Functions inherited from decision_proceduret
 decision_proceduret (const namespacet &_ns)
 
virtual ~decision_proceduret ()
 
void set_to_true (const exprt &expr)
 
void set_to_false (const exprt &expr)
 
resultt operator() ()
 
- Public Member Functions inherited from messaget
virtual void set_message_handler (message_handlert &_message_handler)
 
message_handlertget_message_handler ()
 
 messaget ()
 
 messaget (const messaget &other)
 
messagetoperator= (const messaget &other)
 
 messaget (message_handlert &_message_handler)
 
virtual ~messaget ()
 
mstreamtget_mstream (unsigned message_level) const
 
mstreamterror () const
 
mstreamtwarning () const
 
mstreamtresult () const
 
mstreamtstatus () const
 
mstreamtstatistics () const
 
mstreamtprogress () const
 
mstreamtdebug () const
 
void conditional_output (mstreamt &mstream, const std::function< void(mstreamt &)> &output_generator) const
 Generate output to message_stream using output_generator if the configured verbosity is at least as high as that of message_stream. More...
 

Protected Member Functions

void post_process_arrays () override
 generate array constraints More...
 
bvt convert_mult (const mult_exprt &expr) override
 
bvt convert_div (const div_exprt &expr) override
 
bvt convert_mod (const mod_exprt &expr) override
 
bvt convert_floatbv_op (const exprt &expr) override
 
void set_assumptions (const bvt &_assumptions) override
 
- Protected Member Functions inherited from bv_pointerst
void encode (std::size_t object, bvt &bv)
 
virtual bvt convert_pointer_type (const exprt &expr)
 
virtual void add_addr (const exprt &expr, bvt &bv)
 
literalt convert_rest (const exprt &expr) override
 
bvt convert_bitvector (const exprt &expr) override
 Converts an expression into its gate-level representation and returns a vector of literals corresponding to the outputs of the Boolean circuit. More...
 
exprt bv_get_rec (const bvt &bv, const std::vector< bool > &unknown, std::size_t offset, const typet &type) const override
 
bool convert_address_of_rec (const exprt &expr, bvt &bv)
 
void offset_arithmetic (bvt &bv, const mp_integer &x)
 
void offset_arithmetic (bvt &bv, const mp_integer &factor, const exprt &index)
 
void offset_arithmetic (bvt &bv, const mp_integer &factor, const bvt &index_bv)
 
void do_postponed (const postponedt &postponed)
 
- Protected Member Functions inherited from boolbvt
virtual bool boolbv_set_equality_to_true (const equal_exprt &expr)
 
void conversion_failed (const exprt &expr, bvt &bv)
 
bvt conversion_failed (const exprt &expr)
 
bool type_conversion (const typet &src_type, const bvt &src, const typet &dest_type, bvt &dest)
 
virtual literalt convert_bv_rel (const exprt &expr)
 
virtual literalt convert_typecast (const typecast_exprt &expr)
 conversion from bitvector types to boolean More...
 
virtual literalt convert_reduction (const unary_exprt &expr)
 
virtual literalt convert_onehot (const unary_exprt &expr)
 
virtual literalt convert_extractbit (const extractbit_exprt &expr)
 
virtual literalt convert_overflow (const exprt &expr)
 
virtual literalt convert_equality (const equal_exprt &expr)
 
virtual literalt convert_verilog_case_equality (const binary_relation_exprt &expr)
 
virtual literalt convert_ieee_float_rel (const exprt &expr)
 
virtual literalt convert_quantifier (const quantifier_exprt &expr)
 
virtual bvt convert_index (const exprt &array, const mp_integer &index)
 index operator with constant index More...
 
virtual bvt convert_index (const index_exprt &expr)
 
virtual bvt convert_bswap (const bswap_exprt &expr)
 
virtual bvt convert_byte_extract (const byte_extract_exprt &expr)
 
virtual bvt convert_byte_update (const byte_update_exprt &expr)
 
virtual bvt convert_constraint_select_one (const exprt &expr)
 
virtual bvt convert_if (const if_exprt &expr)
 
virtual bvt convert_struct (const struct_exprt &expr)
 
virtual bvt convert_array (const exprt &expr)
 
virtual bvt convert_vector (const vector_exprt &expr)
 
virtual bvt convert_complex (const complex_exprt &expr)
 
virtual bvt convert_complex_real (const complex_real_exprt &expr)
 
virtual bvt convert_complex_imag (const complex_imag_exprt &expr)
 
virtual bvt convert_lambda (const exprt &expr)
 
virtual bvt convert_let (const let_exprt &)
 
virtual bvt convert_array_of (const array_of_exprt &expr)
 
virtual bvt convert_union (const union_exprt &expr)
 
virtual bvt convert_bv_typecast (const typecast_exprt &expr)
 
virtual bvt convert_add_sub (const exprt &expr)
 
virtual bvt convert_floatbv_typecast (const floatbv_typecast_exprt &expr)
 
virtual bvt convert_member (const member_exprt &expr)
 
virtual bvt convert_with (const exprt &expr)
 
virtual bvt convert_update (const exprt &expr)
 
virtual bvt convert_case (const exprt &expr)
 
virtual bvt convert_cond (const cond_exprt &)
 
virtual bvt convert_shift (const binary_exprt &expr)
 
virtual bvt convert_bitwise (const exprt &expr)
 
virtual bvt convert_unary_minus (const unary_minus_exprt &expr)
 
virtual bvt convert_abs (const abs_exprt &expr)
 
virtual bvt convert_concatenation (const concatenation_exprt &expr)
 
virtual bvt convert_replication (const replication_exprt &expr)
 
virtual bvt convert_bv_literals (const exprt &expr)
 
virtual bvt convert_constant (const constant_exprt &expr)
 
virtual bvt convert_extractbits (const extractbits_exprt &expr)
 
virtual bvt convert_symbol (const exprt &expr)
 
virtual bvt convert_bv_reduction (const unary_exprt &expr)
 
virtual bvt convert_not (const not_exprt &expr)
 
virtual bvt convert_power (const binary_exprt &expr)
 
virtual bvt convert_function_application (const function_application_exprt &expr)
 
virtual exprt make_bv_expr (const typet &type, const bvt &bv)
 
virtual exprt make_free_bv_expr (const typet &type)
 
void convert_with (const typet &type, const exprt &op1, const exprt &op2, const bvt &prev_bv, bvt &next_bv)
 
void convert_with_bv (const exprt &op1, const exprt &op2, const bvt &prev_bv, bvt &next_bv)
 
void convert_with_array (const array_typet &type, const exprt &op1, const exprt &op2, const bvt &prev_bv, bvt &next_bv)
 
void convert_with_union (const union_typet &type, const exprt &op2, const bvt &prev_bv, bvt &next_bv)
 
void convert_with_struct (const struct_typet &type, const exprt &op1, const exprt &op2, const bvt &prev_bv, bvt &next_bv)
 
void convert_update_rec (const exprt::operandst &designator, std::size_t d, const typet &type, std::size_t offset, const exprt &new_value, bvt &bv)
 
virtual exprt bv_get_unbounded_array (const exprt &) const
 
exprt bv_get (const bvt &bv, const typet &type) const
 
exprt bv_get_cache (const exprt &expr) const
 
bool is_unbounded_array (const typet &type) const override
 
void post_process_quantifiers ()
 
offset_mapt build_offset_map (const struct_typet &src)
 
- Protected Member Functions inherited from arrayst
void add_array_constraint (const lazy_constraintt &lazy, bool refine=true)
 adds array constraints (refine=true...lazily for the refinement loop) More...
 
void add_array_constraints ()
 
void add_array_Ackermann_constraints ()
 
void add_array_constraints_equality (const index_sett &index_set, const array_equalityt &array_equality)
 
void add_array_constraints (const index_sett &index_set, const exprt &expr)
 
void add_array_constraints_if (const index_sett &index_set, const if_exprt &exprt)
 
void add_array_constraints_with (const index_sett &index_set, const with_exprt &expr)
 
void add_array_constraints_update (const index_sett &index_set, const update_exprt &expr)
 
void add_array_constraints_array_of (const index_sett &index_set, const array_of_exprt &exprt)
 
void update_index_map (bool update_all)
 
void update_index_map (std::size_t i)
 merge the indices into the root More...
 
void collect_arrays (const exprt &a)
 
void collect_indices ()
 
void collect_indices (const exprt &a)
 
- Protected Member Functions inherited from equalityt
virtual literalt equality2 (const exprt &e1, const exprt &e2)
 
virtual void add_equality_constraints ()
 
virtual void add_equality_constraints (const typestructt &typestruct)
 
- Protected Member Functions inherited from prop_conv_solvert
virtual bool get_bool (const exprt &expr, tvt &value) const
 get a boolean value from counter example if not valid More...
 
virtual literalt convert_bool (const exprt &expr)
 
virtual bool set_equality_to_true (const equal_exprt &expr)
 
virtual literalt get_literal (const irep_idt &symbol)
 
virtual void ignoring (const exprt &expr)
 

Protected Attributes

configt config_
 
- Protected Attributes inherited from bv_pointerst
pointer_logict pointer_logic
 
unsigned object_bits
 
unsigned offset_bits
 
unsigned bits
 
postponed_listt postponed_list
 
- Protected Attributes inherited from boolbvt
bv_utilst bv_utils
 
functionst functions
 
boolbv_mapt map
 
bv_cachet bv_cache
 
quantifier_listt quantifier_list
 
numbering< irep_idtstring_numbering
 
- Protected Attributes inherited from arrayst
array_equalitiest array_equalities
 
union_find< exprtarrays
 
index_mapt index_map
 
bool lazy_arrays
 
bool incremental_cache
 
std::list< lazy_constrainttlazy_array_constraints
 
std::map< exprt, bool > expr_map
 
std::set< std::size_t > update_indices
 
- Protected Attributes inherited from equalityt
typemapt typemap
 
- Protected Attributes inherited from prop_conv_solvert
bool post_processing_done = false
 
symbolst symbols
 
cachet cache
 
proptprop
 
- Protected Attributes inherited from decision_proceduret
const namespacetns
 
- Protected Attributes inherited from messaget
message_handlertmessage_handler
 
mstreamt mstream
 

Private Member Functions

resultt prop_solve ()
 
approximationtadd_approximation (const exprt &expr, bvt &bv)
 
bool conflicts_with (approximationt &approximation)
 check if an under-approximation is part of the conflict More...
 
void check_SAT (approximationt &approximation)
 inspect if satisfying assignment extends to original formula, otherwise refine overapproximation More...
 
void check_UNSAT (approximationt &approximation)
 inspect if proof holds on original formula, otherwise refine underapproximation More...
 
void initialize (approximationt &approximation)
 
void get_values (approximationt &approximation)
 
void check_SAT ()
 
void check_UNSAT ()
 
void arrays_overapproximated ()
 check whether counterexample is spurious More...
 
void freeze_lazy_constraints ()
 freeze symbols for incremental solving More...
 

Private Attributes

bool progress
 
std::list< approximationtapproximations
 
bvt parent_assumptions
 

Additional Inherited Members

- Public Types inherited from boolbvt
enum  unbounded_arrayt { unbounded_arrayt::U_NONE, unbounded_arrayt::U_ALL, unbounded_arrayt::U_AUTO }
 
- Public Types inherited from arrayst
typedef equalityt SUB
 
- Public Types inherited from prop_conv_solvert
typedef std::map< irep_idt, literaltsymbolst
 
typedef std::unordered_map< exprt, literalt, irep_hashcachet
 
- Public Types inherited from decision_proceduret
enum  resultt { resultt::D_SATISFIABLE, resultt::D_UNSATISFIABLE, resultt::D_ERROR }
 
- Public Types inherited from messaget
enum  message_levelt {
  M_ERROR =1, M_WARNING =2, M_RESULT =4, M_STATUS =6,
  M_STATISTICS =8, M_PROGRESS =9, M_DEBUG =10
}
 
- Static Public Member Functions inherited from messaget
static unsigned eval_verbosity (const std::string &user_input, const message_levelt default_verbosity, message_handlert &dest)
 Parse a (user-)provided string as a verbosity level and set it as the verbosity of dest. More...
 
static commandt command (unsigned c)
 Create an ECMA-48 SGR (Select Graphic Rendition) command. More...
 
- Public Attributes inherited from boolbvt
unbounded_arrayt unbounded_array
 
boolbv_widtht boolbv_width
 
- Public Attributes inherited from prop_conv_solvert
bool use_cache = true
 
bool equality_propagation = true
 
bool freeze_all = false
 
- Static Public Attributes inherited from messaget
static eomt eom
 
static const commandt reset
 return to default formatting, as defined by the terminal More...
 
static const commandt red
 render text with red foreground color More...
 
static const commandt green
 render text with green foreground color More...
 
static const commandt yellow
 render text with yellow foreground color More...
 
static const commandt blue
 render text with blue foreground color More...
 
static const commandt magenta
 render text with magenta foreground color More...
 
static const commandt cyan
 render text with cyan foreground color More...
 
static const commandt bright_red
 render text with bright red foreground color More...
 
static const commandt bright_green
 render text with bright green foreground color More...
 
static const commandt bright_yellow
 render text with bright yellow foreground color More...
 
static const commandt bright_blue
 render text with bright blue foreground color More...
 
static const commandt bright_magenta
 render text with bright magenta foreground color More...
 
static const commandt bright_cyan
 render text with bright cyan foreground color More...
 
static const commandt bold
 render text with bold font More...
 
static const commandt faint
 render text with faint font More...
 
static const commandt italic
 render italic text More...
 
static const commandt underline
 render underlined text More...
 
- Protected Types inherited from bv_pointerst
typedef boolbvt SUB
 
typedef std::list< postponedtpostponed_listt
 
- Protected Types inherited from boolbvt
typedef arrayst SUB
 
typedef std::unordered_map< const exprt, bvt, irep_hashbv_cachet
 
typedef std::list< quantifiertquantifier_listt
 
typedef std::vector< std::size_t > offset_mapt
 
- Protected Types inherited from arrayst
enum  lazy_typet {
  lazy_typet::ARRAY_ACKERMANN, lazy_typet::ARRAY_WITH, lazy_typet::ARRAY_IF, lazy_typet::ARRAY_OF,
  lazy_typet::ARRAY_TYPECAST
}
 
typedef std::list< array_equalitytarray_equalitiest
 
typedef std::set< exprtindex_sett
 
typedef std::map< std::size_t, index_settindex_mapt
 
- Protected Types inherited from equalityt
typedef std::unordered_map< const exprt, unsigned, irep_hashelementst
 
typedef std::map< std::pair< unsigned, unsigned >, literaltequalitiest
 
typedef std::map< unsigned, exprtelements_revt
 
typedef std::unordered_map< const typet, typestructt, irep_hashtypemapt
 

Detailed Description

Definition at line 19 of file bv_refinement.h.

Constructor & Destructor Documentation

◆ bv_refinementt()

bv_refinementt::bv_refinementt ( const infot info)
explicit

Definition at line 13 of file bv_refinement_loop.cpp.

Member Function Documentation

◆ add_approximation()

bv_refinementt::approximationt & bv_refinementt::add_approximation ( const exprt expr,
bvt bv 
)
private

Definition at line 484 of file refine_arithmetic.cpp.

◆ arrays_overapproximated()

void bv_refinementt::arrays_overapproximated ( )
private

check whether counterexample is spurious

Definition at line 37 of file refine_arrays.cpp.

◆ check_SAT() [1/2]

void bv_refinementt::check_SAT ( approximationt approximation)
private

inspect if satisfying assignment extends to original formula, otherwise refine overapproximation

Definition at line 162 of file refine_arithmetic.cpp.

◆ check_SAT() [2/2]

void bv_refinementt::check_SAT ( )
private

Definition at line 113 of file bv_refinement_loop.cpp.

◆ check_UNSAT() [1/2]

void bv_refinementt::check_UNSAT ( approximationt approximation)
private

inspect if proof holds on original formula, otherwise refine underapproximation

Definition at line 371 of file refine_arithmetic.cpp.

◆ check_UNSAT() [2/2]

void bv_refinementt::check_UNSAT ( )
private

Definition at line 123 of file bv_refinement_loop.cpp.

◆ conflicts_with()

bool bv_refinementt::conflicts_with ( approximationt approximation)
private

check if an under-approximation is part of the conflict

Definition at line 459 of file refine_arithmetic.cpp.

◆ convert_div()

bvt bv_refinementt::convert_div ( const div_exprt expr)
overrideprotectedvirtual

Reimplemented from boolbvt.

Definition at line 101 of file refine_arithmetic.cpp.

◆ convert_floatbv_op()

bvt bv_refinementt::convert_floatbv_op ( const exprt expr)
overrideprotectedvirtual

Reimplemented from boolbvt.

Definition at line 39 of file refine_arithmetic.cpp.

◆ convert_mod()

bvt bv_refinementt::convert_mod ( const mod_exprt expr)
overrideprotectedvirtual

Reimplemented from boolbvt.

Definition at line 119 of file refine_arithmetic.cpp.

◆ convert_mult()

bvt bv_refinementt::convert_mult ( const mult_exprt expr)
overrideprotectedvirtual

Reimplemented from boolbvt.

Definition at line 53 of file refine_arithmetic.cpp.

◆ dec_solve()

decision_proceduret::resultt bv_refinementt::dec_solve ( )
overridevirtual

Reimplemented from prop_conv_solvert.

Reimplemented in string_refinementt.

Definition at line 24 of file bv_refinement_loop.cpp.

◆ decision_procedure_text()

std::string bv_refinementt::decision_procedure_text ( ) const
inlineoverridevirtual

Reimplemented from prop_conv_solvert.

Reimplemented in string_refinementt.

Definition at line 43 of file bv_refinement.h.

◆ freeze_lazy_constraints()

void bv_refinementt::freeze_lazy_constraints ( )
private

freeze symbols for incremental solving

Definition at line 115 of file refine_arrays.cpp.

◆ get_values()

void bv_refinementt::get_values ( approximationt approximation)
private

Definition at line 137 of file refine_arithmetic.cpp.

◆ initialize()

void bv_refinementt::initialize ( approximationt approximation)
private

Definition at line 468 of file refine_arithmetic.cpp.

◆ post_process_arrays()

void bv_refinementt::post_process_arrays ( )
overrideprotectedvirtual

generate array constraints

Reimplemented from arrayst.

Definition at line 22 of file refine_arrays.cpp.

◆ prop_solve()

decision_proceduret::resultt bv_refinementt::prop_solve ( )
private

Definition at line 84 of file bv_refinement_loop.cpp.

◆ set_assumptions()

void bv_refinementt::set_assumptions ( const bvt _assumptions)
overrideprotectedvirtual

Reimplemented from prop_conv_solvert.

Definition at line 131 of file bv_refinement_loop.cpp.

Member Data Documentation

◆ approximations

std::list<approximationt> bv_refinementt::approximations
private

Definition at line 109 of file bv_refinement.h.

◆ config_

configt bv_refinementt::config_
protected

Definition at line 113 of file bv_refinement.h.

◆ parent_assumptions

bvt bv_refinementt::parent_assumptions
private

Definition at line 110 of file bv_refinement.h.

◆ progress

bool bv_refinementt::progress
private

Definition at line 108 of file bv_refinement.h.


The documentation for this class was generated from the following files: