70 const exprt loop_guard = loop_head->condition();
108 std::vector<goto_programt::targett> iteration_points;
130 iteration_points.size() ==
k + 1,
"number of iteration points");
140 t->turn_into_assume();
161 for(natural_loops_mutablet::loop_mapt::const_iterator
170 bool base_case,
bool step_case,
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Base class for all expressions.
function_mapt function_map
A goto function, consisting of function body (see body) and parameter identifiers (see parameter_iden...
goto_functionst goto_functions
GOTO functions.
This class represents an instruction in the GOTO intermediate representation.
A generic container class for the GOTO intermediate representation of one function.
static instructiont make_assumption(const exprt &g, const source_locationt &l=source_locationt::nil())
instructionst instructions
The list of instructions in the goto program.
void insert_before_swap(targett target)
Insertion that preserves jumps to "target".
instructionst::iterator targett
void unwind(const irep_idt &function_id, goto_programt &goto_program, const goto_programt::const_targett loop_head, const goto_programt::const_targett loop_exit, const unsigned k, const unwind_strategyt unwind_strategy)
void append_full_havoc_code(const source_locationt location, goto_programt &dest)
Append goto instructions to havoc the full assigns set.
natural_loops_mutablet natural_loops
local_may_aliast local_may_alias
goto_functiont & goto_function
k_inductiont(const irep_idt &_function_id, goto_functiont &_goto_function, bool _base_case, bool _step_case, unsigned _k, const namespacet &ns)
const irep_idt & function_id
void process_loop(const goto_programt::targett loop_head, const loopt &)
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Utilities for building havoc code for expressions.
std::set< exprt > assignst
void k_induction(goto_modelt &goto_model, bool base_case, bool step_case, unsigned k)
Field-insensitive, location-sensitive may-alias analysis.
goto_programt::targett get_loop_exit(const loopt &loop)
void get_assigns(const local_may_aliast &local_may_alias, const loopt &loop, assignst &assigns)
Helper functions for k-induction and loop invariants.
natural_loops_mutablet::natural_loopt loopt
Compute natural loops in a goto_function.
void remove_skip(goto_programt &goto_program, goto_programt::targett begin, goto_programt::targett end)
remove unnecessary skip statements
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
#define PRECONDITION(CONDITION)