|
ESBMC
Efficient SMT-based Context-Bounded Model Checker
|
Uninterpreted-function application. More...
#include <irep2_expr.h>
Public Member Functions | |
| uninterpreted_func2t (const type2tc &type, const irep_idt &name, const std::vector< expr2tc > &args) | |
| uninterpreted_func2t (const uninterpreted_func2t &ref)=default | |
| Public Member Functions inherited from expr2t | |
| virtual | ~expr2t ()=default |
| expr2tc | clone () const |
| expr2tc | with_type (const type2tc &new_type) const |
| Build a fresh expression of the same kind and field values as this one, but with a different type. | |
| bool | operator== (const expr2t &ref) const |
| bool | operator< (const expr2t &ref) const |
| bool | operator!= (const expr2t &ref) const |
| std::string | pretty (unsigned int indent=0) const |
| Produce textual representation of this expr. | |
| DUMP_METHOD void | dump () const |
| Write textual representation of this object to stdout. | |
| size_t | crc () const |
| Calculate a hash/digest of the current expr. | |
| bool | cmp (const expr2t &ref) const |
| Structural comparison. | |
| int | lt (const expr2t &ref) const |
| Trinary structural ordering. | |
| list_of_memberst | tostring (unsigned int indent) const |
| Convert fields of subclasses to a string representation. | |
| const expr2tc * | get_sub_expr (size_t idx) const |
| Fetch a sub-operand. | |
| size_t | get_num_sub_exprs () const |
| Count the number of sub-exprs there are. | |
| expr2tc | simplify () const |
| Simplify an expression. | |
| expr2tc | simplify (bool suppress_reassoc) const |
| Simplify with reassociation suppression. | |
| virtual expr2tc | do_simplify () const |
| expr-specific simplification methods. | |
| template<typename T> | |
| void | foreach_operand (T &&t) const |
| Indirect, abstract operand iteration. | |
| template<typename T> | |
| void | Foreach_operand (T &&t) |
| Public Member Functions inherited from irep2t | |
| irep2t () noexcept | |
| irep2t (const irep2t &) noexcept | |
| irep2t & | operator= (const irep2t &)=delete |
| virtual | ~irep2t ()=default |
| void | mark_writer () const noexcept |
| void | clear_writer () const noexcept |
Public Attributes | |
| irep_idt | function_name |
| Mangled callee name; the stable key under which the solver declares the function symbol, so every application of the same callee shares one decl and is tied together by congruence. | |
| std::vector< expr2tc > | arguments |
| Public Attributes inherited from expr2t | |
| const expr_ids | expr_id |
| Instance of expr_ids recording tihs exprs type. | |
| const type2tc | type |
| Type of this expr. | |
| std::atomic< size_t > | crc_val |
| Public Attributes inherited from irep2t | |
| std::atomic< unsigned int > | refcount |
| std::atomic< std::uintptr_t > | writer_thread |
Static Public Attributes | |
| static constexpr auto | fields |
| static std::string | field_names [esbmct::num_type_fields] |
Additional Inherited Members | |
| Public Types inherited from expr2t | |
| enum | expr_ids { end_expr_id } |
| Enumeration identifying each sort of expr. More... | |
| typedef esbmct::function_ref< void(const expr2tc &)> | const_op_delegate |
| typedef esbmct::function_ref< void(expr2tc &)> | op_delegate |
| typedef expr2tc | container_type |
| typedef expr2t | base_type |
| Static Public Member Functions inherited from irep2t | |
| static std::uintptr_t | current_thread_tag () noexcept |
| Protected Member Functions inherited from expr2t | |
| expr2t (const type2tc &type, expr_ids id) | |
| Primary constructor. | |
| expr2t (const expr2t &ref) | |
| Copy constructor. | |
| void | foreach_operand_impl_const (const_op_delegate &expr) const |
| void | foreach_operand_impl (op_delegate &expr) |
Uninterpreted-function application.
Models a call to a "__ESBMC_uninterpreted_*" / "__CPROVER_uninterpreted_*" function as a genuine uninterpreted function: its value is an arbitrary but fixed function of its arguments. Created during symbolic execution (the concrete body, if any, is discarded) and consumed only at SMT conversion time. The backend declares one solver function symbol per function_name and applies it to the converted arguments, so functional congruence (equal arguments imply an equal result) is enforced natively by the solver rather than by hand-rolled Ackermannisation in symex.
|
inline |
|
default |
| std::vector<expr2tc> uninterpreted_func2t::arguments |
|
static |
|
staticconstexpr |
| irep_idt uninterpreted_func2t::function_name |
Mangled callee name; the stable key under which the solver declares the function symbol, so every application of the same callee shares one decl and is tied together by congruence.