ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
uninterpreted_func2t Class Reference

Uninterpreted-function application. More...

#include <irep2_expr.h>

Inheritance diagram for uninterpreted_func2t:
[legend]

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)

Detailed Description

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.

Constructor & Destructor Documentation

◆ uninterpreted_func2t() [1/2]

uninterpreted_func2t::uninterpreted_func2t ( const type2tc & type,
const irep_idt & name,
const std::vector< expr2tc > & args )
inline

◆ uninterpreted_func2t() [2/2]

uninterpreted_func2t::uninterpreted_func2t ( const uninterpreted_func2t & ref)
default

Member Data Documentation

◆ arguments

std::vector<expr2tc> uninterpreted_func2t::arguments

◆ field_names

std::string uninterpreted_func2t::field_names
static
Initial value:
=
{"function_name", "arguments", "", "", ""}

◆ fields

auto uninterpreted_func2t::fields
staticconstexpr
Initial value:
= std::make_tuple(
const type2tc type
Type of this expr.
Definition irep2.h:910
irep_idt function_name
Mangled callee name; the stable key under which the solver declares the function symbol,...
Definition irep2_expr.h:2107
std::vector< expr2tc > arguments
Definition irep2_expr.h:2108

◆ function_name

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.


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