mCRL2
Loading...
Searching...
No Matches
typecheck.h
Go to the documentation of this file.
1// Author(s): Wieger Wesselink
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
9/// \file mcrl2/pbes/typecheck.h
10/// \brief add your file description here.
11
12#ifndef MCRL2_PBES_TYPECHECK_H
13#define MCRL2_PBES_TYPECHECK_H
14
15#include "mcrl2/data/consistency.h"
16#include "mcrl2/pbes/detail/pbes_context.h"
17#include "mcrl2/pbes/normalize_sorts.h"
18
19namespace mcrl2::pbes_system
20{
21
22namespace detail
23{
24
26{
28 using super::apply;
29
33
35 const data::detail::variable_context& variables,
36 const detail::pbes_context& pbes_context
37 )
38 : m_data_type_checker(data_typechecker),
40 m_pbes_context(pbes_context)
41 { }
42
43 template <class T>
44 void apply(T& result, const data::data_expression& x)
45 {
46 result = atermpp::down_cast<T>(m_data_type_checker.typecheck_data_expression(x, data::bool_(), m_variable_context));
47 }
48
49 template <class T>
50 void apply(T& result, const forall& x)
51 {
52 try
53 {
54 data::detail::check_duplicate_variable_names(x.variables(), "quantifier variable");
55 auto m_variable_context_copy = m_variable_context;
56 m_variable_context.add_context_variables(x.variables(), m_data_type_checker);
57 pbes_expression body;
58 (*this).apply(body, x.body());
59 m_variable_context = m_variable_context_copy;
60 result = forall(x.variables(), body);
61 }
62 catch (mcrl2::runtime_error& e)
63 {
64 throw mcrl2::runtime_error(std::string(e.what()) + "\nwhile typechecking " + pbes_system::pp(x));
65 }
66 }
67
68 template <class T>
69 void apply(T& result, const exists& x)
70 {
71 try
72 {
73 data::detail::check_duplicate_variable_names(x.variables(), "quantifier variable");
74 auto m_variable_context_copy = m_variable_context;
75 m_variable_context.add_context_variables(x.variables(), m_data_type_checker);
76 pbes_expression body;
77 (*this).apply(body, x.body());
78 m_variable_context = m_variable_context_copy;
79 result = exists(x.variables(), body);
80 }
81 catch (mcrl2::runtime_error& e)
82 {
83 throw mcrl2::runtime_error(std::string(e.what()) + "\nwhile typechecking " + pbes_system::pp(x));
84 }
85 }
86
87 template <class T>
89 {
90 const core::identifier_string& name = x.name();
92 {
93 throw mcrl2::runtime_error("propositional variable " + core::pp(name) + " not declared");
94 }
95
96 data::sort_expression_list equation_sorts = m_pbes_context.propositional_variable_sorts(name);
97 std::vector<data::data_expression> x_parameters(x.parameters().begin(), x.parameters().end());
98
99 if (x_parameters.size() != equation_sorts.size())
100 {
101 throw mcrl2::runtime_error("propositional variable " + pbes_system::pp(x) + " has the wrong number of parameters");
102 }
103
104 auto ei = equation_sorts.begin();
105 auto xi = x_parameters.begin();
106 for (; ei != equation_sorts.end(); ++ei, ++xi)
107 {
108 try
109 {
110 *xi = m_data_type_checker.typecheck_data_expression(*xi, *ei, m_variable_context);
111 }
112 catch (mcrl2::runtime_error& e)
113 {
114 throw mcrl2::runtime_error(std::string(e.what()) + "\ncannot typecheck " + data::pp(*xi) + " as type " + data::pp(*ei) + " (while typechecking " + pbes_system::pp(x) + ")");
115 }
116 }
117 make_propositional_variable_instantiation(result, name, data::data_expression_list(x_parameters.begin(), x_parameters.end()));
118 }
119
120 template <class T>
121 void apply(T& result, const data::untyped_data_parameter& x)
122 {
123 const core::identifier_string& name = x.name();
125 {
126 result = atermpp::down_cast<T>(data::typecheck_untyped_data_parameter(m_data_type_checker, x.name(), x.arguments(), data::bool_(), m_variable_context));
127 return;
128 }
129
130 data::sort_expression_list equation_sorts = m_pbes_context.propositional_variable_sorts(name);
131 std::vector<data::data_expression> x_parameters(x.arguments().begin(), x.arguments().end());
132
133 if (x_parameters.size() != equation_sorts.size())
134 {
135 throw mcrl2::runtime_error("propositional variable " + data::pp(x) + " has the wrong number of parameters");
136 }
137
138 auto ei = equation_sorts.begin();
139 auto xi = x_parameters.begin();
140 for (; ei != equation_sorts.end(); ++ei, ++xi)
141 {
142 try
143 {
144 *xi = m_data_type_checker.typecheck_data_expression(*xi, *ei, m_variable_context);
145 }
146 catch (mcrl2::runtime_error& e)
147 {
148 throw mcrl2::runtime_error(std::string(e.what()) + "\ncannot typecheck " + data::pp(*xi) + " as type " + data::pp(*ei) + " (while typechecking " + data::pp(x) + ")");
149 }
150 }
151 make_propositional_variable_instantiation(result, name, data::data_expression_list(x_parameters.begin(), x_parameters.end()));
152 }
153};
154
155inline
157 data::data_type_checker& data_typechecker,
158 const data::detail::variable_context& variables,
159 const detail::pbes_context& propositional_variables
160 )
161{
162 return typecheck_builder(data_typechecker, variables, propositional_variables);
163}
164
165} // namespace detail
166
168{
169 protected:
173
175 {
176 std::vector<propositional_variable> result;
177 for (const pbes_equation& eqn: equations)
178 {
179 result.push_back(eqn.variable());
180 }
181 return result;
182 }
183
184 public:
185 /// \brief Default constructor
188 {}
189
190 /// \brief Constructor
191 template <typename VariableContainer, typename PropositionalVariableContainer>
192 pbes_type_checker(const data::data_specification& dataspec, const VariableContainer& global_variables, const PropositionalVariableContainer& propositional_variables)
194 {
195 m_variable_context.add_context_variables(global_variables, m_data_type_checker);
196 m_pbes_context.add_propositional_variables(propositional_variables, m_data_type_checker);
197 }
198
199 /// \brief Typecheck the pbes pbesspec
200 void operator()(pbes& pbesspec)
201 {
202 mCRL2log(log::verbose) << "type checking PBES specification..." << std::endl;
203
204 pbes_system::normalize_sorts(pbesspec, m_data_type_checker.typechecked_data_specification());
205
206 // reset the context
207 m_data_type_checker = data::data_type_checker(pbesspec.data());
208 m_variable_context.clear();
209 m_pbes_context.clear();
210 m_variable_context.add_context_variables(pbesspec.global_variables(), m_data_type_checker);
211 m_pbes_context.add_propositional_variables(equation_variables(pbesspec.equations()), m_data_type_checker);
212
213 // typecheck the equations
214 for (pbes_equation& eqn: pbesspec.equations())
215 {
216 data::detail::variable_context variable_context = m_variable_context;
217 try
218 {
219 data::detail::check_duplicate_variable_names(eqn.variable().parameters(), "propositional variable parameter");
220 }
221 catch (mcrl2::runtime_error& e)
222 {
223 throw mcrl2::runtime_error(std::string(e.what()) + " while typechecking " + pbes_system::pp(eqn.variable()));
224 }
225 variable_context.add_context_variables(eqn.variable().parameters(), m_data_type_checker);
226 pbes_expression formula;
227 detail::make_typecheck_builder(m_data_type_checker, variable_context, m_pbes_context).apply(formula, eqn.formula());
228 eqn.formula() = formula;
229 }
230
231 // typecheck the initial state
233 detail::make_typecheck_builder(m_data_type_checker, m_variable_context, m_pbes_context).apply(initial_state, pbesspec.initial_state());
234 pbesspec.initial_state() = initial_state;
235
236 // typecheck the data specification
237 pbesspec.data() = m_data_type_checker.typechecked_data_specification();
238 pbesspec.data().translate_user_notation();
239 }
240
241 /** \brief Type check a process expression.
242 * Throws a mcrl2::runtime_error exception if the expression is not well typed.
243 * \param[in] x A process expression that has not been type checked.
244 * \return a process expression where all untyped identifiers have been replace by typed ones.
245 **/
247 {
248 pbes_expression result;
249 detail::make_typecheck_builder(m_data_type_checker, m_variable_context, m_pbes_context).
250 apply(result,pbes_system::normalize_sorts(x, m_data_type_checker.typechecked_data_specification()));
251 return result;
252 }
253
254 protected:
255 pbes_expression typecheck(const pbes_expression& x, const data::variable_list& parameters)
256 {
257 data::detail::variable_context variable_context = m_variable_context;
258 variable_context.add_context_variables(parameters, m_data_type_checker);
259 pbes_expression result;
260 detail::make_typecheck_builder(m_data_type_checker, variable_context, m_pbes_context).apply(result, x);
261 return result;
262 }
263};
264
265/** \brief Type check a parsed mCRL2 pbes specification.
266 * Throws an exception if something went wrong.
267 * \param[in] pbesspec A process specification that has not been type checked.
268 * \post pbesspec is type checked.
269 **/
270
271inline
272void typecheck_pbes(pbes& pbesspec)
273{
274 pbes_type_checker type_checker;
275 try
276 {
277 type_checker(pbesspec);
278 }
279 catch (mcrl2::runtime_error &e)
280 {
281 throw mcrl2::runtime_error(std::string(e.what()) + "\nCould not type check " + pbes_system::pp(pbesspec));
282 }
283}
284
285/** \brief Type check a parsed mCRL2 propositional variable.
286 * Throws an exception if something went wrong.
287 * \param[in] x A propositional variable.
288 * \param[in] variables A sequence of data variables that may appear in x.
289 * \param[in] dataspec A data specification.
290 * \return the type checked expression
291 **/
292template <typename VariableContainer>
294 const VariableContainer& variables,
296 )
297{
298 // This function should be implemented using the PBES type checker, but it is not immediately clear how to do that.
299 try
300 {
301 const data::variable_list& parameters = x.parameters();
302 std::vector<data::variable> typed_parameters;
303 for (const data::variable& parameter: parameters)
304 {
305 data::variable d = atermpp::down_cast<data::variable>(data::typecheck_data_expression(parameter, variables, dataspec));
306 typed_parameters.push_back(d);
307 }
308 return propositional_variable(x.name(), data::variable_list(typed_parameters.begin(), typed_parameters.end()));
309 }
310 catch (mcrl2::runtime_error &e)
311 {
312 throw mcrl2::runtime_error(std::string(e.what()) + "\ncould not type check " + pbes_system::pp(x));
313 }
314}
315
316/** \brief Type check a parsed mCRL2 pbes expression.
317 * Throws an exception if something went wrong.
318 * \param[in] x A pbes expression.
319 * \param[in] variables A sequence of data variables that may appear in x.
320 * \param[in] propositional_variables A sequence of propositional variables that may appear in x.
321 * \param[in] dataspec A data specification.
322 * \return the type checked expression
323 **/
324template <typename VariableContainer, typename PropositionalVariableContainer>
326 const VariableContainer& variables,
327 const PropositionalVariableContainer& propositional_variables,
329 )
330{
331 try
332 {
333 pbes_type_checker type_checker(dataspec, variables, propositional_variables);
334 return type_checker(x);
335 }
336 catch (mcrl2::runtime_error &e)
337 {
338 throw mcrl2::runtime_error(std::string(e.what()) + "\ncould not type check " + pbes_system::pp(x));
339 }
340}
341
342} // namespace mcrl2::pbes_system
343
344#endif // MCRL2_PBES_TYPECHECK_H
Term containing a string.
aterm_string(const aterm &t)
Constructor.
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
A list of aterm objects.
Definition aterm_list.h:26
A unordered_map class in which aterms can be stored.
parse_node_unexpected_exception(const parser &p, const parse_node &node)
Definition parse.h:76
An abstraction expression.
Definition abstraction.h:23
abstraction(const atermpp::aterm &term)
Constructor.
Definition abstraction.h:32
void translate_user_notation()
Translate user notation within the equations of the data specification.
bool is_well_typed() const
Returns true if.
data_specification()=default
Default constructor. Generate a data specification that contains only booleans and positive numbers.
Components for generating an arbitrary element of a sort.
representative_generator(const data_specification &specification)
Constructor with data specification as context.
Identifier generator that stores the identifiers of the context in a set. Using the operator()() and ...
const core::identifier_string & name() const
\brief A data variable
Definition variable.h:25
\brief A where expression
where_clause & operator=(where_clause &&) noexcept=default
const data_expression & body() const
const assignment_expression_list & declarations() const
\brief The and operator for pbes expressions
and_(const pbes_expression &left, const pbes_expression &right)
\brief Constructor Z14.
and_(const and_ &) noexcept=default
Move semantics.
and_(and_ &&) noexcept=default
and_ & operator=(and_ &&) noexcept=default
and_(const atermpp::aterm &term)
and_ & operator=(const and_ &) noexcept=default
const pbes_expression & left() const
const pbes_expression & right() const
and_()
\brief Default constructor X3.
bool is_declared(const core::identifier_string &name) const
\brief The existential quantification operator for pbes expressions
exists(const atermpp::aterm &term)
exists & operator=(exists &&) noexcept=default
exists(exists &&) noexcept=default
exists(const data::variable_list &variables, const pbes_expression &body)
\brief Constructor Z14.
const data::variable_list & variables() const
exists()
\brief Default constructor X3.
exists(const exists &) noexcept=default
Move semantics.
const pbes_expression & body() const
exists & operator=(const exists &) noexcept=default
static fixpoint_symbol nu()
Returns the nu symbol.
fixpoint_symbol()
\brief Default constructor X3.
fixpoint_symbol & operator=(fixpoint_symbol &&) noexcept=default
fixpoint_symbol(const fixpoint_symbol &) noexcept=default
Move semantics.
bool is_nu() const
Returns true if the symbol is nu.
bool is_mu() const
Returns true if the symbol is mu.
fixpoint_symbol(fixpoint_symbol &&) noexcept=default
static fixpoint_symbol mu()
Returns the mu symbol.
fixpoint_symbol & operator=(const fixpoint_symbol &) noexcept=default
fixpoint_symbol(const atermpp::aterm &term)
\brief The universal quantification operator for pbes expressions
forall()
\brief Default constructor X3.
const pbes_expression & body() const
forall(const data::variable_list &variables, const pbes_expression &body)
\brief Constructor Z14.
forall(const atermpp::aterm &term)
const data::variable_list & variables() const
forall & operator=(const forall &) noexcept=default
forall & operator=(forall &&) noexcept=default
forall(const forall &) noexcept=default
Move semantics.
forall(forall &&) noexcept=default
\brief The implication operator for pbes expressions
imp & operator=(imp &&) noexcept=default
imp(const imp &) noexcept=default
Move semantics.
const pbes_expression & left() const
imp(imp &&) noexcept=default
imp(const atermpp::aterm &term)
imp()
\brief Default constructor X3.
imp(const pbes_expression &left, const pbes_expression &right)
\brief Constructor Z14.
const pbes_expression & right() const
imp & operator=(const imp &) noexcept=default
\brief The not operator for pbes expressions
not_()
\brief Default constructor X3.
not_(const pbes_expression &operand)
\brief Constructor Z14.
not_(const not_ &) noexcept=default
Move semantics.
const pbes_expression & operand() const
not_ & operator=(const not_ &) noexcept=default
not_(not_ &&) noexcept=default
not_(const atermpp::aterm &term)
not_ & operator=(not_ &&) noexcept=default
\brief The or operator for pbes expressions
const pbes_expression & left() const
or_(const or_ &) noexcept=default
Move semantics.
or_(const pbes_expression &left, const pbes_expression &right)
\brief Constructor Z14.
const pbes_expression & right() const
or_(or_ &&) noexcept=default
or_ & operator=(or_ &&) noexcept=default
or_ & operator=(const or_ &) noexcept=default
or_(const atermpp::aterm &term)
or_()
\brief Default constructor X3.
const pbes_expression & formula() const
Returns the predicate formula on the right hand side of the equation.
fixpoint_symbol & symbol()
Returns the fixpoint symbol of the equation.
pbes_equation(const fixpoint_symbol &symbol, const propositional_variable &variable, const pbes_expression &expr)
Constructor.
bool is_solved() const
Returns true if the predicate formula on the right hand side contains no predicate variables.
Definition pbes.cpp:102
fixpoint_symbol m_symbol
The fixpoint symbol of the equation.
propositional_variable m_variable
The variable on the left hand side of the equation.
const fixpoint_symbol & symbol() const
Returns the fixpoint symbol of the equation.
bool operator<(const pbes_equation &other) const
A comparison operator on pbes equations. \detail The comparison is on the addresses of aterm objects ...
propositional_variable & variable()
Returns the pbes variable of the equation.
pbes_expression m_formula
The expression on the right hand side of the equation.
void swap(pbes_equation &other) noexcept
Swaps the contents.
pbes_equation()=default
Constructor.
pbes_expression & formula()
Returns the predicate formula on the right hand side of the equation.
const propositional_variable & variable() const
Returns the pbes variable of the equation.
pbes_expression & operator=(pbes_expression &&) noexcept=default
pbes_expression & operator=(const pbes_expression &) noexcept=default
pbes_expression(const atermpp::aterm &term)
pbes_expression(const pbes_expression &) noexcept=default
Move semantics.
pbes_expression(const data::data_expression &x)
\brief Constructor Z6.
pbes_expression(const data::untyped_data_parameter &x)
\brief Constructor Z6.
pbes_expression()
\brief Default constructor X3.
pbes_expression(pbes_expression &&) noexcept=default
void operator()(pbes &pbesspec)
Typecheck the pbes pbesspec.
Definition typecheck.h:200
pbes_expression operator()(const pbes_expression &x)
Type check a process expression. Throws a mcrl2::runtime_error exception if the expression is not wel...
Definition typecheck.h:246
detail::pbes_context m_pbes_context
Definition typecheck.h:172
pbes_type_checker(const data::data_specification &dataspec, const VariableContainer &global_variables, const PropositionalVariableContainer &propositional_variables)
Constructor.
Definition typecheck.h:192
pbes_expression typecheck(const pbes_expression &x, const data::variable_list &parameters)
Definition typecheck.h:255
pbes_type_checker(const data::data_specification &dataspec=data::data_specification())
Default constructor.
Definition typecheck.h:186
data::data_type_checker m_data_type_checker
Definition typecheck.h:170
std::vector< propositional_variable > equation_variables(const std::vector< pbes_equation > &equations)
Definition typecheck.h:174
data::detail::variable_context m_variable_context
Definition typecheck.h:171
parameterized boolean equation system
Definition pbes.h:54
std::set< data::variable > & global_variables()
Returns the declared free variables of the pbes.
Definition pbes.h:181
bool is_closed() const
True if the pbes is closed.
Definition pbes.h:239
data::data_specification m_data
The data specification.
Definition pbes.h:60
pbes(const data::data_specification &data, const std::vector< pbes_equation > &equations, propositional_variable_instantiation initial_state)
Constructor.
Definition pbes.h:112
std::set< data::variable > m_global_variables
The set of global variables.
Definition pbes.h:66
std::set< propositional_variable > compute_declared_variables() const
Returns the predicate variables appearing in the left hand side of an equation.
Definition pbes.h:73
pbes(const data::data_specification &data, const std::set< data::variable > &global_variables, const std::vector< pbes_equation > &equations, propositional_variable_instantiation initial_state)
Constructor.
Definition pbes.h:130
const propositional_variable_instantiation & initial_state() const
Returns the initial state.
Definition pbes.h:188
std::set< propositional_variable > binding_variables() const
Returns the set of binding variables of the pbes. This is the set variables that occur on the left ha...
Definition pbes.h:203
std::set< propositional_variable > occurring_variables() const
Returns the set of occurring propositional variable declarations of the pbes, i.e....
Definition pbes.h:221
std::set< propositional_variable_instantiation > occurring_variable_instantiations() const
Returns the set of occurring propositional variable instantiations of the pbes. This is the set of va...
Definition pbes.cpp:107
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the pbes.
Definition pbes.h:174
std::vector< pbes_equation > & equations()
Returns the equations.
Definition pbes.h:167
propositional_variable_instantiation & initial_state()
Returns the initial state.
Definition pbes.h:195
propositional_variable_instantiation m_initial_state
The initial state.
Definition pbes.h:69
pbes()=default
Constructor.
std::vector< pbes_equation > m_equations
The sequence of pbes equations.
Definition pbes.h:63
bool is_declared_in(Iter first, Iter last, const propositional_variable_instantiation &v, const data::data_specification &data_spec) const
Checks if the propositional variable instantiation v appears with the right type in the sequence of p...
Definition pbes.h:92
const std::vector< pbes_equation > & equations() const
Returns the equations.
Definition pbes.h:160
bool is_well_typed() const
Checks if the PBES is well typed.
Definition pbes.h:261
\brief A propositional variable instantiation
const data::data_expression_list & parameters() const
propositional_variable_instantiation(const propositional_variable_instantiation &) noexcept=default
Move semantics.
propositional_variable_instantiation(const std::string &name)
Constructor.
propositional_variable_instantiation(propositional_variable_instantiation &&) noexcept=default
propositional_variable_instantiation(const core::identifier_string &name, const data::data_expression_list &parameters)
Constructor.
propositional_variable_instantiation & operator=(propositional_variable_instantiation &&) noexcept=default
propositional_variable_instantiation(const core::identifier_string &name)
Constructor.
propositional_variable_instantiation & operator=(const propositional_variable_instantiation &) noexcept=default
propositional_variable_instantiation(const std::string &name, const data::data_expression_list &parameters)
Constructor.
propositional_variable_instantiation(const atermpp::aterm &term)
Constructor.
Wrapper class for internal storage and substitution updates using operator()
assignment(const propositional_variable &v, map_type &m)
Constructor.
assignment & operator=(const pbes_expression &e)
Assigns expression on the right-hand side.
Substitution function for propositional variables.
const_iterator end() const
Returns an iterator pointing past the end of the sequence of assignments.
iterator begin()
Returns an iterator pointing to the beginning of the sequence of assignments.
pbes_expression operator()(const variable_type &v) const
Apply this substitution to a single variable expression.
iterator end()
Returns an iterator pointing past the end of the sequence of assignments.
map_type::size_type erase(const propositional_variable &v)
Removes the substitution to the propositional variable v.
const_iterator find(variable_type const &v) const
Returns an iterator that references the expression associated with v or is equal to m_map....
bool empty() const
Returns true if the sequence of assignments is empty.
propositional_variable_substitution(const propositional_variable &X, const pbes_expression &phi)
Constructor. Initializes the substitution with the assignment X := phi.
const_iterator begin() const
Returns an iterator pointing to the beginning of the sequence of assignments.
assignment operator[](const propositional_variable &v)
Update substitution for a single variable.
iterator find(const variable_type &v)
Returns an iterator that references the expression associated with v or is equal to m_map....
\brief A propositional variable declaration
const data::variable_list & parameters() const
propositional_variable(const std::string &name, const data::variable_list &parameters)
\brief Constructor Z1.
propositional_variable(const propositional_variable &) noexcept=default
Move semantics.
const core::identifier_string & name() const
propositional_variable & operator=(propositional_variable &&) noexcept=default
propositional_variable()
\brief Default constructor X3.
propositional_variable & operator=(const propositional_variable &) noexcept=default
propositional_variable(propositional_variable &&) noexcept=default
propositional_variable(const atermpp::aterm_string &name)
propositional_variable(const core::identifier_string &name, const data::variable_list &parameters)
\brief Constructor Z12.
D_ParserTables parser_tables_mcrl2
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
Definition logger.h:393
void warn_and_or(const parse_node &)
Prints a warning for each occurrence of 'x && y || z' in the parse tree.
bool equal_sorts(const data::variable_list &v, const data::data_expression_list &w, const data::data_specification &data_spec)
Checks if the sorts of the variables/expressions in both lists are equal.
Definition equal_sorts.h:25
void parse_substitution(std::string text, MutableSubstitution &sigma, const data_specification &data_spec=data::data_specification())
Parses a string of the form "b: Bool := true, n: Nat := 0", and adds the substitutions to the substit...
Namespace for system defined sort bool_.
Definition bool.h:29
bool is_false_function_symbol(const atermpp::aterm &e)
Recogniser for function false.
Definition bool.h:116
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
Definition bool.h:342
const function_symbol & false_()
Constructor for function symbol false.
Definition bool.h:106
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
Definition bool.h:278
bool is_true_function_symbol(const atermpp::aterm &e)
Recogniser for function true.
Definition bool.h:84
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
Definition bool.h:214
const function_symbol & true_()
Constructor for function symbol true.
Definition bool.h:74
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
const data_expression & false_()
Definition consistency.h:98
const data_expression & true_()
Definition consistency.h:91
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
bool is_untyped_data_parameter(const atermpp::aterm &x)
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
bool is_application(const atermpp::aterm &x)
Returns true if the term t is an application.
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
The namespace for accessor functions on pbes expressions.
const pbes_expression & data_arg(const pbes_expression &t)
Returns the pbes expression argument of expressions of type not, exists and forall.
const pbes_expression & arg(const pbes_expression &t)
Returns the pbes expression argument of expressions of type not, exists and forall.
const pbes_expression & data_right(const pbes_expression &x)
Returns the left hand side of an expression of type and, or or imp.
const pbes_expression & data_left(const pbes_expression &x)
Returns the left hand side of an expression of type and, or or imp.
const pbes_expression & left(const pbes_expression &t)
Returns the left hand side of an expression of type and, or or imp.
const pbes_expression & right(const pbes_expression &t)
Returns the right hand side of an expression of type and, or or imp.
const data::data_expression_list & param(const pbes_expression &t)
Returns the parameters of a propositional variable instantiation.
const core::identifier_string & name(const pbes_expression &t)
Returns the name of a propositional variable expression.
const data::variable_list & var(const pbes_expression &t)
Returns the variables of a quantification expression.
void instantiate_global_variables(pbes &p)
Attempts to eliminate the free variables of a PBES, by substituting a constant value for them....
Definition pbes.cpp:64
bool is_bes(const pbes &x)
Returns true if a PBES is in BES form.
Definition pbes.cpp:69
untyped_pbes parse_pbes_new(const std::string &text)
Definition pbes.cpp:132
bool has_quantifier_name_clashes(const pbes_expression &x)
void replace_global_variables(pbes &p, const data::mutable_map_substitution<> &sigma)
Applies a global variable substitution to a PBES.
void complete_pbes(pbes &x)
Definition pbes.cpp:143
data::mutable_map_substitution instantiate_global_variables(pbes &p)
Eliminates the global variables of a PBES, by substituting a constant value for them....
bool is_well_typed_pbes(const std::set< data::sort_expression > &declared_sorts, const std::set< data::variable > &declared_global_variables, const std::set< data::variable > &occurring_global_variables, const std::set< propositional_variable > &declared_variables, const std::set< propositional_variable_instantiation > &occ, const propositional_variable_instantiation &init, const data::data_specification &data_spec)
bool has_conflicting_type(Iter first, Iter last, const propositional_variable_instantiation &v, const data::data_specification &data_spec)
Checks if the propositional variable instantiation v has a conflict with the sequence of propositiona...
find_propositional_variables_traverser< Traverser, OutputIterator > make_find_propositional_variables_traverser(OutputIterator out)
Definition find.h:50
bool has_propositional_variables(const pbes_expression &x)
propositional_variable parse_propositional_variable(const std::string &text)
Definition pbes.cpp:150
std::set< data::variable > find_quantifier_variables(const pbes_expression &x)
typecheck_builder make_typecheck_builder(data::data_type_checker &data_typechecker, const data::detail::variable_context &variables, const detail::pbes_context &propositional_variables)
Definition typecheck.h:156
pbes_expression parse_pbes_expression(const std::string &text)
Definition pbes.cpp:159
bool is_well_typed(const pbes_equation &eqn)
Checks if the equation is well typed.
bool is_well_typed_equation(const pbes_equation &eqn, const std::set< data::sort_expression > &declared_sorts, const std::set< data::variable > &declared_global_variables, const data::data_specification &data_spec)
pbes_expression parse_pbes_expression_new(const std::string &text)
Definition pbes.cpp:121
The main namespace for the PBES library.
bool is_pbes_exists(const pbes_expression &t)
Returns true if the term t is an existential quantification.
std::set< data::function_symbol > find_function_symbols(const T &x)
Definition find.h:179
std::ostream & operator<<(std::ostream &out, const exists &x)
std::ostream & operator<<(std::ostream &out, const pbes_equation &x)
bool is_universal_or(const pbes_expression &t)
Test for a disjunction.
std::set< data::variable > find_free_variables(const pbes_system::pbes_equation &x)
Definition pbes.cpp:55
std::string pp(const pbes_system::propositional_variable_list &x, bool arg0)
Definition pbes.cpp:30
std::set< data::variable > find_free_variables(const T &x)
Definition find.h:104
bool is_bes(const T &x)
Returns true if a PBES object is in BES form.
Definition is_bes.h:71
std::string pp(const pbes_system::or_ &x, bool arg0)
Definition pbes.cpp:40
bool is_data(const pbes_expression &t)
Returns true if the term t is a data expression.
bool operator!=(const pbes_equation &x, const pbes_equation &y)
void swap(propositional_variable_instantiation &t1, propositional_variable_instantiation &t2) noexcept
\brief swap overload
propositional_variable typecheck_propositional_variable(const propositional_variable &x, const VariableContainer &variables, const data::data_specification &dataspec=data::data_specification())
Type check a parsed mCRL2 propositional variable. Throws an exception if something went wrong.
Definition typecheck.h:293
std::set< data::variable > find_free_variables(const pbes_system::pbes &x)
Definition pbes.cpp:53
void normalize_sorts(pbes_system::pbes_equation_vector &x, const data::sort_specification &sortspec)
Definition pbes.cpp:46
std::string pp(const pbes_system::imp &x, bool arg0)
Definition pbes.cpp:38
std::string pp(const pbes_system::propositional_variable_instantiation_list &x, bool arg0)
Definition pbes.cpp:32
void make_propositional_variable(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_propositional_variable(const atermpp::aterm &x)
pbes_system::pbes_expression normalize_sorts(const pbes_system::pbes_expression &x, const data::sort_specification &sortspec)
Definition pbes.cpp:48
std::set< data::sort_expression > find_sort_expressions(const pbes_system::pbes &x)
Definition pbes.cpp:51
bool is_universal_and(const pbes_expression &t)
Test for a conjunction.
bool is_pbes_expression(const atermpp::aterm &x)
bool is_pbes_not(const pbes_expression &t)
Returns true if the term t is a not expression.
std::string pp(const pbes_system::pbes_equation_vector &x, bool arg0)
Definition pbes.cpp:27
const pbes_expression & true_()
bool is_pbes_forall(const pbes_expression &t)
Returns true if the term t is a universal quantification.
pbes_expression make_exists_(const data::variable_list &l, const pbes_expression &p)
Make an existential quantification. It checks for an empty variable list, which is not allowed.
std::string pp(const pbes_system::pbes_expression_list &x, bool arg0)
Definition pbes.cpp:28
std::ostream & operator<<(std::ostream &out, const not_ &x)
bool is_not(const atermpp::aterm &x)
std::set< data::variable > find_free_variables_with_bound(const T &x, VariableContainer const &bound)
Definition find.h:116
void optimized_not(pbes_expression &result, const pbes_expression &p)
Make a negation.
void make_and_(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< pbes_system::propositional_variable_instantiation > find_propositional_variable_instantiations(const pbes_system::pbes_expression &x)
Definition pbes.cpp:57
void find_identifiers(const T &x, OutputIterator o)
Definition find.h:128
T replace_variables_capture_avoiding(const T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator)
void make_not_(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_exists(const atermpp::aterm &x)
data::variable_list free_variables(const pbes_expression &x)
std::ostream & operator<<(std::ostream &out, const forall &x)
std::ostream & operator<<(std::ostream &out, const fixpoint_symbol &x)
bool operator==(const pbes_equation &x, const pbes_equation &y)
bool is_constant(const pbes_expression &x)
void find_free_variables(const T &x, OutputIterator o)
Definition find.h:84
void normalize_sorts(pbes_system::pbes &x, const data::sort_specification &)
Definition pbes.cpp:47
std::ostream & operator<<(std::ostream &out, const pbes &x)
Definition pbes.h:298
bool is_or(const atermpp::aterm &x)
const data::variable_list & quantifier_variables(const pbes_expression &x)
std::ostream & operator<<(std::ostream &out, const and_ &x)
std::function< pbes_expression(const propositional_variable_instantiation &)> compose_substitutions(const std::function< pbes_expression(const propositional_variable_instantiation &)> sigma1, const std::function< pbes_expression(const propositional_variable_instantiation &)> sigma2)
bool is_well_typed_pbes(const std::set< data::sort_expression > &declared_sorts, const std::set< data::variable > &declared_global_variables, const std::set< data::variable > &occurring_global_variables, const std::set< propositional_variable > &declared_variables, const std::set< propositional_variable_instantiation > &occ, const propositional_variable_instantiation &init, const data::data_specification &data_spec)
Definition pbes.cpp:90
void optimized_exists(pbes_expression &result, const data::variable_list &l, const pbes_expression &p)
Make an existential quantification If l is empty, p is returned.
std::set< data::function_symbol > find_function_symbols(const pbes_system::pbes &x)
Definition pbes.cpp:56
pbes_expression typecheck_pbes_expression(pbes_expression &x, const VariableContainer &variables, const PropositionalVariableContainer &propositional_variables, const data::data_specification &dataspec=data::data_specification())
Type check a parsed mCRL2 pbes expression. Throws an exception if something went wrong.
Definition typecheck.h:325
bool has_propositional_variables(const pbes_expression &x)
bool is_forall(const atermpp::aterm &x)
void typecheck_pbes(pbes &pbesspec)
Type check a parsed mCRL2 pbes specification. Throws an exception if something went wrong.
Definition typecheck.h:272
std::ostream & operator<<(std::ostream &out, const or_ &x)
void swap(not_ &t1, not_ &t2) noexcept
\brief swap overload
void make_propositional_variable_instantiation(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::propositional_variable &x, bool arg0)
Definition pbes.cpp:44
std::string pp(const pbes_system::exists &x, bool arg0)
Definition pbes.cpp:35
void make_or_(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::pbes_expression &x, bool arg0)
Definition pbes.cpp:43
atermpp::aterm pbes_to_aterm(const pbes &p)
Conversion to atermappl.
Definition io.cpp:315
std::set< data::variable > find_all_variables(const T &x)
Definition find.h:72
bool is_universal_not(const pbes_expression &t)
Test for a conjunction.
bool operator==(const pbes &p1, const pbes &p2)
Equality operator on PBESs.
Definition pbes.h:319
void swap(pbes_equation &t1, pbes_equation &t2) noexcept
\brief swap overload
bool is_well_typed(const pbes_equation &eqn)
Definition pbes.cpp:76
std::ostream & operator<<(std::ostream &out, const propositional_variable_instantiation &x)
T replace_sort_expressions(const T &x, const Substitution &sigma, bool innermost)
Definition replace.h:102
std::set< core::identifier_string > find_identifiers(const T &x)
Definition find.h:137
void swap(exists &t1, exists &t2) noexcept
\brief swap overload
void find_function_symbols(const T &x, OutputIterator o)
Definition find.h:170
void find_sort_expressions(const T &x, OutputIterator o)
Definition find.h:149
bool search_variable(const T &x, const data::variable &v)
Returns true if the term has a given variable as subterm.
Definition find.h:214
std::set< data::variable > find_free_variables(const pbes_system::pbes_expression &x)
Definition pbes.cpp:54
void swap(or_ &t1, or_ &t2) noexcept
\brief swap overload
pbes_system::pbes_expression translate_user_notation(const pbes_system::pbes_expression &x)
Definition pbes.cpp:50
bool is_pbes_or(const pbes_expression &t)
Returns true if the term t is an or expression.
std::set< propositional_variable_instantiation > find_propositional_variable_instantiations(Container const &container)
Returns all data variables that occur in a range of expressions.
Definition find.h:202
bool is_false(const pbes_expression &t)
Test for the value false.
void optimized_forall(pbes_expression &result, const data::variable_list &l, const pbes_expression &p)
Make a universal quantification If l is empty, p is returned.
bool is_pbes_imp(const pbes_expression &t)
Returns true if the term t is an imp expression.
void swap(forall &t1, forall &t2) noexcept
\brief swap overload
void optimized_or(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make a disjunction.
bool is_pbes_and(const pbes_expression &t)
Returns true if the term t is an and expression.
void swap(propositional_variable &t1, propositional_variable &t2) noexcept
\brief swap overload
atermpp::aterm pbes_equation_to_aterm(const pbes_equation &eqn)
Conversion to atermaPpl.
pbes_expression make_forall_(const data::variable_list &l, const pbes_expression &p)
Make a universal quantification. It checks for an empty variable list, which is not allowed.
void find_all_variables(const T &x, OutputIterator o)
Definition find.h:63
bool search_variable(const pbes_system::pbes_expression &x, const data::variable &v)
Definition pbes.cpp:59
std::set< data::variable > find_all_variables(const pbes_system::pbes &x)
Definition pbes.cpp:52
std::string pp(const pbes_system::not_ &x, bool arg0)
Definition pbes.cpp:39
void complete_data_specification(pbes &)
Adds all sorts that appear in the PBES p to the data specification of p.
Definition pbes.h:308
void swap(pbes_expression &t1, pbes_expression &t2) noexcept
\brief swap overload
std::string pp(const pbes_system::pbes_equation &x, bool arg0)
Definition pbes.cpp:42
void swap(imp &t1, imp &t2) noexcept
\brief swap overload
std::ostream & operator<<(std::ostream &out, const pbes_expression &x)
void make_exists(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< core::identifier_string > find_identifiers(const pbes_system::pbes_expression &x)
Definition pbes.cpp:58
std::ostream & operator<<(std::ostream &out, const imp &x)
bool is_propositional_variable_instantiation(const atermpp::aterm &x)
bool is_well_typed_equation(const pbes_equation &eqn, const std::set< data::sort_expression > &declared_sorts, const std::set< data::variable > &declared_global_variables, const data::data_specification &data_spec)
Definition pbes.cpp:81
std::set< data::sort_expression > find_sort_expressions(const T &x)
Definition find.h:158
std::string pp(const pbes_system::propositional_variable_instantiation &x, bool arg0)
Definition pbes.cpp:45
bool is_and(const atermpp::aterm &x)
std::string pp(const pbes_equation_vector &x)
void optimized_and(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make a conjunction.
void swap(and_ &t1, and_ &t2) noexcept
\brief swap overload
void translate_user_notation(pbes_system::pbes &x)
Definition pbes.cpp:49
void find_propositional_variable_instantiations(Container const &container, OutputIterator o)
Returns all data variables that occur in a range of expressions.
Definition find.h:193
void swap(fixpoint_symbol &t1, fixpoint_symbol &t2) noexcept
\brief swap overload
std::string pp(const pbes_system::pbes &x, bool arg0)
Definition pbes.cpp:41
bool is_imp(const atermpp::aterm &x)
std::ostream & operator<<(std::ostream &out, const propositional_variable &x)
void optimized_imp(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make an implication.
void make_imp(atermpp::aterm &t, const ARGUMENTS &... args)
void replace_sort_expressions(T &x, const Substitution &sigma, bool innermost)
Definition replace.h:92
bool is_true(const pbes_expression &t)
Test for the value true.
const pbes_expression & false_()
std::string pp(const pbes_system::and_ &x, bool arg0)
Definition pbes.cpp:34
std::string pp(const pbes_system::fixpoint_symbol &x, bool arg0)
Definition pbes.cpp:36
void make_forall(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::forall &x, bool arg0)
Definition pbes.cpp:37
void find_free_variables_with_bound(const T &x, OutputIterator o, const VariableContainer &bound)
Definition find.h:95
expression builder that visits all sub expressions
Definition builder.h:32
static const atermpp::aterm PBESForall
static const atermpp::aterm PBExpr
static const atermpp::aterm PBESOr
static const atermpp::aterm PBESExists
static const atermpp::aterm PBESImp
static const atermpp::aterm PBESNot
static const atermpp::aterm FixPoint
static const atermpp::aterm PropVarInst
static const atermpp::aterm PropVarDecl
static const atermpp::aterm PBESAnd
const parser & m_parser
Definition parse.h:83
expression traverser that visits all sub expressions
Definition traverser.h:29
data_specification_actions(const core::parser &parser_)
Definition parse_impl.h:297
untyped_data_specification parse_DataSpec(const core::parse_node &node) const
Definition parse_impl.h:458
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:256
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:264
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:240
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:280
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:248
void update(pbes_system::pbes_equation &x)
Definition builder.h:204
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:224
void update(pbes_system::pbes &x)
Definition builder.h:213
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:272
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:232
Maintains a multiset of bound data variables during traversal.
Definition add_binding.h:23
void apply(data::where_clause &result, const data::where_clause &x)
void update(pbes_system::pbes &x)
Definition builder.h:500
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:565
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:549
void update(pbes_system::pbes_equation &x)
Definition builder.h:491
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:517
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:508
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:525
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:541
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:557
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:533
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:134
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:102
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:110
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:126
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:86
void apply(T &result, const pbes_system::propositional_variable &x)
Definition builder.h:55
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:118
void update(pbes_system::pbes_equation &x)
Definition builder.h:62
void update(pbes_system::pbes &x)
Definition builder.h:74
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:142
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:94
void apply(const pbes_system::imp &x)
Definition traverser.h:236
void apply(const pbes_system::not_ &x)
Definition traverser.h:213
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:206
void apply(const pbes_system::exists &x)
Definition traverser.h:251
void apply(const pbes_system::pbes &x)
Definition traverser.h:198
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:191
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:258
void apply(const pbes_system::or_ &x)
Definition traverser.h:228
void apply(const pbes_system::and_ &x)
Definition traverser.h:220
void apply(const pbes_system::forall &x)
Definition traverser.h:244
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:662
void apply(const pbes_system::exists &x)
Definition traverser.h:654
void apply(const pbes_system::propositional_variable &x)
Definition traverser.h:582
void apply(const pbes_system::forall &x)
Definition traverser.h:646
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:590
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:607
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:332
void apply(const pbes_system::and_ &x)
Definition traverser.h:346
void apply(const pbes_system::forall &x)
Definition traverser.h:370
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:318
void apply(const pbes_system::or_ &x)
Definition traverser.h:354
void apply(const pbes_system::imp &x)
Definition traverser.h:362
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:384
void apply(const pbes_system::exists &x)
Definition traverser.h:377
void apply(const pbes_system::not_ &x)
Definition traverser.h:339
void apply(const pbes_system::pbes &x)
Definition traverser.h:325
void apply(const pbes_system::exists &x)
Definition traverser.h:123
void apply(const pbes_system::or_ &x)
Definition traverser.h:99
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:77
void apply(const pbes_system::propositional_variable &x)
Definition traverser.h:53
void apply(const pbes_system::imp &x)
Definition traverser.h:107
void apply(const pbes_system::and_ &x)
Definition traverser.h:91
void apply(const pbes_system::pbes &x)
Definition traverser.h:68
void apply(const pbes_system::forall &x)
Definition traverser.h:115
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:60
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:131
void apply(const pbes_system::not_ &x)
Definition traverser.h:84
void apply(const pbes_system::pbes &x)
Definition traverser.h:459
void apply(const pbes_system::propositional_variable &x)
Definition traverser.h:444
void apply(const pbes_system::or_ &x)
Definition traverser.h:490
void apply(const pbes_system::propositional_variable_instantiation &x)
Definition traverser.h:468
void apply(const pbes_system::not_ &x)
Definition traverser.h:475
void apply(const pbes_system::exists &x)
Definition traverser.h:514
void apply(const pbes_system::and_ &x)
Definition traverser.h:482
void apply(const pbes_system::imp &x)
Definition traverser.h:498
void apply(const pbes_system::pbes_expression &x)
Definition traverser.h:522
void apply(const pbes_system::pbes_equation &x)
Definition traverser.h:451
void apply(const pbes_system::forall &x)
Definition traverser.h:506
void apply(T &result, const pbes_system::imp &x)
Definition builder.h:405
void update(pbes_system::pbes &x)
Definition builder.h:361
void apply(T &result, const pbes_system::pbes_expression &x)
Definition builder.h:429
void apply(T &result, const pbes_system::forall &x)
Definition builder.h:413
void apply(T &result, const pbes_system::propositional_variable &x)
Definition builder.h:342
void apply(T &result, const pbes_system::not_ &x)
Definition builder.h:381
void apply(T &result, const pbes_system::and_ &x)
Definition builder.h:389
void apply(T &result, const pbes_system::or_ &x)
Definition builder.h:397
void update(pbes_system::pbes_equation &x)
Definition builder.h:349
void apply(T &result, const pbes_system::exists &x)
Definition builder.h:421
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Definition builder.h:373
add_capture_avoiding_replacement(data::detail::capture_avoiding_substitution_updater< Substitution > &sigma)
void apply(const propositional_variable_instantiation &v)
Definition find.h:42
Visitor for collecting the quantifier variables that occur in a pbes expression.
Visitor for determining if within the scope of a quantifier there are quantifier variables of free va...
void push(const data::variable_list &variables)
Adds variables to the quantifier stack, and adds replacements for the name clashes to replacements.
bool is_in_quantifier_stack(const core::identifier_string &name) const
Returns true if the quantifier_stack contains a data variable with the given name.
std::set< propositional_variable_instantiation > variables
void apply(const propositional_variable_instantiation &x)
pbes_system::propositional_variable_instantiation parse_PropVarInst(const core::parse_node &node) const
Definition parse_impl.h:52
pbes_system::propositional_variable parse_PropVarDecl(const core::parse_node &node) const
Definition parse_impl.h:47
pbes_system::propositional_variable_instantiation parse_PbesInit(const core::parse_node &node) const
Definition parse_impl.h:57
std::vector< pbes_equation > parse_PbesEqnSpec(const core::parse_node &node) const
Definition parse_impl.h:79
pbes_system::fixpoint_symbol parse_FixedPointOperator(const core::parse_node &node) const
Definition parse_impl.h:62
pbes_actions(const core::parser &parser_)
Definition parse_impl.h:25
untyped_pbes parse_PbesSpec(const core::parse_node &node) const
Definition parse_impl.h:84
std::vector< pbes_equation > parse_PbesEqnDeclList(const core::parse_node &node) const
Definition parse_impl.h:74
pbes_equation parse_PbesEqnDecl(const core::parse_node &node) const
Definition parse_impl.h:69
pbes_system::pbes_expression parse_PbesExpr(const core::parse_node &node) const
Definition parse_impl.h:29
data::data_type_checker & m_data_type_checker
Definition typecheck.h:30
void apply(T &result, const propositional_variable_instantiation &x)
Definition typecheck.h:88
void apply(T &result, const data::untyped_data_parameter &x)
Definition typecheck.h:121
const detail::pbes_context & m_pbes_context
Definition typecheck.h:32
data::detail::variable_context m_variable_context
Definition typecheck.h:31
void apply(T &result, const forall &x)
Definition typecheck.h:50
void apply(T &result, const exists &x)
Definition typecheck.h:69
void apply(T &result, const data::data_expression &x)
Definition typecheck.h:44
typecheck_builder(data::data_type_checker &data_typechecker, const data::detail::variable_context &variables, const detail::pbes_context &pbes_context)
Definition typecheck.h:34
An empty struct that can be used to indicate that there is no substitution that should be applied to ...
const propositional_variable_instantiation & operator()(const propositional_variable_instantiation &v)
void apply(T &result, const data::untyped_data_parameter &x)
Definition builder.h:37
void apply(T &result, const data::data_expression &x)
Definition builder.h:32
Traversal class for pbes_expressions. Used as a base class for pbes_expression_traverser.
Definition traverser.h:23
void apply(const data::data_expression &x)
Definition traverser.h:29
void apply(const data::untyped_data_parameter &x)
Definition traverser.h:36
propositional_variable_instantiation initial_state
std::size_t operator()(const mcrl2::pbes_system::pbes_expression &x) const
std::size_t operator()(const mcrl2::pbes_system::propositional_variable_instantiation &x) const