ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
transition_system.h
Go to the documentation of this file.
1#pragma once
2
3#include <irep2/irep2.h>
6#include <iosfwd>
7#include <string>
8#include <unordered_map>
9#include <unordered_set>
10#include <utility>
11#include <vector>
12
36{
37public:
38 struct propertyt
39 {
41 std::string comment;
43 };
44
45 // Prefix are the commands before the loop starts
46 // defs -> assignments, assumes -> assumptions, bad -> assertions
47 std::vector<expr2tc> prefix_defs, prefix_assumes;
48 std::vector<propertyt> prefix_bad;
49
50 // Inductive state at the beginning (init), before (pre) and after (post)
51 // each loop. Only variables the properties depend on are kept.
52 struct statet
53 {
54 std::string name;
56 };
57 std::vector<statet> states;
58
60 std::vector<std::pair<expr2tc, std::string>> inputs;
61
62 // Same as the prefix but for loop body
63 std::vector<expr2tc> body_defs, body_assumes;
64
68 std::vector<propertyt> bad;
69
72
76 std::vector<expr2tc> invariants;
77
78 using step_localt = std::unordered_set<expr2tc, irep2_hash>;
79
83 void set_step_local(step_localt syms);
85 {
86 return step_local;
87 }
88
90 expr2tc at_step(const expr2tc &e, unsigned step) const;
91
92 void dump(std::ostream &out, const namespacet &ns) const;
93
95 bool has_local(const expr2tc &e) const;
96
97private:
98 step_localt step_local;
99
101 mutable std::unordered_map<const expr2t *, bool> has_local_memo;
102};
103
108{
109public:
110 ts_step_renamert(const transition_systemt &ts, unsigned step);
111 expr2tc operator()(const expr2tc &e);
112
113private:
114 const transition_systemt &ts;
115 const std::string suffix;
116 std::unordered_map<const expr2t *, expr2tc> memo;
117};
118
124void collect_symbols(
125 const expr2tc &e,
126 std::unordered_set<expr2tc, irep2_hash> &out,
127 std::unordered_set<const expr2t *> &seen);
Definition location.h:7
Definition namespace.h:10
Transition system here represents a sequential circuit.
Definition transition_system.h:36
expr2tc at_step(const expr2tc &e, unsigned step) const
Rewrites e for iteration step.
Definition transition_system.cpp:48
expr2tc back_guard
Guard for the loop condition (usually trivial true for unbounded loops).
Definition transition_system.h:71
std::vector< statet > states
Definition transition_system.h:57
std::unordered_set< expr2tc, irep2_hash > step_localt
Definition transition_system.h:78
bool has_local(const expr2tc &e) const
Does e mention a step_local symbol, i.e. does it change between steps?
Definition transition_system.cpp:27
std::vector< expr2tc > prefix_assumes
Definition transition_system.h:47
std::vector< expr2tc > body_assumes
Definition transition_system.h:63
void dump(std::ostream &out, const namespacet &ns) const
Definition transition_system.cpp:80
std::vector< expr2tc > body_defs
Definition transition_system.h:63
std::vector< std::pair< expr2tc, std::string > > inputs
Fresh nondeterministic symbol read by the step.
Definition transition_system.h:60
std::vector< expr2tc > invariants
Facts only the inductive step may assume: the loop entry condition and interval-analysis bounds.
Definition transition_system.h:76
const step_localt & get_step_local() const
Definition transition_system.h:84
std::vector< expr2tc > prefix_defs
Definition transition_system.h:47
std::vector< propertyt > bad
violated already folds in the assumptions (!(assumes -> cond)), so it is SAT exactly when that claim ...
Definition transition_system.h:68
void set_step_local(step_localt syms)
Symbols instantiated per iteration.
Definition transition_system.cpp:42
std::vector< propertyt > prefix_bad
Definition transition_system.h:48
expr2tc operator()(const expr2tc &e)
Definition transition_system.cpp:58
ts_step_renamert(const transition_systemt &ts, unsigned step)
Definition transition_system.cpp:53
Classes and definitions for non-stringy internal representation.
irep_container< expr2t > expr2tc
Definition irep2.h:431
Definition transition_system.h:39
locationt location
Definition transition_system.h:42
std::string comment
Definition transition_system.h:41
expr2tc violated
Definition transition_system.h:40
Definition transition_system.h:53
expr2tc init
Definition transition_system.h:55
expr2tc post
Definition transition_system.h:55
std::string name
Definition transition_system.h:54
expr2tc pre
Definition transition_system.h:55
void collect_symbols(const expr2tc &e, std::unordered_set< expr2tc, irep2_hash > &out, std::unordered_set< const expr2t * > &seen)
Collect every symbol2t in e into out, treating seen as a shared visited set so a DAG node reached by ...
Definition transition_system.cpp:11