|
ESBMC
Efficient SMT-based Context-Bounded Model Checker
|
Transition system here represents a sequential circuit. More...
#include <transition_system.h>
Classes | |
| struct | propertyt |
| struct | statet |
Public Types | |
| using | step_localt = std::unordered_set<expr2tc, irep2_hash> |
Public Member Functions | |
| void | set_step_local (step_localt syms) |
| Symbols instantiated per iteration. | |
| const step_localt & | get_step_local () const |
| expr2tc | at_step (const expr2tc &e, unsigned step) const |
| Rewrites e for iteration step. | |
| void | dump (std::ostream &out, const namespacet &ns) const |
| bool | has_local (const expr2tc &e) const |
| Does e mention a step_local symbol, i.e. does it change between steps? | |
Public Attributes | |
| std::vector< expr2tc > | prefix_defs |
| std::vector< expr2tc > | prefix_assumes |
| std::vector< propertyt > | prefix_bad |
| std::vector< statet > | states |
| std::vector< std::pair< expr2tc, std::string > > | inputs |
| Fresh nondeterministic symbol read by the step. | |
| std::vector< expr2tc > | body_defs |
| std::vector< expr2tc > | body_assumes |
| std::vector< propertyt > | bad |
| violated already folds in the assumptions (!(assumes -> cond)), so it is SAT exactly when that claim can fail in this step. | |
| expr2tc | back_guard |
| Guard for the loop condition (usually trivial true for unbounded loops). | |
| std::vector< expr2tc > | invariants |
| Facts only the inductive step may assume: the loop entry condition and interval-analysis bounds. | |
Transition system here represents a sequential circuit.
They works as:
For verification purposes. The circuit has invariant/pre/post conditions.
(init) -> (pre) -> (body) -> (post) ^ | __________________/ when back_guard holds
For example:
n = nondet();
assume(n > 0);
x = 0;
assert(n < 100); // prefix
for (;;) { // loop head
y = nondet(); // body
assume(y < 10);
assert(x < 4);
x = (x + y) & 3;
} // back edge
| using transition_systemt::step_localt = std::unordered_set<expr2tc, irep2_hash> |
Rewrites e for iteration step.
| void transition_systemt::dump | ( | std::ostream & | out, |
| const namespacet & | ns ) const |
|
inline |
Does e mention a step_local symbol, i.e. does it change between steps?
| void transition_systemt::set_step_local | ( | step_localt | syms | ) |
Symbols instantiated per iteration.
Setting them drops the has_local() cache, which is only valid while this set is unchanged.
| expr2tc transition_systemt::back_guard |
Guard for the loop condition (usually trivial true for unbounded loops).
| std::vector<propertyt> transition_systemt::bad |
violated already folds in the assumptions (!(assumes -> cond)), so it is SAT exactly when that claim can fail in this step.
| std::vector<expr2tc> transition_systemt::body_assumes |
| std::vector<expr2tc> transition_systemt::body_defs |
| std::vector<std::pair<expr2tc, std::string> > transition_systemt::inputs |
Fresh nondeterministic symbol read by the step.
| std::vector<expr2tc> transition_systemt::invariants |
Facts only the inductive step may assume: the loop entry condition and interval-analysis bounds.
| std::vector<expr2tc> transition_systemt::prefix_assumes |
| std::vector<propertyt> transition_systemt::prefix_bad |
| std::vector<expr2tc> transition_systemt::prefix_defs |
| std::vector<statet> transition_systemt::states |