25 const std::vector<framet> &frames,
27 const std::unordered_set<symbol_exprt, irep_hash> &
address_taken,
39 std::cout <<
' ' << std::setw(2) << work.
frame.
index <<
' ';
55 auto &next_state =
implication.rhs.arguments().front();
57 auto instance = lambda_expr.
instantiate({next_state});
60 if(simplified1 != simplified1a)
62 std::cout <<
"SIMP0: " <<
format(instance) <<
"\n";
63 std::cout <<
"SIMP1: " <<
format(simplified1) <<
"\n";
64 std::cout <<
"SIMPa: " <<
format(simplified1a) <<
"\n";
75 propagator(state, simplified2, work.
path);
82 auto &function_application =
88 propagator(state, simplified, work.
path);
std::unordered_set< symbol_exprt, irep_hash > address_taken(const std::vector< exprt > &src)
exprt instantiate(const exprt::operandst &) const
substitute free occurrences of the variables in where() by the given values
static std::ostream & reset(std::ostream &)
static std::ostream & cyan(std::ostream &)
static std::ostream & green(std::ostream &)
static std::ostream & faint(std::ostream &)
Base class for all expressions.
const irep_idt & id() const
A (mathematical) lambda expression.
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Expression to hold a symbol (variable)
static exprt implication(exprt lhs, exprt rhs)
const function_application_exprt & to_function_application_expr(const exprt &expr)
Cast an exprt to a function_application_exprt.
void propagate(const std::vector< framet > &frames, const workt &work, const std::unordered_set< symbol_exprt, irep_hash > &address_taken, bool verbose, const namespacet &ns, const std::function< void(const symbol_exprt &, exprt, const workt::patht &)> &propagator)
exprt simplify_state_expr(exprt, const std::unordered_set< symbol_exprt, irep_hash > &address_taken, const namespacet &)
exprt simplify_expr(exprt src, const namespacet &ns)
Simplify State Expression.
static symbol_exprt state_expr()
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
const and_exprt & to_and_expr(const exprt &expr)
Cast an exprt to a and_exprt.
std::vector< frame_reft > patht