12#ifndef MCRL2_PBES_BUILDER_H
13#define MCRL2_PBES_BUILDER_H
15#include "mcrl2/data/builder.h"
16#include "mcrl2/pbes/pbes.h"
25template <
typename Derived>
43template <
template <
class>
class Builder,
class Derived>
56 static_cast<Derived&>(*
this).enter(x);
58 static_cast<Derived&>(*
this).leave(x);
63 static_cast<Derived&>(*
this).enter(x);
65 static_cast<Derived&>(*
this).apply(result_variable, x
.variable());
68 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
70 static_cast<Derived&>(*
this).leave(x);
75 static_cast<Derived&>(*
this).enter(x);
76 static_cast<Derived&>(*
this).update(x.global_variables());
77 static_cast<Derived&>(*
this).update(x.equations());
81 static_cast<Derived&>(*
this).leave(x);
88 static_cast<Derived&>(*
this).enter(x);
90 static_cast<Derived&>(*
this).leave(x);
97 static_cast<Derived&>(*
this).enter(x);
99 static_cast<Derived&>(*
this).leave(x);
106 static_cast<Derived&>(*
this).enter(x);
108 static_cast<Derived&>(*
this).leave(x);
115 static_cast<Derived&>(*
this).enter(x);
117 static_cast<Derived&>(*
this).leave(x);
124 static_cast<Derived&>(*
this).enter(x);
126 static_cast<Derived&>(*
this).leave(x);
133 static_cast<Derived&>(*
this).enter(x);
135 static_cast<Derived&>(*
this).leave(x);
142 static_cast<Derived&>(*
this).enter(x);
144 static_cast<Derived&>(*
this).leave(x);
151 static_cast<Derived&>(*
this).enter(x);
192 static_cast<Derived&>(*
this).leave(x);
198template <
typename Derived>
206template <
template <
class>
class Builder,
class Derived>
217 static_cast<Derived&>(*
this).enter(x);
219 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
221 static_cast<Derived&>(*
this).leave(x);
226 static_cast<Derived&>(*
this).enter(x);
227 static_cast<Derived&>(*
this).update(x.equations());
229 static_cast<Derived&>(*
this).apply(result_initial_state, x
.initial_state());
231 static_cast<Derived&>(*
this).leave(x);
238 static_cast<Derived&>(*
this).enter(x);
240 static_cast<Derived&>(*
this).leave(x);
247 static_cast<Derived&>(*
this).enter(x);
249 static_cast<Derived&>(*
this).leave(x);
256 static_cast<Derived&>(*
this).enter(x);
258 static_cast<Derived&>(*
this).leave(x);
265 static_cast<Derived&>(*
this).enter(x);
267 static_cast<Derived&>(*
this).leave(x);
274 static_cast<Derived&>(*
this).enter(x);
276 static_cast<Derived&>(*
this).leave(x);
283 static_cast<Derived&>(*
this).enter(x);
285 static_cast<Derived&>(*
this).leave(x);
292 static_cast<Derived&>(*
this).enter(x);
294 static_cast<Derived&>(*
this).leave(x);
301 static_cast<Derived&>(*
this).enter(x);
342 static_cast<Derived&>(*
this).leave(x);
348template <
typename Derived>
355template <
template <
class>
class Builder,
class Derived>
368 static_cast<Derived&>(*
this).enter(x);
370 static_cast<Derived&>(*
this).leave(x);
375 static_cast<Derived&>(*
this).enter(x);
377 static_cast<Derived&>(*
this).apply(result_variable, x
.variable());
380 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
382 static_cast<Derived&>(*
this).leave(x);
387 static_cast<Derived&>(*
this).enter(x);
388 static_cast<Derived&>(*
this).update(x.global_variables());
389 static_cast<Derived&>(*
this).update(x.equations());
391 static_cast<Derived&>(*
this).apply(result_initial_state, x
.initial_state());
393 static_cast<Derived&>(*
this).leave(x);
400 static_cast<Derived&>(*
this).enter(x);
402 static_cast<Derived&>(*
this).leave(x);
409 static_cast<Derived&>(*
this).enter(x);
411 static_cast<Derived&>(*
this).leave(x);
418 static_cast<Derived&>(*
this).enter(x);
420 static_cast<Derived&>(*
this).leave(x);
427 static_cast<Derived&>(*
this).enter(x);
429 static_cast<Derived&>(*
this).leave(x);
436 static_cast<Derived&>(*
this).enter(x);
438 static_cast<Derived&>(*
this).leave(x);
445 static_cast<Derived&>(*
this).enter(x);
447 static_cast<Derived&>(*
this).leave(x);
454 static_cast<Derived&>(*
this).enter(x);
456 static_cast<Derived&>(*
this).leave(x);
463 static_cast<Derived&>(*
this).enter(x);
504 static_cast<Derived&>(*
this).leave(x);
510template <
typename Derived>
518template <
template <
class>
class Builder,
class Derived>
529 static_cast<Derived&>(*
this).enter(x);
531 static_cast<Derived&>(*
this).apply(result_formula, x
.formula());
533 static_cast<Derived&>(*
this).leave(x);
538 static_cast<Derived&>(*
this).enter(x);
539 static_cast<Derived&>(*
this).update(x.equations());
540 static_cast<Derived&>(*
this).leave(x);
548 static_cast<Derived&>(*
this).enter(x);
550 static_cast<Derived&>(*
this).leave(x);
558 static_cast<Derived&>(*
this).enter(x);
560 static_cast<Derived&>(*
this).leave(x);
567 static_cast<Derived&>(*
this).enter(x);
569 static_cast<Derived&>(*
this).leave(x);
576 static_cast<Derived&>(*
this).enter(x);
578 static_cast<Derived&>(*
this).leave(x);
585 static_cast<Derived&>(*
this).enter(x);
587 static_cast<Derived&>(*
this).leave(x);
594 static_cast<Derived&>(*
this).enter(x);
596 static_cast<Derived&>(*
this).leave(x);
603 static_cast<Derived&>(*
this).enter(x);
605 static_cast<Derived&>(*
this).leave(x);
612 static_cast<Derived&>(*
this).enter(x);
653 static_cast<Derived&>(*
this).leave(x);
659template <
typename Derived>
Term containing a string.
const aterm & operator[](const size_type i) const
Returns the i-th argument.
const function_symbol & function() const
Returns the function symbol belonging to an aterm.
aterm(const aterm &other) noexcept=default
This class has user-declared copy constructor so declare default copy and move operators.
aterm(const function_symbol &sym)
Constructor.
bool operator==(const function_symbol &f) const
Equality test.
void swap(unprotected_aterm_core &t) noexcept
Swaps this term with its argument.
bool operator<(const unprotected_aterm_core &t) const
Comparison operator for two unprotected aterms.
bool operator==(const unprotected_aterm_core &t) const
Comparison operator.
An abstraction expression.
abstraction(const atermpp::aterm &term)
Constructor.
data_expression(const data_expression &) noexcept=default
Move semantics.
bool is_well_typed() const
Returns true if.
\brief An untyped parameter
\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.
\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.
Algorithm class for the abstract algorithm.
void run(pbes &p, const detail::pbes_parameter_map ¶meter_map, bool value_true)
Runs the algorithm.
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_expression term_type
The expression type of the equation.
fixpoint_symbol symbol_type
The symbol type of the equation.
void swap(pbes_equation &other)
Swaps the contents.
propositional_variable variable_type
The variable type 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.
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.
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(const data::variable &x)
\brief Constructor Z6.
pbes_expression()
\brief Default constructor X3.
pbes_expression(pbes_expression &&) noexcept=default
parameterized boolean equation system
std::set< data::variable > & global_variables()
Returns the declared free variables of the pbes.
bool is_closed() const
True if the pbes is closed.
data::data_specification m_data
The data specification.
pbes(const data::data_specification &data, const std::vector< pbes_equation > &equations, propositional_variable_instantiation initial_state)
Constructor.
std::set< data::variable > m_global_variables
The set of global variables.
std::set< propositional_variable > compute_declared_variables() const
Returns the predicate variables appearing in the left hand side of an equation.
pbes_equation equation_type
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.
const propositional_variable_instantiation & initial_state() const
Returns the initial state.
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...
std::set< propositional_variable > occurring_variables() const
Returns the set of occurring propositional variable declarations of the pbes, i.e....
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...
const std::set< data::variable > & global_variables() const
Returns the declared free variables of the pbes.
std::vector< pbes_equation > & equations()
Returns the equations.
propositional_variable_instantiation & initial_state()
Returns the initial state.
propositional_variable_instantiation m_initial_state
The initial state.
pbes()=default
Constructor.
std::vector< pbes_equation > m_equations
The sequence of pbes equations.
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...
const std::vector< pbes_equation > & equations() const
Returns the equations.
bool is_well_typed() const
Checks if the PBES is well typed.
\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()
Default constructor.
propositional_variable_instantiation(propositional_variable_instantiation &&) noexcept=default
propositional_variable_instantiation(const core::identifier_string &name, const data::data_expression_list ¶meters)
Constructor.
const core::identifier_string & name() const
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 ¶meters)
Constructor.
propositional_variable_instantiation(const atermpp::aterm &term)
Constructor.
\brief A propositional variable declaration
const data::variable_list & parameters() const
propositional_variable(const atermpp::aterm &term)
propositional_variable(const std::string &name)
propositional_variable(const std::string &name, const data::variable_list ¶meters)
\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 ¶meters)
\brief Constructor Z12.
Standard exception class for reporting runtime errors.
Simple timer to time the CPU time used by a piece of code.
void write_report(std::ostream &s)
Write the report to an output stream.
std::map< std::string, timing > m_timings
collection of timings
void start(const std::string &timing_name)
Start measurement with a hint.
std::string m_filename
name of the file to write timings to
void finish(const std::string &timing_name)
Finish a measurement with a hint.
void report()
Write all timing information that has been recorded.
execution_timer(const std::string &tool_name="", std::string const &filename="")
Constructor of a simple execution timer.
~execution_timer()
Destructor.
std::string m_tool_name
name of the tool we are timing
The main namespace for the aterm++ library.
const atermpp::function_symbol & function_symbol_Mu()
const atermpp::function_symbol & function_symbol_PBESExists()
const atermpp::function_symbol & function_symbol_PBEqn()
const atermpp::function_symbol & function_symbol_Nu()
const atermpp::function_symbol & function_symbol_PropVarDecl()
const atermpp::function_symbol & function_symbol_PBESNot()
const atermpp::function_symbol & function_symbol_PBESAnd()
const atermpp::function_symbol & function_symbol_PBESOr()
const atermpp::function_symbol & function_symbol_PBESImp()
const atermpp::function_symbol & function_symbol_PBESForall()
const atermpp::function_symbol & function_symbol_PropVarInst()
atermpp::aterm_string identifier_string
String type of the LPS library. Identifier strings are represented internally as ATerms.
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.
Namespace for system defined sort bool_.
bool is_false_function_symbol(const atermpp::aterm &e)
Recogniser for function false.
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
const function_symbol & false_()
Constructor for function symbol false.
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
bool is_true_function_symbol(const atermpp::aterm &e)
Recogniser for function true.
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
const function_symbol & true_()
Constructor for function symbol true.
Namespace for all data library functionality.
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_()
const data_expression & true_()
rewrite_strategy
The strategy of the rewriter.
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
atermpp::term_list< data_expression > data_expression_list
\brief list of data_expressions
bool is_untyped_data_parameter(const atermpp::aterm &x)
atermpp::term_list< variable > variable_list
\brief list of variables
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.
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 & arg(const pbes_expression &t)
Returns the pbes expression argument of expressions of type not, exists and forall.
pbes_expression data_arg(const pbes_expression &t)
Returns the pbes expression argument of expressions of type not, exists and forall.
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.
pbes_expression data_right(const pbes_expression &x)
Returns the left 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 normalize(pbes &x)
The function normalize brings (embedded) pbes expressions into positive normal form,...
std::map< core::identifier_string, std::vector< data::variable > > pbes_parameter_map
Data structure for storing the variables that should be expanded by the finite pbesinst algorithm.
pbes_parameter_map parse_pbes_parameter_map(const pbes &p, const std::string &text)
Parses parameter selection for finite pbesinst algorithm.
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.
atermpp::term_list< pbes_expression > pbes_expression_list
\brief list of pbes_expressions
std::string pp(const pbes_system::forall &x)
bool is_pbes_file_format(const utilities::file_format &format)
bool is_universal_or(const pbes_expression &t)
Test for a disjunction.
void lps2pbes(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &output_format, const std::string &formula_filename, bool timed, bool structured, bool unoptimized, bool preprocess_modal_operators, bool generate_counter_example, bool check_only)
std::set< data::variable > find_free_variables(const pbes_system::pbes_equation &x)
atermpp::term_list< fixpoint_symbol > fixpoint_symbol_list
\brief list of fixpoint_symbols
std::string pp(const pbes_system::pbes_equation &x)
bool is_data(const pbes_expression &t)
Returns true if the term t is a data expression.
std::string pp(const pbes_system::and_ &x)
bool operator!=(const pbes_equation &x, const pbes_equation &y)
std::set< data::variable > find_free_variables(const pbes_system::pbes &x)
std::string description(const absinthe_strategy strategy)
Prints an absinthe strategy.
void normalize_sorts(pbes_system::pbes_equation_vector &x, const data::sort_specification &sortspec)
void swap(propositional_variable &t1, propositional_variable &t2)
\brief swap overload
std::istream & operator>>(std::istream &is, pbesinst_strategy &s)
std::istream & operator>>(std::istream &is, absinthe_strategy &strategy)
pbes_rewriter_type parse_pbes_rewriter_type(const std::string &type)
Parses a pbes rewriter type.
void pbesabstract(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format, const std::string ¶meter_selection, bool value_true)
void make_propositional_variable(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_propositional_variable(const atermpp::aterm &x)
void swap(propositional_variable_instantiation &t1, propositional_variable_instantiation &t2)
\brief swap overload
pbes_system::pbes_expression normalize_sorts(const pbes_system::pbes_expression &x, const data::sort_specification &sortspec)
pbes_rewriter_type
An enumerated type for the available pbes rewriters.
std::set< data::sort_expression > find_sort_expressions(const pbes_system::pbes &x)
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.
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.
bool is_not(const atermpp::aterm &x)
std::string pp(const pbes_system::propositional_variable_instantiation_list &x)
const utilities::file_format & pbes_format_internal_bes()
void txt2pbes(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &output_format, bool normalize)
std::string pp(const pbes_system::pbes_expression_list &x)
std::string pp(const pbes_system::or_ &x)
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)
std::vector< propositional_variable_instantiation > propositional_variable_instantiation_vector
\brief vector of propositional_variable_instantiations
void pbesstategraph(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format, const pbesstategraph_options &options)
void lpsbisim2pbes(const std::string &input_filename1, const std::string &input_filename2, const std::string &output_filename, const utilities::file_format &output_format, bisimulation_type type, bool normalize)
const utilities::file_format & pbes_format_pgsolver()
std::vector< fixpoint_symbol > fixpoint_symbol_vector
\brief vector of fixpoint_symbols
void make_not_(atermpp::aterm &t, const ARGUMENTS &... args)
std::string pp(const pbes_system::propositional_variable &x)
std::vector< propositional_variable > propositional_variable_vector
\brief vector of propositional_variables
bool is_exists(const atermpp::aterm &x)
data::variable_list free_variables(const pbes_expression &x)
void swap(or_ &t1, or_ &t2)
\brief swap overload
bool operator==(const pbes_equation &x, const pbes_equation &y)
bool is_constant(const pbes_expression &x)
void complps2pbes(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &output_format, const std::string &formula_filename)
void normalize_sorts(pbes_system::pbes &x, const data::sort_specification &)
std::string pp(const pbes_system::propositional_variable_instantiation &x)
atermpp::term_list< propositional_variable_instantiation > propositional_variable_instantiation_list
\brief list of propositional_variable_instantiations
pbesinst_strategy
pbesinst transformation strategies
@ pbesinst_finite_strategy
@ pbesinst_alternative_lazy_strategy
void pbesrewr(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format, data::rewrite_strategy rewrite_strategy, pbes_rewriter_type rewriter_type)
bool is_or(const atermpp::aterm &x)
std::istream & operator>>(std::istream &is, pbes_rewriter_type &t)
Stream operator for rewriter type.
const data::variable_list & quantifier_variables(const pbes_expression &x)
std::string pp(const pbes_system::fixpoint_symbol &x)
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)
void swap(imp &t1, imp &t2)
\brief swap overload
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.
void swap(and_ &t1, and_ &t2)
\brief swap overload
std::string pp(const pbes_system::pbes_equation_vector &x)
void pbesinfo(const std::string &input_filename, const std::string &input_file_message, const utilities::file_format &file_format, bool opt_full)
std::set< data::function_symbol > find_function_symbols(const pbes_system::pbes &x)
std::vector< pbes_equation > pbes_equation_vector
\brief vector of pbes_equations
bool has_propositional_variables(const pbes_expression &x)
void pbespareqelm(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format, data::rewrite_strategy rewrite_strategy, pbes_rewriter_type rewriter_type, bool ignore_initial_state)
void pbespp(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, core::print_format_type format, bool use_pfnf_printer)
void swap(exists &t1, exists &t2)
\brief swap overload
bool is_forall(const atermpp::aterm &x)
void pbesparelm(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format)
void make_propositional_variable_instantiation(atermpp::aterm &t, const ARGUMENTS &... args)
pbesinst_strategy parse_pbesinst_strategy(const std::string &s)
Parse a pbesinst transformation strategy.
void make_or_(atermpp::aterm &t, const ARGUMENTS &... args)
atermpp::aterm pbes_to_aterm(const pbes &p)
Conversion to atermappl.
bool is_universal_not(const pbes_expression &t)
Test for a conjunction.
std::string print_pbesinst_strategy(const pbesinst_strategy strategy)
Returns a string representation of a pbesinst transformation strategy.
std::string pp(const pbes_system::pbes_expression &x)
std::istream & operator>>(std::istream &is, bisimulation_type &t)
bool operator==(const pbes &p1, const pbes &p2)
Equality operator on PBESs.
bool is_well_typed(const pbes_equation &eqn)
const std::vector< utilities::file_format > & pbes_file_formats()
std::set< data::variable > find_free_variables(const pbes_system::pbes_expression &x)
void save_bes_pgsolver(const pbes &bes, std::ostream &stream, bool maxpg)
pbes_system::pbes_expression translate_user_notation(const pbes_system::pbes_expression &x)
std::vector< pbes_expression > pbes_expression_vector
\brief vector of pbes_expressions
bool is_pbes_or(const pbes_expression &t)
Returns true if the term t is an or expression.
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.
std::string print_pbes_rewriter_type(const pbes_rewriter_type type)
Prints a pbes rewriter type.
std::string pp(const pbes_system::pbes &x)
void optimized_or(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make a disjunction.
std::string print_absinthe_strategy(const absinthe_strategy strategy)
Prints an absinthe strategy.
atermpp::term_list< pbes_equation > pbes_equation_list
\brief list of pbes_equations
bool is_pbes_and(const pbes_expression &t)
Returns true if the term t is an and expression.
atermpp::aterm pbes_equation_to_aterm(const pbes_equation &eqn)
Conversion to atermaPpl.
void save_pbes(const pbes &pbes, std::ostream &stream, utilities::file_format format)
Save a PBES in the format specified.
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.
bool search_variable(const pbes_system::pbes_expression &x, const data::variable &v)
std::string pp(const pbes_system::imp &x)
std::string print_bisimulation_type(const bisimulation_type t)
Returns a description of a bisimulation type.
void swap(forall &t1, forall &t2)
\brief swap overload
void swap(pbes_expression &t1, pbes_expression &t2)
\brief swap overload
std::set< data::variable > find_all_variables(const pbes_system::pbes &x)
std::string pp(const pbes_system::exists &x)
atermpp::term_list< propositional_variable > propositional_variable_list
\brief list of propositional_variables
void complete_data_specification(pbes &)
Adds all sorts that appear in the PBES p to the data specification of p.
void swap(pbes_equation &t1, pbes_equation &t2)
\brief swap overload
bisimulation_type
An enumerated type for the available bisimulation types.
void swap(not_ &t1, not_ &t2)
\brief swap overload
const utilities::file_format & pbes_format_internal()
void pbesconstelm(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format, data::rewrite_strategy rewrite_strategy, pbes_rewriter_type rewriter_type, bool compute_conditions, bool remove_redundant_equations, bool check_quantifiers)
void make_exists(atermpp::aterm &t, const ARGUMENTS &... args)
std::set< core::identifier_string > find_identifiers(const pbes_system::pbes_expression &x)
bool is_propositional_variable_instantiation(const atermpp::aterm &x)
const utilities::file_format & pbes_format_text()
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)
void swap(fixpoint_symbol &t1, fixpoint_symbol &t2)
\brief swap overload
absinthe_strategy parse_absinthe_strategy(const std::string &strategy)
Parses an absinthe strategy.
bool is_and(const atermpp::aterm &x)
std::string description(const pbes_rewriter_type type)
Returns a description of a pbes rewriter.
void optimized_and(pbes_expression &result, const pbes_expression &p, const pbes_expression &q)
Make a conjunction.
std::string description(const pbesinst_strategy strategy)
Returns a string representation of a pbesinst transformation strategy.
void translate_user_notation(pbes_system::pbes &x)
std::string description(const bisimulation_type t)
Returns a description of a bisimulation type.
bool is_imp(const atermpp::aterm &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 pbesabsinthe(const std::string &input_filename, const std::string &output_filename, const utilities::file_format &input_format, const utilities::file_format &output_format, const std::string &abstraction_file, absinthe_strategy strategy, bool print_used_function_symbols, bool enable_logging)
std::string pp(const pbes_system::not_ &x)
bisimulation_type parse_bisimulation_type(const std::string &type)
Returns the string corresponding to a bisimulation type.
bool is_true(const pbes_expression &t)
Test for the value true.
std::string pp(const pbes_system::propositional_variable_list &x)
const pbes_expression & false_()
void make_forall(atermpp::aterm &t, const ARGUMENTS &... args)
absinthe_strategy
The approximation strategies of the absinthe tool.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
expression builder that visits all sub expressions
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
static const atermpp::function_symbol PropVarDecl
static const atermpp::function_symbol PBESForall
static const atermpp::function_symbol PBESNot
static const atermpp::function_symbol PBESImp
static const atermpp::function_symbol PBESAnd
static const atermpp::function_symbol Nu
static const atermpp::function_symbol PropVarInst
static const atermpp::function_symbol Mu
static const atermpp::function_symbol PBESExists
static const atermpp::function_symbol PBESOr
static bool is_false(const term_type &t)
Test for the value false.
static void make_or_(term_type &result, const term_type &p, const term_type &q)
Make a disjunction.
static bool is_imp(const term_type &t)
Test for an implication.
static void make_exists(term_type &result, const variable_sequence_type &l, const term_type &p)
Make an existential quantification.
static bool is_data(const term_type &t)
Test for data term.
static term_type forall(const variable_sequence_type &l, const term_type &p)
Make a universal quantification.
static std::string pp(const term_type &t)
Pretty print function.
static term_type true_()
Make the value true.
static term_type exists(const variable_sequence_type &l, const term_type &p)
Make an existential quantification.
static term_type or_(const term_type &p, const term_type &q)
Make a disjunction.
static const data_term_sequence_type & param(const term_type &t)
Returns the parameter list of a propositional variable instantiation.
data::variable variable_type
The variable type.
static bool is_not(const term_type &t)
Test for a negation.
static void make_imp(term_type &result, const term_type &p, const term_type &q)
Make an implication.
static term_type join_and(FwdIt first, FwdIt last)
pbes_system::propositional_variable propositional_variable_decl_type
The propositional variable declaration type.
static bool is_and(const term_type &t)
Test for a conjunction.
static bool is_variable(const term_type &t)
Test if a term is a variable.
pbes_system::pbes_expression term_type
The term type.
static term_type not_(const term_type &p)
Make a negation.
static bool is_exists(const term_type &t)
Test for an existential quantification.
pbes_system::propositional_variable_instantiation propositional_variable_type
The propositional variable instantiation type.
static void make_and_(term_type &result, const term_type &p, const term_type &q)
Make a conjunction.
static term_type false_()
Make the value false.
static term_type left(const term_type &t)
Returns the left argument of a term of type and, or or imp.
static const string_type & name(const term_type &t)
Returns the name of a propositional variable instantiation.
static term_type right(const term_type &t)
Returns the right argument of a term of type and, or or imp.
data::data_expression data_term_type
The data term type.
core::identifier_string string_type
The string type.
static term_type and_(const term_type &p, const term_type &q)
Make a conjunction.
static const variable_sequence_type & var(const term_type &t)
Returns the quantifier variables of a quantifier expression.
static const term_type & variable2term(const variable_type &v)
Conversion from variable to term.
static void make_forall(term_type &result, const variable_sequence_type &l, const term_type &p)
Make a universal quantification.
static void make_not_(term_type &result, const term_type &p)
Make a negation.
static const term_type & not_arg(const term_type &t)
Returns the argument of a term of type not.
data::variable_list variable_sequence_type
The variable sequence type.
static term_type imp(const term_type &p, const term_type &q)
Make an implication.
data::data_expression_list data_term_sequence_type
The data term sequence type.
static term_type join_or(FwdIt first, FwdIt last)
static bool is_forall(const term_type &t)
Test for an universal quantification.
static bool is_prop_var(const term_type &t)
Test for propositional variable instantiation.
static bool is_true(const term_type &t)
Test for the value true.
static bool is_or(const term_type &t)
Test for a disjunction.
Contains type information for terms.
void apply(T &result, const pbes_system::imp &x)
void apply(T &result, const pbes_system::forall &x)
void apply(T &result, const pbes_system::and_ &x)
void apply(T &result, const pbes_system::pbes_expression &x)
void apply(T &result, const pbes_system::or_ &x)
void update(pbes_system::pbes_equation &x)
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
void update(pbes_system::pbes &x)
void apply(T &result, const pbes_system::exists &x)
void apply(T &result, const pbes_system::not_ &x)
void update(pbes_system::pbes &x)
void apply(T &result, const pbes_system::pbes_expression &x)
void apply(T &result, const pbes_system::forall &x)
void update(pbes_system::pbes_equation &x)
void apply(T &result, const pbes_system::not_ &x)
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
void apply(T &result, const pbes_system::and_ &x)
void apply(T &result, const pbes_system::imp &x)
void apply(T &result, const pbes_system::exists &x)
void apply(T &result, const pbes_system::or_ &x)
void apply(T &result, const pbes_system::exists &x)
void apply(T &result, const pbes_system::and_ &x)
void apply(T &result, const pbes_system::or_ &x)
void apply(T &result, const pbes_system::forall &x)
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
void apply(T &result, const pbes_system::propositional_variable &x)
void apply(T &result, const pbes_system::imp &x)
void update(pbes_system::pbes_equation &x)
void update(pbes_system::pbes &x)
void apply(T &result, const pbes_system::pbes_expression &x)
void apply(T &result, const pbes_system::not_ &x)
void apply(T &result, const pbes_system::imp &x)
void update(pbes_system::pbes &x)
void apply(T &result, const pbes_system::pbes_expression &x)
void apply(T &result, const pbes_system::forall &x)
void apply(T &result, const pbes_system::propositional_variable &x)
void apply(T &result, const pbes_system::not_ &x)
void apply(T &result, const pbes_system::and_ &x)
void apply(T &result, const pbes_system::or_ &x)
void update(pbes_system::pbes_equation &x)
void apply(T &result, const pbes_system::exists &x)
void apply(T &result, const pbes_system::propositional_variable_instantiation &x)
Visitor that implements the pbes-abstract algorithm.
bool is_bound(const data::variable &v) const
Returns true if the m_quantifier_stack contains a given data variable.
const data::data_expression m_value
pbes_abstract_builder(const std::vector< data::variable > &selected_variables, bool value_true)
pbes_expression_builder< pbes_abstract_builder > super
void apply(T &result, const data::data_expression &d)
Visit data_expression node.
void apply(T &result, const exists &x)
Visit exists node.
void apply(T &result, const forall &x)
Visit forall node.
std::vector< data::variable_list > m_quantifier_stack
const std::vector< data::variable > m_selected_variables
void pop_variables()
Removes the last added sequence of variables from the quantifier stack.
void push_variables(const data::variable_list &variables)
Adds a sequence of variables to the quantifier stack.
void apply(T &result, const data::data_expression &x)
core::builder< Derived > super
bool timing_enabled() const
utilities::execution_timer * timer
bool print_influence_graph
bool cache_marking_updates
bool use_alternative_gcfp_consistency
bool use_alternative_gcfp_relation
bool use_alternative_lcfp_criterion
Pair of start and finish times.
std::chrono::steady_clock::time_point finish
std::chrono::steady_clock::time_point start
std::size_t operator()(const atermpp::aterm &t) const
std::size_t operator()(const atermpp::detail::reference_aterm< T > &t) const
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