12#ifndef MCRL2_PRES_PRES_EXPRESSION_H
13#define MCRL2_PRES_PRES_EXPRESSION_H
152 const core::identifier_string& name()
const
154 return atermpp::down_cast<core::identifier_string>((*
this)[0]);
159 return atermpp::down_cast<data::data_expression_list>((*
this)[1]);
172 assert(core::detail::check_term_PropVarInst(*
this));
192template <
class... ARGUMENTS>
214std::string
pp(
const propositional_variable_instantiation& x);
247 assert(core::detail::check_term_PRESMinus(*
this));
263 return atermpp::down_cast<pres_expression>((*
this)[0]);
269template <
class... ARGUMENTS>
285std::string
pp(
const minus& x);
318 assert(core::detail::check_term_PRESAnd(*
this));
334 return atermpp::down_cast<pres_expression>((*
this)[0]);
339 return atermpp::down_cast<pres_expression>((*
this)[1]);
345template <
class... ARGUMENTS>
361std::string
pp(
const and_& x);
394 assert(core::detail::check_term_PRESOr(*
this));
405 or_& operator=(const
or_&) noexcept = default;
406 or_& operator=(
or_&&) noexcept = default;
410 return atermpp::down_cast<pres_expression>((*
this)[0]);
415 return atermpp::down_cast<pres_expression>((*
this)[1]);
421template <
class... ARGUMENTS>
437std::string
pp(
const or_& x);
470 assert(core::detail::check_term_PRESImp(*
this));
481 imp& operator=(const
imp&) noexcept = default;
482 imp& operator=(
imp&&) noexcept = default;
486 return atermpp::down_cast<pres_expression>((*
this)[0]);
491 return atermpp::down_cast<pres_expression>((*
this)[1]);
497template <
class... ARGUMENTS>
513std::string
pp(
const imp& x);
546 assert(core::detail::check_term_PRESPlus(*
this));
562 return atermpp::down_cast<pres_expression>((*
this)[0]);
567 return atermpp::down_cast<pres_expression>((*
this)[1]);
573template <
class... ARGUMENTS>
622 assert(core::detail::check_term_PRESConstantMultiply(*
this));
636 const data::data_expression& left()
const
638 return atermpp::down_cast<data::data_expression>((*
this)[0]);
643 return atermpp::down_cast<pres_expression>((*
this)[1]);
649template <
class... ARGUMENTS>
665std::string
pp(
const const_multiply& x);
690 :
pres_expression(core::detail::default_values::PRESConstantMultiplyAlt)
698 assert(core::detail::check_term_PRESConstantMultiplyAlt(*
this));
714 return atermpp::down_cast<pres_expression>((*
this)[0]);
719 return atermpp::down_cast<data::data_expression>((*
this)[1]);
725template <
class... ARGUMENTS>
741std::string
pp(
const const_multiply_alt& x);
774 assert(core::detail::check_term_PRESInfimum(*
this));
788 const data::variable_list& variables()
const
790 return atermpp::down_cast<data::variable_list>((*
this)[0]);
795 return atermpp::down_cast<pres_expression>((*
this)[1]);
801template <
class... ARGUMENTS>
817std::string
pp(
const infimum& x);
850 assert(core::detail::check_term_PRESSupremum(*
this));
864 const data::variable_list& variables()
const
866 return atermpp::down_cast<data::variable_list>((*
this)[0]);
871 return atermpp::down_cast<pres_expression>((*
this)[1]);
877template <
class... ARGUMENTS>
893std::string
pp(
const supremum& x);
926 assert(core::detail::check_term_PRESSum(*
this));
937 sum& operator=(const
sum&) noexcept = default;
938 sum& operator=(
sum&&) noexcept = default;
940 const data::variable_list& variables()
const
942 return atermpp::down_cast<data::variable_list>((*
this)[0]);
947 return atermpp::down_cast<pres_expression>((*
this)[1]);
953template <
class... ARGUMENTS>
969std::string
pp(
const sum& x);
1002 assert(core::detail::check_term_PRESEqInf(*
this));
1018 return atermpp::down_cast<pres_expression>((*
this)[0]);
1024template <
class... ARGUMENTS>
1073 assert(core::detail::check_term_PRESEqNInf(*
this));
1089 return atermpp::down_cast<pres_expression>((*
this)[0]);
1095template <
class... ARGUMENTS>
1144 assert(core::detail::check_term_PRESCondSm(*
this));
1160 return atermpp::down_cast<pres_expression>((*
this)[0]);
1165 return atermpp::down_cast<pres_expression>((*
this)[1]);
1170 return atermpp::down_cast<pres_expression>((*
this)[2]);
1176template <
class... ARGUMENTS>
1225 assert(core::detail::check_term_PRESCondEq(*
this));
1241 return atermpp::down_cast<pres_expression>((*
this)[0]);
1246 return atermpp::down_cast<pres_expression>((*
this)[1]);
1251 return atermpp::down_cast<pres_expression>((*
this)[2]);
1257template <
class... ARGUMENTS>
1430 return atermpp::down_cast<const pres_expression>(t[0]);
1434 assert(is_infimum(t) || is_supremum(t) || is_sum(t));
1435 return atermpp::down_cast<const pres_expression>(t[1]);
1445 if (data::is_data_expression(t))
1447 assert(data::is_application(t));
1448 const auto& a = atermpp::down_cast<const data::application>(t);
1449 return *(a.begin());
1463 assert(is_and(t) || is_or(t) || is_imp(t));
1464 return atermpp::down_cast<pres_expression>(t[0]);
1473 if (data::is_data_expression(x))
1475 return data::binary_left(atermpp::down_cast<data::application>(x));
1489 return atermpp::down_cast<pres_expression>(t[1]);
1498 if (data::is_data_expression(x))
1500 return data::binary_right(atermpp::down_cast<data::application>(x));
1514 assert(is_infimum(t) || is_supremum(t) || is_sum(t));
1515 return atermpp::down_cast<data::variable_list>(t[0]);
1524 assert(is_propositional_variable_instantiation(t));
1525 return atermpp::down_cast<core::identifier_string>(t[0]);
1534 assert(is_propositional_variable_instantiation(t));
1535 return atermpp::down_cast<data::data_expression_list>(t[1]);
1730 std::size_t factor=1;
1739 std::size_t c = cardinality(v.sort());
1808 else if (p1==
true_())
1831 else if (p1==
true_())
1852 else if (p==
true_())
1878 else if (p==
true_())
1963template <
class... ARGUMENTS>
2087 template <
typename FwdIt>
2094 template <
typename FwdIt>
2382 assert(is_pres_minus(t));
2383 return atermpp::down_cast<term_type>(t[0]);
2395 assert(is_supremum(t) || is_infimum(t));
2397 return atermpp::down_cast<variable_sequence_type>(t[0]);
2406 assert(is_prop_var(t));
2407 return atermpp::down_cast<string_type>(t[0]);
2416 assert(is_prop_var(t));
2417 return atermpp::down_cast<data_term_sequence_type>(t[1]);
2426 return atermpp::down_cast<term_type>(v);
2460 return hash<atermpp::aterm>()(x);
2465 struct hash<
mcrl2::pres_system::propositional_variable_instantiation>
2469 return hash<atermpp::aterm>()(x);
This file provides a class that can determine the cardinality of a sort in a datatype.
Term containing a string.
aterm()
Default constructor.
const function_symbol & function() const
Returns the function symbol belonging to an aterm.
size_type size() const
Returns the size of the term_list.
const_iterator end() const
Returns a const_iterator pointing to the end of the term_list.
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the term_list.
bool empty() const
Returns true if the list's size is 0.
void push_front(const Term &el)
Inserts a new element at the beginning of the current list.
void swap(unprotected_aterm_core &t) noexcept
Swaps this term with its argument.
An abstraction expression.
sort_expression sort() const
Returns the sort of the data expression.
Rewriter that operates on data expressions.
\brief An untyped parameter
\brief A propositional variable declaration
\brief The and operator for pres expressions
and_(const pres_expression &left, const pres_expression &right)
\brief Constructor Z14.
and_()
\brief Default constructor X3.
const pres_expression & right() const
and_(const atermpp::aterm &term)
and_(and_ &&) noexcept=default
and_(const and_ &) noexcept=default
Move semantics.
\brief Conditional operator with condition smaller than or equal to 0
condeq(const condeq &) noexcept=default
Move semantics.
condeq(condeq &&) noexcept=default
condeq(const atermpp::aterm &term)
condeq()
\brief Default constructor X3.
const pres_expression & arg2() const
condeq(const pres_expression &arg1, const pres_expression &arg2, const pres_expression &arg3)
\brief Constructor Z14.
const pres_expression & arg3() const
\brief Conditional operator with condition smaller than 0
condsm()
\brief Default constructor X3.
condsm(const atermpp::aterm &term)
condsm(condsm &&) noexcept=default
const pres_expression & arg2() const
const pres_expression & arg3() const
condsm(const condsm &) noexcept=default
Move semantics.
condsm(const pres_expression &arg1, const pres_expression &arg2, const pres_expression &arg3)
\brief Constructor Z14.
\brief The multiplication with a positive constant with the constant at the right.
const_multiply_alt(const atermpp::aterm &term)
const_multiply_alt(const const_multiply_alt &) noexcept=default
Move semantics.
const_multiply_alt(const_multiply_alt &&) noexcept=default
const_multiply_alt(const pres_expression &left, const data::data_expression &right)
\brief Constructor Z14.
const data::data_expression & right() const
const_multiply_alt()
\brief Default constructor X3.
\brief The multiplication with a positive constant with the constant at the left.
const_multiply(const atermpp::aterm &term)
const_multiply(const const_multiply &) noexcept=default
Move semantics.
const_multiply()
\brief Default constructor X3.
const pres_expression & right() const
const_multiply(const_multiply &&) noexcept=default
const data::data_expression & left() const
const_multiply(const data::data_expression &left, const pres_expression &right)
\brief Constructor Z14.
\brief The indicator whether the argument is infinite
eqinf(const pres_expression &operand)
\brief Constructor Z14.
eqinf(const atermpp::aterm &term)
eqinf()
\brief Default constructor X3.
eqinf(eqinf &&) noexcept=default
eqinf(const eqinf &) noexcept=default
Move semantics.
\brief The indicator whether the argument is -infinite
eqninf(const pres_expression &operand)
\brief Constructor Z14.
eqninf(eqninf &&) noexcept=default
eqninf()
\brief Default constructor X3.
eqninf(const eqninf &) noexcept=default
Move semantics.
eqninf(const atermpp::aterm &term)
\brief The implication operator for pres expressions
imp(const pres_expression &left, const pres_expression &right)
\brief Constructor Z14.
imp()
\brief Default constructor X3.
imp(imp &&) noexcept=default
imp(const atermpp::aterm &term)
const pres_expression & right() const
imp(const imp &) noexcept=default
Move semantics.
\brief The infimum over a data type for pres expressions
infimum(infimum &&) noexcept=default
infimum(const atermpp::aterm &term)
const pres_expression & body() const
infimum(const data::variable_list &variables, const pres_expression &body)
\brief Constructor Z14.
infimum()
\brief Default constructor X3.
infimum(const infimum &) noexcept=default
Move semantics.
\brief The not operator for pres expressions
minus()
\brief Default constructor X3.
minus(minus &&) noexcept=default
minus(const atermpp::aterm &term)
minus(const pres_expression &operand)
\brief Constructor Z14.
minus(const minus &) noexcept=default
Move semantics.
\brief The or operator for pres expressions
or_(or_ &&) noexcept=default
const pres_expression & right() const
or_(const atermpp::aterm &term)
or_(const pres_expression &left, const pres_expression &right)
\brief Constructor Z14.
or_(const or_ &) noexcept=default
Move semantics.
or_()
\brief Default constructor X3.
\brief The addition operator for pres expressions
plus(plus &&) noexcept=default
plus(const pres_expression &left, const pres_expression &right)
\brief Constructor Z14.
plus(const plus &) noexcept=default
Move semantics.
plus()
\brief Default constructor X3.
const pres_expression & right() const
plus(const atermpp::aterm &term)
pres_expression(const data::untyped_data_parameter &x)
\brief Constructor Z6.
pres_expression(pres_expression &&) noexcept=default
pres_expression()
\brief Default constructor X3.
pres_expression(const data::data_expression &x)
\brief Constructor Z6.
pres_expression(const data::variable &x)
\brief Constructor Z6.
pres_expression(const pres_expression &) noexcept=default
Move semantics.
pres_expression(const atermpp::aterm &term)
\brief A propositional variable instantiation
propositional_variable_instantiation(const atermpp::aterm &term)
Constructor.
propositional_variable_instantiation()
Default constructor.
propositional_variable_instantiation(const std::string &name, const data::data_expression_list ¶meters)
Constructor.
propositional_variable_instantiation(const propositional_variable_instantiation &) noexcept=default
Move semantics.
propositional_variable_instantiation(propositional_variable_instantiation &&) noexcept=default
propositional_variable_instantiation(const core::identifier_string &name, const data::data_expression_list ¶meters)
Constructor.
const data::data_expression_list & parameters() const
\brief The generic sum operator for pres expressions
sum(const sum &) noexcept=default
Move semantics.
const pres_expression & body() const
sum(const atermpp::aterm &term)
sum()
\brief Default constructor X3.
sum(sum &&) noexcept=default
sum(const data::variable_list &variables, const pres_expression &body)
\brief Constructor Z14.
\brief The supremeum over a data type for pres expressions
supremum(const atermpp::aterm &term)
supremum(const supremum &) noexcept=default
Move semantics.
supremum()
\brief Default constructor X3.
supremum(supremum &&) noexcept=default
supremum(const data::variable_list &variables, const pres_expression &body)
\brief Constructor Z14.
const pres_expression & body() const
Contains term traits for data_expression.
The main namespace for the aterm++ library.
void make_term_appl(Term &target, const function_symbol &sym, ForwardIterator begin, ForwardIterator end)
Constructor an aterm in a variable based on a function symbol and an forward iterator providing the a...
const atermpp::function_symbol & function_symbol_PRESAnd()
const atermpp::function_symbol & function_symbol_PRESImp()
const atermpp::function_symbol & function_symbol_PRESCondEq()
const atermpp::function_symbol & function_symbol_PRESPlus()
const atermpp::function_symbol & function_symbol_PRESSupremum()
const atermpp::function_symbol & function_symbol_PRESOr()
bool check_rule_PRExpr(const Term &t)
const atermpp::function_symbol & function_symbol_PRESSum()
const atermpp::function_symbol & function_symbol_PRESEqInf()
const atermpp::function_symbol & function_symbol_PRESEqNInf()
const atermpp::function_symbol & function_symbol_PRESConstantMultiply()
const atermpp::function_symbol & function_symbol_PRESCondSm()
const atermpp::function_symbol & function_symbol_PRESConstantMultiplyAlt()
const atermpp::function_symbol & function_symbol_PRESMinus()
const atermpp::function_symbol & function_symbol_PRESInfimum()
const atermpp::function_symbol & function_symbol_PropVarInst()
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 basic_sort & bool_()
Constructor for sort expression Bool.
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.
const function_symbol & true_()
Constructor for function symbol true.
function_symbol times(const sort_expression &s0, const sort_expression &s1)
bool is_zero(const atermpp::aterm &e)
const basic_sort & real_()
Constructor for sort expression Real.
bool is_larger_zero(const atermpp::aterm &e)
Functions that returns true if e is a closed real number larger than zero.
bool is_data_expression(const atermpp::aterm &x)
Test for a data_expression expression.
void optimized_or(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
bool is_untyped_data_parameter(const atermpp::aterm &x)
atermpp::term_list< variable > variable_list
\brief list of variables
void optimized_and(Term &result, const Term &p, const Term &q)
Make a conjunction, and optimize if possible.
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
void make_propositional_variable(atermpp::aterm &t, const ARGUMENTS &... args)
const pres_expression & left(const pres_expression &t)
Returns the left hand side of an expression of type and, or or imp.
const pres_expression & right(const pres_expression &t)
Returns the right hand side of an expression of type and, or or imp.
void make_eqninf(atermpp::aterm &t, const ARGUMENTS &... args)
void translate_user_notation(pres_system::pres &x)
std::vector< pres_expression > pres_expression_vector
\brief vector of pres_expressions
bool is_pres_infimum(const pres_expression &t)
Returns true if the term t is a generalized minus expression.
const pres_expression & true_()
void make_sum(atermpp::aterm &t, const ARGUMENTS &... args)
void make_plus(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_and(const atermpp::aterm &x)
bool is_condeq(const atermpp::aterm &x)
void find_free_variables(const T &x, OutputIterator o)
std::vector< propositional_variable_instantiation > propositional_variable_instantiation_vector
\brief vector of propositional_variable_instantiations
bool is_pres_or(const pres_expression &t)
Returns true if the term t is an or expression.
void optimized_condsm(pres_expression &result, const pres_expression &p1, const pres_expression &p2, const pres_expression &p3)
Make an optimized condsm expression.
void optimized_const_multiply(pres_expression &result, const data::data_expression &d, const pres_expression &p)
Make an optimized const_multiply expression.
bool is_data(const pres_expression &t)
Returns true if the term t is a data expression.
bool is_sum(const atermpp::aterm &x)
bool is_pres_expression(const atermpp::aterm &x)
bool is_true(const pres_expression &t)
Test for the value true.
void make_minus(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_or(const atermpp::aterm &x)
bool is_propositional_variable_instantiation(const atermpp::aterm &x)
void make_eqinf(atermpp::aterm &t, const ARGUMENTS &... args)
void make_const_multiply(atermpp::aterm &t, const ARGUMENTS &... args)
void optimized_sum(pres_expression &result, const data::variable_list &l, const pres_expression &p, const data::data_specification &data_specification, const data::rewriter &rewr)
Make an sum quantification. If l is empty, p is returned.
bool is_plus(const atermpp::aterm &x)
void find_propositional_variable_instantiations(Container const &container, OutputIterator o)
Returns all data variables that occur in a range of expressions.
void make_const_multiply_alt(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_infimum(const atermpp::aterm &x)
void make_condeq(atermpp::aterm &t, const ARGUMENTS &... args)
void optimized_infimum(pres_expression &result, const data::variable_list &l, const pres_expression &p)
Make an implication.
void optimized_and(pres_expression &result, const pres_expression &p, const pres_expression &q)
Make a conjunction.
bool is_minus(const atermpp::aterm &x)
bool is_pres_minus(const pres_expression &t)
Returns true if the term t is a minus expression.
bool is_const_multiply_alt(const atermpp::aterm &x)
void optimized_eqninf(pres_expression &result, const pres_expression &p)
Make an optimized eqinf expression.
bool is_eqninf(const atermpp::aterm &x)
bool is_supremum(const atermpp::aterm &x)
bool is_pres_imp(const pres_expression &t)
Returns true if the term t is an imp expression.
std::string pp(const pres &x)
bool is_const_multiply(const atermpp::aterm &x)
bool is_condsm(const atermpp::aterm &x)
void make_supremum(atermpp::aterm &t, const ARGUMENTS &... args)
atermpp::term_list< pres_expression > pres_expression_list
\brief list of pres_expressions
void swap(pres_equation &t1, pres_equation &t2)
\brief swap overload
atermpp::term_list< pbes_system::propositional_variable > propositional_variable_list
\brief list of propositional_variables
void make_propositional_variable(atermpp::aterm &t, const ARGUMENTS &... args)
bool is_imp(const atermpp::aterm &x)
void make_condsm(atermpp::aterm &t, const ARGUMENTS &... args)
void optimized_condeq(pres_expression &result, const pres_expression &p1, const pres_expression &p2, const pres_expression &p3)
Make an optimized condsm expression.
void optimized_eqinf(pres_expression &result, const pres_expression &p)
Make an optimized eqinf expression.
void optimized_plus(pres_expression &result, const pres_expression &p, const pres_expression &q)
Make a disjunction.
data::variable_list free_variables(const pres_expression &x)
void normalize_sorts(T &x, const data::sort_specification &sortspec, typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
bool is_pres_and(const pres_expression &t)
Returns true if the term t is an and expression.
void optimized_or(pres_expression &result, const pres_expression &p, const pres_expression &q)
Make a disjunction.
bool is_universal_or(const pres_expression &t)
Test for a disjunction.
bool is_universal_and(const pres_expression &t)
Test for a conjunction.
void optimized_supremum(pres_expression &result, const data::variable_list &l, const pres_expression &p)
Make a supremum. If l is empty, p is returned.
void make_propositional_variable_instantiation(atermpp::aterm &t, const ARGUMENTS &... args)
void optimized_const_multiply_alt(pres_expression &result, const data::data_expression &d, const pres_expression &p)
Make an optimized const_multiply_alt expression.
pbes_system::propositional_variable propositional_variable
The propositional variable is taken from a pbes_system.
bool search_variable(const T &x, const data::variable &v)
Returns true if the term has a given variable as subterm.
bool is_eqinf(const atermpp::aterm &x)
bool is_false(const pres_expression &t)
Test for the value false.
void make_imp(atermpp::aterm &t, const ARGUMENTS &... args)
void find_identifiers(const T &x, OutputIterator o)
std::vector< pbes_system::propositional_variable > propositional_variable_vector
\brief vector of propositional_variables
void optimized_minus(pres_expression &result, const pres_expression &p)
Make a negation.
bool is_constant(const pres_expression &x)
void make_infimum(atermpp::aterm &t, const ARGUMENTS &... args)
const pres_expression & false_()
void make_and_(atermpp::aterm &t, const ARGUMENTS &... args)
atermpp::aterm_ostream & operator<<(atermpp::aterm_ostream &stream, const pres &pres)
Writes the pres to a stream.
void make_or_(atermpp::aterm &t, const ARGUMENTS &... args)
atermpp::term_list< propositional_variable_instantiation > propositional_variable_instantiation_list
\brief list of propositional_variable_instantiations
bool is_pres_supremum(const pres_expression &t)
Returns true if the term t is a generalized maximum expression.
T join(FwdIt first, FwdIt last, BinaryOperation op, T empty_sequence_result)
Given a sequence [t1, t2, ..., tn] of elements of type T, returns op(t1, op(t2, .....
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
The class propositional_variable.
Contains a number of auxiliary functions to recognize reals.
static const atermpp::function_symbol PRESCondEq
static const atermpp::function_symbol PRESImp
static const atermpp::function_symbol PRESEqInf
static const atermpp::function_symbol PRESMinus
static const atermpp::function_symbol PRESEqNInf
static const atermpp::function_symbol PRESCondSm
static const atermpp::function_symbol PRESOr
static const atermpp::function_symbol PropVarInst
static const atermpp::function_symbol PRESSupremum
static const atermpp::function_symbol PRESPlus
static const atermpp::function_symbol PRESInfimum
static const atermpp::function_symbol PRESConstantMultiply
static const atermpp::function_symbol PRESConstantMultiplyAlt
static const atermpp::function_symbol PRESSum
static const atermpp::function_symbol PRESAnd
static term_type join_and(FwdIt first, FwdIt last)
pres_system::propositional_variable propositional_variable_decl_type
The propositional variable declaration type.
static term_type infimum(const variable_sequence_type &l, const term_type &p)
Make a generalized minimum.
static void make_or_(term_type &result, const term_type &p, const term_type &q)
Make a disjunction.
static std::string pp(const term_type &t)
Pretty print function.
static bool is_prop_var(const term_type &t)
Test for propositional variable instantiation.
pres_system::propositional_variable_instantiation propositional_variable_type
The propositional variable instantiation type.
static bool is_variable(const term_type &t)
Test if a term is a variable.
static const term_type & variable2term(const variable_type &v)
Conversion from variable to term.
data::variable variable_type
The variable type.
data::variable_list variable_sequence_type
The variable sequence type.
static term_type join_or(FwdIt first, FwdIt last)
static term_type const_multiply_alt(const term_type &p, const data::data_expression &q)
Make a const multiply alt.
static void make_sum(term_type &result, const variable_sequence_type &l, const term_type &p)
Make a generalized sum operator.
static bool is_and(const term_type &t)
Test for a conjunction.
static bool is_supremum(const term_type &t)
Test for a max quantification.
static void make_const_multiply(term_type &result, const data::data_expression &p, const term_type &q)
Make a const multiply.
static void make_imp(term_type &result, const term_type &p, const term_type &q)
Make an implication.
static const data_term_sequence_type & param(const term_type &t)
Returns the parameter list of a propositional variable instantiation.
static term_type imp(const term_type &p, const term_type &q)
Make an implication.
static term_type plus(const term_type &p, const term_type &q)
Make a plus.
static term_type left(const term_type &t)
Returns the left argument of a term of type and, or or imp.
static bool is_minus(const term_type &t)
Test for a minus.
static void make_and_(term_type &result, const term_type &p, const term_type &q)
Make a conjunction.
static bool is_data(const term_type &t)
Test for data term.
static term_type right(const term_type &t)
Returns the right 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 void make_supremum(term_type &result, const variable_sequence_type &l, const term_type &p)
Make a generalized maximum.
static bool is_infimum(const term_type &t)
Test for an infimum.
static void make_plus(term_type &result, const term_type &p, const term_type &q)
Make a plus.
static void make_const_multiply_alt(term_type &result, const term_type &p, const data::data_expression &q)
Make a const multiply alt.
static const term_type & minus_arg(const term_type &t)
Returns the argument of a term of type not.
static term_type true_()
Make the value true.
data::data_expression_list data_term_sequence_type
The data term sequence type.
static bool is_or(const term_type &t)
Test for a disjunction.
static const variable_sequence_type & var(const term_type &t)
Returns the quantifier variables of a quantifier expression.
static term_type minus(const term_type &p)
Make a negation.
static void make_minus(term_type &result, const term_type &p)
Make a negation.
static term_type const_multiply(const data::data_expression &p, const term_type &q)
Make a const_multiply.
core::identifier_string string_type
The string type.
pres_system::pres_expression term_type
The term type.
static bool is_true(const term_type &t)
Test for the value true.
static term_type and_(const term_type &p, const term_type &q)
Make a conjunction.
static term_type sum(const variable_sequence_type &l, const term_type &p)
Make a generalized sum operator.
static void make_infimum(term_type &result, const variable_sequence_type &l, const term_type &p)
Make a generalized maximum.
static term_type false_()
Make the value false.
static term_type or_(const term_type &p, const term_type &q)
Make a disjunction.
static bool is_imp(const term_type &t)
Test for an implication.
static term_type supremum(const variable_sequence_type &l, const term_type &p)
Make a generalized maximum.
static bool is_false(const term_type &t)
Test for the value false.
data::data_expression data_term_type
The data term type.
Contains type information for terms.
std::size_t operator()(const mcrl2::pres_system::pres_expression &x) const
std::size_t operator()(const mcrl2::pres_system::propositional_variable_instantiation &x) const