12#ifndef MCRL2_DATA_REWRITERS_SIMPLIFY_REWRITER_H
13#define MCRL2_DATA_REWRITERS_SIMPLIFY_REWRITER_H
25template <
typename Derived>
35 return static_cast<Derived&
>(*this);
137 core::make_apply_builder<detail::simplify_rewrite_builder>().apply(result, x);
143 core::make_apply_builder<detail::simplify_rewrite_builder>().apply(result, x);
149void simplify(T& x,
typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value>::type* = 0)
151 core::make_update_apply_builder<data::data_expression_builder>(
simplify_rewriter()).update(x);
155T
simplify(
const T& x,
typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr)
158 core::make_update_apply_builder<data::data_expression_builder>(
simplify_rewriter()).apply(result, x);
const variable_list & variables() const
An application of a data expression to a number of arguments.
const_iterator begin() const
Returns an iterator pointing to the first argument of the application.
data_expression_builder< Derived > super
bool is_forall(const data_expression &x) const
void apply(T &result, const forall &x)
bool is_exists(const data_expression &x) const
void apply(T &result, const application &x)
bool is_imp(const data_expression &x) const
void apply(T &result, const exists &x)
bool is_and(const data_expression &x) const
bool is_or(const data_expression &x) const
bool is_not(const data_expression &x) const
existential quantification.
universal quantification.
add your file description here.
Contains term traits for data_expression.
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
bool is_implies_application(const atermpp::aterm &e)
Recogniser for application of =>.
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
const data_expression & binary_right(const application &x)
void optimized_exists(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make an existential quantification.
void optimized_or(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
void simplify(T &x, typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value >::type *=0)
const data_expression & binary_left(const application &x)
void optimized_imp(Term &result, const Term &p, const Term &q)
Make an implication.
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
void optimized_not(Term &result, const Term &arg)
Make a negation.
void optimized_and(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
void optimized_forall(Term &result, const VariableSequence &l, const Term &p, bool remove_variables=false)
Make a universal quantification.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
void apply(T &result, const data::variable &x)
data_expression operator()(const data_expression &x) const
void operator()(data_expression &result, const data_expression &x) const